# Automate.ax > Write TypeScript automations that Automate.ax plans, deploys, and runs with managed integration accounts. > ## Agent Instructions > Automate.ax automations are TypeScript programs. > Use Bun for installation and command examples. > Use Automate.ax for the product name and automate.ax for the package, CLI, and domain. > Treat documented public APIs as current; do not invent transitional or deprecated names. # Create organization API key Source: https://docs.automate.ax/api-reference/api-keys/create-organization-api-key https://automate.ax/api/v1/openapi.json post /organizations/{organizationId}/api-keys Creates an API key owned by the organization. Requires apiKey:create; the secret is returned once. # Delete organization API key Source: https://docs.automate.ax/api-reference/api-keys/delete-organization-api-key https://automate.ax/api/v1/openapi.json delete /api-keys/{keyId} Permanently revokes an organization API key. Requires apiKey:delete. # List organization API keys Source: https://docs.automate.ax/api-reference/api-keys/list-organization-api-keys https://automate.ax/api/v1/openapi.json get /organizations/{organizationId}/api-keys Lists API keys owned by an organization. Requires apiKey:read. # Update organization API key Source: https://docs.automate.ax/api-reference/api-keys/update-organization-api-key https://automate.ax/api/v1/openapi.json patch /api-keys/{keyId} Updates an organization API key's display name. Requires apiKey:update. # Get automation Source: https://docs.automate.ax/api-reference/automations/get-automation https://automate.ax/api/v1/openapi.json get /automations/{automation} Returns an active automation with its triggers and integration account bindings. # Get automation execution Source: https://docs.automate.ax/api-reference/automations/get-automation-execution https://automate.ax/api/v1/openapi.json get /automations/{automation}/executions/{executionId} Returns one execution with decoded events, outputs, actions, and durable logical attempt history. # Invoke automation Source: https://docs.automate.ax/api-reference/automations/invoke-automation https://automate.ax/api/v1/openapi.json post /automations/{automation}/invocations Schedules an invocation for an active automation. Runtime callers use the active action as the idempotency identity; other callers must provide idempotencyKey. # List automation executions Source: https://docs.automate.ax/api-reference/automations/list-automation-executions https://automate.ax/api/v1/openapi.json get /automations/{automation}/executions Lists recent execution summaries for one automation. # List automations Source: https://docs.automate.ax/api-reference/automations/list-automations https://automate.ax/api/v1/openapi.json get /automations Lists active automations visible to the caller, optionally filtered by organization, project, state, or query. # Update automation Source: https://docs.automate.ax/api-reference/automations/update-automation https://automate.ax/api/v1/openapi.json patch /automations/{automation} Enables or disables an automation. Requires project:update. # Cancel deployment Source: https://docs.automate.ax/api-reference/deployments/cancel-deployment https://automate.ax/api/v1/openapi.json delete /deployments/{deploymentId} Cancels a deployment that is planning, awaiting authorization, or configuring. Repeated cancellation of an already cancelled deployment succeeds without another effect. # Configure automation parameters Source: https://docs.automate.ax/api-reference/deployments/configure-automation-parameters https://automate.ax/api/v1/openapi.json put /deployments/{deploymentId}/parameters Assigns every unresolved automation parameter and resumes project planning. # Get deployment Source: https://docs.automate.ax/api-reference/deployments/get-deployment https://automate.ax/api/v1/openapi.json get /deployments/{deploymentId} Returns normalized deployment status, authorization requirements, and planned automations. # Get deployment authorization Source: https://docs.automate.ax/api-reference/deployments/get-deployment-authorization https://automate.ax/api/v1/openapi.json get /deployments/{deploymentId}/authorization Returns connected accounts and the authorization requirements for a deployment. # List deployments Source: https://docs.automate.ax/api-reference/deployments/list-deployments https://automate.ax/api/v1/openapi.json get /deployments Lists deployments visible to the caller, optionally filtered by organization, project, status, or creation time. # Proceed with deployment authorization Source: https://docs.automate.ax/api-reference/deployments/proceed-with-deployment-authorization https://automate.ax/api/v1/openapi.json post /deployments/{deploymentId}/authorization/proceed Continues a deployment after every integration requirement is satisfied. # Redeploy project Source: https://docs.automate.ax/api-reference/deployments/redeploy-project https://automate.ax/api/v1/openapi.json post /projects/{projectId}/deployments/redeploy Creates a deployment from the project's active artifact and plans with explicit integration account bindings. # Get execution data manifest Source: https://docs.automate.ax/api-reference/execution-data/get-execution-data-manifest https://automate.ax/api/v1/openapi.json get /execution-data/manifest Returns authenticated Electric shape resources for a validated execution-data scope. # Begin integration account connection Source: https://docs.automate.ax/api-reference/integration-accounts/begin-integration-account-connection https://automate.ax/api/v1/openapi.json post /organizations/{organizationId}/integration-account-connections Starts an OAuth-style organization account connection. # Connect installed integration account Source: https://docs.automate.ax/api-reference/integration-accounts/connect-installed-integration-account https://automate.ax/api/v1/openapi.json post /organizations/{organizationId}/integration-installs/{token}/claim # Connect integration account credentials Source: https://docs.automate.ax/api-reference/integration-accounts/connect-integration-account-credentials https://automate.ax/api/v1/openapi.json post /organizations/{organizationId}/integration-account-credentials Validates secret form credentials and links the resulting account. # Disconnect integration account Source: https://docs.automate.ax/api-reference/integration-accounts/disconnect-integration-account https://automate.ax/api/v1/openapi.json delete /organizations/{organizationId}/integration-accounts/{accountId} Removes an integration account from one organization without revoking it elsewhere. # Get integration account Source: https://docs.automate.ax/api-reference/integration-accounts/get-integration-account https://automate.ax/api/v1/openapi.json get /organizations/{organizationId}/integration-accounts/{accountId} Returns one integration account linked to an organization. # Get integration account connection Source: https://docs.automate.ax/api-reference/integration-accounts/get-integration-account-connection https://automate.ax/api/v1/openapi.json get /organizations/{organizationId}/integration-account-connections/{flowId} Returns the current state of a redirect connection flow. # Get pending integration installation Source: https://docs.automate.ax/api-reference/integration-accounts/get-pending-integration-installation https://automate.ax/api/v1/openapi.json get /integration-installs/{token} # List integration accounts Source: https://docs.automate.ax/api-reference/integration-accounts/list-integration-accounts https://automate.ax/api/v1/openapi.json get /organizations/{organizationId}/integration-accounts Lists integration accounts linked to an organization. # List integration services Source: https://docs.automate.ax/api-reference/integration-accounts/list-integration-services https://automate.ax/api/v1/openapi.json get /integration-services Lists enabled integration services and their connection methods. # Preview integration account revocation Source: https://docs.automate.ax/api-reference/integration-accounts/preview-integration-account-revocation https://automate.ax/api/v1/openapi.json get /organizations/{organizationId}/integration-accounts/{accountId}/revocation-impact Previews platform-wide revocation while redacting inaccessible organizations. # Revoke integration account Source: https://docs.automate.ax/api-reference/integration-accounts/revoke-integration-account https://automate.ax/api/v1/openapi.json post /organizations/{organizationId}/integration-accounts/{accountId}/revoke Immediately blocks and globally revokes a shared integration account. # Create organization Source: https://docs.automate.ax/api-reference/organizations/create-organization https://automate.ax/api/v1/openapi.json post /organizations Creates an organization administered by the authenticated user. # Delete organization Source: https://docs.automate.ax/api-reference/organizations/delete-organization https://automate.ax/api/v1/openapi.json delete /organizations/{organizationId} Deletes an organization and cancels its billing. Requires organization:delete. # Get organization Source: https://docs.automate.ax/api-reference/organizations/get-organization https://automate.ax/api/v1/openapi.json get /organizations/{organizationId} Returns organization details, members, invitations, projects, plan, and usage. # Invite organization member Source: https://docs.automate.ax/api-reference/organizations/invite-organization-member https://automate.ax/api/v1/openapi.json post /organizations/{organizationId}/invitations Creates a pending invitation for an email address. Requires invitation:create. # Leave organization Source: https://docs.automate.ax/api-reference/organizations/leave-organization https://automate.ax/api/v1/openapi.json delete /organizations/{organizationId}/membership Removes the current user from an organization. An admin can leave when another admin remains. # List organizations Source: https://docs.automate.ax/api-reference/organizations/list-organizations https://automate.ax/api/v1/openapi.json get /organizations Lists organizations the authenticated user belongs to, optionally filtered by name or ID. # Remove organization member Source: https://docs.automate.ax/api-reference/organizations/remove-organization-member https://automate.ax/api/v1/openapi.json delete /organizations/{organizationId}/members/{memberIdOrEmail} Removes a member from an organization by member ID or email. # Update organization Source: https://docs.automate.ax/api-reference/organizations/update-organization https://automate.ax/api/v1/openapi.json patch /organizations/{organizationId} Updates organization fields the caller can manage. # Create project Source: https://docs.automate.ax/api-reference/projects/create-project https://automate.ax/api/v1/openapi.json post /organizations/{organizationId}/projects Creates a project inside an organization. Requires project:create. # Delete project Source: https://docs.automate.ax/api-reference/projects/delete-project https://automate.ax/api/v1/openapi.json delete /projects/{projectId} Deletes a project. Requires project:delete. # Get project Source: https://docs.automate.ax/api-reference/projects/get-project https://automate.ax/api/v1/openapi.json get /projects/{projectId} Returns project details, its organization, and active automations. # List projects Source: https://docs.automate.ax/api-reference/projects/list-projects https://automate.ax/api/v1/openapi.json get /projects Lists projects visible to the authenticated user, optionally filtered by organization or query. # Update project Source: https://docs.automate.ax/api-reference/projects/update-project https://automate.ax/api/v1/openapi.json patch /projects/{projectId} Updates project fields. Requires project:update. # Get current user Source: https://docs.automate.ax/api-reference/session/get-current-user https://automate.ax/api/v1/openapi.json get /me Returns the authenticated user for the current bearer token or cookie session. # Actions Source: https://docs.automate.ax/concepts/actions Understand durable work, signal inputs, execution order, retries, and account selection. Calling an Automate.ax action registers durable work and immediately returns a `Signal` for its eventual output. ```ts theme={null} const message = gmail.getMessage({ messageId: email.messageId }) gmail.archiveMessages({ messageIds: message.messageId }) ``` Automate.ax resolves and validates the inputs, runs the action, validates its output, and makes the result available to dependent work. ## Attach each action to one context Every action must resolve to exactly one least context boundary: the closest boundary that contains its complete signal dependency chain. A trigger starts a root, while coordinators such as `correlate`, `collect`, `each`, `window`, `funnel`, and `race` create boundaries as they combine or split occurrences. When an automation has one initiating trigger, Automate.ax assigns an action with no signal dependencies to that trigger: ```ts theme={null} onSchedule({ schedule: "0 9 * * 1-5" }) gmail.sendEmail({ to: "team@example.com", subject: "Daily update", text: "The scheduled update is ready.", }) ``` With more than one possible root, an action with no signal dependencies is ambiguous. Attach it to the intended root with `withPrerequisites`, or pass a signal from that root as an input: ```ts theme={null} const requested = onInvocation("request") const cancelled = onInvocation("cancel") withPrerequisites(requested, () => { gmail.sendEmail({ to: "team@example.com", subject: "Request received", text: "We are processing your request.", }) }) ``` This rule includes roots declared inside built-in or package compositions. `delay`, `timeout`, `firecrawl.crawlWebsite`, `codex.runCloudTask`, and `codex.waitForCloudTask` use hidden triggers so work can resume without holding an action open. Scope their literal starter actions to the initiating signal. Planning fails before deployment when an action has no unique closest boundary. The error identifies the action and the competing boundaries so you can add a signal input or `withPrerequisites`. ## Call actions by service Import the named service namespace from an integration entry point, then call its provider-free action name, such as `gmail.sendEmail` or `linear.createIssue`. These entry points also retain fully qualified callable exports such as `sendGmailEmail` for direct per-action imports. Built-in actions use platform terms without a provider, such as `respondToHttpRequest`. ## Pass literal and signal inputs An action accepts a direct input object, a compatible signal for the complete object, or signals at any nested array or object property: ```ts theme={null} gmail.sendEmail({ to: "person@example.com", subject: email.subject, text: "We received your message.", }) ``` Here, `to` and `text` are literal values. `subject` is a signal, so the action waits for the incoming email before executing. You can also supply a complete nested object or the entire input with one signal: ```ts theme={null} const reply = email.transform((message) => ({ subject: `Re: ${message.subject}`, text: "We received your message.", to: message.from, })) gmail.sendEmail(reply) ``` When every input property is optional, you can omit the input object entirely. Automate.ax recursively resolves signals through arrays and plain objects before validating the reconstructed input. Dates, files, URLs, maps, sets, and other class instances remain single values. ## Use action outputs as signals An action always returns a signal, whether its eventual output is an object, array, primitive, or `void`. ```ts theme={null} const draft = gmail.draftEmail({ to: "person@example.com", subject: "Status update", text: "Processing finished.", }) gmail.sendDraft({ draftId: draft.draftId }) ``` Property access records the dependency. ## Control action order Actions become ready when all their signal inputs and inherited dependencies are ready. Two calls that depend only on the same trigger can execute concurrently. Passing one action's output to another establishes ordering. Use [`withPrerequisites`](/reference/runtime/signal-operators#withprerequisites) to order work that doesn't consume the dependency. Use [`dependentOn`](/reference/runtime/signal-operators#dependenton) when another signal should preserve its value while waiting for the dependency. ## Handle failures and retries When an action fails, ordinary dependent actions don't execute. Independent branches can continue. Use `onFailure(actionSignal)` when another action should handle the failure as data. Every custom action declares its retry policy before `.handler()`. `maxAttempts` includes the first attempt, defaults to `3`, and accepts `1` through `10`. `replaySafety` says whether an unknown interruption can safely repeat the handler; it may be constant or derived from validated input: ```ts theme={null} const request = defineAction("Call provider") .input( z.object({ method: z.enum(["GET", "POST"]), url: z.url(), }), ) .retry({ maxAttempts: 3, replaySafety: ({ method }) => (method === "GET" ? "safe" : "unsafe"), }) .handler(async ({ input }) => { const response = await fetch(input.url, { method: input.method }) if (!response.ok) { throw new Error(`Provider request failed with ${response.status}`) } }) ``` Declare `.retry()` after the final input schema. An ordinary handler error schedules another logical attempt only when replay is safe. The same error from an unsafe action becomes indeterminate because the provider may already have accepted the mutation. Set `maxAttempts: 1` when an action must never make a fresh attempt. Throw `RetryableActionError` when the provider confirms that a fresh attempt is safe, optionally with an absolute `retryAt` from a provider `Retry-After` response. Throw `TerminalActionError` for permanent input or permission failures and `IndeterminateActionError` when the provider outcome is ambiguous. Integration authors can use `retryableActionError`, `terminalActionError`, and `indeterminateActionError` to classify an existing provider-specific error without replacing its identity. `parseRetryAfter` converts seconds or an HTTP date into the absolute time accepted by `RetryableActionError`. A provider time can delay the platform retry schedule but never shorten its exponential delay. Direct input or output validation failures are terminal immediately. Resolving a signal input happens before the action runs: if a transform or other signal expression fails, the action is skipped as a failed dependency and the error remains attributed to that signal evaluation. Separate actions don't form one transaction. ## Choose an integration account Account-backed actions declare their service and permissions. Automate.ax resolves the selected [integration account](/concepts/integration-accounts) when the action executes. Credentials never appear in action inputs or signals. Pass a non-default account in the second argument, or create a reusable bound action with `.usingAccount()`: ```ts theme={null} gmail.sendEmail(input, { account: "work" }) const sendFromWork = gmail.sendEmail.usingAccount("work") sendFromWork(input) ``` Use [`fetchHttp`](/reference/actions/fetch-http) for arbitrary unauthenticated HTTP requests. If Automate.ax doesn't support an authenticated service, see [Call an external API](/guides/call-an-external-api) for the current credential tradeoffs. # Automations Source: https://docs.automate.ax/concepts/automations Understand how Automate.ax plans and deploys TypeScript automation programs. An automation is a TypeScript program exported from a `*.automation.ts` file. Its description identifies it during deployment and execution. Automate.ax provides durable triggers, integration authentication, deployment, and execution. ```ts automations/archive-receipts.automation.ts theme={null} import { automation } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Archive incoming receipts", () => { const email = gmail.onNewEmail() gmail.archiveMessages({ messageIds: email.messageId }) }) ``` The default export must be the value returned by `automation(description, fn)`. The callback defines the automation's triggers, actions, signals, and dependencies. ## Use Bun APIs and packages Deployed project code runs on a pinned Bun 1.4 runtime. Custom action handlers can use Bun's built-in APIs, standard Web APIs, compatible Node.js APIs, and packages from the `npm` registry. See [Bun runtime](/concepts/bun-runtime) for dependency setup, image processing with `Bun.Image`, compatibility guidance, and serverless constraints. ## Connect triggers, signals, and actions | Concept | Role | | - | - | | Automation | A named program deployed as part of a project. | | [Trigger](/concepts/triggers) | Declares the event that can start the automation and exposes its data as a signal. | | [Signal](/concepts/signals) | A reference to a value that materializes during execution. | | [Action](/concepts/actions) | Performs work after its signal dependencies are ready. | | [Integration account](/concepts/integration-accounts) | Gives actions and triggers access to an external service without exposing credentials to code. | | [Deployment](/concepts/deployments-and-runs) | Resolves authorization, configures event sources, and publishes the project runtime. | In the example, `gmail.onNewEmail` declares a Gmail subscription and returns the incoming email as a signal. Passing `email.messageId` to `gmail.archiveMessages` makes the action depend on that event data. > [!NOTE] > > Source order describes the automation, but signal dependencies decide when > actions are ready. Independent actions may execute concurrently. ## Organize repeated work Automate.ax doesn't compile your program into a user-authored JSON graph. Use functions and modules for repeated logic: ```ts theme={null} import { gmail } from "automate.ax/gmail" import type { Signal } from "automate.ax" function flagMessage(messageId: Signal) { gmail.markMessagesAsImportant({ messageIds: messageId }) gmail.starMessages({ messageIds: messageId }) } ``` Calling the helper registers both actions. Because neither action consumes the other's result, they can execute independently once `messageId` materializes. ## Declare durable work synchronously The automation callback runs synchronously to describe durable work. Actions don't return promises. They return [signals](/concepts/signals) for eventual outputs. ```ts theme={null} const message = gmail.getMessage({ messageId }) gmail.archiveMessages({ messageIds: message.messageId }) ``` Don't `await` an action. Passing `message.messageId` into `gmail.archiveMessages` records the dependency and allows Automate.ax to execute it after `gmail.getMessage` succeeds. ## Keep composition deterministic Automate.ax replays automation code while planning and resuming durable work. The same inputs must produce the same action and trigger call structure. * Keep action and trigger calls in stable positions. * Use signals for decisions based on event data or action results. * Don't choose which durable calls exist using ambient time, randomness, or process-local mutable state. * Put side effects in actions, not directly in the automation callback. Use signal-aware control flow such as `filter` or `branch` when execution should depend on runtime data. See [Signals](/concepts/signals). ## Deploy project files together `bunx automate.ax init` creates `automate.config.ts`, which identifies the project. `bunx automate.ax deploy` finds every `*.automation.ts` file beneath that configuration directory and deploys them together. When you omit `--project` or `--org`, commands use the config in the current directory, the nearest parent config, or one config found within five descendant levels. If descendant discovery finds multiple configs, the command asks you to choose a project or organization instead of asking you to choose a directory. An explicit option always takes precedence. The relative source path is the automation's stable identity within the project. Renaming or moving the file removes the old identity and creates a new one on the next deployment. # Bun runtime Source: https://docs.automate.ax/concepts/bun-runtime Understand the Bun 1.4 environment used by deployed custom actions. Automate.ax runs deployed project code on a pinned Bun 1.4 runtime for ARM64 Linux. You can use Web APIs, Bun APIs, Node.js-compatible APIs, and packages from the `npm` registry inside custom action handlers. ## Choose between Web APIs, Bun APIs, and packages * Use standard Web APIs such as `fetch`, `Request`, `Response`, `Blob`, streams, and Web Cryptography APIs when they cover the task. * Use [Bun's built-in runtime APIs](https://bun.com/docs/runtime) for files, image processing, Markdown, hashing, compression, and other common server-side work. The [Bun 1.4 release notes](https://bun.com/blog/bun-v1.4) list the APIs available in this runtime. * Install packages from the `npm` registry when you need another library. Bun supports ESM, CommonJS, Node.js module resolution, and many `node:*` APIs, but it isn't completely compatible with Node.js. Check [Bun's Node.js compatibility table](https://bun.com/docs/runtime/nodejs-compat) when a package depends on a specific Node.js API. Prefer a Bun built-in when it avoids an external binary or native add-on. Packages that need a separate executable or a runtime-specific native add-on may not work in the Linux ARM64 deployment environment. ## Install dependencies and types Install and lock every imported package before deployment: ```bash theme={null} bun add package-name ``` Automate.ax bundles imported dependencies into the deployment. The production runtime doesn't install missing packages. When you use the `Bun` global, install its TypeScript definitions: ```bash theme={null} bun add --dev @types/bun ``` TypeScript 6 and later also require `"types": ["bun"]` in `compilerOptions`. Keep any other type packages your project already lists. See [Bun's TypeScript configuration](https://bun.com/docs/typescript-6). ## Process images with `Bun.Image` [`Bun.Image`](https://bun.com/docs/runtime/image) provides a Sharp-shaped, native image pipeline without an external package or native add-on build. On the Automate.ax Linux runtime, it can decode, resize, rotate, and encode JPEG, PNG, and WebP images. Use it inside an action handler so the I/O and processing happen during execution: ```ts theme={null} import { automation, defineAction, markSignificant, onDashboardRun, } from "automate.ax" import { z } from "zod" const resizeImage = defineAction("Resize image") .input(z.object({ url: z.url() })) .output( z.custom>( (value) => value instanceof Uint8Array, ), ) .retry({ replaySafety: "safe" }) .handler(async ({ input }) => { const response = await fetch(input.url) if (!response.ok) { throw new Error(`Image download failed with ${response.status}`) } return new Bun.Image(await response.arrayBuffer(), { maxPixels: 40_000_000, }) .resize(1024, 1024, { fit: "inside", withoutEnlargement: true }) .webp({ quality: 82 }) .bytes() }) export default automation("Resize an image", () => { const run = onDashboardRun({ title: "Resize image", fields: [{ name: "url", type: "url", label: "Image URL" }], }) const resized = resizeImage({ url: run.data.url }) markSignificant(resized) }) ``` An organization member supplies the image URL and starts the action from the dashboard. The WebP bytes appear in the action output, and `markSignificant` keeps the successful run in the default Recent runs view. Feed `Bun.Image` validated bytes rather than a request-supplied filesystem path, and set `maxPixels` before decoding to reject decompression bombs. ## Finish work inside the action handler An action must finish its work before its handler returns. Don't start a long-lived server, background process, or `Bun.cron` job and expect it to continue afterward. Use Automate.ax triggers such as [`onSchedule`](/reference/triggers/on-schedule) for durable scheduling. The runtime can't modify the deployed project files. Use `/tmp` for temporary files, or keep data in memory. Custom code doesn't receive Automate.ax database credentials or the Lambda execution role's AWS credentials. Use integration accounts or credentials you explicitly provide for external services. # Deployments and runs Source: https://docs.automate.ax/concepts/deployments-and-runs Understand project snapshots, durable execution, retention, retries, and in-flight work. A deployment publishes every `*.automation.ts` file in a project directory together. A run is the causally connected work started by a trigger event. See [Deploy a project](/guides/deploy-a-project) to publish code and authorize integration accounts. See [Query runs](/guides/query-runs) to inspect execution history in the dashboard or with local SQL. ## Project snapshots A successful deployment becomes the project's single active snapshot. Automate.ax builds and activates all automation files together, so a project never mixes files from two successful deployments. Each automation's relative source path is its identity in that snapshot. Move or rename a file only when you intend to replace that automation identity. ## Durable execution An active trigger event creates an isolated execution. The runtime composes the automation, schedules ready actions, records outcomes, and resumes as outputs become available. Each trigger delivery starts at a root context. Fan-out and coordination create descendant contexts with their own lifecycle states. Delayed deliveries and protected callbacks are independent roots. Correlation can create a child with both the initiating and delivery contexts as parents. When investigating a run, traverse `automate.context_descendants` from each relevant root and query scheduled invocation provenance. See [Query runs](/guides/query-runs). Independent actions can execute concurrently. Dependent actions execute only after their required signals materialize. See [Signals](/concepts/signals) and [Actions](/concepts/actions). ## Inspect a run Open a recent execution in the web app to follow its causal timeline from left to right. Trigger occurrences and action invocations appear in execution lanes, while connections clarify branches and joins across lanes. Long gaps are compressed and labeled with their real duration. Select an output beside an operation to preview and navigate its value. A run appears **Waiting** while one of its actions has an undelivered internal delay. The initiating context might already have settled at that point. Delivery later starts an independent root. The UI connects it to the initiating occurrence only if correlation creates a shared child. An automation can call `markSignificant(signal)` or `signal.markSignificant()` to highlight the causally connected run when that signal emits. For automations that use this marker, Recent runs shows significant runs by default. Turn on **Show insignificant runs** to reveal the complete history; insignificant rows appear dimmed. Automations without a significance marker keep the standard unfiltered run list. The **Duration** column shows recorded automation runtime aggregated across every context in the causally grouped run. Queue time, durable waits, deployment planning, and time between invocations aren't included. See [Plan usage](/concepts/platform-resources). ## Run-history retention Your organization's plan sets the default and maximum retention for completed execution data. Organization admins can choose a shorter supported period in **Organization settings**. Automate.ax removes event payloads, action and signal values, errors, logs, and other run history after that period. The retention period starts when the complete causally connected run finishes. Running, delayed, scheduled, and waiting runs remain available until they finish, even when they wait longer than the configured retention period. A correlation without a time-to-live can therefore retain the values it needs indefinitely. Use bounded coordination when your data policy requires every run to finish within a fixed period. Reducing retention permanently removes eligible history during the next cleanup. Increasing it doesn't restore deleted data. You control local database copies and exports created with the command-line tool, so you must remove them separately. ## Retries and resumptions Automate.ax stores action outcomes and dependencies durably. If an executor stops, Automate.ax can resume from recorded work instead of treating the whole program as an in-memory process. The platform retries thrown execution failures before recording a failed action outcome. Because a provider may accept a request before a worker learns the result, actions should use provider-supported idempotency where available and shouldn't assume several separate actions form one transaction. ## In-flight runs New trigger events use the active deployment. Work already executing on a published version can finish there. Later resumptions verify that the current code still matches recorded durable action identities and dependencies. Keep action call order and literal structure deterministic so in-flight work remains compatible. Before deploying a changed durable call structure, inspect active runs; wait for them to finish or preserve the action identities and dependency structure they need to resume. # Integration accounts Source: https://docs.automate.ax/concepts/integration-accounts Understand how projects authorize services and bind accounts to actions and triggers. An integration account gives actions and triggers access to an external service. Automate.ax manages its credentials. Automation code selects a binding, never the secret. Organization admins can use the **Connected Accounts** page or run `bunx automate.ax accounts` to connect, inspect, disconnect, and revoke accounts. The command-line tool gets its available services and connection methods from Automate.ax, including providers that the organization hasn't connected before. > [!NOTE] > > During alpha, Google integrations are available by request. [Request > access](mailto:hello@automate.ax?subject=Google%20integration%20access) for > the Google Account you want to connect. > > Google permissions let Automate.ax run your configured actions and triggers. Results may be retained in run history, shared with authorized organization members, and sent to the services or AI providers your automation selects. Review those destinations before authorizing. Do not use Google Workspace data for advertising or general-purpose AI model training. Read the [privacy policy](https://automate.ax/privacy) for data use and deletion. ## Use the default account Account-backed actions and triggers use the service's `default` binding unless you select another account. Triggers take `account` in their configuration object; actions take it in a separate second argument: ```ts theme={null} const email = gmail.onNewEmail() gmail.sendEmail({ to: "person@example.com", subject: "Hello", text: "Sent with the default Google account binding.", }) ``` During deployment, the web app asks you to connect or select an eligible Google Account when the binding needs an account. For a service-specific reference to the same binding, call the provider's account helper without an argument: ```ts theme={null} import { googleAccount } from "automate.ax/google" const defaultGoogle = googleAccount() ``` ## Use several accounts Use a stable name when one project needs several accounts for the same service: ```ts theme={null} const email = gmail.onNewEmail({ account: "support" }) gmail.sendEmail( { to: email.replyTo.transform( (recipients) => recipients[0]?.address ?? "fallback@example.com", ), subject: "Billing follow-up", text: "We received your request.", }, { account: "billing" }, ) ``` The strings `support` and `billing` identify deployment bindings. During deployment, assign an authorized Google Account to each one in the web app. Pass `--cli-authorization` to use the terminal instead. In non-interactive environments, open the focused URL returned by the deploy error and run `bunx automate.ax deployment authorize ` to resume waiting. ## Authorize required permissions Every account-backed action and trigger declares its permissions. Deployment combines them for each service and binding, then checks the selected account. Missing authorization pauses deployment so you can connect or reauthorize it. Adding an operation that needs broader permissions can therefore require reauthorization on the next deployment. ## Choose accounts at deployment or execution * Trigger account selection must be static because Automate.ax configures event sources during deployment. * A single-service action's second argument can select a literal binding, account reference, or compatible signal because Automate.ax resolves its account during execution. Use `.usingAccount(account)(input)` to create an immutable bound callable. * An action that accepts multiple services requires a service-specific account reference so Automate.ax knows which provider to authorize during deployment. Automate.ax rejects an account reference for the wrong service. For example, a Slack account reference can't satisfy a Gmail action. ## Keep provider credentials out of code Provider credentials never enter automation inputs, signals, deployment manifests, or source code. The runtime resolves the binding, refreshes credentials when necessary, and exposes them only to the integration action. Automate.ax records account choices with each successful deployment. A later deployment can select a different account without rewriting every action that uses the same logical binding. Use **Parameters & Accounts** in a project's navigation to review its active bindings. Changing an account reveals **Redeploy**, which publishes the active project code again with the new account choices. ## Manage accounts from the command line Run the interactive account manager: ```bash theme={null} bunx automate.ax accounts --org my-organization ``` Agents and scripts can use the individual commands with `--json`: ```bash theme={null} bunx automate.ax accounts services --json bunx automate.ax accounts list --org my-organization --json bunx automate.ax accounts show --org my-organization --account intacct_... --json bunx automate.ax accounts connect --org my-organization --service google --connection-method oauth --no-open --no-wait --json bunx automate.ax accounts status --org my-organization --flow intflw_... --json ``` `connect` prints the provider authorization URL. It opens the browser by default and waits for completion. Use `--no-open` in a remote environment and `--no-wait` to save the flow ID and poll it later with `accounts status`. Credential forms are interactive. Password and API key fields use a masked terminal prompt that sends them directly to Automate.ax. The command-line tool doesn't accept them as command arguments, environment variables, or JSON, so they don't enter shell history, process listings, or agent transcripts. Use the Connected Accounts page when no private terminal is available. ## Disconnect or revoke Disconnecting or revoking access does not delete existing run history. To request deletion of your personal information or Google data held by Automate.ax, email [info@automate.ax](mailto:info@automate.ax) with your account email and the relevant organization or project. Do not include credentials or message contents. We verify your identity and authority, confirm the effect on shared automations, and report completion and any required retention. You can also revoke access in your [Google Account connections](https://myaccount.google.com/connections). Completed history follows [run-history retention](/concepts/deployments-and-runs#run-history-retention). Waiting runs retain data needed to continue. Deletion from active database storage does not immediately remove recovery backups. Automated backups normally expire within seven days; manual snapshots need separate review and deletion. We report their deletion schedule or any required retention when handling your request. You control local exports and copies sent to other services. Disconnecting removes an account only from the selected organization. It doesn't invalidate the provider credential or affect organizations that also use the account. Remove its active project bindings first: ```bash theme={null} bunx automate.ax accounts disconnect --org my-organization --account intacct_... ``` Revocation is platform-wide. Automate.ax shows an impact preview before it proceeds, immediately blocks the credential, disables every active automation bound to it, and returns affected in-progress deployments to account authorization. It then revokes the provider credential when the provider supports revocation: ```bash theme={null} bunx automate.ax accounts revoke --org my-organization --account intacct_... ``` The preview identifies projects in every linked organization you can access and reports inaccessible organizations only as a count. Organization API keys remain limited to their own organization. Use `--yes` for a non-interactive revocation after inspecting `revocation-impact` through the public API. Revocation is idempotent. You can retry it safely when account status reports pending or failed provider cleanup. Connecting a replacement account never re-enables affected automations. Review their bindings, then enable them explicitly. # Parameters Source: https://docs.automate.ax/concepts/parameters Declare project-specific values that make automation code portable. Parameters keep IDs, addresses, limits, and other project-specific values out of your automation source. You declare their fields in code, then set their values in **Parameters & Accounts** when you first deploy the project. ```ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation( "Send the onboarding sequence", { parameters: [ { label: "Onboarding segment ID", name: "onboardingSegmentId", type: "text", }, { label: "Onboarding topic ID", name: "onboardingTopicId", type: "text", }, ], }, ({ parameters }) => { const enrolled = resend .onContactEvent() .filter( ({ event, segmentIds }) => (event.type === "contact.created" || event.type === "contact.updated") && segmentIds?.includes(parameters.onboardingSegmentId) === true, ) resend.sendEmail({ from: "Onboarding ", to: enrolled.email, subject: "Welcome", text: "Welcome aboard!", topicId: parameters.onboardingTopicId, }) }, ) ``` The parameter `name` becomes a typed property of `parameters`. The field format is the same one used by dashboard run forms, including text, email, URL, number, date, date-time, select, radio, multi-select, checkbox, and file fields. Add `defaultValue` to non-file fields when a project should not need to enter a value during initial setup. Parameter values belong to a project version. A new version inherits values for unchanged automation and parameter names. Changing a value in **Parameters & Accounts** runs planning again and republishes the active code with the new value. Parameters are ordinary configuration, not secrets. Use integration accounts for credentials and provider authorization. Use `{ name: "document", type: "file" }` to select a file in **Parameters & Accounts**. CLI setup prompts for its local path. Your automation receives a `File`, including its contents, filename, and media type. Files are stored directly with the parameter values and inherited by later project versions. Existing files remain selected when you reopen settings; replace or remove them there. Set `required: false` to receive `null` when no file is selected. File fields do not accept `defaultValue`. # Plan usage Source: https://docs.automate.ax/concepts/platform-resources Understand how runtime, AI, email, and web scraping use monthly allowances. Your plan includes monthly automation runtime, AI, email, and web scraping allowances shared by every project in your organization. Usage resets at the start of each Coordinated Universal Time (UTC) calendar month. ## Measure automation runtime Automation runtime counts the elapsed time of each sandbox invocation. A trusted worker measures outside the sandbox in whole milliseconds, sums those measurements, and then displays the total in minutes. User code can't change the timer, and Automate.ax doesn't round each invocation to a full minute. Queue time, durable waits, scheduled delays, deployment planning, and time between invocations don't count. Successful runs, failed user code, and timeouts count the runtime they consume. If the worker stops before it can record a measurement, that invocation is free. Free organizations stop starting new invocations after reaching the monthly allowance. An invocation already in progress can carry the total past the allowance. Paid organizations continue running while Automate.ax records usage beyond the included amount. The runs table groups contexts with the existing causal model and shows their combined recorded runtime. At a three-second average, 50 runtime minutes on Free supports about 1,000 runs, 600 on Starter supports 12,000, and 6,000 on Growth supports 120,000. These are estimates; actual runtime depends on each invocation. ## Count Platform AI usage Platform AI measures the model cost of [`evaluate`](/reference/actions/evaluate), [`generate`](/reference/actions/generate), and [`generateImage`](/reference/actions/generate-image) calls that omit `account` and use the Automate.ax AI Gateway account. Automate.ax records the cost reported by the gateway after each request, so the final in-flight request can take usage slightly past the allowance. These costs remain separate from automation runtime. Calls that use your own provider account don't consume Platform AI. ## Count Platform email sends Platform email counts sends from the built-in [`sendEmail`](/reference/actions/send-email) action. Each recipient counts as one send. Sending email through integrations such as Gmail, Outlook, Resend, or Brevo doesn't consume Platform email. ## Count web scraping usage Web scraping measures the browser milliseconds Cloudflare reports for each [`scrapeWeb`](/reference/actions/scrape-web) attempt, including failed provider responses. Automate.ax rounds sub-millisecond values up to a whole millisecond and displays the total in minutes without rounding each scrape to a full minute. `scrapeWeb` stops starting new browser work after a finite monthly allowance is exhausted. A request already in progress can carry the total slightly past the allowance because its exact browser time is known only after Cloudflare responds. Cloudflare integration actions that use your connected account don't consume the Automate.ax web scraping allowance. # Signals Source: https://docs.automate.ax/concepts/signals Understand symbolic values, dependencies, contexts, closure, and failure. A `Signal` represents a value that Automate.ax materializes during execution. Triggers and actions return signals while the automation is still planning. ```ts theme={null} const email = gmail.onNewEmail() const messageId = email.messageId // Signal const archived = gmail.archiveMessages({ messageIds: messageId }) // Signal ``` Signals aren't promises. Don't `await` them. ## Operator families | Family | Purpose | Main operators | | - | - | - | | Value composition | Derive values without creating a new execution context | Property access, `transform`, `t` | | Routing and lifecycle | Select paths or inspect how one signal terminated | `gate`, `filter`, `partition`, `branch`, `outcome`, `onSuccess`, `onFailure`, `onClose` | | Stream coordination | Combine, match, admit, or group occurrences across contexts | `merge`, `correlate`, `collect`, `once`, `take`, `rateLimit`, `each`, `funnel`, `window` | | Causal scheduling | Choose or resume work within one causal occurrence | `race`, `delay`, `timeout` | | Execution coordination | Control when occurrence-scoped work may run | `serialize`, `concurrent` | Dependency and structure operators such as `dependentOn`, `withPrerequisites`, `scope`, and `group` support every family. This distinction matters most for `merge` and `race`: `merge` accepts independent occurrence streams, while `race` chooses among alternatives that already share an activation boundary. ## Planning declares the work Automate.ax traverses an automation synchronously to register triggers, actions, and coordination. Property access and pure transforms describe how to derive values later. ```ts theme={null} const normalizedSubject = email.subject.transform((subject) => subject.trim().toLowerCase(), ) gmail.sendEmail({ to: "*", subject: normalizedSubject, text: "A normalized subject was received.", }) ``` The transform doesn't run during planning. It runs after the email subject materializes. Use [property access](/reference/runtime/signal-operators#property-access), [`transform`](/reference/runtime/signal-operators#transform), and [`t`](/reference/runtime/signal-operators#t) to derive action inputs. ## Dependencies control readiness Line order doesn't serialize actions. A declaration waits for the signals in its inputs and prerequisites. ```ts theme={null} const starred = gmail.starMessages({ messageIds: email.messageId }) const labeled = gmail.addLabel({ labels: ["Processed"], messageIds: email.messageId, }) gmail.archiveMessages({ messageIds: labeled }) ``` Archiving waits for `labeled`; it doesn't wait for `starred`. Use [`dependentOn`](/reference/runtime/signal-operators#dependenton) to add dependencies to one value or [`withPrerequisites`](/reference/runtime/signal-operators#withprerequisites) to apply them to a synchronous declaration section. An action accepts a compatible signal as its complete input or at any nested plain-object or array node. Passing the signal creates the durable dependency. ## Contexts identify occurrences Each trigger occurrence starts a root context. Actions normally run in the closest context boundary containing their complete dependency chain. Cross-context operators create child boundaries: * [`merge`](/reference/runtime/signal-operators#merge) emits each occurrence from independent input streams in its own child. * [`correlate`](/reference/runtime/signal-operators#correlate) joins selected keyed occurrences from independent roots. * [`collect`](/reference/runtime/signal-operators#collect), [`funnel`](/reference/runtime/signal-operators#funnel), and [`window`](/reference/runtime/signal-operators#window) create a child from a batch or burst. * [`once`](/reference/runtime/signal-operators#once-and-take), [`take`](/reference/runtime/signal-operators#once-and-take), and [`rateLimit`](/reference/runtime/signal-operators#ratelimit) bound admission per partition. * [`each`](/reference/runtime/signal-operators#each) creates a child for each array item. * [`race`](/reference/runtime/signal-operators#race) creates a child for its selected result. * [`serialize`](/reference/runtime/signal-operators#serialize) admits one occurrence-scoped work region at a time per partition. * [`concurrent`](/reference/runtime/signal-operators#concurrent) admits a fixed number of active regions per partition. A literal action can infer its context when the automation has one possible root. When several visible or hidden roots are possible, give it a signal input or wrap it with `withPrerequisites`. [Action context placement](/concepts/actions#attach-each-action-to-one-context) covers the planning rules. ## Partitions coordinate repeated occurrences Cross-context batching and timing need an explicit partition: * [`keyBy`](/reference/runtime/signal-operators#keyby) isolates occurrences by a customer, record, conversation, or other encoded key. * [`globally`](/reference/runtime/signal-operators#globally) places every occurrence in one shared partition. Value-preserving operators can retain the annotation. Arbitrary derivations and multi-input selections can return an ordinary signal, which must be keyed again before another cross-context operation. [Coordinate occurrences](/guides/coordinate-occurrences#partition-the-streams) explains the choice. ## Signals emit, fail, or close A signal terminates once: * **Succeeded:** emitted a value. Returning `null` or `undefined` from an action still succeeds. * **Failed:** produced an automation error. Dependent actions skip; unrelated work can continue. * **Closed:** produced no value because a route wasn't selected. Only errors thrown by an action handler use that action's retry policy. Input validation, output validation, and synchronous signal evaluation fail immediately. Use [`outcome`](/reference/runtime/signal-operators#outcome) to turn every terminal state into a tagged value. Use [`onSuccess`](/reference/runtime/signal-operators#onsuccess), [`onFailure`](/reference/runtime/signal-operators#onfailure), or [`onClose`](/reference/runtime/signal-operators#onclose) to declare work for one state. ## Choose the next operation * [Derive signal values](/guides/derive-signal-values) * [Route signals and work](/guides/route-signals-and-work) * [Coordinate occurrences](/guides/coordinate-occurrences) * [Control event bursts](/guides/control-event-bursts) * [Select and time signals](/guides/select-and-time-signals) * [Handle signal outcomes](/guides/handle-signal-outcomes) * [Signal operators](/reference/runtime/signal-operators) # Triggers Source: https://docs.automate.ax/concepts/triggers Understand the events, schedules, requests, and invocations that start automations. Declaring an Automate.ax trigger registers an event subscription during deployment and returns its event data as a signal. ```ts theme={null} import { automation } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Read incoming Gmail messages", () => { const email = gmail.onNewEmail() gmail.markMessagesAsRead({ messageIds: email.messageId }) }) ``` Deploying this program configures the Gmail event source. A matching message starts an execution and materializes the parsed `email` signal. One automation can declare several triggers. If you're migrating from a platform that routes events through sub-workflows, you can often keep those entrypoints and their work in one automation. Use [`merge`](/reference/runtime/signal-operators#merge) when each event should run the same flow, or [`correlate`](/reference/runtime/signal-operators#correlate) when related events must meet. Use [`invokeAutomation`](/reference/actions/invoke-automation) when the target is independently useful, not only to connect steps within one process. Declare triggers outside prerequisite sections. Each trigger occurrence starts an independent root context, so it can't inherit a dependency from another trigger as part of starting that context. Automate.ax rejects trigger declarations inside `withPrerequisites(...)` and `branch(...)` during planning. Declare both triggers independently and use [`correlate`](/reference/runtime/signal-operators#correlate) to join their keyed signals. Some compositions declare hidden triggers. Durable delays, provider callbacks, and polling actions can therefore add roots even when your source contains one visible trigger. [Action context-boundary validation](/concepts/actions#context-boundaries) makes you connect literal actions to the root that should run them instead of allowing the same side effect to run once for every root. ## Call triggers by service Import the named service namespace from an integration entry point. Trigger members start with `on` and the event, such as `gmail.onNewEmail` and `linear.onIssueCreated`. These entry points also retain fully qualified callable exports such as `onGmailNewEmail` for direct per-trigger imports. Built-in triggers omit the provider, as in `onSchedule` and `onHttpRequest`. ## Configure subscriptions and read events Trigger arguments configure the subscription. The returned signal contains one matching event: ```ts theme={null} const request = onHttpRequest() respondToHttpRequest({ body: request.path, requestId: request.requestId }) ``` ## Keep trigger configuration static Automate.ax configures event infrastructure during deployment, before runtime values exist. Configuration that selects an event source, such as the account watched by `gmail.onNewEmail`, must therefore be static. A signal can't choose the trigger's account at runtime. Action account options are different: an action may select an account from a signal because Automate.ax resolves that selection when the action executes. See [Integration accounts](/concepts/integration-accounts). ## Handle duplicate deliveries Automate.ax manages provider subscriptions, renewal, ingestion, and durable delivery. Providers can send duplicate notifications. Integrations deduplicate them by provider identity when supported. An event accepted by the active deployment keeps its own execution context. Actions in that context consume only its trigger and action outputs. ## Authorize provider callbacks Use `onHttpRequest({ protection: "callback" })` when an action gives an HTTP callback URL to an external provider. Protected callbacks always use trigger scope, so the signed URL targets that exact endpoint and automation. An action handler calls `runtime.createCallbackUrl(endpoint)` to turn the trigger's deployed endpoint into a signed, expiring URL: ```ts theme={null} import { automation, defineAction, onHttpRequest, onInvocation, withPrerequisites, } from "automate.ax" import { z } from "zod" const prepareCallback = defineAction("Prepare callback") .input(z.object({ endpoint: z.url() })) .output(z.object({ url: z.url() })) .retry({ replaySafety: "safe" }) .handler(async ({ input, runtime }) => ({ url: await runtime.createCallbackUrl(input.endpoint), })) export default automation("Prepare a provider callback", () => { const requested = onInvocation("request") const callback = onHttpRequest({ protection: "callback" }) withPrerequisites(requested, () => prepareCallback({ endpoint: callback.endpoint }), ) }) ``` Treat the generated URL as a bearer secret. Automate.ax rejects a missing, altered, expired, or incorrectly targeted capability before creating a context. A valid delivery starts an ordinary root context. Callback protection authorizes delivery but doesn't connect it causally to the action that generated the URL. Key the provider's job identifier on both sides and use `correlate` to join them. The same URL can accept provider retries. Automate.ax removes its protection parameter before exposing `url` and `query` in the trigger data. Provider delivery IDs and correlation still own deduplication and idempotency. ## Respond to requests HTTP triggers normally acknowledge accepted work immediately. Passing `request.requestId` to `respondToHttpRequest` addresses the response to that exact request and makes ingress wait automatically unless `waitForResponse` explicitly overrides the behavior. This remains unambiguous when an automation correlates several HTTP requests. Ingress waits up to 55 seconds for the addressed response. If the execution finishes without one, ingress returns `500`. If execution is still active after 55 seconds, ingress returns `504`, and execution can continue after the caller times out. If Automate.ax doesn't provide the event you need, see [Receive unsupported events](/guides/receive-unsupported-events) for how to receive it with an HTTP webhook. # Call an external API Source: https://docs.automate.ax/guides/call-an-external-api Make durable HTTP requests or write a custom action for unsupported API operations. Choose the path that matches the service and operation: | Request | Use | | - | - | | Public endpoint without authentication | [`fetchHttp`](/reference/actions/fetch-http) | | Unsupported operation for a supported service | A custom action with the integration's account and authenticated API helper | | Unsupported authenticated service | A custom action with a restricted credential from 1Password | Automate.ax can't define a new platform-managed integration entirely in automation code. Managed integrations depend on server-side credential storage, authorization, account binding, and token refresh. ## Call a public endpoint `fetchHttp` makes a durable request and returns the status, headers, and parsed body as signals. This endpoint passes its `offset` query parameter to the public PokéAPI: ```ts automations/look-up-pokemon.automation.ts theme={null} import { automation, fetchHttp, onHttpRequest, respondToHttpRequest, } from "automate.ax" export default automation("Look up a Pokémon", () => { const request = onHttpRequest() const pokemon = fetchHttp({ query: { limit: 1, offset: request.query.transform((query) => query.offset ?? 0), }, responseType: "json", url: "https://pokeapi.co/api/v2/pokemon", }) respondToHttpRequest({ body: pokemon.body, requestId: request.requestId, status: pokemon.status, }) }) ``` `fetchHttp` registers work and returns a signal without calling the API during composition. Every input accepts compatible signals. `fetchHttp` serializes JSON request bodies automatically and uses `responseType` to read the response body. ## Handle failures HTTP error statuses return normally with `ok: false`. Network and response parsing failures throw, so Automate.ax retries them before recording a failed action. Use provider-supported idempotency keys for requests that create or change data. See [`fetchHttp`](/reference/actions/fetch-http) for request fields, response parsing, and output details. ## Protect credentials and validate responses Literal action inputs are durable run data. Don't put a raw API key, bearer token, or other secret in `fetchHttp` headers, query parameters, or the body. If Automate.ax supports the service but not the operation, define a custom action with `.account(...)` and use the integration's authenticated API helper. The platform privately resolves and refreshes the selected account for the handler. For an unsupported service, store a restricted credential in 1Password, resolve it with `onePassword.resolveSecret`, and pass that sensitive signal directly to a custom action. Automate.ax keeps the value encrypted in storage and materializes it for the handler when it runs. A custom action also lets you validate the provider response with Zod before returning typed data to the rest of the automation: ```ts automations/list-provider-projects.automation.ts theme={null} import { automation, defineAction, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" import { z } from "zod" const projectsSchema = z.object({ projects: z.array(z.object({ id: z.string(), name: z.string() })), }) const listProviderProjects = defineAction("List provider projects") .input(z.object({ apiKey: z.string() })) .output(projectsSchema) .retry({ replaySafety: "safe" }) .handler(async ({ input }) => { const response = await fetch("https://api.example.com/projects", { headers: { authorization: `Bearer ${input.apiKey}` }, }) if (!response.ok) { throw new Error(`Provider request failed with ${response.status}`) } return projectsSchema.parse(await response.json()) }) export default automation("List provider projects", () => { onSchedule({ schedule: "0 * * * *" }) const apiKey = onePassword.resolveSecret({ secretReference: "op://Automation/ExampleAPI/credential", }) listProviderProjects({ apiKey }) }) ``` Limit the provider credential and the connected 1Password service account to the required resources and permissions. Don't return the credential, include it in an error, or write it to logs. If the action returns sensitive provider data, declare an [output sensitivity policy](/guides/protect-sensitive-values#protect-an-action-result). Store a dedicated credential at the `op://` reference. Apply the provider's scope, resource, expiration, quota, and network restrictions. Rotate the 1Password item without changing `secretReference`. If you can't use 1Password, keep a restricted credential inside the custom action handler's closure in private automation source. Anyone who can read the source can read the credential, and rotation requires a code change and deployment. Use the provider's platform-managed [integration account](/concepts/integration-accounts) when Automate.ax supports it. ## Deploy and call the endpoint Deploy the project and use the printed trigger URL: ```bash theme={null} bunx automate.ax deploy curl "YOUR_TRIGGER_URL?offset=25" ``` The request waits up to 55 seconds for validated JSON. The automation can continue after the caller times out. # Control event bursts Source: https://docs.automate.ax/guides/control-event-bursts Debounce, buffer, or select repeated occurrences within each signal partition. Burst controls operate across trigger contexts. Partition the source with [`keyBy`](/reference/runtime/signal-operators#keyby) when each customer or record needs independent timing, or [`globally`](/reference/runtime/signal-operators#globally) when every occurrence should share one timer. | Result | Operator | | - | - | | Most recent occurrence after activity stops | [`debounce`](/reference/runtime/signal-operators#debounce) | | Every occurrence before a relative or absolute deadline | [`window`](/reference/runtime/signal-operators#window) | | Leading, trailing, minimum-gap, selection, or buffering policy | [`funnel`](/reference/runtime/signal-operators#funnel) | ```ts automations/debounce-customer-updates.automation.ts theme={null} import { automation, onInvocation, sendEmail, t } from "automate.ax" export default automation("Debounce customer updates", () => { const update = onInvocation<{ customerId: string; summary: string }>() const settled = update.keyBy((value) => value.customerId).debounce("5m") sendEmail({ subject: "Customer update", text: t`${settled.summary}` }) }) ``` Each occurrence resets only its partition's timer. Each emission creates a child context containing the selected source histories, so downstream actions can consume the burst result and inherited source values. Use [`collect`](/reference/runtime/signal-operators#collect) when batch size, not time, closes the group. Use [`delay`](/reference/runtime/signal-operators#delay) to resume one causal occurrence later. # Coordinate occurrences Source: https://docs.automate.ax/guides/coordinate-occurrences Key, join, batch, or fan out values that arrive in separate execution contexts. Every trigger occurrence starts a root context. A cross-context operator selects occurrences and creates a child context containing their parent histories. | Result | Operators | | - | - | | Run the same flow for every occurrence from several triggers | [`merge`](/reference/runtime/signal-operators#merge) | | Join related events from different triggers | [`keyBy`](/reference/runtime/signal-operators#keyby), then [`correlate`](/reference/runtime/signal-operators#correlate) | | Batch a fixed number of occurrences | [`keyBy`](/reference/runtime/signal-operators#keyby) or [`globally`](/reference/runtime/signal-operators#globally), then [`collect`](/reference/runtime/signal-operators#collect) | | Admit once or a bounded number of times | [`once`](/reference/runtime/signal-operators#once-and-take) or [`take`](/reference/runtime/signal-operators#once-and-take) | | Enforce a rolling quota | [`rateLimit`](/reference/runtime/signal-operators#ratelimit) | | Run one section per item already in an array | [`each`](/reference/runtime/signal-operators#each) | | Prevent overlapping work for one partition | [`serialize`](/reference/runtime/signal-operators#serialize) | | Bound overlapping work for one partition | [`concurrent`](/reference/runtime/signal-operators#concurrent) | | Time or buffer a burst | [Control event bursts](/guides/control-event-bursts) | ## Partition the streams Use `keyBy` when each customer, record, conversation, or other business key needs its own coordination state. Use `globally` only when every occurrence should enter one shared batch or timer. ```ts automations/match-decisions.automation.ts theme={null} import { automation, correlate, onInvocation, sendEmail, t } from "automate.ax" export default automation("Match approval decisions", () => { const request = onInvocation<{ id: string; title: string }>("request").keyBy( (value) => value.id, ) const decision = onInvocation<{ requestId: string; status: string }>( "decision", ).keyBy((value) => value.requestId) correlate([request, decision]) sendEmail({ subject: t`Decision for ${request.title}`, text: t`The decision was ${decision.status}.`, }) }) ``` The email can consume both original signals because the correlation child is their closest shared boundary. ## Merge independent triggers Use `merge` when every occurrence should continue independently through the same flow. Unlike `correlate`, it doesn't wait for another stream or consume occurrences in pairs. ```ts automations/process-contact-events.automation.ts theme={null} import { automation, merge, onInvocation, sendEmail, serialize, t, } from "automate.ax" interface ContactEvent { contactId: string user: string } export default automation("Process contact events", () => { const created = onInvocation("contactCreated") const updated = onInvocation("contactUpdated") const contactEvent = merge([created, updated]) serialize( contactEvent.keyBy((event) => event.user), () => { sendEmail({ subject: t`Contact ${contactEvent.contactId} changed`, text: t`Processing the change for ${contactEvent.user}.`, to: "operations@example.com", }) }, ) }) ``` Here the merged signal supplies each queued occurrence, the user key creates one queue per user, and the signal's value remains available inside the serialized section. Two actions declared inside the section without a dependency on each other would still run concurrently. The next event for that user waits for the entire section's work region to close; events for other users don't wait. Value-preserving operators retain a keyed or global annotation. Arbitrary derivations and multi-input selections can return an ordinary signal; apply `keyBy` or `globally` again before another cross-context operation. ## Choose an identity and time Prefer a provider's entity or conversation ID when it expresses the relationship. Use [`correlationId`](/reference/runtime/signal-operators#correlationid) when you need a stable opaque identity for one durable occurrence. Use [`timestamp`](/reference/runtime/signal-operators#timestamp) when you need Automate.ax ingestion, completion, or coordination time instead of a provider timestamp. ## Batch or fan out Use `collect` when a count closes the group. The result is a nonempty array in arrival order. Use `each` when one existing array should create a durable child context per item; return a signal from the section only when you need to gather the per-item results. # Deploy a project Source: https://docs.automate.ax/guides/deploy-a-project Publish every automation in a project and set its parameters and integration accounts. The deploy command runs a TypeScript 7 type check before building. Automate.ax encodes many authoring rules in its types, while deployment adds build and planning checks that need the complete project. Pass `--skip-typecheck` only when you need to bypass the local type check. From the directory containing `automate.config.ts`, run: ```bash theme={null} bunx automate.ax deploy ``` The command: 1. Runs TypeScript 7 with `--noEmit` unless you pass `--skip-typecheck`. 2. Builds every `*.automation.ts` file. 3. Plans each file's triggers and actions. 4. Opens **Parameters & Accounts** when project-specific values or account assignments are needed. 5. Configures event sources and activates the deployment. The project dependency and command-line tool must agree with the server's runtime protocol. If deployment reports an incompatible protocol, update both to `automate.ax@latest`, rebuild, and redeploy. Planning rejects structures the runtime cannot execute safely, including an action that cannot resolve to exactly one causal context boundary. Successful bundling does not replace planning or the earlier TypeScript type check. The previous deployment remains active unless the new deployment succeeds. After success, `.automate/deployment.md` records the deployed project, automation files, deployment identity, and trigger details such as HTTP URLs. ## Set parameters and accounts By default, deployment opens a focused **Parameters & Accounts** page. Set values declared by the automation, assign saved accounts, or connect new accounts without exposing credentials to the command line. Pass `--cli-authorization` to complete the same setup in the terminal. A non-interactive or `--json` deployment exits with `DEPLOYMENT_SETUP_REQUIRED`. The error includes the deployment ID, setup URL, unresolved parameters, unsatisfied service bindings, and resume command. Complete setup in the browser, then resume the same deployment without rebuilding: ```bash theme={null} bunx automate.ax deployment authorize dep_123 ``` Pass `--no-open` to print the setup URL without opening a browser. ## Inspect deployment history Use `deployment list` to browse deployment history and `deployment show` to inspect one result: ```bash theme={null} bunx automate.ax deployment list --project "Customer operations" --status failed bunx automate.ax deployment list --since 2026-08-01T00:00:00Z --limit 25 bunx automate.ax deployment show dep_123 ``` `deployment list` resolves one project. Without `--org` or `--project`, it uses a nearby project config or asks you to choose. Pass `--org` to limit project selection to one organization. `--status` accepts `planning`, `awaiting_authorization`, `configuring`, `publishing`, `succeeded`, `failed`, or `cancelled`. `--since` and `--until` accept timestamps such as `2026-08-01T00:00:00Z`. ## Replace an in-progress deployment If another deployment is planning, awaiting authorization, or configuring, the command-line tool offers to cancel it. Pass `--cancel-existing` to do so non-interactively. You cannot cancel a deployment after publishing begins. Cancel a specific deployment with: ```bash theme={null} bunx automate.ax deployment cancel dep_123 --yes ``` A project can have only one in-progress deployment. API clients must explicitly cancel it before starting another. ## Change parameters and account assignments Open **Parameters & Accounts** in the web app. You can update declared parameter values or choose replacement accounts. Automate.ax runs planning again and republishes the active code with the new settings. Agents can use explicit, non-secret account identifiers instead. Run `automation list --project --json` to find service and binding pairs, then `accounts --org --json` to find eligible account IDs. Save the assignments in a JSON file: ```json bindings.json theme={null} [ { "serviceId": "google", "binding": "support", "accountId": "intacct_123" } ] ``` Redeploy the active artifact and plans: ```bash theme={null} bunx automate.ax deployment redeploy --project "Customer operations" --bindings bindings.json --json ``` If an account still needs authorization, open the returned authorization URL and run `deployment authorize ` afterward. The binding file contains platform account IDs, not provider credentials. Pass an empty array to assign every required account in the browser. # Derive signal values Source: https://docs.automate.ax/guides/derive-signal-values Project, calculate, and format values that materialize during execution. Triggers and actions return signals while Automate.ax plans the automation. Derive the value you need synchronously, then pass that signal to the next action. ```ts automations/describe-request.automation.ts theme={null} import { automation, onHttpRequest, respondToHttpRequest, t } from "automate.ax" export default automation("Describe request path", () => { const request = onHttpRequest() const normalized = request.path.transform((path) => path.toLowerCase()) respondToHttpRequest({ body: t`${normalized} has ${normalized.length} characters`, requestId: request.requestId, }) }) ``` ## Read a property Access a property directly on the signal. `request.path` is a `Signal`; `request.path.length` is a `Signal`. Chained access records the dependency without reading the value during planning. Use [`transform`](/reference/runtime/signal-operators#transform) when you need to call a value method, calculate a new value, combine signals, or branch inside a pure function. ## Build a string Use [`t`](/reference/runtime/signal-operators#t) when a string contains signals: ```ts theme={null} const prefix = "Incoming" const summary = t`${prefix}: ${request.method} ${request.path}` ``` An ordinary template literal tries to convert each signal before its value exists and throws: ```ts theme={null} const summary = `${request.method} ${request.path}` // Throws during planning ``` Use an ordinary template literal inside a transform callback or action handler, where the values already exist. ## Accept a value or signal Use [`isSignal`](/reference/runtime/signal-operators#issignal) in a reusable helper whose input permits either form. Action inputs already accept compatible signals, so ordinary automation code rarely needs the check. Derivation functions must stay synchronous and pure. Actions own network calls, file writes, and other external work. # Handle signal outcomes Source: https://docs.automate.ax/guides/handle-signal-outcomes Inspect success, failure, or closure and declare work for one terminal state. A signal terminates once by emitting a value, failing, or closing without a value. | Source | [`outcome`](/reference/runtime/signal-operators#outcome) | [`succeeded`](/reference/runtime/signal-operators#succeeded) | [`failed`](/reference/runtime/signal-operators#failed) | [`closed`](/reference/runtime/signal-operators#closed) | [`onSuccess`](/reference/runtime/signal-operators#onsuccess) | [`onFailure`](/reference/runtime/signal-operators#onfailure) | [`onClose`](/reference/runtime/signal-operators#onclose) | | - | - | - | - | - | - | - | - | | Emits | Tagged value | `true` | `false` | `false` | Source value | Closes | Closes | | Fails | Tagged failure | `false` | `true` | `false` | Closes | Error value | Closes | | Closes | Tagged closure | `false` | `false` | `true` | Closes | Closes | `null` | Use `outcome` when later work needs one value for every terminal state: ```ts automations/report-selection.automation.ts theme={null} import { automation, onHttpRequest, respondToHttpRequest } from "automate.ax" export default automation("Report request selection", () => { const request = onHttpRequest() const selected = request.path.filter((path) => path.startsWith("/api/")) respondToHttpRequest({ body: selected.outcome().transform((value) => JSON.stringify(value) ?? ""), requestId: request.requestId, }) }) ``` Use `succeeded`, `failed`, or `closed` when another signal needs a boolean. Use `onSuccess`, `onFailure`, or `onClose` when an entire synchronous section should run for one state. Failure and closure are different: failure carries an `AutomationError`; closure means a route produced no value. To use a backup only when another signal closes, branch on `closed(preferred)`. Failure remains distinct and doesn't select the backup unless you route it explicitly. # Protect sensitive values Source: https://docs.automate.ax/guides/protect-sensitive-values Protect selected action results, emitted data, and logs from execution history and local datasets. Mark values as sensitive at the API that stores them. Automate.ax keeps the exact value encrypted for trusted runtime computation and writes only a redacted structural projection to run details, synchronized execution data, logs, and local SQL datasets. ## Protect an action result Pass `sensitive: true` to protect the complete result, or pass a structural mask that mirrors the output type: ```ts theme={null} import { defineAction } from "automate.ax" import { z } from "zod" const issueProtectedToken = defineAction("Issue protected token") .input(z.object({ itemId: z.string() })) .output( z.object({ itemId: z.string(), token: z.string(), }), { sensitive: { token: true, }, }, ) .retry({ replaySafety: "safe" }) .handler(({ input }) => ({ itemId: input.itemId, token: crypto.randomUUID(), })) ``` `true` protects one complete nested value. An object mask selects named properties. A one-element array mask applies to every array item. Properties omitted from the mask remain visible and available to queries. Property signals preserve the matching part of the mask. An arbitrary `transform` that reads any sensitive signal produces a wholly sensitive value because Automate.ax can't prove which information the callback retained. Actions are explicit boundaries: sensitive inputs don't automatically make an action result sensitive. Add a sensitivity policy to that action's `.output()` when its returned value must remain protected. Sensitive signals can't be coordinator partition keys. Project a non-sensitive property before `keyBy`, or choose another public correlation key. ## Protect emitted outputs and logs Use the same explicit mask for emitted data. Logs accept a `sensitive` property covering their stored message and structured fields: ```ts theme={null} import { defineAction } from "automate.ax" import { z } from "zod" const recordProtectedToken = defineAction("Record protected token") .input(z.object({ itemId: z.string() })) .retry({ replaySafety: "safe" }) .handler(async ({ input, runtime }) => { const token = crypto.randomUUID() await runtime.sendOutput( { data: { itemId: input.itemId, token }, type: "issued-token", }, { sensitive: { token: true } }, ) await runtime.log({ fields: { itemId: input.itemId, token }, level: "info", message: `Issued ${token}`, sensitive: { fields: { token: true }, message: true }, }) }) ``` Sensitivity is declaration-based. Automate.ax doesn't guess from property names or scan strings for known secret text. Don't place a secret in another output, message, field, or error unless that storage API supports a matching sensitivity declaration. Automate.ax doesn't provide a decrypted reveal operation in run details or local execution datasets. # Query runs Source: https://docs.automate.ax/guides/query-runs Search Automate.ax runs, failures, actions, logs, and outputs with local SQL. The Automate.ax CLI queries a private local PostgreSQL copy of the runs you can access. Use ranked full-text search to find likely matches, then use SQL for exact filtering and joins across failures, fan-out, events, signal coordination, actions, logs, and explicit automation outputs. ## Inspect a run in the dashboard Open a recent execution to follow its causal timeline from left to right. Trigger occurrences and action invocations appear in execution lanes; connections show branches and joins. Long gaps are compressed and labeled with their actual duration. Select an operation output to preview and navigate its value. A run appears **Waiting** while an internal delay has not been delivered. The initiating context may already have settled. The delayed delivery starts an independent root; the dashboard connects it to the initiating occurrence only after correlation creates a shared child. [`markSignificant`](/reference/runtime/signal-operators#marksignificant) highlights the causally connected run when a chosen signal emits. Recent runs then hides insignificant runs by default. Turn on **Show insignificant runs** to see the complete history. Automations without a significance marker remain unfiltered. ## Query runs locally For a one-time investigation, log in and synchronize the last seven days for the nearby project: ```bash theme={null} bunx automate.ax login bunx automate.ax data sync ``` The command always synchronizes one project. Without an explicit scope, it uses a nearby project config or asks you to choose. Pass a project ID or name to select it directly. Pass an organization ID, name, or slug to limit project selection to that organization. You can also select a different history window: ```bash theme={null} bunx automate.ax data sync --project proj_01... --since 30d bunx automate.ax data sync --org org_01... --since 2026-08-01T00:00:00Z bunx automate.ax data sync --project proj_01... --since all ``` The default seven-day window keeps the first download bounded. `--since all` is an explicit request for every retained execution in the selected scope. The server applies your account's project access before synchronization. Local options can narrow that access but can't widen it. A bounded window also includes the older ancestors of matching contexts. This keeps causal lineage and fan-out traversal intact without synchronizing unrelated old runs. While testing an automation, keep `data follow` running in a separate terminal: ```bash theme={null} bunx automate.ax data follow --project proj_01... --since 1h ``` Wait for `Following execution data` before invoking the automation. Press Ctrl+C to stop after the investigation. The local database remains available for later queries. Local execution-data commands coordinate database access. Queries, searches, status checks, exports, synchronization, and cleanup wait for an in-progress local write, while `data follow` releases the database between updates. Other terminals and agents can run those commands concurrently against the same local dataset. Electric makes each synchronized resource current at its own shape offset. It doesn't provide one transaction boundary across all shapes. The manifest reports `consistency: "eventual"`, and `data status --json` reports the offset, row count, and synchronization time for every resource. A local update replaces one resource and its freshness marker atomically. When a query joins resources, compare their markers if the newest cross-resource changes must already agree. ## Wait for a background HTTP run For work that fits within the HTTP response window, pass the trigger's `requestId` to `respondToHttpRequest` so the invocation itself returns the result. Otherwise, an HTTP trigger returns a `202` receipt containing an `eventId`. Capture that exact event instead of guessing how long the run needs or selecting the newest timestamp: ```bash theme={null} response=$(curl --fail-with-body --silent --show-error "$TRIGGER_URL") event_id=$(jq -er '.eventId' <<<"$response") ``` One event can start several root contexts when a shared endpoint has several active subscriptions. Fan-out and coordination can add descendant contexts beneath each root. Delayed deliveries and protected callbacks create their own roots, and correlation can create a child beneath both the initiating and delivery roots. `automate.root_contexts` contains only roots. `automate.context_descendants` maps each root to its current descendants, including the root at depth `0`. In SQL, use *root context* for that stored lifecycle record. In explanations to end users, call the causally connected workflow a *run*. `root_contexts` is query terminology, not product language. With `data follow` still running, use Bash and `jq` to poll until the event has at least one synchronized context, every current context has either settled or failed, and no internal delay is pending or waiting for its delivery context to synchronize. The query follows delivered delays through their invocation provenance. This example stops after five minutes. Increase the deadline for intentionally long automations. > [!WARNING] > > Invocation provenance covers internal delays, not external callbacks or other > provider deliveries. When the expected result depends on one of those roots, > poll for its terminal action or explicit output instead of treating settled > current contexts as workflow completion. ```bash theme={null} poll_deadline=$((SECONDS + 300)) while true; do result=$(bunx automate.ax query --json --sql " WITH RECURSIVE run_contexts(context_id) AS ( SELECT DISTINCT context_id FROM automate.event_links WHERE event_id = '$event_id' UNION SELECT related.context_id FROM run_contexts AS current CROSS JOIN LATERAL ( SELECT descendants.descendant_context_id AS context_id FROM automate.context_descendants AS descendants WHERE descendants.context_id = current.context_id UNION SELECT delivery_links.context_id FROM automate.actions INNER JOIN automate.automation_invocations AS invocations ON invocations.idempotency_key = actions.id INNER JOIN automate.event_links AS delivery_links ON delivery_links.event_id = invocations.event_id WHERE actions.context_id = current.context_id AND starts_with(invocations.entrypoint, '__\$delay:') ) AS related ) SELECT true AS complete FROM run_contexts INNER JOIN automate.contexts AS contexts ON contexts.id = run_contexts.context_id HAVING count(*) > 0 AND bool_and(contexts.status IN ('settled', 'failed')) AND NOT EXISTS ( SELECT 1 FROM automate.actions INNER JOIN automate.automation_invocations AS invocations ON invocations.idempotency_key = actions.id WHERE actions.context_id IN (SELECT context_id FROM run_contexts) AND starts_with(invocations.entrypoint, '__\$delay:') AND ( invocations.processed_at IS NULL OR ( invocations.event_id IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM automate.event_links WHERE event_links.event_id = invocations.event_id ) ) ) ) ") || exit if jq -e '.results[0].rows[0].complete == true' <<<"$result" >/dev/null; then break fi if ((SECONDS >= poll_deadline)); then echo "Run did not finish within five minutes." >&2 exit 1 fi sleep 1 done ``` After the query reports no pending internal delay, search for resources that mention the event ID or known failure text. Verify the expected terminal action, output, or external side effect before reporting the run complete: ```bash theme={null} bunx automate.ax search "$event_id" bunx automate.ax search '"gateway timeout" -retry' ``` Use this exact join when you need every context and action associated with the request: ```bash theme={null} bunx automate.ax query --sql " WITH roots AS ( SELECT DISTINCT context_id FROM automate.event_links WHERE event_id = '$event_id' ), family AS ( SELECT roots.context_id AS root_context_id, descendants.depth, descendants.descendant_context_id AS context_id FROM roots INNER JOIN automate.context_descendants AS descendants ON descendants.context_id = roots.context_id ) SELECT family.root_context_id, family.depth, contexts.id AS context_id, contexts.status AS context_status, contexts.created_at AS context_created_at, contexts.settled_at, contexts.error AS context_error, actions.name AS action_name, actions.status AS action_status, actions.completed_at AS action_completed_at, actions.error AS action_error, actions.output AS action_output FROM family INNER JOIN automate.contexts AS contexts ON contexts.id = family.context_id LEFT JOIN automate.actions AS actions ON actions.context_id = family.context_id ORDER BY family.root_context_id, family.depth, contexts.created_at, actions.created_at " ``` ## Build a run-history client The CLI and REST endpoint read the same public execution-data manifest with the same bearer session. Inspect the REST response when building another agent interface: ```bash theme={null} curl --get https://automate.ax/api/v1/execution-data/manifest \ --header "Authorization: Bearer $AUTOMATE_SESSION_TOKEN" \ --data-urlencode "projectId=proj_01..." \ --data-urlencode "since=2026-08-01T00:00:00Z" ``` The response includes the validated scope, local schema version, eventual-consistency mode, opaque profile ID, and one fixed authenticated Electric URL for every resource. Organization and project filters must exist, be related when supplied together, and be visible to the signed-in user. The Electric URLs require that same user session; they don't accept arbitrary table, column, or predicate parameters. ## Record structured logs The action runtime exposes the durable `runtime.log()` method: ```ts theme={null} import { defineAction } from "automate.ax" import { z } from "zod" export const processOrder = defineAction("Process order") .input(z.object({ orderId: z.string() })) .retry({ replaySafety: "unsafe" }) .handler(async ({ input, runtime }) => { await runtime.log({ fields: { orderId: input.orderId }, level: "info", message: "Charging order", }) }) ``` Await `runtime.log()` when persistence must finish before the action continues. Each action attempt can write 1,000 logs. Messages allow 16,384 characters, and field maps allow 64 entries and 64 KiB encoded. Each field key allows 128 characters. Exceeding a limit fails the method. Deterministic per-attempt indexes make repeated delivery idempotent while preserving logs from every retry. Logs retain their action, context, and retry-attempt provenance. They don't replace or change explicit automation outputs. ## Query runs with SQL Pass a statement directly or use a SQL file: ```bash theme={null} bunx automate.ax query --sql " SELECT project_name, automation_identity_key, status, created_at FROM automate.root_contexts WHERE status = 'failed' ORDER BY created_at DESC LIMIT 20 " bunx automate.ax query --file investigation.sql --json ``` ## Search runs Search synchronized logs, failures, actions, outputs, event payloads, IDs, providers, projects, and automations without writing SQL: ```bash theme={null} bunx automate.ax search '"gateway timeout" -retry' bunx automate.ax search cus_01... --limit 50 --json ``` `automate search` ranks each result and includes its resource, resource ID, context ID, timestamp, and a matching excerpt. Search uses PostgreSQL's `simple` text-search dictionary so provider names, action names, and identifiers aren't stemmed as English prose. Titles and human-authored text receive more weight than structured metadata and IDs. Exact and partial identifier matches receive an additional ranking boost, while `pg_trgm` recovers misspellings and partial terms. The derived `automate.search_documents` table rebuilds from the synchronized tables during `data sync` and when its local schema changes. `data follow` refreshes only the search resource affected by each high-volume execution update. The table contains no independent server state. Use the same index directly from SQL when you need custom filtering or joins: ```sql theme={null} WITH input AS ( SELECT websearch_to_tsquery('simple', 'gateway timeout -retry') AS query ) SELECT resource, resource_id AS id, context_id AS context, created_at AS timestamp, ts_rank_cd( ARRAY[0.05, 0.2, 0.5, 1.0]::real[], search_vector, input.query, 32 ) AS rank, content FROM automate.search_documents CROSS JOIN input WHERE search_vector @@ input.query ORDER BY rank DESC, timestamp DESC LIMIT 20; ``` Combine trigram word similarity with a partial identifier match for typo-tolerant investigations: ```sql theme={null} SELECT resource, resource_id AS id, context_id AS context, created_at AS timestamp, greatest( word_similarity('gatewy timeout', title), word_similarity('gatewy timeout', content) ) AS rank, content FROM automate.search_documents WHERE 'gatewy timeout' <% title OR 'gatewy timeout' <% content OR identifiers ILIKE '%cus_01...%' ORDER BY rank DESC, timestamp DESC LIMIT 20; ``` The full-text vector and trigram text columns use generalized inverted (`GIN`) indexes. Automate.ax uses native cover-density ranking and doesn't load the optional `PGlite` BM25 extension. Queries can only read synchronized tables and views in the `automate` schema. `query` accepts one or more PostgreSQL `SELECT` statements and `EXPLAIN` for a `SELECT`. It rejects session changes, transactions, modifying common table expressions, row locks, and every data-definition or data-modification statement. Each query also runs as a restricted role inside a read-only transaction. Inspect the available objects and local status: ```bash theme={null} bunx automate.ax data schema bunx automate.ax data schema --sql bunx automate.ax data status --json ``` ## Trace fan-out `automate.context_ancestors` and `automate.context_descendants` contain the transitive context relationships, including each context itself at depth `0`. Find every output emitted beneath one context: ```sql theme={null} SELECT descendants.depth, outputs.context_id, outputs.type, outputs.data, outputs.created_at FROM automate.context_descendants AS descendants INNER JOIN automate.outputs ON outputs.context_id = descendants.descendant_context_id WHERE descendants.context_id = 'actx_01...' ORDER BY outputs.output_seq; ``` The `automate.root_contexts` view contains contexts without a parent, joined to their automation, project, and organization identity. The `automate.contexts` table contains roots and coordinated or fan-out child contexts. ## Trace delayed and scheduled work `automate.automation_invocations` records work scheduled by an action. Join `idempotency_key` to `automate.actions.id` to find the scheduling action and its origin context. `run_at` is the requested delivery time. `processed_at` remains `NULL` until delivery processing finishes, and `event_id` identifies the delivered event when delivery creates one. Find scheduled invocations originating in a context family: ```sql theme={null} WITH family AS ( SELECT descendant_context_id AS context_id FROM automate.context_descendants WHERE context_id = 'actx_01...' ) SELECT invocations.id, actions.context_id AS origin_context_id, actions.id AS scheduling_action_id, invocations.entrypoint, invocations.run_at, invocations.processed_at, invocations.event_id, delivery_links.context_id AS delivery_context_id FROM family INNER JOIN automate.actions ON actions.context_id = family.context_id INNER JOIN automate.automation_invocations AS invocations ON invocations.idempotency_key = actions.id LEFT JOIN automate.event_links AS delivery_links ON delivery_links.event_id = invocations.event_id ORDER BY invocations.run_at; ``` This provenance doesn't make the delivery context a child of the origin. Delays, programmatic invocations, callbacks, provider events, and replies still arrive as ordinary roots. Traverse `context_parents` only after correlation creates an actual shared child. A pending internal delay can make the origin run appear **Waiting** in the web app. A scheduled programmatic invocation remains independent work. ## Investigate logs Find recent warnings and errors with their action-attempt provenance: ```sql theme={null} SELECT created_at, level, message, context_id, action_invocation_id, attempt, fields FROM automate.logs WHERE level IN ('warn', 'error') ORDER BY created_at DESC LIMIT 100; ``` ## Execution tables | Object | Contents | | - | - | | `automate.projects` | Projects in the synchronized scope. | | `automate.automations` | Automation identity and enabled state. | | `automate.automation_invocations` | Scheduled invocation timing, scheduling-action key, processing time, and delivered event. | | `automate.contexts` | Root and child context lifecycle. | | `automate.context_parents` | Direct context directed acyclic graph edges. | | `automate.event_links` | Events attached to contexts with hook provenance. | | `automate.events` | Event metadata and decoded payload projection. | | `automate.actions` | Action lifecycle, dependencies, failures, retry policy, replay safety, and output projection. | | `automate.action_attempts` | Logical attempt number, delivery identity, disposition, failure, and provider-directed retry time. | | `automate.signal_invocations` | Signal lifecycle, dependency IDs, selected index, failure, and output projection. | | `automate.signal_coordinators` | Durable coordinator identity, location, configuration hash, and parent precedence. | | `automate.signal_partitions` | Exact coordinator keys, operational state, expiry, and wake timing. | | `automate.signal_offers` | Input lanes, dependency provenance, eligibility, settlement, and outcome status. | | `automate.signal_decisions` | Emitted child contexts within coordinator partitions. | | `automate.signal_decision_offers` | Ordered selected-offer membership for each decision. | | `automate.logs` | Ordered user-authored logs with action-attempt provenance. | | `automate.outputs` | Explicit ordered outputs from automation code. | | `automate.search_documents` | Weighted full-text and trigram search documents that rebuild from synchronized resources. | | `automate.root_contexts` | Root contexts joined to automation and project identity. | | `automate.context_ancestors` | Transitive parent relationships and depth. | | `automate.context_descendants` | Transitive child relationships and depth. | | `automate.signal_outcomes` | Joined signal, decision, coordinator, and selected-offer results for races, correlations, collects, fan-outs, and funnels. | ## Read non-JSON values Automate.ax payloads support values that JSON can't represent directly. The `payload`, `output`, `key`, `data`, `value`, and `fields` columns use an extended JSON projection: * Ordinary objects, arrays, strings, booleans, numbers, and `null` remain ordinary JSON. * Values such as `bigint`, `Date`, `Map`, `Set`, typed arrays, files, requests, and responses use an object with a `$type` field. * An ordinary object that already owns `$type` is wrapped as `{ "$type": "object", "value": ... }`, so its original tag can't be confused with the projection format. * Binary values up to 64 KiB include base64. Larger values include their size, an `omitted` marker, and an `encodedRef` identifying the exact stored value. * Corresponding `*_encoded` columns retain the exact encoded bytes. These columns hold the local copy of server truth. Automate.ax derives the JSON columns for queries. Query projected columns with PostgreSQL JSON operators: ```sql theme={null} SELECT id, payload->>'customerId' AS customer_id FROM automate.events WHERE event_type = 'stripe.customer.updated'; ``` ## Protect local run history The database can contain sensitive provider data. Automate.ax isolates it by app origin and signed-in profile, creates its directory with owner-only permissions, and deletes every local profile for that app origin when you log out—even when the server session has expired. Export or clear the local database: ```bash theme={null} bunx automate.ax data export --output ./execution-data.tar.gz bunx automate.ax data clear ``` `data export` archives may contain provider payloads, action values, and logs; store them as sensitive data. `data clear --yes` supports non-interactive cleanup. If a local execution-data command fails unexpectedly, including with a low-level error such as `Aborted()`, clear the derived database and download a fresh copy: ```bash theme={null} bunx automate.ax data clear --yes bunx automate.ax data sync ``` Add the `--project`, `--org`, and `--since` options needed to restore your intended scope. Clearing this cache doesn't change production execution data. When PostgreSQL reports explicit database corruption, `data sync` removes that profile's cache and rebuilds it once automatically. Local read commands remove recognized unusable caches and direct you to synchronize again. The command-line tool preserves other server, authorization, and local filesystem errors. # Receive unsupported events Source: https://docs.automate.ax/guides/receive-unsupported-events Receive unsupported provider events with an Automate.ax HTTP trigger. Automate.ax doesn't support user-defined, platform-managed triggers. Managed triggers depend on privileged server components for subscription setup, authentication, renewal, event ingestion, and durable delivery, so an automation can't define one entirely in its own code. ## Receive a custom webhook Use `onHttpRequest` as the callback for an unsupported webhook: ```ts automations/receive-custom-webhook.automation.ts theme={null} import { automation, markSignificant, onHttpRequest } from "automate.ax" export default automation("Receive a custom webhook", () => { const request = onHttpRequest() markSignificant(request) }) ``` Deploy the automation, then register the HTTP trigger URL printed by the command-line tool as the provider's webhook callback. Each request starts an automation execution. Its headers, query parameters, decoded body, and exact `rawBody` bytes are available on the request signal. Use `rawBody` for signature verification so parsing doesn't change the signed content. Automate.ax omits browser and proxy infrastructure headers from durable request data: `cookie`, `cf-*`, `sec-*`, and `x-forwarded-for`. You can't authenticate a custom webhook that requires one of those headers. For example, Cloudflare Notifications sends its authentication secret in `cf-webhook-auth`, so that webhook isn't compatible with a custom trigger. You are responsible for configuring and renewing the provider's webhook, authenticating requests, validating its payload, and handling provider retries or duplicate events. Automate.ax provides the HTTP endpoint and execution delivery. It doesn't manage the provider-side subscription for a custom webhook. ## Verify webhook signatures Use the provider's maintained verification package from the `npm` registry when one is available. Install it with Bun, for example: ```bash theme={null} bun add standardwebhooks ``` Store the signing secret in 1Password and resolve it with a connected service account. Pass only the sensitive signal returned by `onePassword.resolveSecret` to the verification action. Don't put a raw secret literal in an action input or return, log, or include the resolved value in an error. This example verifies a provider that follows the [Standard Webhooks specification](https://github.com/standard-webhooks/standard-webhooks). Its `npm` package compares signatures in constant time: ```ts automations/standard-webhook.automation.ts theme={null} import { Webhook } from "standardwebhooks" import { automation, defineAction, markSignificant, onHttpRequest, } from "automate.ax" import { onePassword } from "automate.ax/onepassword" import { z } from "zod" const eventSchema = z.object({ id: z.string(), type: z.string(), }) const verifyWebhook = defineAction("Verify webhook") .input( z.object({ headers: z.record(z.string(), z.string()), rawBody: z.custom>( (value) => value instanceof Uint8Array, ), signingSecret: z.string(), }), ) .output(eventSchema) .retry({ replaySafety: "safe" }) .handler(({ input }) => eventSchema.parse( new Webhook(input.signingSecret).verify( new TextDecoder().decode(input.rawBody), input.headers, ), ), ) export default automation("Verify a signed webhook", () => { const request = onHttpRequest() const signingSecret = onePassword.resolveSecret({ secretReference: "op://Automation/ExampleWebhook/signingSecret", }) const verified = verifyWebhook({ headers: request.headers, rawBody: request.rawBody, signingSecret, }) markSignificant(verified) }) ``` Use the provider package's required header names, signed-content format, encoding, and replay tolerance. Gate every side effect on successful verification. Deduplicate retries with the provider's stable delivery ID; a valid signature proves authenticity but doesn't make repeated delivery idempotent. Signature verification runs after Automate.ax accepts the HTTP request and creates durable run data. Package replay-window checks therefore use the time when the action starts unless the package lets you supply a separately recorded receipt time. Queue or cold-start delay can make a short window reject a valid delivery. Use a managed integration trigger when verification or replay protection must happen at event ingestion. When one of your actions gives a callback URL directly to the provider, use `onHttpRequest({ protection: "callback" })` and generate the URL with `runtime.createCallbackUrl(endpoint)`. This bearer capability prevents callers without the signed URL from reaching that exact trigger. It doesn't prove the provider's identity. Validate the provider's signature as well when you need identity assurance. Protected callback deliveries remain independent root contexts, so correlate a provider job ID to the initiating action instead of relying on the capability for context inheritance. Use `respondToHttpRequest({ requestId: request.requestId, ... })` when the provider requires a verification challenge or synchronous response. This makes the trigger wait automatically. See [On HTTP request](/reference/triggers/on-http-request) for the full request shape and response timeout. # Route signals and work Source: https://docs.automate.ax/guides/route-signals-and-work Select values, add prerequisites, and declare complementary automation paths. Choose an operator by the path you need: | Result | Operator | | - | - | | Keep a value when a separate condition is true | [`gate`](/reference/runtime/signal-operators#gate) | | Keep a value when its predicate matches | [`filter`](/reference/runtime/signal-operators#filter) | | Split one value into matching and other paths | [`partition`](/reference/runtime/signal-operators#partition) | | Make a value wait for other signals | [`dependentOn`](/reference/runtime/signal-operators#dependenton) | | Apply prerequisites to a declaration section | [`withPrerequisites`](/reference/runtime/signal-operators#withprerequisites) | | Declare `if`, `else if`, and `else` sections | [`branch`](/reference/runtime/signal-operators#branch) | | Isolate durable hook numbering | [`scope`](/reference/runtime/signal-operators#scope) | | Name and present a declaration group | [`group`](/reference/runtime/signal-operators#group) | ## Route values Use `filter` when the condition depends only on the value. Use `gate` when another signal supplies the condition. Use `partition` when both the matching and remaining paths do work. ```ts automations/route-requests.automation.ts theme={null} import { automation, onInvocation, partition, sendEmail, t } from "automate.ax" export default automation("Route requests", () => { const request = onInvocation<{ priority: string; summary: string }>() const [urgent, routine] = partition( request, (value) => value.priority === "urgent", ) sendEmail({ subject: "Urgent request", text: t`${urgent.summary}` }) sendEmail({ subject: "Routine request", text: t`${routine.summary}` }) }) ``` Exactly one partition emits. The other closes, so actions attached to that path don't run. ## Route declaration sections Use `branch` when an entire synchronous section changes: ```ts theme={null} branch( urgent, () => sendEmail({ subject: "Urgent", text: "Escalate it." }), () => sendEmail({ subject: "Routine", text: "Queue it." }), ) ``` Don't declare triggers inside `branch` or `withPrerequisites`. Each trigger starts an independent root context. Use [`correlate`](/reference/runtime/signal-operators#correlate) to join related occurrences from separate triggers. ## Keep runs and declarations readable Use [`markSignificant`](/reference/runtime/signal-operators#marksignificant) when an emitted signal should keep its connected run visible in Recent runs. Use `scope` to isolate durable hook numbering without changing execution. Use `group` when the same section also needs a name and initial presentation in run details. # Select and time signals Source: https://docs.automate.ax/guides/select-and-time-signals Choose by completion, resume later, or enforce a durable deadline. | Result | Operator | | - | - | | First causally related input to emit or fail | [`race`](/reference/runtime/signal-operators#race) | | Resume one occurrence after a duration | [`delay`](/reference/runtime/signal-operators#delay) | | Fail one signal at a durable deadline | [`timeout`](/reference/runtime/signal-operators#timeout) | ```ts automations/choose-first-timer.automation.ts theme={null} import { automation, delay, onHttpRequest, race, respondToHttpRequest, withPrerequisites, } from "automate.ax" export default automation("Choose first timer", () => { const request = onHttpRequest() const winner = withPrerequisites(request, () => race([ delay("2s").transform(() => "slow"), delay("1s").transform(() => "fast"), ]), ) respondToHttpRequest({ body: winner, requestId: request.requestId }) }) ``` Use `race` when completion order matters within one causal occurrence: emission or failure wins, and closed inputs leave the race. Its inputs must share an activation boundary. Use [`merge`](/reference/runtime/signal-operators#merge) when independent trigger streams should start the same flow. Literal delays declare hidden delivery triggers. Scope them to the initiating signal with `withPrerequisites`. Value-carrying delays and timeouts use their source as the anchor. Use [Control event bursts](/guides/control-event-bursts) when timing repeated occurrences instead of one causal occurrence. # Use multiple accounts from the same service Source: https://docs.automate.ax/guides/use-multiple-accounts Assign named account bindings when one Automate.ax project uses several accounts from a service. Named bindings let a project use several accounts from one service. An automation can watch a support mailbox and send from an operations mailbox without storing credentials in code. ## Name each account Call the provider's account helper at module scope with a stable binding name, then pass each reference to the trigger or action that should use it: ```ts automations/route-support-email.automation.ts theme={null} import { automation } from "automate.ax" import { gmail, googleAccount } from "automate.ax/gmail" const supportGoogle = googleAccount("support") const operationsGoogle = googleAccount("operations") export default automation("Route support email", () => { const email = gmail.onNewEmail({ account: supportGoogle }) gmail.sendEmail.usingAccount(operationsGoogle)({ subject: email.subject.transform( (subject) => `New support email: ${subject ?? "(no subject)"}`, ), text: "A new message arrived in the support mailbox.", to: "operations@your-company.example", }) }) ``` The names `support` and `operations` identify deployment bindings, not provider account IDs. Account helpers prevent passing a Google binding to an action for another service. ## Connect each account Deploy the project: ```bash theme={null} bunx automate.ax deploy ``` Automate.ax detects the permissions for each service and binding. For an unsatisfied binding, the command-line tool asks you to select an eligible account, connect one, or reauthorize one for broader permissions. Only binding names appear in automation code and deployment metadata. Provider credentials stay private. ## Keep one identity across calls Use the same binding name wherever work should use the same provider identity. For example, Gmail and Google Sheets share the Google service, so `googleAccount("operations")` identifies the same Google binding across both product subpaths. Omitting the action's account options selects the `default` binding. A single-service action also accepts a binding string, while an account reference reuses one identity across calls. > [!NOTE] > > Trigger account selection must be static because Automate.ax configures event > sources during deployment. Actions resolve their selected account when they > execute. To change which connected account satisfies a binding, assign its replacement on the next deployment. A successful deployment records the new choice without code changes. # Evaluate AI decisions Source: https://docs.automate.ax/reference/actions/evaluate Evaluate typed Choice, Score, and Boolean questions with evaluate. `evaluate` answers named Choice, Score, and Boolean questions about shared state. It returns typed values and probabilities for routing, scoring, guardrails, and verification. Omit `account` to use the platform Vercel AI Gateway credential and the default `typesafe-ai/jev` model. Jev makes bounded decisions; it doesn't generate text. Use [`generate`](/reference/actions/generate) when you need a written or schema-generated response. ## Example ```ts automations/triage-message.automation.ts theme={null} import { automation, evaluate, onHttpRequest, respondToHttpRequest, t, } from "automate.ax" import { z } from "zod" export default automation("Triage a message", () => { const request = onHttpRequest({ body: z.object({ message: z.string() }), }) const triage = evaluate({ state: request.body, questions: { department: { type: "choice", instructions: "Which team should handle this message?", criteria: { billing: "Payments, charges, and refunds", support: "Product help and other requests", }, }, urgent: { type: "boolean", instructions: "Does this message require immediate attention?", }, }, }) respondToHttpRequest({ body: t`Route: ${triage.answers.department.choice}`, requestId: request.requestId, }) }) ``` The Choice answer is typed as `"billing" | "support"`. The Boolean answer's `probability` is the model-estimated probability that the answer is true. ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `state` | `string \| JSON object \| JSON array` | Yes | Shared content evaluated by every question. Signals are supported. | | `questions` | Named Choice, Score, or Boolean question map | Yes | Static question definitions. Keys and Choice option names type the returned answers. | | `model` | `EvaluateModelId` | No | Gateway or provider-native evaluation model ID. Defaults according to `account`. | | `account` | Supported provider account reference | No | Customer-managed provider credentials. Omit for the platform gateway. | | `maxRetries` | `number` | No | Maximum retries for transient provider failures. Defaults to 2. | | `headers` | `Record` | No | Additional provider request headers. | | `providerOptions` | `Record>` | No | Provider-specific options. | Each question requires `instructions`, which can be a string, JSON object, or JSON array: * `choice` requires a nonempty `criteria` map. Each key is an available answer and each value describes that option. * `score` requires at least two ordered `criteria` levels. The first level has index `0`. * `boolean` can describe `true` and `false` with optional `criteria`. Descriptions can be strings, JSON objects, JSON arrays, or `null`. ## Output `answers` contains one answer for every question: | Question | Answer | | - | - | | Choice | `choice` and, when supplied by the provider, a complete `probabilities` map. | | Score | Fractional `score` from `0` through the last level index and, when supplied, a probability distribution keyed by level index. | | Boolean | `probability`, the estimated probability that the answer is true. | Choice and Score probability distributions are optional because language-model adapters may return only a selected choice or score. Jev returns native distributions and adds its separate confidence statistic under `providerMetadata.typesafe.confidence`. Don't treat Boolean probability or Jev confidence as interchangeable values. Choose automation thresholds against labeled examples from your task. The result also exposes token `usage`, `warnings`, optional rounding precision, provider metadata, and response metadata. ## Provider accounts Customer-managed Vercel AI Gateway, OpenAI, Anthropic, and Google Generative AI accounts support `evaluate`. OpenAI, Anthropic, and Google adapt structured language-model output to the same question types; their Boolean probabilities are prompted estimates and aren't guaranteed to be calibrated. Omitting `model` uses the selected account's default: | Account | Default model | | - | - | | Platform or Vercel AI Gateway | `typesafe-ai/jev` | | OpenAI | `gpt-5.6-luna` | | Anthropic | `claude-haiku-4-5-20251001` | | Google Generative AI | `gemini-3.5-flash-lite` | Connect customer-managed credentials with `bunx automate.ax accounts`, then pass the provider's named account reference. Calls that omit `account` count toward the organization's monthly [Platform AI allowance](/concepts/platform-resources#count-platform-ai-usage). # Fetch HTTP Source: https://docs.automate.ax/reference/actions/fetch-http Make durable HTTP requests without an integration account. `fetchHttp` makes a durable HTTP or HTTPS request without an integration account. Use a packaged integration action for providers with managed accounts. ## Example ```ts automations/look-up-pokemon.automation.ts theme={null} import { automation, fetchHttp, onHttpRequest, respondToHttpRequest, } from "automate.ax" export default automation("Look up Pokémon", () => { const request = onHttpRequest() const pokemon = fetchHttp({ query: { limit: 1, offset: request.query.transform((query) => query.offset ?? 0), }, responseType: "json", url: "https://pokeapi.co/api/v2/pokemon", }) respondToHttpRequest({ body: pokemon.body, requestId: request.requestId, status: pokemon.status, }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `url` | `string` | Yes | — | Absolute HTTP or HTTPS URL without embedded credentials or a port blocked by Fetch. | | `method` | `string` | No | `"GET"` | Valid HTTP method token, normalized to uppercase. The Fetch API rejects `CONNECT`, `TRACE`, and `TRACK`. | | `headers` | `Record` | No | `{}` | Request headers. Names and values must be valid Fetch API headers. Fetch manages `connection`, `content-length`, `expect`, `host`, `keep-alive`, `sec-fetch-mode`, `transfer-encoding`, and `upgrade`. | | `query` | `Record` | No | `{}` | Query parameters merged into `url`. Arrays produce repeated parameters. `fetchHttp` skips `null` and `undefined`. | | `body` | `JSON value \| string \| Blob` | No | No body | Request body. `fetchHttp` serializes JSON values and defaults to `content-type: application/json`. It sends strings and Blobs unchanged. `GET` and `HEAD` requests can't include a body. | | `redirect` | `"follow" \| "error" \| "manual"` | No | `"follow"` | Fetch API redirect behavior. | | `responseType` | `"auto" \| "json" \| "text" \| "blob"` | No | `"auto"` | How to read a non-empty response body. | Every input accepts a compatible signal. `query` replaces an existing parameter with the same name. An array writes that name once per value. With `responseType: "auto"`, JSON media types produce a JSON body. Text and XML media types produce text, and other media types produce a Blob. An empty response always produces `bodyType: "empty"` and `body: null`. Use an explicit response type when an endpoint sends an incorrect or missing `content-type` header. ## Output `fetchHttp` returns a signal with these response fields: | Field | Type | Description | | - | - | - | | `ok` | `boolean` | Whether `status` is from 200 through 299. | | `status` | `number` | HTTP response status. | | `statusText` | `string` | HTTP response status text. | | `headers` | `Record` | Response headers normalized by the Fetch API. `set-cookie` is an array so multiple cookie values remain distinct. | | `url` | `string` | Final response URL after redirects. | | `redirected` | `boolean` | Whether the request followed a redirect. | | `bodyType` | `"json" \| "text" \| "blob" \| "empty"` | Discriminator for the parsed body. | | `body` | `JSON value \| string \| Blob \| null` | Parsed response body corresponding to `bodyType`. | HTTP error statuses are successful outputs with `ok: false`, so your automation can inspect their bodies. `fetchHttp` treats network and response-parsing failures as action failures subject to retry. Literal action inputs are durable run data. Don't put a raw API key, bearer token, or other secret in `headers`, `query`, or `body`. Use a packaged integration action for supported providers. For an unsupported service, [store the credential in 1Password and consume its sensitive signal inside a custom action](/guides/call-an-external-api#protect-credentials-and-validate-responses). `fetchHttp` may repeat a data-changing request after a network failure, so pass the provider's idempotency key when available. # Generate AI output Source: https://docs.automate.ax/reference/actions/generate Generate text or schema-validated output with generate. `generate` produces text or schema-validated data. Omit `account` to use the platform Vercel AI Gateway credential. Its model cost counts toward the organization's monthly [Platform AI allowance](/concepts/platform-resources#platform-ai); customer-managed accounts don't use this allowance. The platform default is `openai/gpt-4.1-nano`. ## Example ```ts automations/recipe.automation.ts theme={null} import { automation, generate, markSignificant, onDashboardRun, } from "automate.ax" import { z } from "zod" export default automation("Create a recipe", () => { onDashboardRun({ title: "Create recipe" }) const recipe = generate({ prompt: "Create a weeknight pasta recipe", schema: z.object({ ingredients: z.string().array(), name: z.string(), steps: z.string().array(), }), }) markSignificant(recipe.output) }) ``` An organization member starts generation from the dashboard. The schema-validated recipe appears in the action output, and `markSignificant` keeps the completed run in the default Recent runs view. Each run uses the organization's Platform AI allowance. ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `model` | `GenerateModelId` | No | Gateway or provider-native model ID. Available models and the default depend on `account`. | | `prompt` | `string` | One of `prompt` or `messages` | Text prompt. | | `messages` | `{ role: "assistant" \| "user"; content: string }[]` | One of `prompt` or `messages` | Conversation messages. | | `account` | Provider account reference | No | Customer-managed provider credentials. Omit for the platform gateway. | | `schema` | Standard Schema | No | Constrains structured output and determines its TypeScript type. | | `schemaName` | `string` | No | Provider-facing structured-output name. | | `schemaDescription` | `string` | No | Additional structured-output guidance. | | `instructions` / `system` | `string` | No | Model instructions. | | `maxOutputTokens` | `number` | No | Maximum generated tokens. | | `temperature` / `topP` / `topK` | `number` | No | Sampling settings. | | `frequencyPenalty` / `presencePenalty` | `number` | No | Repetition penalties. | | `stopSequences` | `string[]` | No | Sequences that stop generation. | | `seed` | `number` | No | Provider-supported deterministic seed. | | `maxRetries` | `number` | No | Maximum provider retries. | | `timeout` | `number` | No | Request timeout in milliseconds. | | `providerOptions` | `Record>` | No | Provider-specific options. | Generation inputs accept compatible signals. Schema and account selection are static. Model autocomplete follows the selected provider, but arbitrary string IDs remain valid for newly released models. ## Output Without a schema, `output` is `Signal`. With a schema, `output` is a signal of that Standard Schema's inferred output type. The result also exposes generated `text`, token `usage`, `finishReason`, `rawFinishReason`, `reasoningText`, `warnings`, provider metadata, and response metadata. ## Provider accounts Customer-managed API-key accounts are available for Anthropic, Cerebras, Cohere, DeepInfra, DeepSeek, Fireworks AI, Google Generative AI, Groq, Hugging Face, Mistral AI, OpenAI, OpenRouter, Perplexity, Together AI, Vercel AI Gateway, and xAI. Connect credentials with `bunx automate.ax accounts`, then import the provider helper and pass a named account reference. API keys don't appear in automation code or signals. ```ts automations/provider-models.automation.ts theme={null} import { automation, generate, markSignificant, onDashboardRun, transform, } from "automate.ax" import { anthropicAccount } from "automate.ax/anthropic" import { openaiAccount } from "automate.ax/openai" import { openRouterAccount } from "automate.ax/openrouter" export default automation("Compare providers", () => { onDashboardRun({ title: "Compare providers" }) const anthropic = generate({ account: anthropicAccount("writing"), prompt: "Write a two-sentence launch announcement for Automate.ax", }) const openai = generate({ account: openaiAccount("writing"), model: "gpt-4.1-mini", prompt: "Write a two-sentence launch announcement for Automate.ax", }) const openRouter = generate({ account: openRouterAccount("writing"), prompt: "Write a two-sentence launch announcement for Automate.ax", }) const comparison = transform( [anthropic.output, openai.output, openRouter.output], (anthropicOutput, openaiOutput, openRouterOutput) => ({ anthropic: anthropicOutput, openai: openaiOutput, openRouter: openRouterOutput, }), ) markSignificant(comparison) }) ``` An organization member starts all three requests from the dashboard. Their responses appear in the run's action outputs, and `markSignificant` keeps the completed run in the default Recent runs view. The providers can charge the three connected accounts for each run. Omitting `model` uses the selected account's default: | Account | Default model | | - | - | | Platform or Vercel AI Gateway | `openai/gpt-4.1-nano` | | Anthropic | `claude-haiku-4-5` | | Cerebras | `llama3.1-8b` | | Cohere | `command-a-03-2025` | | DeepInfra | `meta-llama/Llama-3.3-70B-Instruct-Turbo` | | DeepSeek | `deepseek-chat` | | Fireworks AI | `accounts/fireworks/models/llama-v3p3-70b-instruct` | | Google Generative AI | `gemini-2.5-flash` | | Groq | `llama-3.1-8b-instant` | | Hugging Face | `meta-llama/Llama-3.1-8B-Instruct` | | Mistral AI | `mistral-small-latest` | | OpenAI | `gpt-4.1-nano` | | OpenRouter | `openrouter/auto` | | Perplexity | `sonar` | | Together AI | `meta-llama/Llama-3.3-70B-Instruct-Turbo` | | xAI | `grok-latest` | # Generate images Source: https://docs.automate.ax/reference/actions/generate-image Generate or edit images with platform or provider credentials. `generateImage` creates images from text or edits source images with an optional mask. Omit `account` to use the platform Vercel AI Gateway credential. Platform generations run in the background, and the result signal emits after generation finishes. Their model cost counts toward the organization's monthly [Platform AI allowance](/concepts/platform-resources#platform-ai); customer-managed accounts don't use this allowance. The platform default is `bfl/flux-2-flex` and generates at most 16 images per action. Use a provider account for larger batches. If background generation exhausts its retries, the result signal fails with the provider error and prevents dependent actions from running. ## Generate an image ```ts automations/create-campaign-image.automation.ts theme={null} import { automation, generateImage, markSignificant, onDashboardRun, withPrerequisites, } from "automate.ax" export default automation("Create campaign image", () => { const run = onDashboardRun({ title: "Create campaign image" }) const result = withPrerequisites(run, () => generateImage({ aspectRatio: "16:9", prompt: "A paper-cut illustration of a solar-powered city at sunrise, no text", }), ) markSignificant(result.images[0]!) }) ``` An organization member starts generation from the dashboard. The first image appears in the action output, and `markSignificant` keeps the completed run in the default Recent runs view. Each run uses the organization's Platform AI allowance. ## Edit images Pass source images and an optional mask in the structured prompt. Each image or mask can be a `Blob`, base64 string, data URL, HTTP(S) URL, `Uint8Array`, or `ArrayBuffer`. `generateImage` normalizes these inputs, but the selected provider and model must support image editing and masks. `sourceImageBytes` and `maskBytes` can be byte signals returned by earlier actions. Mark the edited image so the completed run stays visible: ```ts theme={null} const edited = generateImage({ prompt: { images: [sourceImageBytes], mask: maskBytes, text: "Replace the masked background with a snowy mountain range", }, }) markSignificant(edited.images[0]!) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `prompt` | `string \| { images: DataContent[]; text?: string; mask?: DataContent }` | Yes | Text-to-image prompt or image editing/variation input. | | `model` | `GenerateImageModelId` | No | Gateway or provider-native image model ID. Available models and the default depend on `account`. | | `account` | Provider account reference | No | Customer-managed provider credentials. Omit for the platform gateway. | | `n` | `number` | No | Number of images to generate. Defaults to `1`. Platform AI accepts at most `16`. Provider accounts aren't subject to that platform limit. | | `size` | `` `${number}x${number}` `` | No | Requested pixel dimensions, such as `1024x1024`. Use this or `aspectRatio` according to the model. | | `aspectRatio` | `` `${number}:${number}` `` | No | Requested aspect ratio, such as `16:9`. Use this or `size` according to the model. | | `seed` | `number` | No | Provider-supported deterministic seed. | | `maxImagesPerCall` | `number` | No | Maximum images in each provider call. `generateImage` combines split calls into one result. | | `maxRetries` | `number` | No | Maximum retries for each provider call. Defaults to `2`. | | `providerOptions` | `Record>` | No | Provider-specific image options such as quality, background, output format, or moderation. | | `headers` | `Record` | No | Additional request headers for HTTP-based providers. | Generation inputs accept compatible signals. Account selection is static. Model autocomplete follows the selected provider, but arbitrary string IDs remain valid for newly released models. The inputs mirror the AI SDK `generateImage` surface. `generateImage` also accepts `Blob` source images and normalizes generated files to `Blob` values. It omits `abortSignal` because actions execute durably after planning, so an in-memory `AbortSignal` can't control the later provider call. ## Output `images` contains every generated image as a `Blob`. The first generated image is `images[0]`. Read its media type from `blob.type`, and use standard Blob methods such as `arrayBuffer()`, `bytes()`, or `text()` when you need the contents. `generateImage` also returns provider `warnings`, combined token `usage` when reported, `providerMetadata`, and a `responses` entry for each underlying provider call. Each response includes its start timestamp, model ID, and optional headers. ## Provider accounts Connect credentials with `bunx automate.ax accounts`, then pass a named account reference. API keys don't appear in automation code or signals. | Account | Default model | | - | - | | Platform or Vercel AI Gateway | `bfl/flux-2-flex` | | DeepInfra | `black-forest-labs/FLUX-1-schnell` | | Fireworks AI | `accounts/fireworks/models/flux-1-schnell-fp8` | | Google Generative AI | `imagen-4.0-fast-generate-001` | | OpenAI | `gpt-image-1-mini` | | Together AI | `black-forest-labs/FLUX.1-schnell-Free` | | xAI | `grok-imagine-image` | Pass a named provider account and mark the generated file: ```ts theme={null} import { generateImage, markSignificant } from "automate.ax" import { openaiAccount } from "automate.ax/openai" const productShot = generateImage({ account: openaiAccount("creative"), model: "gpt-image-2", prompt: "A studio product photo of a cobalt blue travel mug", providerOptions: { openai: { background: "transparent", quality: "high", }, }, }) markSignificant(productShot.images[0]!) ``` This uses the connected OpenAI account instead of the Platform AI allowance. The provider can charge that account for each generation. # Invoke an automation Source: https://docs.automate.ax/reference/actions/invoke-automation Send immediate or scheduled payloads to another automation. `invokeAutomation` sends a payload to another automation's active `onInvocation` entrypoint in the current project. ## Example ```ts automations/forward-order.automation.ts theme={null} import { automation, invokeAutomation, onInvocation } from "automate.ax" import processOrder from "./process-order.automation" interface OrderInvocation { orderId: string } export default automation("Forward order", () => { const order = onInvocation() invokeAutomation({ automation: processOrder, entrypoint: "process-order", payload: order, runIn: "3d", }) }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `automation` | `AutomationDescriptor \| string` | Yes | Target automation descriptor, description, or ID in the current project. | | `entrypoint` | `string` | No | Target `onInvocation` entrypoint. Defaults to `"default"`. Names beginning with `__$` are reserved. | | `payload` | `Encodable` | Yes | Value emitted by the target trigger. | | `runAt` | `Date \| string \| number` | No | Absolute delivery time. Numbers are epoch milliseconds. | | `runIn` | `string \| number` | No | Relative delay such as `"3d"`, or milliseconds. | String and signal targets resolve by exact automation ID first, then by description in the caller's project. Passing the value returned by `automation()` uses its description. Descriptions must be unique within the project. Every other input accepts a compatible signal. `runAt` and `runIn` are mutually exclusive. Omit both to invoke immediately. The target must have an active `onInvocation` trigger with the selected entrypoint. ## Output `invokeAutomation` returns a signal containing `{ id: string; runAt: Date }`. `id` identifies the accepted invocation, and `runAt` is its normalized delivery time. # Respond to HTTP request Source: https://docs.automate.ax/reference/actions/respond-to-http-request Complete a waiting onHttpRequest with a status, headers, and body. `respondToHttpRequest` sends a status, headers, and body to one exact `onHttpRequest` occurrence. Passing the request's ID makes the trigger wait automatically unless its `waitForResponse` option explicitly overrides that behavior. ## Example ```ts automations/http-response.automation.ts theme={null} import { automation, onHttpRequest, respondToHttpRequest } from "automate.ax" export default automation("Respond with JSON", () => { const request = onHttpRequest({ scope: "automation" }) respondToHttpRequest({ body: { accepted: true }, requestId: request.requestId, }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `body` | `string \| Blob \| JSON value \| null` | No | No body | Response payload. `respondToHttpRequest` serializes JSON values automatically. | | `headers` | `Record` | No | `{}` | Response headers. | | `requestId` | `string` | Yes | — | `request.requestId` from the HTTP request that should receive this response. | | `status` | `number` | No | `200` with a body or `204` without one | HTTP status from 100 through 599. | Unless you provide `content-type`, `respondToHttpRequest` uses `application/json` for JSON, `text/plain;charset=UTF-8` for strings, and the Blob's media type. A Blob without a media type uses `application/octet-stream`. Every input accepts a compatible signal. `respondToHttpRequest` returns `Signal`. `onHttpRequest` waits up to 55 seconds for a response with its request ID. If execution finishes without one, the caller receives `500`. If execution is still active after 55 seconds, the caller receives `504`, and the automation may keep running. An output addressed to another correlated HTTP request is ignored. # Scrape a web page Source: https://docs.automate.ax/reference/actions/scrape-web Render a URL or HTML document and return its content as Markdown. `scrapeWeb` opens one page in a managed browser and returns its content as Markdown. Automate.ax supplies the browser account, runs the scrape in the background, and counts Cloudflare's reported browser time against the organization's monthly [web scraping allowance](/concepts/platform-resources#count-web-scraping-usage). Use it when a normal HTTP request does not include content rendered by JavaScript, or when the page needs cookies, HTTP authentication, custom headers, injected scripts or styles, resource filtering, viewport settings, or an explicit wait. ## Scrape a page ```ts automations/scrape-product-page.automation.ts theme={null} import { automation, onDashboardRun, scrapeWeb, sendEmail, withPrerequisites, } from "automate.ax" export default automation("Scrape product page", () => { const run = onDashboardRun({ title: "Scrape product page" }) const page = withPrerequisites(run, () => scrapeWeb({ url: "https://example.com/products/launch", waitForSelector: { selector: "main", visible: true }, rejectResourceTypes: ["image", "media", "font"], }), ) sendEmail({ markdown: page, subject: "Latest product page", }) }) ``` The scrape starts after the dashboard run and the email waits for its Markdown result. A terminal browser failure fails the result signal and prevents dependent actions from running. ## Inputs Provide exactly one page source: | Input | Type | Description | | - | - | - | | `url` | `string` | Public or authenticated page URL to open. | | `html` | `string` | Inline HTML document to render instead of opening a URL. | The complete request may be up to 5 MiB after encoding. This limit mainly affects large inline HTML documents. The action accepts these Browser Run controls. Every input accepts a compatible signal. | Input | Type | Description | | - | - | - | | `setExtraHttpHeaders` | `Record` | Arbitrary page request headers. Header names and values pass through unchanged. | | `cookies` | `Cookie[]` | Browser cookies, including domain or URL, path, expiry, security, same-site, priority, partition, source scheme, and source port controls. | | `authenticate` | `{ username: string; password: string }` | HTTP authentication credentials. | | `userAgent` | `string` | Browser user agent. | | `addScriptTag` | `{ content?, id?, type?, url? }[]` | Scripts to inject before extraction. | | `addStyleTag` | `{ content?, url? }[]` | Styles to inject before extraction. | | `setJavaScriptEnabled` | `boolean` | Enable or disable page JavaScript. | | `viewport` | `{ width; height; deviceScaleFactor?; hasTouch?; isLandscape?; isMobile? }` | Browser viewport and device emulation. | | `emulateMediaType` | `string` | CSS media type such as `screen` or `print`. | | `gotoOptions` | `{ referer?; referrerPolicy?; timeout?; waitUntil? }` | Navigation timeout, referrer, policy, and lifecycle wait. `waitUntil` accepts one value or an array of `load`, `domcontentloaded`, `networkidle0`, and `networkidle2`. | | `waitForSelector` | `{ selector; timeout?; visible?: true; hidden?: true }` | Wait for an element state before extraction. Choose at most one of `visible` or `hidden`. | | `waitForTimeout` | `number` | Additional wait in milliseconds, up to 120 seconds. | | `actionTimeout` | `number` | Markdown extraction timeout after the page loads, up to 120 seconds. | | `allowRequestPattern` | `string[]` | Allow requests matching these URL patterns. | | `rejectRequestPattern` | `string[]` | Reject requests matching these URL patterns. | | `allowResourceTypes` | `ResourceType[]` | Allow only selected browser resource types. | | `rejectResourceTypes` | `ResourceType[]` | Reject selected browser resource types. | | `bestAttempt` | `boolean` | Return the best available result when optional browser steps fail. | `ResourceType` supports `document`, `stylesheet`, `image`, `media`, `font`, `script`, `texttrack`, `xhr`, `fetch`, `prefetch`, `eventsource`, `websocket`, `manifest`, `signedexchange`, `ping`, `cspviolationreport`, `preflight`, and `other`. See Cloudflare's [Browser Rendering Markdown API](https://developers.cloudflare.com/api/resources/browser_rendering/subresources/markdown/methods/create/) for provider behavior. Automate.ax validates the public camelCase fields and sends Cloudflare's exact wire names. ## Output `scrapeWeb` returns a `Signal` containing the rendered page as Markdown. Browser work runs outside the action sandbox. The starting action queues durable work, and a correlated completion emits the public result signal. Cloudflare's `X-Browser-Ms-Used` value is recorded for every provider response that includes it. Sub-millisecond values round up to a whole millisecond. Automate.ax disables Cloudflare's shared URL cache for this platform action so authenticated requests remain isolated between organizations. ## Use your own Cloudflare account Use `cloudflare.extractMarkdown` from `automate.ax/cloudflare` when you want to supply a connected Cloudflare account. It also exposes Cloudflare's `cacheTtl` control, charges that Cloudflare account directly, and does not consume the Automate.ax web scraping allowance. # Send organization email Source: https://docs.automate.ax/reference/actions/send-email Notify current organization members by email. `sendEmail` sends plain text, Markdown, or HTML to one member or every member of the project's organization. It can't address anyone outside that organization; use Gmail, Outlook, Resend, or Brevo for other recipients. ## Example ```ts automations/notify-organization.automation.ts theme={null} import { automation, onDashboardRun, sendEmail, t } from "automate.ax" export default automation("Notify the organization", () => { const run = onDashboardRun({ title: "Notify organization", fields: [ { name: "attachment", type: "file", label: "Attachment", }, { name: "message", type: "textarea", label: "Message", minLength: 1, }, ], }) sendEmail({ attachments: [run.data.attachment], markdown: t`## Dashboard notification ${run.data.message}`, subject: t`Notification from ${run.triggeredBy.name}`, }) }) ``` Only organization members can open this form. Each submission sends the message to every current member and counts each recipient against the Platform email allowance. ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `to` | `string \| "*"` | No | Current organization member's email. Defaults to `"*"` for all members. | | `replyTo` | `string \| { scope: "automation" \| "project"; plusPath?: string \| Signal }` | No | Address that receives replies, or a managed mailbox shared at the selected scope. | | `attachments` | `File[]` | No | Files attached to the message. | | `headers` | `Record` | No | Custom email headers. | | `subject` | `string` | Yes | Message subject. | | `text` | `string` | One body required | Plain-text body. | | `markdown` | `string` | One body required | Markdown body. Generates missing HTML and plain text. | | `html` | `string` | One body required | HTML body. Generates missing plain text. | Every input accepts a compatible signal. Provide at least one of `text`, `markdown`, or `html`. `sendEmail` preserves supplied plain-text and HTML bodies. Markdown generates either missing alternative. Otherwise, HTML generates plain text, and plain text generates HTML. Attachments preserve each `File`'s name and media type. The complete email, including attachments after Base64 encoding, must be no larger than 40 MB. The scoped `replyTo` form resolves to the matching [`onMailhook` address](/reference/triggers/on-mailhook). Its `scope` is static, while `plusPath` can be a string or signal. The path appends an email plus-addressing suffix, which the mailhook event receives as `plusPath`. It must contain valid email local-part characters, and the complete local part before `@` must fit the 64-byte email limit. Omit `replyTo` to omit the `Reply-To` header. ## Thread replies Use custom headers to reply to an [`onMailhook` message](/reference/triggers/on-mailhook) in its existing thread. Set `In-Reply-To` to the received message's `messageId`. Build `References` from its `references`, or its `inReplyTo` when `references` is empty, followed by its `messageId`. ```ts theme={null} const replyHeaders = reply.transform( ({ inReplyTo, messageId, references }) => ({ "In-Reply-To": messageId, References: [ ...references, ...(references.length === 0 && inReplyTo !== null ? [inReplyTo] : []), messageId, ].join(" "), }), ) sendEmail({ headers: replyHeaders, subject: t`Re: ${reply.subject}`, text: "Thanks for your reply.", }) ``` Do not use the `id` returned by `sendEmail` as a threading target. It is Resend's internal email resource ID, not the RFC 5322 Message-ID delivered with the email. Mailhook `messageId`, `inReplyTo`, and `references` contain the on-the-wire IDs needed to reply. Mailhook `inReplyTo` identifies the received message's parent; it is not the received message's own ID. `to` must be a current member's address. Omit it to notify all current members. Platform email uses the organization's monthly [Platform email allowance](/concepts/platform-resources#platform-email). Each recipient counts as one send. `sendEmail` adds immutable `Auto-Submitted: auto-generated` and authenticated automation-origin headers. `Auto-Submitted` prevents automatic replies from compliant mail systems. Gmail triggers with the same origin don't wake the sending automation, but other automations watching that mailbox still receive the event. ## Output `sendEmail` returns `{ id: string | null }`. `id` is Resend's internal email resource ID when available. It is not an RFC 5322 Message-ID and is not a valid `In-Reply-To` or `References` value. # Archive item Source: https://docs.automate.ax/reference/integrations/1password/actions/archive-item Moves an item into its vault archive. `onePassword.archiveItem` moves an item into its vault archive. This action requires a service-account connection. ## Example ```ts automations/onepassword-archive-item.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("Archive item", () => { onSchedule({ schedule: "0 * * * *" }) onePassword.archiveItem({ itemId: "item-id", vaultId: "vault-id" }) }) ``` ## Inputs Provide `itemId` and `vaultId`. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns an empty object after 1Password archives the item. # Attach item file Source: https://docs.automate.ax/reference/integrations/1password/actions/attach-item-file Attaches binary content to a file field on an existing item. `onePassword.attachItemFile` attaches binary content to a file field on an existing item. This action requires a service-account connection. ## Example ```ts automations/onepassword-attach-item-file.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("Attach item file", () => { onSchedule({ schedule: "0 * * * *" }) const item = onePassword.getItem({ itemId: "item-id", vaultId: "vault-id", }) onePassword.attachItemFile({ item, file: { content: new Uint8Array([1, 2, 3]), fieldId: "field-id", name: "document.pdf", sectionId: "section-id", }, }) }) ``` ## Inputs Provide the complete decrypted `item` and a `file` with `Uint8Array` content, name, section ID, and field ID. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns the updated decrypted item. The output is sensitive. # Create item Source: https://docs.automate.ax/reference/integrations/1password/actions/create-item Creates an item in a vault available to the service account. `onePassword.createItem` creates an item in a vault available to the service account. This action requires a service-account connection. ## Example ```ts automations/onepassword-create-item.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { ItemCategory, onePassword } from "automate.ax/onepassword" export default automation("Create item", () => { onSchedule({ schedule: "0 * * * *" }) onePassword.createItem({ item: { category: ItemCategory.Login, title: "Production login", vaultId: "vault-id", }, }) }) ``` ## Inputs `item` accepts the official SDK item-create shape, including fields, sections, websites, tags, files, or a Document payload. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns the decrypted created item. The output is sensitive. # Create item share Source: https://docs.automate.ax/reference/integrations/1password/actions/create-item-share Creates a policy-compliant item sharing link. `onePassword.createItemShare` creates a policy-compliant item sharing link. This action requires a service-account connection. ## Example ```ts automations/onepassword-create-item-share.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("Create item share", () => { onSchedule({ schedule: "0 * * * *" }) const ids = { itemId: "item-id", vaultId: "vault-id" } const item = onePassword.getItem(ids) const policy = onePassword.getItemSharePolicy(ids) onePassword.createItemShare({ item, policy, parameters: { oneTimeOnly: true }, }) }) ``` ## Inputs Provide a decrypted `item`, the result of `getItemSharePolicy`, and sharing parameters. Parameters can set expiry, recipients, and one-time access. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns the sharing URL. The output is sensitive. # Create items Source: https://docs.automate.ax/reference/integrations/1password/actions/create-items Creates several items in one vault with independent results. `onePassword.createItems` creates several items in one vault with independent results. This action requires a service-account connection. ## Example ```ts automations/onepassword-create-items.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { ItemCategory, onePassword } from "automate.ax/onepassword" export default automation("Create items", () => { onSchedule({ schedule: "0 * * * *" }) onePassword.createItems({ vaultId: "vault-id", items: [ { category: ItemCategory.Login, title: "Production login", vaultId: "vault-id", }, ], }) }) ``` ## Inputs Provide one `vaultId` and one or more SDK item-create values whose `vaultId` fields match it. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns a response for each item. Successful decrypted items are sensitive. # Create vault Source: https://docs.automate.ax/reference/integrations/1password/actions/create-vault Creates a vault owned by the connected service account. `onePassword.createVault` creates a vault owned by the connected service account. This action requires a service-account connection. ## Example ```ts automations/onepassword-create-vault.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("Create vault", () => { onSchedule({ schedule: "0 * * * *" }) onePassword.createVault({ vault: { title: "Automation secrets", description: "Managed by Automate.ax", }, }) }) ``` ## Inputs `vault` requires a title and can include a description and `allowAdminsAccess`. The service account must have its immutable create-vault permission. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns the created vault. Vault metadata is sensitive. # Delete item Source: https://docs.automate.ax/reference/integrations/1password/actions/delete-item Permanently deletes one item. `onePassword.deleteItem` permanently deletes one item. This action requires a service-account connection. ## Example ```ts automations/onepassword-delete-item.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("Delete item", () => { onSchedule({ schedule: "0 * * * *" }) onePassword.deleteItem({ itemId: "item-id", vaultId: "vault-id" }) }) ``` ## Inputs Provide `itemId` and `vaultId`. This operation is permanent. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns an empty object after deletion. # Delete item file Source: https://docs.automate.ax/reference/integrations/1password/actions/delete-item-file Deletes one file field from an item. `onePassword.deleteItemFile` deletes one file field from an item. This action requires a service-account connection. ## Example ```ts automations/onepassword-delete-item-file.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("Delete item file", () => { onSchedule({ schedule: "0 * * * *" }) const item = onePassword.getItem({ itemId: "item-id", vaultId: "vault-id", }) onePassword.deleteItemFile({ item, sectionId: "section-id", fieldId: "field-id", }) }) ``` ## Inputs Provide the complete decrypted `item` plus its section and file field IDs. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns the updated decrypted item. The output is sensitive. # Delete items Source: https://docs.automate.ax/reference/integrations/1password/actions/delete-items Permanently deletes several items within one vault. `onePassword.deleteItems` permanently deletes several items within one vault. This action requires a service-account connection. ## Example ```ts automations/onepassword-delete-items.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("Delete items", () => { onSchedule({ schedule: "0 * * * *" }) onePassword.deleteItems({ itemIds: ["item-1", "item-2"], vaultId: "vault-id", }) }) ``` ## Inputs Provide one or more `itemIds` and their common `vaultId`. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns one success or provider error result per item ID. # Delete vault Source: https://docs.automate.ax/reference/integrations/1password/actions/delete-vault Permanently deletes a service-account-owned vault. `onePassword.deleteVault` permanently deletes a service-account-owned vault. This action requires a service-account connection. ## Example ```ts automations/onepassword-delete-vault.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("Delete vault", () => { onSchedule({ schedule: "0 * * * *" }) onePassword.deleteVault({ vaultId: "vault-id" }) }) ``` ## Inputs Provide `vaultId`. 1Password limits deletion to vaults created by the service account. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns an empty object after deletion. # Generate password Source: https://docs.automate.ax/reference/integrations/1password/actions/generate-password Generates a memorable password, PIN, or random password locally. `onePassword.generatePassword` generates a memorable password, PIN, or random password locally. ## Example ```ts automations/onepassword-generate-password.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("Generate password", () => { onSchedule({ schedule: "0 * * * *" }) onePassword.generatePassword({ recipe: { type: "Pin", parameters: { length: 8 } }, }) }) ``` ## Inputs `recipe` uses the official SDK discriminated union for `Memorable`, `Pin`, or `Random` generation. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns `{ password }`. The output is sensitive. This action does not use an integration account. # Get environment variables Source: https://docs.automate.ax/reference/integrations/1password/actions/get-environment-variables Reads every variable assigned from a 1Password Environment. `onePassword.getEnvironmentVariables` reads every variable assigned from a 1Password Environment. This action requires a service-account connection. ## Example ```ts automations/onepassword-get-environment-variables.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("Get environment variables", () => { onSchedule({ schedule: "0 * * * *" }) onePassword.getEnvironmentVariables({ environmentId: "environment-id" }) }) ``` ## Inputs Provide the Environment ID. It must have been assigned when the immutable service account was created. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns `{ variables }` with each name, value, and masked flag. The output is sensitive. # Get group Source: https://docs.automate.ax/reference/integrations/1password/actions/get-group Retrieves a group and optionally its vault access entries. `onePassword.getGroup` retrieves a group and optionally its vault access entries. This action requires a service-account connection. ## Example ```ts automations/onepassword-get-group.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("Get group", () => { onSchedule({ schedule: "0 * * * *" }) onePassword.getGroup({ groupId: "group-id", parameters: { vaultPermissions: true }, }) }) ``` ## Inputs Provide `groupId`. Set `parameters.vaultPermissions` to include vault access. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns the group. Group metadata is sensitive. # Get item Source: https://docs.automate.ax/reference/integrations/1password/actions/get-item Retrieves one decrypted item. `onePassword.getItem` retrieves one decrypted item. This action requires a service-account connection. ## Example ```ts automations/onepassword-get-item.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("Get item", () => { onSchedule({ schedule: "0 * * * *" }) onePassword.getItem({ itemId: "item-id", vaultId: "vault-id" }) }) ``` ## Inputs Provide `itemId` and `vaultId`. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns the complete decrypted item. The output is sensitive. # Get item share policy Source: https://docs.automate.ax/reference/integrations/1password/actions/get-item-share-policy Retrieves the account policy governing sharing for one item. `onePassword.getItemSharePolicy` retrieves the account policy governing sharing for one item. This action requires a service-account connection. ## Example ```ts automations/onepassword-get-item-share-policy.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("Get item share policy", () => { onSchedule({ schedule: "0 * * * *" }) onePassword.getItemSharePolicy({ itemId: "item-id", vaultId: "vault-id" }) }) ``` ## Inputs Provide `itemId` and `vaultId`. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns allowed sharing types, recipient types, expiry limits, view limits, and file policy. # Get items Source: https://docs.automate.ax/reference/integrations/1password/actions/get-items Retrieves several decrypted items from one vault. `onePassword.getItems` retrieves several decrypted items from one vault. This action requires a service-account connection. ## Example ```ts automations/onepassword-get-items.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("Get items", () => { onSchedule({ schedule: "0 * * * *" }) onePassword.getItems({ itemIds: ["item-1", "item-2"], vaultId: "vault-id" }) }) ``` ## Inputs Provide one or more `itemIds` and their common `vaultId`. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns one item or provider error result per ID. Decrypted values are sensitive. # Get vault Source: https://docs.automate.ax/reference/integrations/1password/actions/get-vault Retrieves detailed vault metadata and optional access entries. `onePassword.getVault` retrieves detailed vault metadata and optional access entries. This action requires a service-account connection. ## Example ```ts automations/onepassword-get-vault.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("Get vault", () => { onSchedule({ schedule: "0 * * * *" }) onePassword.getVault({ vaultId: "vault-id", parameters: { accessors: true } }) }) ``` ## Inputs Provide `vaultId`. Set `parameters.accessors` to include vault access entries. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns the detailed vault. The output is sensitive. # Get vault overview Source: https://docs.automate.ax/reference/integrations/1password/actions/get-vault-overview Retrieves presentation and version metadata for one vault. `onePassword.getVaultOverview` retrieves presentation and version metadata for one vault. This action requires a service-account connection. ## Example ```ts automations/onepassword-get-vault-overview.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("Get vault overview", () => { onSchedule({ schedule: "0 * * * *" }) onePassword.getVaultOverview({ vaultId: "vault-id" }) }) ``` ## Inputs Provide `vaultId`. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns the vault overview, including timestamps and item count. The output is sensitive. # Grant vault group permissions Source: https://docs.automate.ax/reference/integrations/1password/actions/grant-vault-group-permissions Grants permission values to groups on one owned vault. `onePassword.grantVaultGroupPermissions` grants permission values to groups on one owned vault. This action requires a service-account connection. ## Example ```ts automations/onepassword-grant-vault-group-permissions.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("Grant vault group permissions", () => { onSchedule({ schedule: "0 * * * *" }) onePassword.grantVaultGroupPermissions({ vaultId: "vault-id", groupPermissions: [{ groupId: "group-id", permissions: 1 }], }) }) ``` ## Inputs Provide `vaultId` and one or more complete `{ groupId, permissions }` entries. 1Password limits permission management to service-account-created vaults. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns an empty object after the grants are applied. # Introspect Events API Source: https://docs.automate.ax/reference/integrations/1password/actions/introspect-events-api Retrieves the connected Events Reporting integration and enabled feeds. `onePassword.introspectEventsApi` retrieves the connected Events Reporting integration and enabled feeds. This action requires an Events API token connection. ## Example ```ts automations/onepassword-introspect-events-api.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("Introspect Events API", () => { onSchedule({ schedule: "0 * * * *" }) onePassword.introspectEventsApi() }) ``` ## Inputs This action has no input. Select an Events API connection with the optional account argument. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns the integration UUID, account UUID, issue date, and enabled event features. # List audit events Source: https://docs.automate.ax/reference/integrations/1password/actions/list-audit-events Retrieves one cursor page of account audit activity. `onePassword.listAuditEvents` retrieves one cursor page of account audit activity. This action requires an Events API token connection. ## Example ```ts automations/onepassword-list-audit-events.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("List audit events", () => { onSchedule({ schedule: "0 * * * *" }) onePassword.listAuditEvents({ startTime: new Date("2026-08-24T00:00:00Z"), limit: 100, }) }) ``` ## Inputs Start a reset query with optional `startTime`, `endTime`, and `limit` up to 1,000, or continue with `{ cursor }`. Do not combine a cursor with reset fields. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns `{ items, cursor, hasMore }`. Actor, object, session, location, and activity data is sensitive. # List item usages Source: https://docs.automate.ax/reference/integrations/1password/actions/list-item-usages Retrieves one cursor page of item access and usage events. `onePassword.listItemUsages` retrieves one cursor page of item access and usage events. This action requires an Events API token connection. ## Example ```ts automations/onepassword-list-item-usages.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("List item usages", () => { onSchedule({ schedule: "0 * * * *" }) onePassword.listItemUsages({ cursor: "continuation-cursor" }) }) ``` ## Inputs Start a reset query with optional time bounds and limit, or continue with `{ cursor }`. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns `{ items, cursor, hasMore }`. User, item, client, and location data is sensitive. # List items Source: https://docs.automate.ax/reference/integrations/1password/actions/list-items Lists active or archived item overviews in one vault. `onePassword.listItems` lists active or archived item overviews in one vault. This action requires a service-account connection. ## Example ```ts automations/onepassword-list-items.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("List items", () => { onSchedule({ schedule: "0 * * * *" }) onePassword.listItems({ vaultId: "vault-id", filters: [{ type: "ByState", content: { active: true, archived: false } }], }) }) ``` ## Inputs Provide `vaultId`. Optional state filters select active and archived items. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns item overviews. Titles, tags, and websites are sensitive. # List sign-in attempts Source: https://docs.automate.ax/reference/integrations/1password/actions/list-sign-in-attempts Retrieves one cursor page of successful and failed sign-ins. `onePassword.listSignInAttempts` retrieves one cursor page of successful and failed sign-ins. This action requires an Events API token connection. ## Example ```ts automations/onepassword-list-sign-in-attempts.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("List sign-in attempts", () => { onSchedule({ schedule: "0 * * * *" }) onePassword.listSignInAttempts({ startTime: new Date("2026-08-24T00:00:00Z"), }) }) ``` ## Inputs Start a reset query with optional time bounds and limit, or continue with `{ cursor }`. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns `{ items, cursor, hasMore }`. User, client, location, and sign-in details are sensitive. # List vaults Source: https://docs.automate.ax/reference/integrations/1password/actions/list-vaults Lists vaults available to the service account. `onePassword.listVaults` lists vaults available to the service account. This action requires a service-account connection. ## Example ```ts automations/onepassword-list-vaults.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("List vaults", () => { onSchedule({ schedule: "0 * * * *" }) onePassword.listVaults({ decryptDetails: true }) }) ``` ## Inputs Set `decryptDetails` when the list should include decrypted presentation details. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns vault overviews. The output is sensitive. # Read item file Source: https://docs.automate.ax/reference/integrations/1password/actions/read-item-file Reads binary content from a file attached to an item. `onePassword.readItemFile` reads binary content from a file attached to an item. This action requires a service-account connection. ## Example ```ts automations/onepassword-read-item-file.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("Read item file", () => { onSchedule({ schedule: "0 * * * *" }) onePassword.readItemFile({ vaultId: "vault-id", itemId: "item-id", file: { id: "file-id", name: "secret.pdf", size: 1024 }, }) }) ``` ## Inputs Provide the vault and item IDs plus file attributes returned by a decrypted item. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns a `Uint8Array` containing the file. The output is sensitive. # Replace document Source: https://docs.automate.ax/reference/integrations/1password/actions/replace-document Replaces the binary document on a Document-category item. `onePassword.replaceDocument` replaces the binary document on a Document-category item. This action requires a service-account connection. ## Example ```ts automations/onepassword-replace-document.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("Replace document", () => { onSchedule({ schedule: "0 * * * *" }) const item = onePassword.getItem({ itemId: "item-id", vaultId: "vault-id", }) onePassword.replaceDocument({ item, document: { name: "replacement.pdf", content: new Uint8Array([1, 2, 3]), }, }) }) ``` ## Inputs Provide the complete decrypted Document `item` and replacement name and `Uint8Array` content. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns the updated decrypted item. The output is sensitive. # Resolve secret Source: https://docs.automate.ax/reference/integrations/1password/actions/resolve-secret Resolves one secret reference URI. `onePassword.resolveSecret` resolves one secret reference URI. This action requires a service-account connection. ## Example ```ts automations/onepassword-resolve-secret.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("Resolve secret", () => { onSchedule({ schedule: "0 * * * *" }) onePassword.resolveSecret({ secretReference: "op://vault/item/field" }) }) ``` ## Inputs `secretReference` must begin with `op://` and identify a vault, item, and field. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns the resolved string. The output is sensitive. # Resolve secrets Source: https://docs.automate.ax/reference/integrations/1password/actions/resolve-secrets Resolves several secret references independently. `onePassword.resolveSecrets` resolves several secret references independently. This action requires a service-account connection. ## Example ```ts automations/onepassword-resolve-secrets.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("Resolve secrets", () => { onSchedule({ schedule: "0 * * * *" }) onePassword.resolveSecrets({ secretReferences: ["op://vault/item/username", "op://vault/item/password"], }) }) ``` ## Inputs Provide one or more `op://` references. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns a result for each reference, including item and vault IDs on success. The output is sensitive. # Revoke vault group permissions Source: https://docs.automate.ax/reference/integrations/1password/actions/revoke-vault-group-permissions Removes one group's access to a service-account-owned vault. `onePassword.revokeVaultGroupPermissions` removes one group's access to a service-account-owned vault. This action requires a service-account connection. ## Example ```ts automations/onepassword-revoke-vault-group-permissions.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("Revoke vault group permissions", () => { onSchedule({ schedule: "0 * * * *" }) onePassword.revokeVaultGroupPermissions({ vaultId: "vault-id", groupId: "group-id", }) }) ``` ## Inputs Provide `vaultId` and `groupId`. 1Password limits permission management to service-account-created vaults. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns an empty object after revocation. # Update item Source: https://docs.automate.ax/reference/integrations/1password/actions/update-item Replaces an existing item using its current version. `onePassword.updateItem` replaces an existing item using its current version. This action requires a service-account connection. ## Example ```ts automations/onepassword-update-item.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("Update item", () => { onSchedule({ schedule: "0 * * * *" }) const item = onePassword.getItem({ itemId: "item-id", vaultId: "vault-id", }) onePassword.updateItem({ item }) }) ``` ## Inputs Provide the complete decrypted item returned by 1Password, including its current `version`. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns the updated decrypted item. The output is sensitive. # Update vault Source: https://docs.automate.ax/reference/integrations/1password/actions/update-vault Updates a vault title or description. `onePassword.updateVault` updates a vault title or description. This action requires a service-account connection. ## Example ```ts automations/onepassword-update-vault.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("Update vault", () => { onSchedule({ schedule: "0 * * * *" }) onePassword.updateVault({ vaultId: "vault-id", update: { description: "Rotated production secrets" }, }) }) ``` ## Inputs Provide `vaultId` plus at least one of `update.title` or `update.description`. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns the updated vault. The output is sensitive. # Update vault group permissions Source: https://docs.automate.ax/reference/integrations/1password/actions/update-vault-group-permissions Replaces complete group permission sets across owned vaults. `onePassword.updateVaultGroupPermissions` replaces complete group permission sets across owned vaults. This action requires a service-account connection. ## Example ```ts automations/onepassword-update-vault-group-permissions.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("Update vault group permissions", () => { onSchedule({ schedule: "0 * * * *" }) onePassword.updateVaultGroupPermissions({ groupPermissions: [ { vaultId: "vault-id", groupId: "group-id", permissions: 1 }, ], }) }) ``` ## Inputs Provide one or more complete `{ vaultId, groupId, permissions }` entries. 1Password limits permission management to service-account-created vaults. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns an empty object after replacement. # Validate item share recipients Source: https://docs.automate.ax/reference/integrations/1password/actions/validate-item-share-recipients Validates recipient emails or domains against an item sharing policy. `onePassword.validateItemShareRecipients` validates recipient emails or domains against an item sharing policy. This action requires a service-account connection. ## Example ```ts automations/onepassword-validate-item-share-recipients.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("Validate item share recipients", () => { onSchedule({ schedule: "0 * * * *" }) const policy = onePassword.getItemSharePolicy({ itemId: "item-id", vaultId: "vault-id", }) onePassword.validateItemShareRecipients({ policy, recipients: ["recipient@example.com"], }) }) ``` ## Inputs Provide the result of `getItemSharePolicy` and one or more recipient strings. Every input accepts a compatible signal. Account-backed actions accept an optional second argument `{ account }` to select a named binding. ## Output Returns normalized valid email or domain recipients. Recipient identities are sensitive. # 1Password Source: https://docs.automate.ax/reference/integrations/1password/index Connect service accounts and Events Reporting tokens to typed 1Password actions. ```ts automations/read-production-secret.automation.ts theme={null} import { automation, markSignificant, onSchedule } from "automate.ax" import { onePassword } from "automate.ax/onepassword" export default automation("Read a rotating secret", () => { onSchedule({ schedule: "0 * * * *" }) const secret = onePassword.resolveSecret({ secretReference: "op://Production/API/password", }) markSignificant(secret) }) ``` ## Choose a 1Password connection Use a **service account** for secret references, items, files, sharing, vaults, groups, and Environments. Create it in 1Password with only the required vault permissions. Service-account permissions and Environment assignments are immutable. Built-in personal, private, employee, and default shared vaults are unavailable. Vault deletion and group-permission changes work only on vaults created by that service account. Use an **Events API token** for audit events, item usages, and sign-in attempts. Choose the regional origin shown by 1Password: `events.1password.com`, `events.1password.ca`, `events.1password.eu`, or `events.ent.1password.com`. Automate.ax rejects other origins. Create named bindings with `onePasswordAccount("name")` or pass `{ account: "name" }` as an action's second argument. `generatePassword` runs locally and needs no account. ## Use secrets in a custom integration Use `resolveSecret` to supply credentials when you [call an unsupported API](/guides/call-an-external-api#protect-credentials-and-validate-responses). Store each restricted provider credential in a vault available to the connected service account, then pass the sensitive result signal directly to the custom action that needs it. ## Poll Events Reporting 1Password Events Reporting provides cursor-based pull APIs, not webhooks. Use the list actions from a scheduled automation. Begin with optional time bounds and a limit, then persist and pass the returned cursor to continue. The integration does not expose event triggers. ## 1Password results stay sensitive Resolved secrets, decrypted items, files, generated passwords, Environment variables, share links, recipient identities, vault and group metadata, and event activity are declared sensitive at their action boundaries. See 1Password's [service-account setup](https://www.1password.dev/service-accounts/get-started), [SDK documentation](https://www.1password.dev/sdks/), and [Events API setup](https://www.1password.dev/events-api/get-started). ## Exports ```ts theme={null} import { onePassword, onePasswordAccount, getOnePasswordClient, getOnePasswordEventsApi, } from "automate.ax/onepassword" ``` * `onePassword` contains the packaged 1Password actions. * `onePasswordAccount("name")` selects a named 1Password connection. * `getOnePasswordClient` creates the authenticated 1Password service-account client for a custom account-backed action. * `getOnePasswordEventsApi` creates the authenticated 1Password Events Reporting API helper for a custom account-backed action. ## Actions * [Archive item](/reference/integrations/1password/actions/archive-item) * [Attach item file](/reference/integrations/1password/actions/attach-item-file) * [Create item](/reference/integrations/1password/actions/create-item) * [Create items](/reference/integrations/1password/actions/create-items) * [Create item share](/reference/integrations/1password/actions/create-item-share) * [Create vault](/reference/integrations/1password/actions/create-vault) * [Delete item](/reference/integrations/1password/actions/delete-item) * [Delete item file](/reference/integrations/1password/actions/delete-item-file) * [Delete items](/reference/integrations/1password/actions/delete-items) * [Delete vault](/reference/integrations/1password/actions/delete-vault) * [Generate password](/reference/integrations/1password/actions/generate-password) * [Get environment variables](/reference/integrations/1password/actions/get-environment-variables) * [Get group](/reference/integrations/1password/actions/get-group) * [Get item](/reference/integrations/1password/actions/get-item) * [Get items](/reference/integrations/1password/actions/get-items) * [Get item share policy](/reference/integrations/1password/actions/get-item-share-policy) * [Get vault](/reference/integrations/1password/actions/get-vault) * [Get vault overview](/reference/integrations/1password/actions/get-vault-overview) * [Grant vault group permissions](/reference/integrations/1password/actions/grant-vault-group-permissions) * [Introspect Events API](/reference/integrations/1password/actions/introspect-events-api) * [List audit events](/reference/integrations/1password/actions/list-audit-events) * [List items](/reference/integrations/1password/actions/list-items) * [List item usages](/reference/integrations/1password/actions/list-item-usages) * [List sign-in attempts](/reference/integrations/1password/actions/list-sign-in-attempts) * [List vaults](/reference/integrations/1password/actions/list-vaults) * [Read item file](/reference/integrations/1password/actions/read-item-file) * [Replace document](/reference/integrations/1password/actions/replace-document) * [Resolve secret](/reference/integrations/1password/actions/resolve-secret) * [Resolve secrets](/reference/integrations/1password/actions/resolve-secrets) * [Revoke vault group permissions](/reference/integrations/1password/actions/revoke-vault-group-permissions) * [Update item](/reference/integrations/1password/actions/update-item) * [Update vault](/reference/integrations/1password/actions/update-vault) * [Update vault group permissions](/reference/integrations/1password/actions/update-vault-group-permissions) * [Validate item share recipients](/reference/integrations/1password/actions/validate-item-share-recipients) # Create base Source: https://docs.automate.ax/reference/integrations/airtable/actions/create-base Create an Airtable base with its initial tables and fields. `airtable.createBase` creates a base in a workspace. Use it when an automation owns the initial structure. ```ts automations/create-client-base.automation.ts theme={null} import { automation } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("Create client base", () => { airtable.createBase({ name: "Client CRM", workspaceId: "wsp123", tables: [ { name: "Contacts", fields: [{ name: "Name", type: "singleLineText" }] }, ], }) }) ``` Inputs: `name`, `workspaceId`, and a non-empty `tables` array are required. Every table needs a name and at least one field; its first field becomes the primary field. Field `description` and provider-documented `options` are optional. The account needs `schema.bases:write` and workspace creator access. Returns `{ id, tables }` with stable table, field, and default-view IDs. Airtable rejects unsupported primary-field types and duplicate field names. # Create field Source: https://docs.automate.ax/reference/integrations/airtable/actions/create-field Create a field in an Airtable table. `airtable.createField` adds one field using Airtable's field type and options. ```ts automations/add-stage-field.automation.ts theme={null} import { automation } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("Add stage field", () => { airtable.createField({ baseId: "app123", tableId: "tbl123", name: "Stage", type: "singleSelect", options: { choices: [{ name: "New" }, { name: "Won" }] }, }) }) ``` `baseId`, stable `tableId`, `name`, and provider field `type` are required. `description` and type-specific `options` are optional unless Airtable requires them for that type. Returns the created field. Requires `schema.bases:write` and base creator access. # Create record Source: https://docs.automate.ax/reference/integrations/airtable/actions/create-record Create an Airtable record. `airtable.createRecord` creates a record and returns Airtable's stored value, including the provider-assigned ID. ## Example ```ts automations/create-airtable-record.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("Create an Airtable task", () => { onDashboardRun({ title: "Create an Airtable task" }) airtable.createRecord({ baseId: "appOperations", table: "Tasks", fields: { Name: "Review report", Priority: "High" }, typecast: true, }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `baseId` | `string` | Yes | None | Stable Airtable base ID. | | `table` | `string` | Yes | None | Table name or stable ID. | | `fields` | `Record` | Yes | None | Values keyed by field name or ID. | | `typecast` | `boolean` | No | `false` | Ask Airtable to coerce strings to destination field types. | | `returnFieldsByFieldId` | `boolean` | No | `false` | Key returned fields by stable ID instead of name. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"airtable">` | No | Project default | Connected Airtable account. | ## Output Returns the created record with `id`, `createdTime`, and `fields`. Unknown fields, invalid values, and insufficient table permissions fail with Airtable's provider error. `typecast` enables Airtable's normal coercion but can't make an incompatible value valid. # Create record comment Source: https://docs.automate.ax/reference/integrations/airtable/actions/create-record-comment Create a comment or reply on an Airtable record. `airtable.createRecordComment` creates a top-level comment or threaded reply. ```ts automations/comment-on-airtable-record.automation.ts theme={null} import { automation } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("Comment on Airtable record", () => { airtable.createRecordComment({ baseId: "app123", table: "Contacts", recordId: "rec123", text: "Ready for review", }) }) ``` `baseId`, `table`, `recordId`, and `text` are required. `parentCommentId` creates a reply. Airtable mentions use `@[userId]` in `text`. Returns the created comment. Requires `data.recordComments:write` and commenter access. # Create records Source: https://docs.automate.ax/reference/integrations/airtable/actions/create-records Create records in Airtable's 10-record batches. `airtable.createRecords` creates records in one table, using Airtable's 10-record API batches. It returns every record in batch order. ## Example ```ts automations/import-airtable-records.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("Import Airtable leads", () => { onDashboardRun({ title: "Import Airtable leads" }) airtable.createRecords({ baseId: "appCRM", table: "Leads", records: [ { fields: { Name: "Ada", Status: "New" } }, { fields: { Name: "Grace", Status: "Qualified" } }, ], }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `baseId` | `string` | Yes | None | Stable Airtable base ID. | | `table` | `string` | Yes | None | Table name or stable ID. | | `records` | `{ fields: Record }[]` | Yes | None | One or more records to create. | | `typecast` | `boolean` | No | `false` | Ask Airtable to coerce string values. | | `returnFieldsByFieldId` | `boolean` | No | `false` | Key returned fields by stable IDs. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"airtable">` | No | Project default | Connected Airtable account. | ## Output Returns `AirtableRecord[]`. Each item contains `id`, `createdTime`, and `fields`. > [!NOTE] > > Batches are separate provider requests. If a later batch fails, Airtable does > not roll back records created by earlier batches. # Create table Source: https://docs.automate.ax/reference/integrations/airtable/actions/create-table Create a table and its initial fields in an Airtable base. `airtable.createTable` creates one table and its default grid view. ```ts automations/add-orders-table.automation.ts theme={null} import { automation } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("Add orders table", () => { airtable.createTable({ baseId: "app123", name: "Orders", fields: [{ name: "Order", type: "singleLineText" }], }) }) ``` `baseId`, `name`, and a non-empty `fields` array are required. `description` and each field's `description` and provider-documented `options` are optional. The first field becomes primary. Returns the created table schema. Requires `schema.bases:write` and base creator access. # Delete record Source: https://docs.automate.ax/reference/integrations/airtable/actions/delete-record Permanently delete an Airtable record by ID. `airtable.deleteRecord` permanently removes a record and returns Airtable's deletion receipt. ## Example ```ts automations/delete-airtable-record.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("Delete an Airtable record", () => { onDashboardRun({ title: "Delete an Airtable record" }) airtable.deleteRecord({ baseId: "appCRM", table: "Leads", recordId: "rec123", }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `baseId` | `string` | Yes | None | Stable Airtable base ID. | | `table` | `string` | Yes | None | Table name or stable ID. | | `recordId` | `string` | Yes | None | Stable ID of the record to delete. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"airtable">` | No | Project default | Connected Airtable account. | ## Output Returns `{ deleted: true; id: string }`, where `id` is the deleted record ID. > [!WARNING] > > Deleting an Airtable record is permanent. # Delete record comment Source: https://docs.automate.ax/reference/integrations/airtable/actions/delete-record-comment Delete a caller-owned Airtable record comment. `airtable.deleteRecordComment` permanently deletes one record comment. ```ts automations/delete-airtable-comment.automation.ts theme={null} import { automation } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("Delete Airtable comment", () => { airtable.deleteRecordComment({ baseId: "app123", table: "Contacts", recordId: "rec123", commentId: "com123", }) }) ``` `baseId`, `table`, `recordId`, and `commentId` are required. Returns `{ id, deleted: true }`. Non-admin API users can delete only comments they created. Requires `data.recordComments:write`. # Delete records Source: https://docs.automate.ax/reference/integrations/airtable/actions/delete-records Permanently delete records in Airtable's 10-record batches. `airtable.deleteRecords` removes records from one table in 10-record API requests. ## Example ```ts automations/delete-airtable-records.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("Delete duplicate Airtable leads", () => { onDashboardRun({ title: "Delete duplicate Airtable leads" }) airtable.deleteRecords({ baseId: "appCRM", table: "Leads", recordIds: ["recDuplicateOne", "recDuplicateTwo"], }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `baseId` | `string` | Yes | None | Stable Airtable base ID. | | `table` | `string` | Yes | None | Table name or stable ID. | | `recordIds` | `string[]` | Yes | None | One or more stable record IDs. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"airtable">` | No | Project default | Connected Airtable account. | ## Output Returns `{ deleted: true; id: string }[]`, one receipt per deleted record. > [!WARNING] > > Deletion is permanent and batches are not transactional. If a later request > fails, records deleted by earlier requests remain deleted. # Get base collaborators Source: https://docs.automate.ax/reference/integrations/airtable/actions/get-base-collaborators Read Airtable base metadata and explicit collaborators. `airtable.getBaseCollaborators` returns a base's identity, workspace, effective permission, and explicit individual and group collaborators. ```ts automations/audit-airtable-access.automation.ts theme={null} import { automation } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("Audit Airtable access", () => { const base = airtable.getBaseCollaborators({ baseId: "app123" }) // Compare the Airtable collaborators with the base access rules. }) ``` `baseId` is required. Returns `createdTime: Date`, `id`, `name`, `workspaceId`, `permissionLevel`, and optional base/workspace collaborator groups. Requires both `schema.bases:read` and `workspacesAndBases:read`. # Get base schema Source: https://docs.automate.ax/reference/integrations/airtable/actions/get-base-schema Get the tables, fields, and views in an Airtable base. `airtable.getBaseSchema` returns a base's visible schema. Use it to find table, field, and view IDs or validate dynamic mappings. ## Example ```ts automations/read-airtable-schema.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("Read the CRM schema", () => { onDashboardRun({ title: "Read the CRM schema" }) airtable.getBaseSchema({ baseId: "appCRM" }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `baseId` | `string` | Yes | None | Stable Airtable base ID. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"airtable">` | No | Project default | Connected Airtable account. | ## Output Returns `{ tables: AirtableTable[] }`. Each table includes `id`, `name`, `description?`, `primaryFieldId`, `fields`, and `views`. A field includes `id`, `name`, `type`, `description?`, and provider-specific `options?`. A view includes `id`, `name`, and `type`. The connection needs `schema.bases:read`. Use the ID returned by [List bases](/reference/integrations/airtable/actions/list-bases). # Get record Source: https://docs.automate.ax/reference/integrations/airtable/actions/get-record Get an Airtable record by ID. `airtable.getRecord` returns a record and the field values visible to the connected account. ## Example ```ts automations/get-airtable-record.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("Get an Airtable lead", () => { onDashboardRun({ title: "Get an Airtable lead" }) airtable.getRecord({ baseId: "appCRM", table: "Leads", recordId: "rec123" }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `baseId` | `string` | Yes | None | Stable Airtable base ID. | | `table` | `string` | Yes | None | Table name or stable table ID. | | `recordId` | `string` | Yes | None | Stable Airtable record ID. | | `returnFieldsByFieldId` | `boolean` | No | `false` | Key `fields` by stable field ID rather than field name. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"airtable">` | No | Project default | Connected Airtable account. | ## Output Returns an `AirtableRecord` with `id: string`, `createdTime: Date`, and `fields: Record`. Keep `id` for update and delete actions. Airtable omits fields with empty values from many API responses, so don't assume every table field is present. # Get view Source: https://docs.automate.ax/reference/integrations/airtable/actions/get-view Get one Airtable view by stable ID. `airtable.getView` reads one view without listing the base. ```ts automations/get-airtable-view.automation.ts theme={null} import { automation } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("Get Airtable view", () => { airtable.getView({ baseId: "app123", viewId: "viw123" }) }) ``` `baseId` and `viewId` are required. `includeVisibleFieldIds` defaults to `false`. Returns `id`, `name`, `type`, optional `personalForUserId`, and optional grid `visibleFieldIds`. Requires `workspacesAndBases:read`. # List bases Source: https://docs.automate.ax/reference/integrations/airtable/actions/list-bases List Airtable bases available to the connected account. `airtable.listBases` returns every base the connected account can access. Use it to find stable IDs for schema and record actions. ## Example ```ts automations/list-airtable-bases.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("List Airtable bases", () => { onDashboardRun({ title: "List Airtable bases" }) airtable.listBases() }) ``` ## Inputs Optional second argument `{ account }` selects the Airtable binding and defaults to the project binding. ## Output Returns a signal containing `{ bases: AirtableBase[] }`: | Property | Type | Description | | - | - | - | | `bases[].id` | `string` | Stable Airtable base ID. | | `bases[].name` | `string` | Human-readable base name. | | `bases[].permissionLevel` | `string` | Connected account's effective permission level. | The action follows Airtable's pagination until it has collected every accessible base. It requires the `schema.bases:read` scope. # List record comments Source: https://docs.automate.ax/reference/integrations/airtable/actions/list-record-comments List comments and replies on an Airtable record. `airtable.listRecordComments` follows comment pagination and returns comments newest first. ```ts automations/read-airtable-comments.automation.ts theme={null} import { automation } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("Read Airtable comments", () => { airtable.listRecordComments({ baseId: "app123", table: "Contacts", recordId: "rec123", }) }) ``` `baseId`, table name or ID `table`, and `recordId` are required. `pageSize` defaults to 100 and accepts 1–100; `maxComments` is optional. Returns `{ comments, count }`. Comment dates are `Date`; attachment URLs expire after two hours. Requires `data.recordComments:read`. # List records Source: https://docs.automate.ax/reference/integrations/airtable/actions/list-records List Airtable records by view, formula, fields, and sort order. `airtable.listRecords` returns matching records across all Airtable result pages. ## Example ```ts automations/list-open-leads.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("List open Airtable leads", () => { onDashboardRun({ title: "List open Airtable leads" }) airtable.listRecords({ baseId: "appCRM", table: "Leads", fields: ["Name", "Value", "Status"], filterByFormula: "{Status} = 'Open'", sort: [{ field: "Value", direction: "desc" }], maxRecords: 100, }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `baseId` | `string` | Yes | None | Stable Airtable base ID. | | `table` | `string` | Yes | None | Table name or stable ID. | | `fields` | `string[]` | No | All visible fields | Field names or IDs to return. | | `filterByFormula` | `string` | No | None | Airtable formula that each record must satisfy. | | `view` | `string` | No | None | View name or ID used to constrain and initially order records. | | `sort` | `{ field: string; direction?: "asc" \| "desc" }[]` | No | None | Ordered sort rules. Each direction defaults to `"asc"`. | | `pageSize` | `number` | No | `100` | Records requested per provider page, from 1 through 100. | | `maxRecords` | `number` | No | No limit | Maximum records returned across all pages. | | `returnFieldsByFieldId` | `boolean` | No | `false` | Key fields by stable ID instead of name. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"airtable">` | No | Project default | Connected Airtable account. | ## Output Returns `{ records: AirtableRecord[]; count: number }`. Each record contains `id`, `createdTime`, and `fields`. When both `view` and `filterByFormula` are present, Airtable applies both. A sort supplied here overrides the view's ordering. Invalid formulas and unknown field names fail with Airtable's provider error. # List views Source: https://docs.automate.ax/reference/integrations/airtable/actions/list-views List views in an Airtable base. `airtable.listViews` returns every view in a base. ```ts automations/list-airtable-views.automation.ts theme={null} import { automation } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("List Airtable views", () => { airtable.listViews({ baseId: "app123", includeVisibleFieldIds: true }) }) ``` `baseId` is required. `includeVisibleFieldIds` defaults to `false`; when true, grid views may include `visibleFieldIds`. Returns `{ views }` with `id`, `name`, `type`, optional `personalForUserId`, and optional visible fields. Requires `workspacesAndBases:read`. # Sync CSV data Source: https://docs.automate.ax/reference/integrations/airtable/actions/sync-csv-data Send CSV data to an Airtable Sync API table. `airtable.syncCsvData` sends raw CSV to an existing Sync API endpoint. ```ts automations/sync-airtable-csv.automation.ts theme={null} import { automation } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("Sync Airtable CSV", () => { airtable.syncCsvData({ baseId: "app123", table: "Imported contacts", apiEndpointSyncId: "sync123", csv: "Name\nAda", }) }) ``` All inputs are required. `csv` accepts at most 2 MB, 10,000 rows, and 500 columns; Airtable limits this endpoint to 20 requests per five minutes per base. It returns no value. This endpoint requires a Personal Access Token—not OAuth—with `data.records:write` and `schema.bases:write`, base creator access, and a supported Airtable plan. # Update field Source: https://docs.automate.ax/reference/integrations/airtable/actions/update-field Update an Airtable field definition. `airtable.updateField` changes a field's name, description, or options. ```ts automations/rename-stage-field.automation.ts theme={null} import { automation } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("Rename stage field", () => { airtable.updateField({ baseId: "app123", tableId: "tbl123", fieldId: "fld123", name: "Lifecycle stage", }) }) ``` `baseId`, `tableId`, and `fieldId` are required. Supply at least one of `name`, `description`, or provider-documented `options`. Returns the updated field. Requires `schema.bases:write` and base creator access. # Update record Source: https://docs.automate.ax/reference/integrations/airtable/actions/update-record Merge or replace an Airtable record's writable fields. `airtable.updateRecord` changes one record. Merge mode changes only supplied fields. Replace mode can clear omitted writable fields. ## Example ```ts automations/update-airtable-record.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("Qualify an Airtable lead", () => { onDashboardRun({ title: "Qualify an Airtable lead" }) airtable.updateRecord({ baseId: "appCRM", table: "Leads", recordId: "rec123", fields: { Status: "Qualified" }, }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `baseId` | `string` | Yes | None | Stable Airtable base ID. | | `table` | `string` | Yes | None | Table name or stable ID. | | `recordId` | `string` | Yes | None | Stable ID of the record to update. | | `fields` | `Record` | Yes | None | New values keyed by field name or ID. | | `mode` | `"merge" \| "replace"` | No | `"merge"` | Preserve or replace omitted writable fields. | | `typecast` | `boolean` | No | `false` | Ask Airtable to coerce string values. | | `returnFieldsByFieldId` | `boolean` | No | `false` | Key returned fields by stable IDs. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"airtable">` | No | Project default | Connected Airtable account. | ## Output Returns the updated `AirtableRecord` with `id`, `createdTime`, and `fields`. > [!WARNING] > > `mode: "replace"` can clear writable fields you omit. Use merge mode unless > replacing the record's field set is intentional. # Update record comment Source: https://docs.automate.ax/reference/integrations/airtable/actions/update-record-comment Edit a caller-owned Airtable record comment. `airtable.updateRecordComment` replaces a comment's text. ```ts automations/update-airtable-comment.automation.ts theme={null} import { automation } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("Update Airtable comment", () => { airtable.updateRecordComment({ baseId: "app123", table: "Contacts", recordId: "rec123", commentId: "com123", text: "Approved", }) }) ``` All inputs are required. Returns the updated comment. Non-admin API users can update only comments they created. Requires `data.recordComments:write`. # Update records Source: https://docs.automate.ax/reference/integrations/airtable/actions/update-records Merge or replace records in Airtable's 10-record batches. `airtable.updateRecords` updates records in one table, sending up to 10 per Airtable request. It returns their new values. ## Example ```ts automations/update-airtable-records.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("Close Airtable tasks", () => { onDashboardRun({ title: "Close Airtable tasks" }) airtable.updateRecords({ baseId: "appOperations", table: "Tasks", records: [ { id: "recOne", fields: { Status: "Done" } }, { id: "recTwo", fields: { Status: "Done" } }, ], }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `baseId` | `string` | Yes | None | Stable Airtable base ID. | | `table` | `string` | Yes | None | Table name or stable ID. | | `records` | `{ id: string; fields: Record }[]` | Yes | None | One or more record updates. | | `mode` | `"merge" \| "replace"` | No | `"merge"` | Strategy applied to every record. | | `typecast` | `boolean` | No | `false` | Ask Airtable to coerce string values. | | `returnFieldsByFieldId` | `boolean` | No | `false` | Key returned fields by stable IDs. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"airtable">` | No | Project default | Connected Airtable account. | ## Output Returns the updated `AirtableRecord[]` in provider batch order. > [!WARNING] > > Replace mode can clear omitted writable fields. Batches are not transactional: > a later failure does not roll back earlier updates. # Update table Source: https://docs.automate.ax/reference/integrations/airtable/actions/update-table Update an Airtable table's metadata or date dependencies. `airtable.updateTable` changes a table's name, description, or date dependency settings. ```ts automations/rename-airtable-table.automation.ts theme={null} import { automation } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("Rename Airtable table", () => { airtable.updateTable({ baseId: "app123", table: "tbl123", name: "Customers" }) }) ``` `baseId` and table name or ID `table` are required. Supply `name`, `description`, or `dateDependencySettings`. Date dependencies use stable field IDs for the start date, end date, duration, and optional predecessor. Returns the complete updated table schema. Requires `schema.bases:write` and base creator access. # Airtable Source: https://docs.automate.ax/reference/integrations/airtable/index Manage bases, schemas, records, comments, and views, or react to record and table changes in Airtable. ## Exports ```ts theme={null} import { airtable, airtableAccount, getAirtableApi } from "automate.ax/airtable" ``` * `airtable` contains the packaged Airtable actions and triggers. * `airtableAccount("name")` selects a named Airtable connection. * `getAirtableApi` creates the authenticated Airtable API helper for a custom account-backed action. ## Triggers * [On base event](/reference/integrations/airtable/triggers/on-base-event) * [On field created](/reference/integrations/airtable/triggers/on-field-created) * [On field deleted](/reference/integrations/airtable/triggers/on-field-deleted) * [On field updated](/reference/integrations/airtable/triggers/on-field-updated) * [On record created](/reference/integrations/airtable/triggers/on-record-created) * [On record updated](/reference/integrations/airtable/triggers/on-record-updated) * [On record deleted](/reference/integrations/airtable/triggers/on-record-deleted) * [On record moved into view](/reference/integrations/airtable/triggers/on-record-moved-into-view) * [On record moved out of view](/reference/integrations/airtable/triggers/on-record-moved-out-of-view) * [On table created](/reference/integrations/airtable/triggers/on-table-created) * [On table deleted](/reference/integrations/airtable/triggers/on-table-deleted) * [On table updated](/reference/integrations/airtable/triggers/on-table-updated) ## Actions * [Create base](/reference/integrations/airtable/actions/create-base) * [Create field](/reference/integrations/airtable/actions/create-field) * [Create record](/reference/integrations/airtable/actions/create-record) * [Create record comment](/reference/integrations/airtable/actions/create-record-comment) * [Create records](/reference/integrations/airtable/actions/create-records) * [Create table](/reference/integrations/airtable/actions/create-table) * [Delete record](/reference/integrations/airtable/actions/delete-record) * [Delete record comment](/reference/integrations/airtable/actions/delete-record-comment) * [Delete records](/reference/integrations/airtable/actions/delete-records) * [Get base collaborators](/reference/integrations/airtable/actions/get-base-collaborators) * [Get base schema](/reference/integrations/airtable/actions/get-base-schema) * [Get record](/reference/integrations/airtable/actions/get-record) * [Get view](/reference/integrations/airtable/actions/get-view) * [List bases](/reference/integrations/airtable/actions/list-bases) * [List record comments](/reference/integrations/airtable/actions/list-record-comments) * [List records](/reference/integrations/airtable/actions/list-records) * [List views](/reference/integrations/airtable/actions/list-views) * [Sync CSV data](/reference/integrations/airtable/actions/sync-csv-data) * [Update field](/reference/integrations/airtable/actions/update-field) * [Update record](/reference/integrations/airtable/actions/update-record) * [Update record comment](/reference/integrations/airtable/actions/update-record-comment) * [Update records](/reference/integrations/airtable/actions/update-records) * [Update table](/reference/integrations/airtable/actions/update-table) # On base event Source: https://docs.automate.ax/reference/integrations/airtable/triggers/on-base-event Run for every Airtable data, field, or table transaction in a base. `airtable.onBaseEvent` is the broad Airtable trigger. Use it when one automation needs the complete provider transaction; prefer a semantic trigger for a specific lifecycle event. ```ts automations/archive-airtable-events.automation.ts theme={null} import { automation } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("Archive Airtable events", () => { const change = airtable.onBaseEvent({ baseId: "app123" }) // Route the Airtable base event by event type. }) ``` `baseId` is required; `account` is optional and defaults to the project binding. The event includes `baseId`, `occurredAt`, `source`, optional `sourceMetadata`, `transactionNumber`, and the complete Airtable `event`. Requires `webhook:manage`, `data.records:read`, `schema.bases:read`, and base creator access. # On field created Source: https://docs.automate.ax/reference/integrations/airtable/triggers/on-field-created Run when Airtable creates a field. `airtable.onFieldCreated` provides the new field's table, ID, name, and type. ```ts automations/track-airtable-fields.automation.ts theme={null} import { automation } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("Track Airtable fields", () => { const event = airtable.onFieldCreated({ baseId: "app123" }) // Configure the new Airtable field. }) ``` `baseId` is required; `account` defaults to the project binding. The event includes `tableId`, `fieldId`, `field`, and the common Airtable event fields. Requires `webhook:manage` and `schema.bases:read`. # On field deleted Source: https://docs.automate.ax/reference/integrations/airtable/triggers/on-field-deleted Run when Airtable deletes a field. `airtable.onFieldDeleted` provides the deleted field and owning table IDs. ```ts automations/alert-on-airtable-field-deletion.automation.ts theme={null} import { automation } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("Alert on Airtable field deletion", () => { const event = airtable.onFieldDeleted({ baseId: "app123" }) // Remove state tied to the deleted Airtable field. }) ``` `baseId` is required; `account` defaults to the project binding. Airtable does not include the deleted field definition. Requires `webhook:manage` and `schema.bases:read`. # On field updated Source: https://docs.automate.ax/reference/integrations/airtable/triggers/on-field-updated Run when Airtable changes a field definition. `airtable.onFieldUpdated` provides current and previous field definition values. ```ts automations/track-airtable-field-updates.automation.ts theme={null} import { automation } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("Track Airtable field updates", () => { const event = airtable.onFieldUpdated({ baseId: "app123" }) // Reconcile the updated Airtable field. }) ``` `baseId` is required; `account` defaults to the project binding. The event includes changed `current` and optional `previous` name/type values plus common Airtable event fields. Requires `webhook:manage` and `schema.bases:read`. # On record created Source: https://docs.automate.ax/reference/integrations/airtable/triggers/on-record-created Run an automation when Airtable creates a record. `airtable.onRecordCreated` watches one table and provides each new record with values keyed by field ID. ```ts automations/welcome-airtable-leads.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("Welcome Airtable leads", () => { const event = airtable.onRecordCreated({ baseId: "app123", tableId: "tbl123", }) sendEmail({ subject: "New Airtable record", text: event.recordId }) }) ``` ## Options | Option | Type | Required | Description | | - | - | - | - | | `baseId` | `string` | Yes | Stable Airtable base ID. | | `tableId` | `string` | Yes | Stable Airtable table ID. | | `account` | `string \| IntegrationAccountReference<"airtable">` | No | Static Airtable account binding. Defaults to the project binding. | ## Trigger data Includes `baseId`, `tableId`, `recordId`, `createdAt` and `occurredAt` in `ISO 8601` format, `fields`, `source`, optional `sourceMetadata`, and `transactionNumber`. `fields` is `Record` keyed by field ID. The complete Airtable transaction is under `event`. Automate.ax creates, authenticates, reads, and renews the Airtable webhook. The connection needs creator access to the base plus `data.records:read` and `webhook:manage` scopes. # On record deleted Source: https://docs.automate.ax/reference/integrations/airtable/triggers/on-record-deleted Run an automation when Airtable deletes a record. `airtable.onRecordDeleted` provides the deleted record's ID. ```ts automations/report-airtable-deletions.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("Report Airtable deletions", () => { const event = airtable.onRecordDeleted({ baseId: "app123", tableId: "tbl123", }) sendEmail({ subject: "Airtable record deleted", text: event.recordId }) }) ``` ## Options | Option | Type | Required | Description | | - | - | - | - | | `baseId` | `string` | Yes | Stable Airtable base ID. | | `tableId` | `string` | Yes | Stable Airtable table ID. | | `account` | `string \| IntegrationAccountReference<"airtable">` | No | Static Airtable account binding. Defaults to the project binding. | ## Trigger data Includes `baseId`, `tableId`, `recordId`, `occurredAt` in `ISO 8601` format, `source`, optional `sourceMetadata`, `transactionNumber`, and the complete Airtable transaction under `event`. Airtable doesn't include deleted record field values. Persist any values you need before deletion, or use the record ID to reconcile another system. # On record moved into view Source: https://docs.automate.ax/reference/integrations/airtable/triggers/on-record-moved-into-view Run an automation when a record enters an Airtable view. `airtable.onRecordMovedIntoView` matches records created in a view or changed to satisfy its filters. ```ts automations/notify-approved-airtable-records.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("Notify approved Airtable records", () => { const event = airtable.onRecordMovedIntoView({ baseId: "app123", viewId: "viwApproved", }) sendEmail({ subject: "Record approved", text: event.recordId }) }) ``` ## Options | Option | Type | Required | Description | | - | - | - | - | | `baseId` | `string` | Yes | Stable Airtable base ID. | | `viewId` | `string` | Yes | Stable Airtable view ID. Form and list views aren't supported by Airtable webhooks. | | `account` | `string \| IntegrationAccountReference<"airtable">` | No | Static Airtable account binding. Defaults to the project binding. | ## Trigger data Includes `baseId`, `tableId`, `viewId`, `recordId`, `createdAt` and `occurredAt` in `ISO 8601` format, current `fields` keyed by field ID, `source`, optional `sourceMetadata`, `transactionNumber`, and the complete provider transaction under `event`. `createdAt` is the record's original creation time, not the time it entered the view. Use `occurredAt` for the membership change. > [!NOTE] > > Automate.ax shares one webhook across a base's base and table triggers, then > uses one webhook per watched view. Airtable OAuth allows two webhooks per > base, so deployments that require more than two of these groups fail until you > remove a view trigger or use a personal access token. # On record moved out of view Source: https://docs.automate.ax/reference/integrations/airtable/triggers/on-record-moved-out-of-view Run an automation when a record leaves an Airtable view. `airtable.onRecordMovedOutOfView` matches records that stop satisfying a view's filters or that Airtable deletes while in the view. ```ts automations/report-airtable-view-exits.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("Report Airtable view exits", () => { const event = airtable.onRecordMovedOutOfView({ baseId: "app123", viewId: "viwApproved", }) sendEmail({ subject: "Record left approved view", text: event.recordId }) }) ``` ## Options | Option | Type | Required | Description | | - | - | - | - | | `baseId` | `string` | Yes | Stable Airtable base ID. | | `viewId` | `string` | Yes | Stable Airtable view ID. Form and list views aren't supported by Airtable webhooks. | | `account` | `string \| IntegrationAccountReference<"airtable">` | No | Static Airtable account binding. Defaults to the project binding. | > [!NOTE] > > Automate.ax shares one webhook across a base's base and table triggers, then > uses one webhook per watched view. Airtable OAuth allows two webhooks per > base, so deployments that require more than two of these groups fail until you > remove a view trigger or use a personal access token. ## Trigger data Includes `baseId`, `tableId`, `viewId`, `recordId`, `occurredAt` in `ISO 8601` format, `source`, optional `sourceMetadata`, `transactionNumber`, and the complete Airtable transaction under `event`. Airtable reports the record identity but not its field values when it leaves a view. The event can mean either a filter-driven exit or deletion. Use a table deletion trigger as well when that distinction matters. # On record updated Source: https://docs.automate.ax/reference/integrations/airtable/triggers/on-record-updated Run an automation when Airtable updates a record. `airtable.onRecordUpdated` provides the current and previous values for each update. ```ts automations/audit-airtable-records.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("Audit Airtable changes", () => { const event = airtable.onRecordUpdated({ baseId: "app123", tableId: "tbl123", }) sendEmail({ subject: "Airtable record updated", text: event.changedFieldIds.transform((fieldIds) => fieldIds.join(", ")), }) }) ``` ## Options | Option | Type | Required | Description | | - | - | - | - | | `baseId` | `string` | Yes | Stable Airtable base ID. | | `tableId` | `string` | Yes | Stable Airtable table ID. | | `account` | `string \| IntegrationAccountReference<"airtable">` | No | Static Airtable account binding. Defaults to the project binding. | ## Trigger data Includes `baseId`, `tableId`, `recordId`, `occurredAt` in `ISO 8601` format, `fields`, `previousFields`, `changedFieldIds`, `source`, optional `sourceMetadata`, and `transactionNumber`. Both field objects use field IDs as keys. `changedFieldIds` identifies the fields changed in this transaction. The complete provider transaction is under `event`. Airtable may coalesce rapid changes into one notification, but Automate.ax retrieves and processes every ordered payload behind that notification. # On table created Source: https://docs.automate.ax/reference/integrations/airtable/triggers/on-table-created Run when Airtable creates a table. `airtable.onTableCreated` provides the new table's metadata and field definitions. ```ts automations/track-airtable-tables.automation.ts theme={null} import { automation } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("Track Airtable tables", () => { const event = airtable.onTableCreated({ baseId: "app123" }) // Configure the new Airtable table. }) ``` `baseId` is required; `account` defaults to the project binding. The event adds `tableId`, optional `metadata`, and `fields` keyed by field ID to the common Airtable event fields. Requires `webhook:manage` and `schema.bases:read`. # On table deleted Source: https://docs.automate.ax/reference/integrations/airtable/triggers/on-table-deleted Run when Airtable deletes a table. `airtable.onTableDeleted` provides the deleted table's stable ID. ```ts automations/alert-on-airtable-table-deletion.automation.ts theme={null} import { automation } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("Alert on Airtable table deletion", () => { const event = airtable.onTableDeleted({ baseId: "app123" }) // Remove state tied to the deleted Airtable table. }) ``` `baseId` is required; `account` defaults to the project binding. Airtable does not include the deleted schema, so preserve metadata before deletion when needed. Requires `webhook:manage` and `schema.bases:read`. # On table updated Source: https://docs.automate.ax/reference/integrations/airtable/triggers/on-table-updated Run when Airtable renames a table or changes its description. `airtable.onTableUpdated` emits current and previous metadata fields. ```ts automations/track-airtable-table-updates.automation.ts theme={null} import { automation } from "automate.ax" import { airtable } from "automate.ax/airtable" export default automation("Track Airtable table updates", () => { const event = airtable.onTableUpdated({ baseId: "app123" }) // Reconcile the updated Airtable table metadata. }) ``` `baseId` is required; `account` defaults to the project binding. The event includes `tableId`, `current`, `previous`, and the common Airtable event fields. Requires `webhook:manage` and `schema.bases:read`. # Add session file Source: https://docs.automate.ax/reference/integrations/anthropic/actions/add-session-file Mounts a previously uploaded Anthropic file into a session. `anthropic.addSessionFile` mounts a previously uploaded Anthropic file into a session. ## Example ```ts automations/anthropic-add-session-file.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Add session file", () => { withPrerequisites(onInvocation(), () => { anthropic.addSessionFile({ sessionId: "session-id", type: "file", fileId: "file-id", }) }) }) ``` ## Inputs Requires `sessionId`, `type: "file"`, and `fileId`. `mountPath` defaults under `/mnt/session/uploads`. Inputs use public camelCase names and accept signals. ## Output and behavior Returns the attached file resource. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # Archive agent Source: https://docs.automate.ax/reference/integrations/anthropic/actions/archive-agent Archives a Claude agent so it cannot start new sessions. `anthropic.archiveAgent` archives a Claude agent so it cannot start new sessions. ## Example ```ts automations/anthropic-archive-agent.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Archive agent", () => { withPrerequisites(onInvocation(), () => { anthropic.archiveAgent({ agentId: "agent-id" }) }) }) ``` ## Inputs Requires `agentId`. Archival is terminal for new sessions. Inputs use public camelCase names and accept signals. ## Output and behavior Returns the archived agent. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # Archive environment Source: https://docs.automate.ax/reference/integrations/anthropic/actions/archive-environment Archives an environment so it cannot start sessions. `anthropic.archiveEnvironment` archives an environment so it cannot start sessions. ## Example ```ts automations/anthropic-archive-environment.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Archive environment", () => { withPrerequisites(onInvocation(), () => { anthropic.archiveEnvironment({ environmentId: "environment-id" }) }) }) ``` ## Inputs Requires `environmentId`. Inputs use public camelCase names and accept signals. ## Output and behavior Returns the archived environment. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # Archive session Source: https://docs.automate.ax/reference/integrations/anthropic/actions/archive-session Archives a Claude session while retaining its history. `anthropic.archiveSession` archives a Claude session while retaining its history. ## Example ```ts automations/anthropic-archive-session.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Archive session", () => { withPrerequisites(onInvocation(), () => { anthropic.archiveSession({ sessionId: "session-id" }) }) }) ``` ## Inputs Requires `sessionId`. Inputs use public camelCase names and accept signals. ## Output and behavior Returns the archived session. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # Archive session thread Source: https://docs.automate.ax/reference/integrations/anthropic/actions/archive-session-thread Archives one child thread in a Claude multi-agent session. `anthropic.archiveSessionThread` archives one child thread in a Claude multi-agent session. ## Example ```ts automations/anthropic-archive-session-thread.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Archive session thread", () => { withPrerequisites(onInvocation(), () => { anthropic.archiveSessionThread({ sessionId: "session-id", threadId: "thread-id", }) }) }) ``` ## Inputs Requires `sessionId` and `threadId`. Inputs use public camelCase names and accept signals. ## Output and behavior Returns the archived thread. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # Confirm tool Source: https://docs.automate.ax/reference/integrations/anthropic/actions/confirm-tool Approves or denies a pending built-in or MCP tool execution. `anthropic.confirmTool` approves or denies a pending built-in or MCP tool execution. ## Example ```ts automations/anthropic-confirm-tool.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Confirm tool", () => { withPrerequisites(onInvocation(), () => { anthropic.confirmTool({ sessionId: "session-id", toolUseId: "event-id", result: "allow", }) }) }) ``` ## Inputs Requires `sessionId`, the pending `toolUseId`, and `result`. Use `denyMessage` only when denying; include `sessionThreadId` for a subagent tool call. Inputs use public camelCase names and accept signals. ## Output and behavior Returns the accepted confirmation. Resolve every ID from `requiresAction` before execution resumes. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # Create agent Source: https://docs.automate.ax/reference/integrations/anthropic/actions/create-agent Creates a reusable, versioned Claude agent definition. `anthropic.createAgent` creates a reusable, versioned Claude agent definition. ## Example ```ts automations/anthropic-create-agent.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Create agent", () => { withPrerequisites(onInvocation(), () => { anthropic.createAgent({ name: "Repository reviewer", model: "claude-sonnet-5", }) }) }) ``` ## Inputs Requires `name` and `model`. You can also set `description`, `system`, `tools`, `mcpServers`, `skills`, `multiagent`, and up to 16 metadata pairs. Inputs use public camelCase names and accept signals. ## Output and behavior Returns the created agent and version. Creating is not replay-safe after an uncertain response. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # Create environment Source: https://docs.automate.ax/reference/integrations/anthropic/actions/create-environment Creates an Anthropic-hosted cloud environment. `anthropic.createEnvironment` creates an Anthropic-hosted cloud environment. ## Example ```ts automations/anthropic-create-environment.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Create environment", () => { withPrerequisites(onInvocation(), () => { anthropic.createEnvironment({ name: "Repository workspace" }) }) }) ``` ## Inputs Requires `name`. Optional cloud `config` controls packages and unrestricted networking or networking restricted to specified domains; self-hosted environments are not supported. Inputs use public camelCase names and accept signals. ## Output and behavior Returns the created environment. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # Define outcome Source: https://docs.automate.ax/reference/integrations/anthropic/actions/define-outcome Defines work and a rubric for iterative Claude outcome evaluation. `anthropic.defineOutcome` defines work and a rubric for iterative Claude outcome evaluation. ## Example ```ts automations/anthropic-define-outcome.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Define outcome", () => { withPrerequisites(onInvocation(), () => { anthropic.defineOutcome({ sessionId: "session-id", description: "Produce a passing implementation.", rubric: { type: "text", content: "All tests pass and behavior is documented.", }, maxIterations: 3, }) }) }) ``` ## Inputs Requires `sessionId`, `description`, and a text or file rubric. `maxIterations` defaults to 3 and allows up to 20. Inputs use public camelCase names and accept signals. ## Output and behavior Returns the accepted outcome event with its provider-generated outcome ID. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # Delete environment Source: https://docs.automate.ax/reference/integrations/anthropic/actions/delete-environment Deletes an unused Claude environment. `anthropic.deleteEnvironment` deletes an unused Claude environment. ## Example ```ts automations/anthropic-delete-environment.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Delete environment", () => { withPrerequisites(onInvocation(), () => { anthropic.deleteEnvironment({ environmentId: "environment-id" }) }) }) ``` ## Inputs Requires `environmentId`. Anthropic rejects deletion while the environment remains in use. Inputs use public camelCase names and accept signals. ## Output and behavior Returns the deletion confirmation. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # Delete session Source: https://docs.automate.ax/reference/integrations/anthropic/actions/delete-session Deletes a Claude session and retained history. `anthropic.deleteSession` deletes a Claude session and retained history. ## Example ```ts automations/anthropic-delete-session.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Delete session", () => { withPrerequisites(onInvocation(), () => { anthropic.deleteSession({ sessionId: "session-id" }) }) }) ``` ## Inputs Requires `sessionId`. Inputs use public camelCase names and accept signals. ## Output and behavior Returns the deletion confirmation. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # Delete session resource Source: https://docs.automate.ax/reference/integrations/anthropic/actions/delete-session-resource Deletes a detachable resource from a Claude session. `anthropic.deleteSessionResource` deletes a detachable resource from a Claude session. ## Example ```ts automations/anthropic-delete-session-resource.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Delete session resource", () => { withPrerequisites(onInvocation(), () => { anthropic.deleteSessionResource({ sessionId: "session-id", resourceId: "resource-id", }) }) }) ``` ## Inputs Requires `sessionId` and `resourceId`. Anthropic controls which resource kinds can be detached. Inputs use public camelCase names and accept signals. ## Output and behavior Returns a deletion confirmation. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # Get agent Source: https://docs.automate.ax/reference/integrations/anthropic/actions/get-agent Gets the latest or an exact version of a Claude agent. `anthropic.getAgent` gets the latest or an exact version of a Claude agent. ## Example ```ts automations/anthropic-get-agent.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Get agent", () => { withPrerequisites(onInvocation(), () => { anthropic.getAgent({ agentId: "agent-id", version: 2 }) }) }) ``` ## Inputs Requires `agentId`; `version` selects an immutable historical version. Inputs use public camelCase names and accept signals. ## Output and behavior Returns the resolved agent definition. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # Get environment Source: https://docs.automate.ax/reference/integrations/anthropic/actions/get-environment Gets one Claude Managed Agents environment. `anthropic.getEnvironment` gets one Claude Managed Agents environment. ## Example ```ts automations/anthropic-get-environment.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Get environment", () => { withPrerequisites(onInvocation(), () => { anthropic.getEnvironment({ environmentId: "environment-id" }) }) }) ``` ## Inputs Requires `environmentId`. Inputs use public camelCase names and accept signals. ## Output and behavior Returns the environment, including resolved cloud configuration. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # Get session Source: https://docs.automate.ax/reference/integrations/anthropic/actions/get-session Gets current status, usage, resources, and outcome state for a session. `anthropic.getSession` gets current status, usage, resources, and outcome state for a session. ## Example ```ts automations/anthropic-get-session.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Get session", () => { withPrerequisites(onInvocation(), () => { anthropic.getSession({ sessionId: "session-id" }) }) }) ``` ## Inputs Requires `sessionId`. Inputs use public camelCase names and accept signals. ## Output and behavior Returns the authoritative session. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # Get session resource Source: https://docs.automate.ax/reference/integrations/anthropic/actions/get-session-resource Gets an attached repository, file, or memory-store resource. `anthropic.getSessionResource` gets an attached repository, file, or memory-store resource. ## Example ```ts automations/anthropic-get-session-resource.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Get session resource", () => { withPrerequisites(onInvocation(), () => { anthropic.getSessionResource({ sessionId: "session-id", resourceId: "resource-id", }) }) }) ``` ## Inputs Requires `sessionId` and `resourceId`. Inputs use public camelCase names and accept signals. ## Output and behavior Returns the attached resource. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # Get session thread Source: https://docs.automate.ax/reference/integrations/anthropic/actions/get-session-thread Gets one Claude session execution thread. `anthropic.getSessionThread` gets one Claude session execution thread. ## Example ```ts automations/anthropic-get-session-thread.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Get session thread", () => { withPrerequisites(onInvocation(), () => { anthropic.getSessionThread({ sessionId: "session-id", threadId: "thread-id", }) }) }) ``` ## Inputs Requires `sessionId` and `threadId`. Inputs use public camelCase names and accept signals. ## Output and behavior Returns status, agent snapshot, parent, timing, and usage. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # Interrupt session Source: https://docs.automate.ax/reference/integrations/anthropic/actions/interrupt-session Interrupts active Claude execution. `anthropic.interruptSession` interrupts active Claude execution. ## Example ```ts automations/anthropic-interrupt-session.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Interrupt session", () => { withPrerequisites(onInvocation(), () => { anthropic.interruptSession({ sessionId: "session-id" }) }) }) ``` ## Inputs Requires `sessionId`. Omit `sessionThreadId` to interrupt every non-archived thread, or provide it to interrupt one child thread. Inputs use public camelCase names and accept signals. ## Output and behavior Returns the accepted interrupt event. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # List agent versions Source: https://docs.automate.ax/reference/integrations/anthropic/actions/list-agent-versions Lists immutable versions of one Claude agent. `anthropic.listAgentVersions` lists immutable versions of one Claude agent. ## Example ```ts automations/anthropic-list-agent-versions.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("List agent versions", () => { withPrerequisites(onInvocation(), () => { anthropic.listAgentVersions({ agentId: "agent-id", limit: 25 }) }) }) ``` ## Inputs Requires `agentId`; supports cursor pagination. Inputs use public camelCase names and accept signals. ## Output and behavior Returns versioned agents in `data` with `nextPage`. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # List agents Source: https://docs.automate.ax/reference/integrations/anthropic/actions/list-agents Lists Claude agents with cursor, date, and archive filters. `anthropic.listAgents` lists Claude agents with cursor, date, and archive filters. ## Example ```ts automations/anthropic-list-agents.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("List agents", () => { withPrerequisites(onInvocation(), () => { anthropic.listAgents({ includeArchived: true, limit: 25 }) }) }) ``` ## Inputs Supports `page`, `limit`, `createdAtGte`, `createdAtLte`, and `includeArchived`. Inputs use public camelCase names and accept signals. ## Output and behavior Returns `data` and `nextPage`. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # List environments Source: https://docs.automate.ax/reference/integrations/anthropic/actions/list-environments Lists hosted Claude environments. `anthropic.listEnvironments` lists hosted Claude environments. ## Example ```ts automations/anthropic-list-environments.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("List environments", () => { withPrerequisites(onInvocation(), () => { anthropic.listEnvironments({ includeArchived: true, limit: 25 }) }) }) ``` ## Inputs Supports cursor pagination and `includeArchived`. Inputs use public camelCase names and accept signals. ## Output and behavior Returns `data` and `nextPage`. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # List session events Source: https://docs.automate.ax/reference/integrations/anthropic/actions/list-session-events Lists authoritative events for a Claude session. `anthropic.listSessionEvents` lists authoritative events for a Claude session. ## Example ```ts automations/anthropic-list-session-events.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("List session events", () => { withPrerequisites(onInvocation(), () => { anthropic.listSessionEvents({ sessionId: "session-id", order: "desc", types: ["agent.message"], limit: 25, }) }) }) ``` ## Inputs Requires `sessionId`; supports cursor, creation-time, ordering, and event-type filters. Inputs use public camelCase names and accept signals. ## Output and behavior Returns event `data` and `nextPage`. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # List session resources Source: https://docs.automate.ax/reference/integrations/anthropic/actions/list-session-resources Lists resources attached to a Claude session. `anthropic.listSessionResources` lists resources attached to a Claude session. ## Example ```ts automations/anthropic-list-session-resources.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("List session resources", () => { withPrerequisites(onInvocation(), () => { anthropic.listSessionResources({ sessionId: "session-id", limit: 25 }) }) }) ``` ## Inputs Requires `sessionId` and supports cursor pagination. Inputs use public camelCase names and accept signals. ## Output and behavior Returns resource `data` and `nextPage`. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # List session thread events Source: https://docs.automate.ax/reference/integrations/anthropic/actions/list-session-thread-events Lists events scoped to one Claude session thread. `anthropic.listSessionThreadEvents` lists events scoped to one Claude session thread. ## Example ```ts automations/anthropic-list-session-thread-events.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("List session thread events", () => { withPrerequisites(onInvocation(), () => { anthropic.listSessionThreadEvents({ sessionId: "session-id", threadId: "thread-id", limit: 25, }) }) }) ``` ## Inputs Requires `sessionId` and `threadId`; supports cursor pagination. Inputs use public camelCase names and accept signals. ## Output and behavior Returns event `data` and `nextPage`. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # List session threads Source: https://docs.automate.ax/reference/integrations/anthropic/actions/list-session-threads Lists the primary and child threads in a multi-agent session. `anthropic.listSessionThreads` lists the primary and child threads in a multi-agent session. ## Example ```ts automations/anthropic-list-session-threads.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("List session threads", () => { withPrerequisites(onInvocation(), () => { anthropic.listSessionThreads({ sessionId: "session-id", limit: 25 }) }) }) ``` ## Inputs Requires `sessionId` and supports cursor pagination. Inputs use public camelCase names and accept signals. ## Output and behavior Returns thread `data` and `nextPage`. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # List sessions Source: https://docs.automate.ax/reference/integrations/anthropic/actions/list-sessions Lists Claude sessions with cursor and lifecycle filters. `anthropic.listSessions` lists Claude sessions with cursor and lifecycle filters. ## Example ```ts automations/anthropic-list-sessions.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("List sessions", () => { withPrerequisites(onInvocation(), () => { anthropic.listSessions({ statuses: ["idle"], order: "desc", limit: 25 }) }) }) ``` ## Inputs Supports bidirectional cursors, agent/version, status, creation time, deployment, memory-store, ordering, and archive filters. Inputs use public camelCase names and accept signals. ## Output and behavior Returns `data`, `nextPage`, and `prevPage`. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # Run agent Source: https://docs.automate.ax/reference/integrations/anthropic/actions/run-agent Starts a session and resumes after its first turn idles or terminates. `anthropic.runAgent` starts a session and resumes after its first turn idles or terminates. ## Example ```ts automations/anthropic-run-agent.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Run agent", () => { withPrerequisites(onInvocation(), () => { anthropic.runAgent({ agent: "agent-id", environmentId: "environment-id", initialEvents: [ { type: "user.message", content: [{ type: "text", text: "Review the repository." }], }, ], }) }) }) ``` ## Inputs Accepts the same input as `startSession`, but requires 1–50 `initialEvents` items so the session starts work. The optional `account` must be a static connection name or account reference because the action and callback subscriptions share it. Configure the Anthropic Console webhook before deploying. Inputs use public camelCase names and accept signals. ## Output and behavior Returns a durable signal classified as `completed`, `requiresAction`, `budgetReached`, `retriesExhausted`, or `terminated`. The callback is an independent root correlated by session ID. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # Send message Source: https://docs.automate.ax/reference/integrations/anthropic/actions/send-message Sends user content and starts the next Claude turn. `anthropic.sendMessage` sends user content and starts the next Claude turn. ## Example ```ts automations/anthropic-send-message.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Send message", () => { withPrerequisites(onInvocation(), () => { anthropic.sendMessage({ sessionId: "session-id", content: [{ type: "text", text: "Continue with the failing tests." }], }) }) }) ``` ## Inputs Requires `sessionId` and message content blocks. Images and documents use Managed Agents content shapes. Inputs use public camelCase names and accept signals. ## Output and behavior Returns the accepted event. Duplicate sends create duplicate turns. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # Send session events Source: https://docs.automate.ax/reference/integrations/anthropic/actions/send-session-events Sends one or more provider-native session events in order. `anthropic.sendSessionEvents` sends one or more provider-native session events in order. ## Example ```ts automations/anthropic-send-session-events.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Send session events", () => { withPrerequisites(onInvocation(), () => { anthropic.sendSessionEvents({ sessionId: "session-id", events: [ { type: "user.message", content: [{ type: "text", text: "Continue." }], }, ], }) }) }) ``` ## Inputs Requires `sessionId` and 1–50 events. Supported hosted events include messages, outcome definitions, confirmations, custom-tool results, interrupts, and valid message-plus-system pairs. Inputs use public camelCase names and accept signals. ## Output and behavior Returns the accepted events. Sending is not automatically replayed. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # Send system context Source: https://docs.automate.ax/reference/integrations/anthropic/actions/send-system-context Sends a user event followed by privileged system context in one request. `anthropic.sendSystemContext` sends a user event followed by privileged system context in one request. ## Example ```ts automations/anthropic-send-system-context.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Send system context", () => { withPrerequisites(onInvocation(), () => { anthropic.sendSystemContext({ sessionId: "session-id", precedingEvent: { type: "user.message", content: [{ type: "text", text: "Review this change." }], }, content: [{ type: "text", text: "Treat security defects as blocking." }], }) }) }) ``` ## Inputs Requires `sessionId`, a preceding `user.message` or `user.custom_tool_result`, and text-only system `content`. Anthropic requires the system event to immediately follow its companion. Inputs use public camelCase names and accept signals. ## Output and behavior Returns both accepted events. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # Start session Source: https://docs.automate.ax/reference/integrations/anthropic/actions/start-session Starts a Claude agent session without waiting for a turn to finish. `anthropic.startSession` starts a Claude agent session without waiting for a turn to finish. ## Example ```ts automations/anthropic-start-session.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Start session", () => { withPrerequisites(onInvocation(), () => { anthropic.startSession({ agent: "agent-id", environmentId: "environment-id", initialEvents: [ { type: "user.message", content: [{ type: "text", text: "Review the repository." }], }, ], }) }) }) ``` ## Inputs Requires `agent` and `environmentId`. Optional fields include `initialEvents` (maximum 50), `budget`, `resources`, `vaultIds`, `title`, and metadata. Budgets use whole-cent USD strings. Inputs use public camelCase names and accept signals. ## Output and behavior Returns the new session immediately. Use `runAgent` for durable first-turn completion. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # Submit custom tool result Source: https://docs.automate.ax/reference/integrations/anthropic/actions/submit-custom-tool-result Resolves one pending application-defined custom tool call. `anthropic.submitCustomToolResult` resolves one pending application-defined custom tool call. ## Example ```ts automations/anthropic-submit-custom-tool-result.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Submit custom tool result", () => { withPrerequisites(onInvocation(), () => { anthropic.submitCustomToolResult({ sessionId: "session-id", customToolUseId: "event-id", content: [{ type: "text", text: "Tool result" }], }) }) }) ``` ## Inputs Requires `sessionId` and `customToolUseId`. Optional content can be marked with `isError`; include `sessionThreadId` for subagent work. Inputs use public camelCase names and accept signals. ## Output and behavior Returns the accepted result event. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # Update agent Source: https://docs.automate.ax/reference/integrations/anthropic/actions/update-agent Updates a Claude agent and creates its next version. `anthropic.updateAgent` updates a Claude agent and creates its next version. ## Example ```ts automations/anthropic-update-agent.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Update agent", () => { withPrerequisites(onInvocation(), () => { anthropic.updateAgent({ agentId: "agent-id", version: 2, system: "Review for correctness.", }) }) }) ``` ## Inputs Requires `agentId`. Optional `version` provides optimistic concurrency. Arrays such as `tools`, `skills`, and `mcpServers` replace the stored arrays. Inputs use public camelCase names and accept signals. ## Output and behavior Returns the updated agent and new version. This mutation is not automatically replayed. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # Update environment Source: https://docs.automate.ax/reference/integrations/anthropic/actions/update-environment Updates a hosted Claude environment. `anthropic.updateEnvironment` updates a hosted Claude environment. ## Example ```ts automations/anthropic-update-environment.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Update environment", () => { withPrerequisites(onInvocation(), () => { anthropic.updateEnvironment({ environmentId: "environment-id", description: "Restricted review environment", }) }) }) ``` ## Inputs Requires `environmentId`. You can update its name, description, metadata, packages, and cloud network policy. Inputs use public camelCase names and accept signals. ## Output and behavior Returns the updated environment. This mutation is not automatically replayed. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # Update repository token Source: https://docs.automate.ax/reference/integrations/anthropic/actions/update-repository-token Rotates the authorization token for an attached GitHub repository. `anthropic.updateRepositoryToken` rotates the authorization token for an attached GitHub repository. ## Example ```ts automations/anthropic-update-repository-token.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Update repository token", () => { withPrerequisites(onInvocation(), () => { anthropic.updateRepositoryToken({ sessionId: "session-id", resourceId: "resource-id", authorizationToken: "github-token", }) }) }) ``` ## Inputs Requires `sessionId`, `resourceId`, and the replacement `authorizationToken`. Only GitHub repository resources support rotation. Inputs use public camelCase names and accept signals. ## Output and behavior Returns the updated repository resource. The token is sensitive action input. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # Update session Source: https://docs.automate.ax/reference/integrations/anthropic/actions/update-session Updates mutable session configuration for subsequent turns. `anthropic.updateSession` updates mutable session configuration for subsequent turns. ## Example ```ts automations/anthropic-update-session.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Update session", () => { withPrerequisites(onInvocation(), () => { anthropic.updateSession({ sessionId: "session-id", title: "Repository review", }) }) }) ``` ## Inputs Requires `sessionId`. You can patch title and metadata, replace tools or MCP servers, and update or remove an existing budget. A budget cannot be added if the session started without one. Inputs use public camelCase names and accept signals. ## Output and behavior Returns the updated session. Anthropic requests time out before the action lease and provider mutations are not retried after an uncertain response unless stated otherwise. # Anthropic Source: https://docs.automate.ax/reference/integrations/anthropic/index Build durable automations with Claude Managed Agents, hosted environments, session controls, and signed lifecycle events. Use Anthropic to define reusable Claude agents, configure hosted cloud environments, run durable sessions, handle tool approvals and custom tools, inspect threads and resources, and start automations from signed lifecycle events. ## Connect Managed Agents 1. Create an Anthropic API key with access to the workspace that owns your agents. 2. In the Anthropic Console, create a webhook with endpoint `https://automate.ax/api/v1/events/anthropic`. 3. Enable the agent, environment, and session events your automations use. Enabling every supported event lets you add triggers without revisiting the webhook. 4. Connect Anthropic in Automate.ax with **Managed Agents**. Enter the API key, the webhook signing key that begins with `whsec_`, and a workspace ID when the key can access more than one workspace. The ordinary **API key** connection remains available for Anthropic model generation. Managed Agents triggers require the **Managed Agents** connection because it stores the signing key and workspace identity. ## Run one durable turn ```ts automations/run-claude-agent.automation.ts theme={null} import { automation, onInvocation, withPrerequisites } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Review a repository", () => { withPrerequisites(onInvocation(), () => { const result = anthropic.runAgent({ agent: "agent-id", environmentId: "environment-id", initialEvents: [ { type: "user.message", content: [{ type: "text", text: "Review the repository." }], }, ], budget: { maxListCost: { amount: "250", currency: "USD" }, type: "limit", }, }) anthropic.getSession({ sessionId: result.session.id }) }) }) ``` [`anthropic.runAgent`](/reference/integrations/anthropic/actions/run-agent) starts the session in the initiating context. The matching idle or terminated webhook starts an ordinary root context. Automate.ax correlates both by session ID and resumes in their shared child; the webhook never inherits hidden causal ancestry. ## Sessions and control * [Start a session](/reference/integrations/anthropic/actions/start-session), [get it](/reference/integrations/anthropic/actions/get-session), [list sessions](/reference/integrations/anthropic/actions/list-sessions), or [update one](/reference/integrations/anthropic/actions/update-session). * [Send a message](/reference/integrations/anthropic/actions/send-message), [define an outcome](/reference/integrations/anthropic/actions/define-outcome), [confirm a tool](/reference/integrations/anthropic/actions/confirm-tool), [return a custom-tool result](/reference/integrations/anthropic/actions/submit-custom-tool-result), or [interrupt execution](/reference/integrations/anthropic/actions/interrupt-session). * [Send ordered provider events](/reference/integrations/anthropic/actions/send-session-events) when one request must contain multiple events, including a user event immediately followed by [system context](/reference/integrations/anthropic/actions/send-system-context). * Inspect [session events](/reference/integrations/anthropic/actions/list-session-events), [threads](/reference/integrations/anthropic/actions/list-session-threads), [thread events](/reference/integrations/anthropic/actions/list-session-thread-events), and [resources](/reference/integrations/anthropic/actions/list-session-resources). ## Agents and environments * [Create an agent](/reference/integrations/anthropic/actions/create-agent), [update it](/reference/integrations/anthropic/actions/update-agent), and [inspect immutable versions](/reference/integrations/anthropic/actions/list-agent-versions). * [Create a hosted environment](/reference/integrations/anthropic/actions/create-environment) and control packages plus unrestricted networking or networking restricted to specified domains. * Session creation accepts GitHub repositories, uploaded-file references, memory-store references, vault IDs, budgets, metadata, initial messages, outcome definitions, agent overrides, MCP servers, skills, and multi-agent rosters. Self-hosted environments, scheduled deployments, vault and credential management, memory-store management, file uploads, and skill management are outside this integration. You can attach IDs created through Anthropic APIs or Console. ## All actions * [Create Agent](/reference/integrations/anthropic/actions/create-agent) * [Get Agent](/reference/integrations/anthropic/actions/get-agent) * [List Agents](/reference/integrations/anthropic/actions/list-agents) * [Update Agent](/reference/integrations/anthropic/actions/update-agent) * [Archive Agent](/reference/integrations/anthropic/actions/archive-agent) * [List Agent Versions](/reference/integrations/anthropic/actions/list-agent-versions) * [Create Environment](/reference/integrations/anthropic/actions/create-environment) * [Get Environment](/reference/integrations/anthropic/actions/get-environment) * [List Environments](/reference/integrations/anthropic/actions/list-environments) * [Update Environment](/reference/integrations/anthropic/actions/update-environment) * [Archive Environment](/reference/integrations/anthropic/actions/archive-environment) * [Delete Environment](/reference/integrations/anthropic/actions/delete-environment) * [Start Session](/reference/integrations/anthropic/actions/start-session) * [Run Agent](/reference/integrations/anthropic/actions/run-agent) * [Get Session](/reference/integrations/anthropic/actions/get-session) * [List Sessions](/reference/integrations/anthropic/actions/list-sessions) * [Update Session](/reference/integrations/anthropic/actions/update-session) * [Archive Session](/reference/integrations/anthropic/actions/archive-session) * [Delete Session](/reference/integrations/anthropic/actions/delete-session) * [List Session Events](/reference/integrations/anthropic/actions/list-session-events) * [Send Session Events](/reference/integrations/anthropic/actions/send-session-events) * [Send Message](/reference/integrations/anthropic/actions/send-message) * [Send System Context](/reference/integrations/anthropic/actions/send-system-context) * [Define Outcome](/reference/integrations/anthropic/actions/define-outcome) * [Confirm Tool](/reference/integrations/anthropic/actions/confirm-tool) * [Submit Custom Tool Result](/reference/integrations/anthropic/actions/submit-custom-tool-result) * [Interrupt Session](/reference/integrations/anthropic/actions/interrupt-session) * [List Session Threads](/reference/integrations/anthropic/actions/list-session-threads) * [Get Session Thread](/reference/integrations/anthropic/actions/get-session-thread) * [Archive Session Thread](/reference/integrations/anthropic/actions/archive-session-thread) * [List Session Thread Events](/reference/integrations/anthropic/actions/list-session-thread-events) * [Add Session File](/reference/integrations/anthropic/actions/add-session-file) * [Get Session Resource](/reference/integrations/anthropic/actions/get-session-resource) * [List Session Resources](/reference/integrations/anthropic/actions/list-session-resources) * [Update Repository Token](/reference/integrations/anthropic/actions/update-repository-token) * [Delete Session Resource](/reference/integrations/anthropic/actions/delete-session-resource) ## All triggers * [On Agent Event](/reference/integrations/anthropic/triggers/on-agent-event) * [On Agent Created](/reference/integrations/anthropic/triggers/on-agent-created) * [On Agent Updated](/reference/integrations/anthropic/triggers/on-agent-updated) * [On Agent Archived](/reference/integrations/anthropic/triggers/on-agent-archived) * [On Agent Deleted](/reference/integrations/anthropic/triggers/on-agent-deleted) * [On Environment Event](/reference/integrations/anthropic/triggers/on-environment-event) * [On Environment Created](/reference/integrations/anthropic/triggers/on-environment-created) * [On Environment Updated](/reference/integrations/anthropic/triggers/on-environment-updated) * [On Environment Archived](/reference/integrations/anthropic/triggers/on-environment-archived) * [On Environment Deleted](/reference/integrations/anthropic/triggers/on-environment-deleted) * [On Session Event](/reference/integrations/anthropic/triggers/on-session-event) * [On Session Run Started](/reference/integrations/anthropic/triggers/on-session-run-started) * [On Session Idled](/reference/integrations/anthropic/triggers/on-session-idled) * [On Session Budget Reached](/reference/integrations/anthropic/triggers/on-session-budget-reached) * [On Session Rescheduled](/reference/integrations/anthropic/triggers/on-session-rescheduled) * [On Session Terminated](/reference/integrations/anthropic/triggers/on-session-terminated) * [On Session Thread Created](/reference/integrations/anthropic/triggers/on-session-thread-created) * [On Session Thread Idled](/reference/integrations/anthropic/triggers/on-session-thread-idled) * [On Session Thread Terminated](/reference/integrations/anthropic/triggers/on-session-thread-terminated) * [On Session Outcome Evaluation Ended](/reference/integrations/anthropic/triggers/on-session-outcome-evaluation-ended) * [On Session Updated](/reference/integrations/anthropic/triggers/on-session-updated) * [On Session Deleted](/reference/integrations/anthropic/triggers/on-session-deleted) ## Webhook behavior Anthropic webhooks contain resource IDs, not complete objects. Automate.ax verifies the Standard Webhooks signature and five-minute timestamp window, deduplicates retries by event ID, then fetches the authoritative agent, environment, session, and latest idle reason. Deliveries may arrive out of order and Anthropic does not provide webhook backfill, so use the resource-fetching actions when you need current state. Every action uses camelCase public fields and the official Anthropic client. Provider calls time out before the action lease. Read actions are replay-safe; creates, updates, sends, interrupts, archival, and deletion are not retried after an uncertain provider response. # Agent archived Source: https://docs.automate.ax/reference/integrations/anthropic/triggers/on-agent-archived Starts an automation when an agent is archived. `anthropic.onAgentArchived` starts an automation when an agent is archived. It corresponds to the `agent.archived` Anthropic webhook event. ## Example ```ts automations/anthropic-on-agent-archived.automation.ts theme={null} import { automation } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Agent archived", () => { const event = anthropic.onAgentArchived() anthropic.getAgent({ agentId: event.resourceId }) }) ``` ## Options Pass `account` to select a named Anthropic Managed Agents connection. The connection must include the workspace's webhook signing key. ## Event Returns a verified event with `id`, `createdAt`, `providerEventType`, `organizationId`, `workspaceId`, `resourceId`, `sessionThreadId` (`string` for thread lifecycle events, otherwise `null`), and the authoritative `resource`. Deleted resources are `null`. Session-idled events also include the latest `session.status_idle` event and its typed stop reason. Anthropic can retry or reorder deliveries. Automate.ax deduplicates the provider event ID, verifies five-minute signature freshness, and fetches current provider state before starting an independent root context. # Agent created Source: https://docs.automate.ax/reference/integrations/anthropic/triggers/on-agent-created Starts an automation when an agent is created. `anthropic.onAgentCreated` starts an automation when an agent is created. It corresponds to the `agent.created` Anthropic webhook event. ## Example ```ts automations/anthropic-on-agent-created.automation.ts theme={null} import { automation } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Agent created", () => { const event = anthropic.onAgentCreated() anthropic.getAgent({ agentId: event.resourceId }) }) ``` ## Options Pass `account` to select a named Anthropic Managed Agents connection. The connection must include the workspace's webhook signing key. ## Event Returns a verified event with `id`, `createdAt`, `providerEventType`, `organizationId`, `workspaceId`, `resourceId`, `sessionThreadId` (`string` for thread lifecycle events, otherwise `null`), and the authoritative `resource`. Deleted resources are `null`. Session-idled events also include the latest `session.status_idle` event and its typed stop reason. Anthropic can retry or reorder deliveries. Automate.ax deduplicates the provider event ID, verifies five-minute signature freshness, and fetches current provider state before starting an independent root context. # Agent deleted Source: https://docs.automate.ax/reference/integrations/anthropic/triggers/on-agent-deleted Starts an automation when an agent is deleted. `anthropic.onAgentDeleted` starts an automation when an agent is deleted. It corresponds to the `agent.deleted` Anthropic webhook event. ## Example ```ts automations/anthropic-on-agent-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Agent deleted", () => { const event = anthropic.onAgentDeleted() anthropic.listSessions({ agentId: event.resourceId, includeArchived: true }) }) ``` ## Options Pass `account` to select a named Anthropic Managed Agents connection. The connection must include the workspace's webhook signing key. ## Event Returns a verified event with `id`, `createdAt`, `providerEventType`, `organizationId`, `workspaceId`, `resourceId`, `sessionThreadId` (`string` for thread lifecycle events, otherwise `null`), and the authoritative `resource`. Deleted resources are `null`. Session-idled events also include the latest `session.status_idle` event and its typed stop reason. Anthropic can retry or reorder deliveries. Automate.ax deduplicates the provider event ID, verifies five-minute signature freshness, and fetches current provider state before starting an independent root context. # Agent event Source: https://docs.automate.ax/reference/integrations/anthropic/triggers/on-agent-event Starts an automation when any supported agent lifecycle. `anthropic.onAgentEvent` starts an automation when any supported agent lifecycle. It corresponds to the `agent.*` Anthropic webhook event. ## Example ```ts automations/anthropic-on-agent-event.automation.ts theme={null} import { automation } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Agent event", () => { const event = anthropic.onAgentEvent() anthropic.listAgents({ includeArchived: true }) }) ``` ## Options Pass `account` to select a named Anthropic Managed Agents connection. The connection must include the workspace's webhook signing key. ## Event Returns a verified event with `id`, `createdAt`, `providerEventType`, `organizationId`, `workspaceId`, `resourceId`, `sessionThreadId` (`string` for thread lifecycle events, otherwise `null`), and the authoritative `resource`. Deleted resources are `null`. Session-idled events also include the latest `session.status_idle` event and its typed stop reason. Anthropic can retry or reorder deliveries. Automate.ax deduplicates the provider event ID, verifies five-minute signature freshness, and fetches current provider state before starting an independent root context. # Agent updated Source: https://docs.automate.ax/reference/integrations/anthropic/triggers/on-agent-updated Starts an automation when an agent creates a new version. `anthropic.onAgentUpdated` starts an automation when an agent creates a new version. It corresponds to the `agent.updated` Anthropic webhook event. ## Example ```ts automations/anthropic-on-agent-updated.automation.ts theme={null} import { automation } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Agent updated", () => { const event = anthropic.onAgentUpdated() anthropic.getAgent({ agentId: event.resourceId }) }) ``` ## Options Pass `account` to select a named Anthropic Managed Agents connection. The connection must include the workspace's webhook signing key. ## Event Returns a verified event with `id`, `createdAt`, `providerEventType`, `organizationId`, `workspaceId`, `resourceId`, `sessionThreadId` (`string` for thread lifecycle events, otherwise `null`), and the authoritative `resource`. Deleted resources are `null`. Session-idled events also include the latest `session.status_idle` event and its typed stop reason. Anthropic can retry or reorder deliveries. Automate.ax deduplicates the provider event ID, verifies five-minute signature freshness, and fetches current provider state before starting an independent root context. # Environment archived Source: https://docs.automate.ax/reference/integrations/anthropic/triggers/on-environment-archived Starts an automation when an environment is archived. `anthropic.onEnvironmentArchived` starts an automation when an environment is archived. It corresponds to the `environment.archived` Anthropic webhook event. ## Example ```ts automations/anthropic-on-environment-archived.automation.ts theme={null} import { automation } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Environment archived", () => { const event = anthropic.onEnvironmentArchived() anthropic.getEnvironment({ environmentId: event.resourceId }) }) ``` ## Options Pass `account` to select a named Anthropic Managed Agents connection. The connection must include the workspace's webhook signing key. ## Event Returns a verified event with `id`, `createdAt`, `providerEventType`, `organizationId`, `workspaceId`, `resourceId`, `sessionThreadId` (`string` for thread lifecycle events, otherwise `null`), and the authoritative `resource`. Deleted resources are `null`. Session-idled events also include the latest `session.status_idle` event and its typed stop reason. Anthropic can retry or reorder deliveries. Automate.ax deduplicates the provider event ID, verifies five-minute signature freshness, and fetches current provider state before starting an independent root context. # Environment created Source: https://docs.automate.ax/reference/integrations/anthropic/triggers/on-environment-created Starts an automation when an environment is created. `anthropic.onEnvironmentCreated` starts an automation when an environment is created. It corresponds to the `environment.created` Anthropic webhook event. ## Example ```ts automations/anthropic-on-environment-created.automation.ts theme={null} import { automation } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Environment created", () => { const event = anthropic.onEnvironmentCreated() anthropic.getEnvironment({ environmentId: event.resourceId }) }) ``` ## Options Pass `account` to select a named Anthropic Managed Agents connection. The connection must include the workspace's webhook signing key. ## Event Returns a verified event with `id`, `createdAt`, `providerEventType`, `organizationId`, `workspaceId`, `resourceId`, `sessionThreadId` (`string` for thread lifecycle events, otherwise `null`), and the authoritative `resource`. Deleted resources are `null`. Session-idled events also include the latest `session.status_idle` event and its typed stop reason. Anthropic can retry or reorder deliveries. Automate.ax deduplicates the provider event ID, verifies five-minute signature freshness, and fetches current provider state before starting an independent root context. # Environment deleted Source: https://docs.automate.ax/reference/integrations/anthropic/triggers/on-environment-deleted Starts an automation when an environment is deleted. `anthropic.onEnvironmentDeleted` starts an automation when an environment is deleted. It corresponds to the `environment.deleted` Anthropic webhook event. ## Example ```ts automations/anthropic-on-environment-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Environment deleted", () => { const event = anthropic.onEnvironmentDeleted() anthropic.listEnvironments({ includeArchived: true }) }) ``` ## Options Pass `account` to select a named Anthropic Managed Agents connection. The connection must include the workspace's webhook signing key. ## Event Returns a verified event with `id`, `createdAt`, `providerEventType`, `organizationId`, `workspaceId`, `resourceId`, `sessionThreadId` (`string` for thread lifecycle events, otherwise `null`), and the authoritative `resource`. Deleted resources are `null`. Session-idled events also include the latest `session.status_idle` event and its typed stop reason. Anthropic can retry or reorder deliveries. Automate.ax deduplicates the provider event ID, verifies five-minute signature freshness, and fetches current provider state before starting an independent root context. # Environment event Source: https://docs.automate.ax/reference/integrations/anthropic/triggers/on-environment-event Starts an automation when any supported environment lifecycle event. `anthropic.onEnvironmentEvent` starts an automation when any supported environment lifecycle event. It corresponds to the `environment.*` Anthropic webhook event. ## Example ```ts automations/anthropic-on-environment-event.automation.ts theme={null} import { automation } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Environment event", () => { const event = anthropic.onEnvironmentEvent() anthropic.listEnvironments({ includeArchived: true }) }) ``` ## Options Pass `account` to select a named Anthropic Managed Agents connection. The connection must include the workspace's webhook signing key. ## Event Returns a verified event with `id`, `createdAt`, `providerEventType`, `organizationId`, `workspaceId`, `resourceId`, `sessionThreadId` (`string` for thread lifecycle events, otherwise `null`), and the authoritative `resource`. Deleted resources are `null`. Session-idled events also include the latest `session.status_idle` event and its typed stop reason. Anthropic can retry or reorder deliveries. Automate.ax deduplicates the provider event ID, verifies five-minute signature freshness, and fetches current provider state before starting an independent root context. # Environment updated Source: https://docs.automate.ax/reference/integrations/anthropic/triggers/on-environment-updated Starts an automation when an environment is updated. `anthropic.onEnvironmentUpdated` starts an automation when an environment is updated. It corresponds to the `environment.updated` Anthropic webhook event. ## Example ```ts automations/anthropic-on-environment-updated.automation.ts theme={null} import { automation } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Environment updated", () => { const event = anthropic.onEnvironmentUpdated() anthropic.getEnvironment({ environmentId: event.resourceId }) }) ``` ## Options Pass `account` to select a named Anthropic Managed Agents connection. The connection must include the workspace's webhook signing key. ## Event Returns a verified event with `id`, `createdAt`, `providerEventType`, `organizationId`, `workspaceId`, `resourceId`, `sessionThreadId` (`string` for thread lifecycle events, otherwise `null`), and the authoritative `resource`. Deleted resources are `null`. Session-idled events also include the latest `session.status_idle` event and its typed stop reason. Anthropic can retry or reorder deliveries. Automate.ax deduplicates the provider event ID, verifies five-minute signature freshness, and fetches current provider state before starting an independent root context. # Session budget reached Source: https://docs.automate.ax/reference/integrations/anthropic/triggers/on-session-budget-reached Starts an automation when a session reaches its spend ceiling. `anthropic.onSessionBudgetReached` starts an automation when a session reaches its spend ceiling. It corresponds to the `session.budget_reached` Anthropic webhook event. ## Example ```ts automations/anthropic-on-session-budget-reached.automation.ts theme={null} import { automation } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Session budget reached", () => { const event = anthropic.onSessionBudgetReached() anthropic.getSession({ sessionId: event.resourceId }) }) ``` ## Options Pass `account` to select a named Anthropic Managed Agents connection. The connection must include the workspace's webhook signing key. ## Event Returns a verified event with `id`, `createdAt`, `providerEventType`, `organizationId`, `workspaceId`, `resourceId`, `sessionThreadId` (`string` for thread lifecycle events, otherwise `null`), and the authoritative `resource`. Deleted resources are `null`. Session-idled events also include the latest `session.status_idle` event and its typed stop reason. Anthropic can retry or reorder deliveries. Automate.ax deduplicates the provider event ID, verifies five-minute signature freshness, and fetches current provider state before starting an independent root context. # Session deleted Source: https://docs.automate.ax/reference/integrations/anthropic/triggers/on-session-deleted Starts an automation when a session is deleted. `anthropic.onSessionDeleted` starts an automation when a session is deleted. It corresponds to the `session.deleted` Anthropic webhook event. ## Example ```ts automations/anthropic-on-session-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Session deleted", () => { const event = anthropic.onSessionDeleted() anthropic.listSessions({ includeArchived: true }) }) ``` ## Options Pass `account` to select a named Anthropic Managed Agents connection. The connection must include the workspace's webhook signing key. ## Event Returns a verified event with `id`, `createdAt`, `providerEventType`, `organizationId`, `workspaceId`, `resourceId`, `sessionThreadId` (`string` for thread lifecycle events, otherwise `null`), and the authoritative `resource`. Deleted resources are `null`. Session-idled events also include the latest `session.status_idle` event and its typed stop reason. Anthropic can retry or reorder deliveries. Automate.ax deduplicates the provider event ID, verifies five-minute signature freshness, and fetches current provider state before starting an independent root context. # Session event Source: https://docs.automate.ax/reference/integrations/anthropic/triggers/on-session-event Starts an automation when any supported session lifecycle event. `anthropic.onSessionEvent` starts an automation when any supported session lifecycle event. It corresponds to the `session.*` Anthropic webhook event. ## Example ```ts automations/anthropic-on-session-event.automation.ts theme={null} import { automation } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Session event", () => { const event = anthropic.onSessionEvent() anthropic.getSession({ sessionId: event.resourceId }) }) ``` ## Options Pass `account` to select a named Anthropic Managed Agents connection. The connection must include the workspace's webhook signing key. ## Event Returns a verified event with `id`, `createdAt`, `providerEventType`, `organizationId`, `workspaceId`, `resourceId`, `sessionThreadId` (`string` for thread lifecycle events, otherwise `null`), and the authoritative `resource`. Deleted resources are `null`. Session-idled events also include the latest `session.status_idle` event and its typed stop reason. Anthropic can retry or reorder deliveries. Automate.ax deduplicates the provider event ID, verifies five-minute signature freshness, and fetches current provider state before starting an independent root context. # Session idled Source: https://docs.automate.ax/reference/integrations/anthropic/triggers/on-session-idled Starts an automation when a session turn stops and waits. `anthropic.onSessionIdled` starts an automation when a session turn stops and waits. It corresponds to the `session.status_idled` Anthropic webhook event. ## Example ```ts automations/anthropic-on-session-idled.automation.ts theme={null} import { automation } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Session idled", () => { const event = anthropic.onSessionIdled() anthropic.getSession({ sessionId: event.resourceId }) }) ``` ## Options Pass `account` to select a named Anthropic Managed Agents connection. The connection must include the workspace's webhook signing key. ## Event Returns a verified event with `id`, `createdAt`, `providerEventType`, `organizationId`, `workspaceId`, `resourceId`, `sessionThreadId` (`string` for thread lifecycle events, otherwise `null`), and the authoritative `resource`. Deleted resources are `null`. Session-idled events also include the latest `session.status_idle` event and its typed stop reason. Anthropic can retry or reorder deliveries. Automate.ax deduplicates the provider event ID, verifies five-minute signature freshness, and fetches current provider state before starting an independent root context. # Outcome evaluation ended Source: https://docs.automate.ax/reference/integrations/anthropic/triggers/on-session-outcome-evaluation-ended Starts an automation when an outcome evaluation finishes. `anthropic.onSessionOutcomeEvaluationEnded` starts an automation when an outcome evaluation finishes. It corresponds to the `session.outcome_evaluation_ended` Anthropic webhook event. ## Example ```ts automations/anthropic-on-session-outcome-evaluation-ended.automation.ts theme={null} import { automation } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Outcome evaluation ended", () => { const event = anthropic.onSessionOutcomeEvaluationEnded() anthropic.getSession({ sessionId: event.resourceId }) }) ``` ## Options Pass `account` to select a named Anthropic Managed Agents connection. The connection must include the workspace's webhook signing key. ## Event Returns a verified event with `id`, `createdAt`, `providerEventType`, `organizationId`, `workspaceId`, `resourceId`, `sessionThreadId` (`string` for thread lifecycle events, otherwise `null`), and the authoritative `resource`. Deleted resources are `null`. Session-idled events also include the latest `session.status_idle` event and its typed stop reason. Anthropic can retry or reorder deliveries. Automate.ax deduplicates the provider event ID, verifies five-minute signature freshness, and fetches current provider state before starting an independent root context. # Session rescheduled Source: https://docs.automate.ax/reference/integrations/anthropic/triggers/on-session-rescheduled Starts an automation when Anthropic reschedules a session after an error eligible for retry. `anthropic.onSessionRescheduled` starts an automation when Anthropic reschedules a session after an error eligible for retry. It corresponds to the `session.status_rescheduled` Anthropic webhook event. ## Example ```ts automations/anthropic-on-session-rescheduled.automation.ts theme={null} import { automation } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Session rescheduled", () => { const event = anthropic.onSessionRescheduled() anthropic.getSession({ sessionId: event.resourceId }) }) ``` ## Options Pass `account` to select a named Anthropic Managed Agents connection. The connection must include the workspace's webhook signing key. ## Event Returns a verified event with `id`, `createdAt`, `providerEventType`, `organizationId`, `workspaceId`, `resourceId`, `sessionThreadId` (`string` for thread lifecycle events, otherwise `null`), and the authoritative `resource`. Deleted resources are `null`. Session-idled events also include the latest `session.status_idle` event and its typed stop reason. Anthropic can retry or reorder deliveries. Automate.ax deduplicates the provider event ID, verifies five-minute signature freshness, and fetches current provider state before starting an independent root context. # Session run started Source: https://docs.automate.ax/reference/integrations/anthropic/triggers/on-session-run-started Starts an automation when a session begins or resumes a run. `anthropic.onSessionRunStarted` starts an automation when a session begins or resumes a run. It corresponds to the `session.status_run_started` Anthropic webhook event. ## Example ```ts automations/anthropic-on-session-run-started.automation.ts theme={null} import { automation } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Session run started", () => { const event = anthropic.onSessionRunStarted() anthropic.getSession({ sessionId: event.resourceId }) }) ``` ## Options Pass `account` to select a named Anthropic Managed Agents connection. The connection must include the workspace's webhook signing key. ## Event Returns a verified event with `id`, `createdAt`, `providerEventType`, `organizationId`, `workspaceId`, `resourceId`, `sessionThreadId` (`string` for thread lifecycle events, otherwise `null`), and the authoritative `resource`. Deleted resources are `null`. Session-idled events also include the latest `session.status_idle` event and its typed stop reason. Anthropic can retry or reorder deliveries. Automate.ax deduplicates the provider event ID, verifies five-minute signature freshness, and fetches current provider state before starting an independent root context. # Session terminated Source: https://docs.automate.ax/reference/integrations/anthropic/triggers/on-session-terminated Starts an automation when a session terminates. `anthropic.onSessionTerminated` starts an automation when a session terminates. It corresponds to the `session.status_terminated` Anthropic webhook event. ## Example ```ts automations/anthropic-on-session-terminated.automation.ts theme={null} import { automation } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Session terminated", () => { const event = anthropic.onSessionTerminated() anthropic.getSession({ sessionId: event.resourceId }) }) ``` ## Options Pass `account` to select a named Anthropic Managed Agents connection. The connection must include the workspace's webhook signing key. ## Event Returns a verified event with `id`, `createdAt`, `providerEventType`, `organizationId`, `workspaceId`, `resourceId`, `sessionThreadId` (`string` for thread lifecycle events, otherwise `null`), and the authoritative `resource`. Deleted resources are `null`. Session-idled events also include the latest `session.status_idle` event and its typed stop reason. Anthropic can retry or reorder deliveries. Automate.ax deduplicates the provider event ID, verifies five-minute signature freshness, and fetches current provider state before starting an independent root context. # Session thread created Source: https://docs.automate.ax/reference/integrations/anthropic/triggers/on-session-thread-created Starts an automation when a multi-agent session creates a child thread. `anthropic.onSessionThreadCreated` starts an automation when a multi-agent session creates a child thread. It corresponds to the `session.thread_created` Anthropic webhook event. ## Example ```ts automations/anthropic-on-session-thread-created.automation.ts theme={null} import { automation } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Session thread created", () => { const event = anthropic.onSessionThreadCreated() anthropic.getSession({ sessionId: event.resourceId }) }) ``` ## Options Pass `account` to select a named Anthropic Managed Agents connection. The connection must include the workspace's webhook signing key. ## Event Returns a verified event with `id`, `createdAt`, `providerEventType`, `organizationId`, `workspaceId`, `resourceId`, `sessionThreadId` (`string` for thread lifecycle events, otherwise `null`), and the authoritative `resource`. Deleted resources are `null`. Session-idled events also include the latest `session.status_idle` event and its typed stop reason. Anthropic can retry or reorder deliveries. Automate.ax deduplicates the provider event ID, verifies five-minute signature freshness, and fetches current provider state before starting an independent root context. # Session thread idled Source: https://docs.automate.ax/reference/integrations/anthropic/triggers/on-session-thread-idled Starts an automation when a session thread becomes idle. `anthropic.onSessionThreadIdled` starts an automation when a session thread becomes idle. It corresponds to the `session.thread_idled` Anthropic webhook event. ## Example ```ts automations/anthropic-on-session-thread-idled.automation.ts theme={null} import { automation } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Session thread idled", () => { const event = anthropic.onSessionThreadIdled() anthropic.getSession({ sessionId: event.resourceId }) }) ``` ## Options Pass `account` to select a named Anthropic Managed Agents connection. The connection must include the workspace's webhook signing key. ## Event Returns a verified event with `id`, `createdAt`, `providerEventType`, `organizationId`, `workspaceId`, `resourceId`, `sessionThreadId` (`string` for thread lifecycle events, otherwise `null`), and the authoritative `resource`. Deleted resources are `null`. Session-idled events also include the latest `session.status_idle` event and its typed stop reason. Anthropic can retry or reorder deliveries. Automate.ax deduplicates the provider event ID, verifies five-minute signature freshness, and fetches current provider state before starting an independent root context. # Session thread terminated Source: https://docs.automate.ax/reference/integrations/anthropic/triggers/on-session-thread-terminated Starts an automation when a session thread terminates. `anthropic.onSessionThreadTerminated` starts an automation when a session thread terminates. It corresponds to the `session.thread_terminated` Anthropic webhook event. ## Example ```ts automations/anthropic-on-session-thread-terminated.automation.ts theme={null} import { automation } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Session thread terminated", () => { const event = anthropic.onSessionThreadTerminated() anthropic.getSession({ sessionId: event.resourceId }) }) ``` ## Options Pass `account` to select a named Anthropic Managed Agents connection. The connection must include the workspace's webhook signing key. ## Event Returns a verified event with `id`, `createdAt`, `providerEventType`, `organizationId`, `workspaceId`, `resourceId`, `sessionThreadId` (`string` for thread lifecycle events, otherwise `null`), and the authoritative `resource`. Deleted resources are `null`. Session-idled events also include the latest `session.status_idle` event and its typed stop reason. Anthropic can retry or reorder deliveries. Automate.ax deduplicates the provider event ID, verifies five-minute signature freshness, and fetches current provider state before starting an independent root context. # Session updated Source: https://docs.automate.ax/reference/integrations/anthropic/triggers/on-session-updated Starts an automation when session configuration changes. `anthropic.onSessionUpdated` starts an automation when session configuration changes. It corresponds to the `session.updated` Anthropic webhook event. ## Example ```ts automations/anthropic-on-session-updated.automation.ts theme={null} import { automation } from "automate.ax" import { anthropic } from "automate.ax/anthropic" export default automation("Session updated", () => { const event = anthropic.onSessionUpdated() anthropic.getSession({ sessionId: event.resourceId }) }) ``` ## Options Pass `account` to select a named Anthropic Managed Agents connection. The connection must include the workspace's webhook signing key. ## Event Returns a verified event with `id`, `createdAt`, `providerEventType`, `organizationId`, `workspaceId`, `resourceId`, `sessionThreadId` (`string` for thread lifecycle events, otherwise `null`), and the authoritative `resource`. Deleted resources are `null`. Session-idled events also include the latest `session.status_idle` event and its typed stop reason. Anthropic can retry or reorder deliveries. Automate.ax deduplicates the provider event ID, verifies five-minute signature freshness, and fetches current provider state before starting an independent root context. # Abort Actor build Source: https://docs.automate.ax/reference/integrations/apify/actions/abort-actor-build Stops a running Apify Actor build. `apify.abortActorBuild` stops a running Apify Actor build. ## Example ```ts automations/apify-abort-actor-build.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { apify } from "automate.ax/apify" export default automation("Abort Actor build", () => { onHttpRequest({ scope: "automation" }) apify.abortActorBuild({ buildId: "build-id" }) }) ``` ## Inputs `buildId` is the Actor build ID. ## Output Returns the updated Actor build. Aborting changes provider state and may be unsafe to repeat after an uncertain response. # Abort Actor run Source: https://docs.automate.ax/reference/integrations/apify/actions/abort-run Stops a running Apify Actor run immediately or gracefully. `apify.abortRun` stops a running Apify Actor run immediately or gracefully. ## Example ```ts automations/apify-abort-run.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { apify } from "automate.ax/apify" export default automation("Abort Actor run", () => { onHttpRequest({ scope: "automation" }) apify.abortRun({ runId: "run-id", gracefully: true }) }) ``` ## Inputs `runId` identifies the run. Set `gracefully` to `true` to let the Actor handle its abort signal before Apify stops it; the provider default is an immediate abort. ## Output Returns the updated Actor run. Aborting changes provider state and may be unsafe to repeat after an uncertain response. # Get Actor build Source: https://docs.automate.ax/reference/integrations/apify/actions/get-actor-build Gets the current state of one Apify Actor build. `apify.getActorBuild` gets the current state of one Apify Actor build. ## Example ```ts automations/apify-get-actor-build.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { apify } from "automate.ax/apify" export default automation("Get Actor build", () => { onHttpRequest({ scope: "automation" }) apify.getActorBuild({ buildId: "build-id" }) }) ``` ## Inputs `buildId` is the Actor build ID. ## Output Returns the Actor build with status, Actor ID, build number, timestamps, options, statistics, and usage. This read is safe to retry. The action fails when the build does not exist or the token cannot read it. # Get key-value store record Source: https://docs.automate.ax/reference/integrations/apify/actions/get-key-value-store-record Gets a JSON or text record from an Apify key-value store. `apify.getKeyValueStoreRecord` gets a JSON or text record from an Apify key-value store. ## Example ```ts automations/apify-get-key-value-store-record.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { apify } from "automate.ax/apify" export default automation("Get key-value store record", () => { onHttpRequest({ scope: "automation" }) apify.getKeyValueStoreRecord({ storeId: "store-id", key: "OUTPUT", }) }) ``` ## Inputs `storeId` is the key-value store ID or name. `key` is the exact record key. ## Output Returns `key`, `value`, and the optional `contentType`. JSON values stay structured; text values are strings. The action fails when the record is missing. Binary record bodies are outside this JSON-safe action. # Get Actor run Source: https://docs.automate.ax/reference/integrations/apify/actions/get-run Gets the current state and storage IDs for one Apify Actor run. `apify.getRun` gets the current state and storage IDs for one Apify Actor run. ## Example ```ts automations/apify-get-run.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { apify } from "automate.ax/apify" export default automation("Get Actor run", () => { onHttpRequest({ scope: "automation" }) apify.getRun({ runId: "run-id" }) }) ``` ## Inputs `runId` is the Actor run ID. ## Output Returns the Actor run, including status, Actor and task IDs, build ID, default dataset, key-value store and request queue IDs, timestamps, exit code, statistics, and usage. This read is safe to retry. The action fails when the run does not exist or the connected token cannot read it. # Get Actor run log Source: https://docs.automate.ax/reference/integrations/apify/actions/get-run-log Gets processed or raw text from an Apify Actor run log. `apify.getRunLog` gets processed or raw text from an Apify Actor run log. ## Example ```ts automations/apify-get-run-log.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { apify } from "automate.ax/apify" export default automation("Get Actor run log", () => { onHttpRequest({ scope: "automation" }) apify.getRunLog({ runId: "run-id", raw: true }) }) ``` ## Inputs `runId` identifies the Actor run. Set `raw` to `true` for the unprocessed log; omit it for Apify's default processed text. ## Output Returns `{ log: string }`. The action fails when the run log is unavailable. Large logs remain subject to Apify's API response limits. # List dataset items Source: https://docs.automate.ax/reference/integrations/apify/actions/list-dataset-items Reads one page of structured items from an Apify dataset. `apify.listDatasetItems` reads one page of structured items from an Apify dataset. ## Example ```ts automations/apify-list-dataset-items.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { apify } from "automate.ax/apify" export default automation("List dataset items", () => { onHttpRequest({ scope: "automation" }) apify.listDatasetItems({ datasetId: "dataset-id", clean: true, limit: 100, }) }) ``` ## Inputs | Field | Type | Description | | - | - | - | | `datasetId` | `string` | Required dataset ID or name. | | `limit`, `offset` | `number` | Page size and starting offset. | | `desc` | `boolean` | Reverse item order. | | `clean` | `boolean` | Apply Apify's clean-item transformation. | | `fields`, `omit` | `string[]` | Select or omit fields. | | `flatten`, `unwind` | `string[] \| string` | Transform nested values. | | `skipEmpty`, `skipHidden` | `boolean` | Exclude empty or hidden fields. | | `view` | `string` | Use a saved dataset view. | ## Output Returns JSON-object `items` plus `count`, `total`, `limit`, `offset`, and `desc` pagination metadata. This action exposes structured JSON items. Use Apify storage exports directly when you need CSV, XML, or another download format. # List Actor runs Source: https://docs.automate.ax/reference/integrations/apify/actions/list-runs Lists Apify Actor runs with resource, status, and time filters. `apify.listRuns` lists Apify Actor runs with resource, status, and time filters. ## Example ```ts automations/apify-list-runs.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { apify } from "automate.ax/apify" export default automation("List Actor runs", () => { onHttpRequest({ scope: "automation" }) apify.listRuns({ actorId: "apify/web-scraper", status: ["SUCCEEDED", "FAILED"], desc: true, limit: 100, }) }) ``` ## Inputs Pass at most one of `actorId` or `taskId`. Omit both to list account-wide runs. | Field | Type | Default | Description | | - | - | - | - | | `actorId` | `string` | — | Limit to one Actor. | | `taskId` | `string` | — | Limit to one saved task. | | `status` | `ApifyJobStatus \| ApifyJobStatus[]` | — | Filter by one or more statuses. | | `startedAfter` | ISO 8601 string | — | Only runs started after this time. | | `startedBefore` | ISO 8601 string | — | Only runs started before this time. | | `desc` | `boolean` | Provider default | Return newest runs first. | | `limit` | `number` | Provider default | Page size from 1 to 1000. | | `offset` | `number` | `0` | Runs to skip. | ## Output Returns `items` plus `count`, `total`, `limit`, `offset`, and `desc` pagination metadata. Statuses include `READY`, `RUNNING`, `SUCCEEDED`, `FAILED`, `TIMING-OUT`, `TIMED-OUT`, `ABORTING`, and `ABORTED`. # Resurrect Actor run Source: https://docs.automate.ax/reference/integrations/apify/actions/resurrect-run Starts a new run from a finished Apify Actor run and its storage resources. `apify.resurrectRun` starts a new run from a finished Apify Actor run and its storage resources. ## Example ```ts automations/apify-resurrect-run.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { apify } from "automate.ax/apify" export default automation("Resurrect Actor run", () => { onHttpRequest({ scope: "automation" }) apify.resurrectRun({ runId: "run-id", memoryMbytes: 2048, timeoutSecs: 300, }) }) ``` ## Inputs `runId` is required. You can override `build`, `maxItems`, `maxTotalChargeUsd`, `memoryMbytes`, `restartOnError`, and `timeoutSecs` with the same constraints as [Start Actor](/reference/integrations/apify/actions/start-actor). ## Output Returns the new Actor run created by Apify. Resurrection reuses the finished run's input and storage resources but creates a distinct run. Repeat calls create additional runs. # Start Actor Source: https://docs.automate.ax/reference/integrations/apify/actions/start-actor Starts an Apify Actor run and returns its initial state. `apify.startActor` starts an Apify Actor run and returns its initial state. ## Example ```ts automations/apify-start-actor.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { apify } from "automate.ax/apify" export default automation("Start Actor", () => { onHttpRequest({ scope: "automation" }) apify.startActor({ actorId: "apify/web-scraper", input: { startUrls: [{ url: "https://example.com" }] }, memoryMbytes: 1024, }) }) ``` ## Inputs | Field | Type | Required | Description | | - | - | - | - | | `actorId` | `string` | Yes | Actor ID or `username/name` reference. | | `input` | JSON | No | Actor-defined input. | | `build` | `string` | No | Build tag or number. | | `maxItems` | `number` | No | Maximum paid dataset items. | | `maxTotalChargeUsd` | `number` | No | Maximum total charge in US dollars. | | `memoryMbytes` | `number` | No | Power-of-two memory from 128 to 32768 MB. | | `restartOnError` | `boolean` | No | Restart after a container error. | | `timeoutSecs` | `number` | No | Maximum run time; `0` disables the timeout. | ## Output Returns the Actor run, including its ID, status, storage IDs, timestamps, options, and usage. Dates are ISO 8601 strings. The action returns immediately after Apify creates the run. Starting the same Actor twice creates two runs, so automatic retries are disabled after an uncertain provider response. # Start Actor build Source: https://docs.automate.ax/reference/integrations/apify/actions/start-actor-build Starts a build for one Apify Actor version. `apify.startActorBuild` starts a build for one Apify Actor version. ## Example ```ts automations/apify-start-actor-build.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { apify } from "automate.ax/apify" export default automation("Start Actor build", () => { onHttpRequest({ scope: "automation" }) apify.startActorBuild({ actorId: "actor-id", versionNumber: "1.0", tag: "latest", useCache: true, }) }) ``` ## Inputs | Field | Type | Required | Description | | - | - | - | - | | `actorId` | `string` | Yes | Actor ID or `username/name` reference. | | `versionNumber` | `string` | Yes | Actor version to build. | | `tag` | `string` | No | Tag assigned to a successful build. | | `useCache` | `boolean` | No | Reuse cached Docker layers. | | `betaPackages` | `boolean` | No | Use Apify beta packages. | ## Output Returns the build immediately with its ID, status, build number, timestamps, options, statistics, and usage. Starting another build creates a distinct provider job, so automatic retries are disabled after an uncertain response. # Start task Source: https://docs.automate.ax/reference/integrations/apify/actions/start-task Starts a saved Apify task and returns its initial run state. `apify.startTask` starts a saved Apify task and returns its initial run state. ## Example ```ts automations/apify-start-task.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { apify } from "automate.ax/apify" export default automation("Start task", () => { onHttpRequest({ scope: "automation" }) apify.startTask({ taskId: "username/task-name", input: { maxRequestsPerCrawl: 100 }, }) }) ``` ## Inputs | Field | Type | Required | Description | | - | - | - | - | | `taskId` | `string` | Yes | Task ID or `username/name` reference. | | `input` | `Record` | No | Properties that override the task's saved input. | | `build` | `string` | No | Build tag or number. | | `maxItems` | `number` | No | Maximum paid dataset items. | | `maxTotalChargeUsd` | `number` | No | Maximum total charge in US dollars. | | `memoryMbytes` | `number` | No | Power-of-two memory from 128 to 32768 MB. | | `restartOnError` | `boolean` | No | Restart after a container error. | | `timeoutSecs` | `number` | No | Maximum run time; `0` disables the timeout. | ## Output Returns the created Actor run with status, storage IDs, timestamps, options, and usage. The action does not wait for completion. Input properties override, rather than replace, the task's saved input. Starting the task again creates another run. # Wait for Actor build Source: https://docs.automate.ax/reference/integrations/apify/actions/wait-for-actor-build Waits for an Apify Actor build and returns its latest state. `apify.waitForActorBuild` waits for an Apify Actor build and returns its latest state. ## Example ```ts automations/apify-wait-for-actor-build.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { apify } from "automate.ax/apify" export default automation("Wait for Actor build", () => { onHttpRequest({ scope: "automation" }) apify.waitForActorBuild({ buildId: "build-id", waitSecs: 120 }) }) ``` ## Inputs `buildId` is required. `waitSecs` is an optional positive client-side limit; omit it to wait indefinitely. ## Output Returns the latest build state. A wait limit can return a build that is still running. Use `status` to distinguish completion from a caller-defined wait limit. # Wait for Actor run Source: https://docs.automate.ax/reference/integrations/apify/actions/wait-for-run Waits for an Apify Actor run and returns its latest state. `apify.waitForRun` waits for an Apify Actor run and returns its latest state. ## Example ```ts automations/apify-wait-for-run.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { apify } from "automate.ax/apify" export default automation("Wait for Actor run", () => { onHttpRequest({ scope: "automation" }) apify.waitForRun({ runId: "run-id", waitSecs: 120 }) }) ``` ## Inputs | Field | Type | Required | Description | | - | - | - | - | | `runId` | `string` | Yes | Actor run ID. | | `waitSecs` | `number` | No | Maximum client-side wait in seconds. Omit to wait indefinitely. | ## Output Returns the latest run state. A timeout returns the still-running state; it does not abort the run. This action polls through Apify's official client. Use the returned `status` to distinguish completion from a caller-defined wait limit. # Apify Source: https://docs.automate.ax/reference/integrations/apify/index Run Apify Actors and tasks, inspect their results, and react to Actor run and build events. Use Apify to start Actors and tasks, inspect runs, datasets, key-value stores, and logs, manage Actor builds, and start automations from run or build events. Connect Apify with an API token from **Settings → Integrations** in the Apify Console. ## Exports ```ts theme={null} import { apify, apifyAccount, getApifyClient } from "automate.ax/apify" ``` * `apify` contains the packaged Apify actions and triggers. * `apifyAccount("name")` selects a named Apify connection. * `getApifyClient` creates the authenticated Apify client for a custom account-backed action. ## Triggers * [Actor run event](/reference/integrations/apify/triggers/on-actor-run-event) * [Actor run created](/reference/integrations/apify/triggers/on-actor-run-created) * [Actor run succeeded](/reference/integrations/apify/triggers/on-actor-run-succeeded) * [Actor run failed](/reference/integrations/apify/triggers/on-actor-run-failed) * [Actor run aborted](/reference/integrations/apify/triggers/on-actor-run-aborted) * [Actor run timed out](/reference/integrations/apify/triggers/on-actor-run-timed-out) * [Actor run resurrected](/reference/integrations/apify/triggers/on-actor-run-resurrected) * [Actor build event](/reference/integrations/apify/triggers/on-actor-build-event) * [Actor build created](/reference/integrations/apify/triggers/on-actor-build-created) * [Actor build succeeded](/reference/integrations/apify/triggers/on-actor-build-succeeded) * [Actor build failed](/reference/integrations/apify/triggers/on-actor-build-failed) * [Actor build aborted](/reference/integrations/apify/triggers/on-actor-build-aborted) * [Actor build timed out](/reference/integrations/apify/triggers/on-actor-build-timed-out) ## Actions * [Start Actor](/reference/integrations/apify/actions/start-actor) * [Start task](/reference/integrations/apify/actions/start-task) * [Get Actor run](/reference/integrations/apify/actions/get-run) * [List Actor runs](/reference/integrations/apify/actions/list-runs) * [Wait for Actor run](/reference/integrations/apify/actions/wait-for-run) * [Abort Actor run](/reference/integrations/apify/actions/abort-run) * [Resurrect Actor run](/reference/integrations/apify/actions/resurrect-run) * [List dataset items](/reference/integrations/apify/actions/list-dataset-items) * [Get key-value store record](/reference/integrations/apify/actions/get-key-value-store-record) * [Get Actor run log](/reference/integrations/apify/actions/get-run-log) * [Start Actor build](/reference/integrations/apify/actions/start-actor-build) * [Get Actor build](/reference/integrations/apify/actions/get-actor-build) * [Wait for Actor build](/reference/integrations/apify/actions/wait-for-actor-build) * [Abort Actor build](/reference/integrations/apify/actions/abort-actor-build) # Actor build aborted Source: https://docs.automate.ax/reference/integrations/apify/triggers/on-actor-build-aborted Starts when a build for one Apify Actor is aborted. `apify.onActorBuildAborted` starts when a build for one Apify Actor is aborted. ## Example ```ts automations/apify-on-actor-build-aborted.automation.ts theme={null} import { automation } from "automate.ax" import { apify } from "automate.ax/apify" export default automation("Actor build aborted", () => { const event = apify.onActorBuildAborted({ actorId: "actor-id" }) event.resource.id }) ``` ## Inputs `actorId` is the provider ID from the Actor's Apify Console URL. Pass `account` to select a named Apify account. The token must be able to create webhooks and read the selected Actor. ## Output Returns `eventType`, `createdAt`, `userId`, `eventData` with `actorId` and `actorBuildId`, plus the normalized Actor build in `resource`. Build dates are ISO 8601 strings. This trigger subscribes to Apify's `ABORTED` webhook event. Automate.ax manages the resource-scoped webhook, authenticates its secret header, and deduplicates retries by Apify dispatch ID. Each authenticated delivery starts an ordinary root context. # Actor build created Source: https://docs.automate.ax/reference/integrations/apify/triggers/on-actor-build-created Starts when Apify creates a build for one Actor. `apify.onActorBuildCreated` starts when Apify creates a build for one Actor. ## Example ```ts automations/apify-on-actor-build-created.automation.ts theme={null} import { automation } from "automate.ax" import { apify } from "automate.ax/apify" export default automation("Actor build created", () => { const event = apify.onActorBuildCreated({ actorId: "actor-id" }) event.resource.id }) ``` ## Inputs `actorId` is the provider ID from the Actor's Apify Console URL. Pass `account` to select a named Apify account. The token must be able to create webhooks and read the selected Actor. ## Output Returns `eventType`, `createdAt`, `userId`, `eventData` with `actorId` and `actorBuildId`, plus the normalized Actor build in `resource`. Build dates are ISO 8601 strings. This trigger subscribes to Apify's `CREATED` webhook event. Automate.ax manages the resource-scoped webhook, authenticates its secret header, and deduplicates retries by Apify dispatch ID. Each authenticated delivery starts an ordinary root context. # Actor build event Source: https://docs.automate.ax/reference/integrations/apify/triggers/on-actor-build-event Starts for any supported lifecycle event from one Apify Actor build. `apify.onActorBuildEvent` starts for any supported lifecycle event from one Apify Actor build. ## Example ```ts automations/apify-on-actor-build-event.automation.ts theme={null} import { automation } from "automate.ax" import { apify } from "automate.ax/apify" export default automation("Actor build event", () => { const event = apify.onActorBuildEvent({ actorId: "actor-id" }) event.resource.id }) ``` ## Inputs `actorId` is the provider ID from the Actor's Apify Console URL. Pass `account` to select a named Apify account. The token must be able to create webhooks and read the selected Actor. ## Output Returns `eventType`, `createdAt`, `userId`, `eventData` with `actorId` and `actorBuildId`, plus the normalized Actor build in `resource`. Build dates are ISO 8601 strings. This trigger subscribes to `CREATED`, `SUCCEEDED`, `FAILED`, `ABORTED`, and `TIMED_OUT` webhook events. Automate.ax manages the resource-scoped webhook, authenticates its secret header, and deduplicates retries by Apify dispatch ID. Each authenticated delivery starts an ordinary root context. # Actor build failed Source: https://docs.automate.ax/reference/integrations/apify/triggers/on-actor-build-failed Starts when a build for one Apify Actor fails. `apify.onActorBuildFailed` starts when a build for one Apify Actor fails. ## Example ```ts automations/apify-on-actor-build-failed.automation.ts theme={null} import { automation } from "automate.ax" import { apify } from "automate.ax/apify" export default automation("Actor build failed", () => { const event = apify.onActorBuildFailed({ actorId: "actor-id" }) event.resource.id }) ``` ## Inputs `actorId` is the provider ID from the Actor's Apify Console URL. Pass `account` to select a named Apify account. The token must be able to create webhooks and read the selected Actor. ## Output Returns `eventType`, `createdAt`, `userId`, `eventData` with `actorId` and `actorBuildId`, plus the normalized Actor build in `resource`. Build dates are ISO 8601 strings. This trigger subscribes to Apify's `FAILED` webhook event. Automate.ax manages the resource-scoped webhook, authenticates its secret header, and deduplicates retries by Apify dispatch ID. Each authenticated delivery starts an ordinary root context. # Actor build succeeded Source: https://docs.automate.ax/reference/integrations/apify/triggers/on-actor-build-succeeded Starts when a build for one Apify Actor succeeds. `apify.onActorBuildSucceeded` starts when a build for one Apify Actor succeeds. ## Example ```ts automations/apify-on-actor-build-succeeded.automation.ts theme={null} import { automation } from "automate.ax" import { apify } from "automate.ax/apify" export default automation("Actor build succeeded", () => { const event = apify.onActorBuildSucceeded({ actorId: "actor-id" }) event.resource.id }) ``` ## Inputs `actorId` is the provider ID from the Actor's Apify Console URL. Pass `account` to select a named Apify account. The token must be able to create webhooks and read the selected Actor. ## Output Returns `eventType`, `createdAt`, `userId`, `eventData` with `actorId` and `actorBuildId`, plus the normalized Actor build in `resource`. Build dates are ISO 8601 strings. This trigger subscribes to Apify's `SUCCEEDED` webhook event. Automate.ax manages the resource-scoped webhook, authenticates its secret header, and deduplicates retries by Apify dispatch ID. Each authenticated delivery starts an ordinary root context. # Actor build timed out Source: https://docs.automate.ax/reference/integrations/apify/triggers/on-actor-build-timed-out Starts when a build for one Apify Actor times out. `apify.onActorBuildTimedOut` starts when a build for one Apify Actor times out. ## Example ```ts automations/apify-on-actor-build-timed-out.automation.ts theme={null} import { automation } from "automate.ax" import { apify } from "automate.ax/apify" export default automation("Actor build timed out", () => { const event = apify.onActorBuildTimedOut({ actorId: "actor-id" }) event.resource.id }) ``` ## Inputs `actorId` is the provider ID from the Actor's Apify Console URL. Pass `account` to select a named Apify account. The token must be able to create webhooks and read the selected Actor. ## Output Returns `eventType`, `createdAt`, `userId`, `eventData` with `actorId` and `actorBuildId`, plus the normalized Actor build in `resource`. Build dates are ISO 8601 strings. This trigger subscribes to Apify's `TIMED_OUT` webhook event. Automate.ax manages the resource-scoped webhook, authenticates its secret header, and deduplicates retries by Apify dispatch ID. Each authenticated delivery starts an ordinary root context. # Actor run aborted Source: https://docs.automate.ax/reference/integrations/apify/triggers/on-actor-run-aborted Starts when a run for one Apify Actor or task is aborted. `apify.onActorRunAborted` starts when a run for one Apify Actor or task is aborted. ## Example ```ts automations/apify-on-actor-run-aborted.automation.ts theme={null} import { automation } from "automate.ax" import { apify } from "automate.ax/apify" export default automation("Actor run aborted", () => { const event = apify.onActorRunAborted({ actorId: "actor-id" }) event.resource.id }) ``` ## Inputs `actorId` watches every run of one Actor. `taskId` watches every run of one saved task. Pass exactly one provider ID from the resource's Apify Console URL. Pass `account` to select a named Apify account. The token must be able to create webhooks and read the selected Actor or task. ## Output Returns `eventType`, `createdAt`, `userId`, `eventData` with `actorId`, `actorRunId`, and optional `actorTaskId`, plus the normalized Actor run in `resource`. Run dates are ISO 8601 strings. This trigger subscribes to Apify's `ABORTED` webhook event. Automate.ax manages the resource-scoped webhook, authenticates its secret header, and deduplicates retries by Apify dispatch ID. Each authenticated delivery starts an ordinary root context. # Actor run created Source: https://docs.automate.ax/reference/integrations/apify/triggers/on-actor-run-created Starts when Apify creates a run for one Actor or task. `apify.onActorRunCreated` starts when Apify creates a run for one Actor or task. ## Example ```ts automations/apify-on-actor-run-created.automation.ts theme={null} import { automation } from "automate.ax" import { apify } from "automate.ax/apify" export default automation("Actor run created", () => { const event = apify.onActorRunCreated({ actorId: "actor-id" }) event.resource.id }) ``` ## Inputs `actorId` watches every run of one Actor. `taskId` watches every run of one saved task. Pass exactly one provider ID from the resource's Apify Console URL. Pass `account` to select a named Apify account. The token must be able to create webhooks and read the selected Actor or task. ## Output Returns `eventType`, `createdAt`, `userId`, `eventData` with `actorId`, `actorRunId`, and optional `actorTaskId`, plus the normalized Actor run in `resource`. Run dates are ISO 8601 strings. This trigger subscribes to Apify's `CREATED` webhook event. Automate.ax manages the resource-scoped webhook, authenticates its secret header, and deduplicates retries by Apify dispatch ID. Each authenticated delivery starts an ordinary root context. # Actor run event Source: https://docs.automate.ax/reference/integrations/apify/triggers/on-actor-run-event Starts for any supported lifecycle event from one Apify Actor or task run. `apify.onActorRunEvent` starts for any supported lifecycle event from one Apify Actor or task run. ## Example ```ts automations/apify-on-actor-run-event.automation.ts theme={null} import { automation } from "automate.ax" import { apify } from "automate.ax/apify" export default automation("Actor run event", () => { const event = apify.onActorRunEvent({ actorId: "actor-id" }) event.resource.id }) ``` ## Inputs `actorId` watches every run of one Actor. `taskId` watches every run of one saved task. Pass exactly one provider ID from the resource's Apify Console URL. Pass `account` to select a named Apify account. The token must be able to create webhooks and read the selected Actor or task. ## Output Returns `eventType`, `createdAt`, `userId`, `eventData` with `actorId`, `actorRunId`, and optional `actorTaskId`, plus the normalized Actor run in `resource`. Run dates are ISO 8601 strings. This trigger subscribes to `CREATED`, `SUCCEEDED`, `FAILED`, `ABORTED`, `TIMED_OUT`, and `RESURRECTED` webhook events. Automate.ax manages the resource-scoped webhook, authenticates its secret header, and deduplicates retries by Apify dispatch ID. Each authenticated delivery starts an ordinary root context. # Actor run failed Source: https://docs.automate.ax/reference/integrations/apify/triggers/on-actor-run-failed Starts when a run for one Apify Actor or task fails. `apify.onActorRunFailed` starts when a run for one Apify Actor or task fails. ## Example ```ts automations/apify-on-actor-run-failed.automation.ts theme={null} import { automation } from "automate.ax" import { apify } from "automate.ax/apify" export default automation("Actor run failed", () => { const event = apify.onActorRunFailed({ actorId: "actor-id" }) event.resource.id }) ``` ## Inputs `actorId` watches every run of one Actor. `taskId` watches every run of one saved task. Pass exactly one provider ID from the resource's Apify Console URL. Pass `account` to select a named Apify account. The token must be able to create webhooks and read the selected Actor or task. ## Output Returns `eventType`, `createdAt`, `userId`, `eventData` with `actorId`, `actorRunId`, and optional `actorTaskId`, plus the normalized Actor run in `resource`. Run dates are ISO 8601 strings. This trigger subscribes to Apify's `FAILED` webhook event. Automate.ax manages the resource-scoped webhook, authenticates its secret header, and deduplicates retries by Apify dispatch ID. Each authenticated delivery starts an ordinary root context. # Actor run resurrected Source: https://docs.automate.ax/reference/integrations/apify/triggers/on-actor-run-resurrected Starts when a finished Apify Actor or task run is resurrected. `apify.onActorRunResurrected` starts when a finished Apify Actor or task run is resurrected. ## Example ```ts automations/apify-on-actor-run-resurrected.automation.ts theme={null} import { automation } from "automate.ax" import { apify } from "automate.ax/apify" export default automation("Actor run resurrected", () => { const event = apify.onActorRunResurrected({ actorId: "actor-id" }) event.resource.id }) ``` ## Inputs `actorId` watches every run of one Actor. `taskId` watches every run of one saved task. Pass exactly one provider ID from the resource's Apify Console URL. Pass `account` to select a named Apify account. The token must be able to create webhooks and read the selected Actor or task. ## Output Returns `eventType`, `createdAt`, `userId`, `eventData` with `actorId`, `actorRunId`, and optional `actorTaskId`, plus the normalized Actor run in `resource`. Run dates are ISO 8601 strings. This trigger subscribes to Apify's `RESURRECTED` webhook event. Automate.ax manages the resource-scoped webhook, authenticates its secret header, and deduplicates retries by Apify dispatch ID. Each authenticated delivery starts an ordinary root context. # Actor run succeeded Source: https://docs.automate.ax/reference/integrations/apify/triggers/on-actor-run-succeeded Starts when a run for one Apify Actor or task succeeds. `apify.onActorRunSucceeded` starts when a run for one Apify Actor or task succeeds. ## Example ```ts automations/apify-on-actor-run-succeeded.automation.ts theme={null} import { automation } from "automate.ax" import { apify } from "automate.ax/apify" export default automation("Actor run succeeded", () => { const event = apify.onActorRunSucceeded({ actorId: "actor-id" }) event.resource.id }) ``` ## Inputs `actorId` watches every run of one Actor. `taskId` watches every run of one saved task. Pass exactly one provider ID from the resource's Apify Console URL. Pass `account` to select a named Apify account. The token must be able to create webhooks and read the selected Actor or task. ## Output Returns `eventType`, `createdAt`, `userId`, `eventData` with `actorId`, `actorRunId`, and optional `actorTaskId`, plus the normalized Actor run in `resource`. Run dates are ISO 8601 strings. This trigger subscribes to Apify's `SUCCEEDED` webhook event. Automate.ax manages the resource-scoped webhook, authenticates its secret header, and deduplicates retries by Apify dispatch ID. Each authenticated delivery starts an ordinary root context. # Actor run timed out Source: https://docs.automate.ax/reference/integrations/apify/triggers/on-actor-run-timed-out Starts when a run for one Apify Actor or task times out. `apify.onActorRunTimedOut` starts when a run for one Apify Actor or task times out. ## Example ```ts automations/apify-on-actor-run-timed-out.automation.ts theme={null} import { automation } from "automate.ax" import { apify } from "automate.ax/apify" export default automation("Actor run timed out", () => { const event = apify.onActorRunTimedOut({ actorId: "actor-id" }) event.resource.id }) ``` ## Inputs `actorId` watches every run of one Actor. `taskId` watches every run of one saved task. Pass exactly one provider ID from the resource's Apify Console URL. Pass `account` to select a named Apify account. The token must be able to create webhooks and read the selected Actor or task. ## Output Returns `eventType`, `createdAt`, `userId`, `eventData` with `actorId`, `actorRunId`, and optional `actorTaskId`, plus the normalized Actor run in `resource`. Run dates are ISO 8601 strings. This trigger subscribes to Apify's `TIMED_OUT` webhook event. Automate.ax manages the resource-scoped webhook, authenticates its secret header, and deduplicates retries by Apify dispatch ID. Each authenticated delivery starts an ordinary root context. # Activate sequence Source: https://docs.automate.ax/reference/integrations/apollo/actions/activate-sequence Activate an inactive Apollo sequence with at least one step. `apollo.activateSequence` activates a sequence selected by exact name, ID, or `{ id }`. ```ts automations/activate-apollo-sequence.automation.ts theme={null} import { apollo } from "automate.ax/apollo" import { automation, onDashboardRun } from "automate.ax" export default automation("Activate an Apollo sequence", () => { onDashboardRun({ title: "Activate an Apollo sequence" }) apollo.activateSequence({ sequence: { id: "sequence-id" } }) }) ``` Provide `sequence`. Optional second argument `{ account }` selects the binding. Returns a mutation receipt with `sequenceId`, returned steps, and optional active, archived, deleted, and scheduled-contact state. Apollo rejects activation when the sequence has no step or otherwise fails approval. # Add contacts to sequence Source: https://docs.automate.ax/reference/integrations/apollo/actions/add-contacts-to-sequence Enroll Apollo contacts or named lists in a sequence. `apollo.addContactsToSequence` enrolls contacts, named lists, or both through one or more linked sending mailboxes. ```ts automations/enroll-apollo-contacts.automation.ts theme={null} import { apollo } from "automate.ax/apollo" import { automation, onDashboardRun } from "automate.ax" export default automation("Enroll Apollo leads", () => { onDashboardRun({ title: "Enroll Apollo leads" }) apollo.addContactsToSequence({ sequence: "Outbound follow-up", contacts: ["ada@example.com"], emailAccounts: [{ id: "mailbox-id" }], status: "active", }) }) ``` Provide `sequence` and a non-empty `emailAccounts` array. Provide `contacts`, `listNames`, or both. Optional inputs select a sender address and attributed user, initial `active`/`paused` status, verification behavior, and whether Apollo may include queued, other-sequence, job-change, missing-email, same-company, or unverified contacts. `autoUnpauseAt` is an offset `ISO` datetime and requires `status: "paused"`. Optional second argument `{ account }` selects the binding. Returns enrolled `contacts`, the normalized `sequence`, canonical `emailAccountIds`, `skippedContacts` keyed by contact ID, sequence `steps` and `touches`, and optional `userId`. Inspect `skippedContacts`. Provider rules can exclude part of an otherwise successful request. # Add records to lists Source: https://docs.automate.ax/reference/integrations/apollo/actions/add-records-to-list Add Apollo contacts or accounts to named lists. `apollo.addRecordsToLists` adds contacts or accounts to named lists and creates missing lists when Apollo permits. ```ts automations/add-apollo-list-members.automation.ts theme={null} import { apollo } from "automate.ax/apollo" import { automation, onDashboardRun } from "automate.ax" export default automation("Add contacts to Apollo lists", () => { onDashboardRun({ title: "Add contacts to Apollo lists" }) apollo.addRecordsToLists({ recordType: "contacts", records: ["ada@example.com", "grace@example.com"], listNames: ["Event Leads"], }) }) ``` Set `recordType` to `"contacts" | "accounts"`. Provide non-empty `records` and `listNames` arrays. Set `async: true` for background processing of a large change. Optional second argument `{ account }` selects the Apollo binding. Returns `{ lists, job?, message? }`. Synchronous changes return affected lists. Asynchronous changes return a job with `jobId`, entity IDs, progress, type, and optional batch/user metadata. # Archive sequence Source: https://docs.automate.ax/reference/integrations/apollo/actions/archive-sequence Archive an Apollo sequence and finish its contacts. `apollo.archiveSequence` archives a sequence selected by exact name, ID, or `{ id }`. ```ts automations/archive-apollo-sequence.automation.ts theme={null} import { apollo } from "automate.ax/apollo" import { automation, onDashboardRun } from "automate.ax" export default automation("Archive an Apollo sequence", () => { onDashboardRun({ title: "Archive an Apollo sequence" }) apollo.archiveSequence({ sequence: { id: "sequence-id" } }) }) ``` Provide `sequence`. Optional second argument `{ account }` selects the binding. Returns a mutation receipt with `sequenceId`, steps, and provider state. > [!WARNING] > > Archiving finishes the sequence's current contacts. Use > `apollo.deactivateSequence` when you intend only to pause an active sequence. # Bulk create accounts Source: https://docs.automate.ax/reference/integrations/apollo/actions/bulk-create-accounts Create up to 100 Apollo accounts and separate deduplication matches. `apollo.bulkCreateAccounts` creates up to 100 saved accounts in one request. ```ts automations/bulk-create-apollo-accounts.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Import Apollo accounts", () => { onDashboardRun({ title: "Import Apollo accounts" }) apollo.bulkCreateAccounts({ accounts: [ { name: "Acme", domain: "acme.example" }, { name: "Globex", domain: "globex.example" }, ], listNames: ["2026 Targets"], }) }) ``` | Input | Type | Required | Default | Description | | - | - | - | - | - | | `accounts` | `BulkAccountInput[]` | Yes | None | 1–100 accounts. Each needs `name` or `domain`. | | `listNames` | `string[]` | No | None | Exact list names applied to every new account. | | `runDedupe` | `boolean` | No | `true` | Deduplicate by domain, organization ID, and name. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"apollo">` | No | Project default | Connected workspace. | Each account can include `name`, `domain`, `phone`, `rawAddress`, `stage`, `owner`, `parentAccount`, `organizationId`, `CRM` IDs, social URLs, and `customFields`. Returns `{ createdAccounts, existingAccounts }`, keeping deduplication matches separate from new records. # Bulk create contacts Source: https://docs.automate.ax/reference/integrations/apollo/actions/bulk-create-contacts Create up to 100 Apollo contacts and separate duplicate matches. `apollo.bulkCreateContacts` creates up to 100 contacts in one request. ```ts automations/bulk-create-apollo-contacts.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Import Apollo contacts", () => { onDashboardRun({ title: "Import Apollo contacts" }) apollo.bulkCreateContacts({ contacts: [ { email: "ada@example.com", firstName: "Ada" }, { email: "grace@example.com", firstName: "Grace" }, ], owner: "seller@example.com", listNames: ["Imported"], }) }) ``` | Input | Type | Required | Default | Description | | - | - | - | - | - | | `contacts` | `BulkContactInput[]` | Yes | None | 1–100 contacts. | | `owner` | `ApolloReference` | No | None | Owner applied to every new contact. | | `listNames` | `string[]` | No | None | Exact list names applied to every new contact. | | `runDedupe` | `boolean` | No | `true` | Return existing matches instead of creating duplicates. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"apollo">` | No | Project default | Connected workspace. | Each contact may include account/stage references, names, email, title, organization, LinkedIn URL, address, and custom fields. Returns `{ createdContacts, existingContacts }`. # Bulk create tasks Source: https://docs.automate.ax/reference/integrations/apollo/actions/bulk-create-tasks Create the same task for several Apollo contacts. `apollo.bulkCreateTasks` creates one task per resolved contact in one request. ```ts automations/bulk-create-apollo-tasks.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Create Apollo follow-up tasks", () => { onDashboardRun({ title: "Create Apollo follow-up tasks" }) apollo.bulkCreateTasks({ contacts: ["ada@example.com", "grace@example.com"], user: "seller@example.com", type: "action_item", dueAt: "2026-08-06T17:00:00Z", note: "Send the event follow-up", }) }) ``` Provide a non-empty `contacts` reference array along with `user`, `type`, and `dueAt`. `priority` defaults to `"medium"`, `status` to `"scheduled"`, and `note` is optional. Optional second argument `{ account }` selects the binding. Returns one `ApolloTask` per created task. # Bulk enrich organizations Source: https://docs.automate.ax/reference/integrations/apollo/actions/bulk-enrich-organizations Enrich up to 10 Apollo organizations. `apollo.bulkEnrichOrganizations` enriches 1–10 companies and charges one Apollo credit per match. ```ts automations/bulk-enrich-apollo-organizations.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Enrich companies", () => { onDashboardRun({ title: "Enrich companies" }) apollo.bulkEnrichOrganizations({ organizations: [{ domain: "example.com" }, { name: "Acme" }], }) }) ``` Each organization needs at least one of `domain`, `linkedinUrl`, `name`, or `website`. Optional second argument `{ account }` selects the binding. Returns normalized `organizations`, overall `status`, missing and unique-enriched counts, and optional submitted/unique counts and partial provider error details. # Bulk enrich people Source: https://docs.automate.ax/reference/integrations/apollo/actions/bulk-enrich-people Enrich up to 10 Apollo people. `apollo.bulkEnrichPeople` enriches 1–10 people for up to 90 base credits. ```ts automations/bulk-enrich-apollo-people.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Enrich Apollo prospects", () => { onDashboardRun({ title: "Enrich Apollo prospects" }) apollo.bulkEnrichPeople({ people: [{ personId: "person-one" }, { email: "ada@example.com" }], }) }) ``` `people` contains 1–10 person-match objects with the same identity fields as `apollo.enrichPerson`. Shared personal-email, phone, waterfall, and HTTPS webhook options have the same defaults and requirements. Optional second argument `{ account }` selects the binding. Returns request-ordered `matches`, with `null` for missing people, plus `status`, `totalRequested`, optional unique/missing counts, credits, partial error data, `requestId`, and provider-native phone/waterfall status. Asynchronous options can charge even when a waterfall vendor finds no match. # Bulk update accounts Source: https://docs.automate.ax/reference/integrations/apollo/actions/bulk-update-accounts Update up to 100 saved Apollo accounts. `apollo.bulkUpdateAccounts` synchronously updates the name, owner, stage, or custom fields of up to 100 accounts. ```ts automations/bulk-update-apollo-accounts.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Assign Apollo accounts", () => { onDashboardRun({ title: "Assign Apollo accounts" }) apollo.bulkUpdateAccounts({ updates: [ { account: { id: "account-one" }, owner: "ada@example.com" }, { account: { id: "account-two" }, stage: "Qualified" }, ], }) }) ``` | Input | Type | Required | Description | | - | - | - | - | | `updates` | `AccountUpdate[]` | Yes | 1–100 updates. | | `updates[].account` | `ApolloReference` | Yes | Target account. | | `updates[].name` | `string` | At least one change | New name for the account. | | `updates[].stage`, `updates[].owner` | `ApolloReference` | At least one change | New stage or owner. | | `updates[].customFields` | `Record` | At least one change | Values keyed by field ID. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"apollo">` | No | Connected workspace. Defaults to project binding. | Returns sparse mutation receipts with `id` and optional `accountStageId`, `ownerId`, and `crmOwnerId`. Use `apollo.getAccount` for the complete updated record. # Bulk update contacts Source: https://docs.automate.ax/reference/integrations/apollo/actions/bulk-update-contacts Update up to 100 saved Apollo contacts. `apollo.bulkUpdateContacts` synchronously updates up to 100 contacts. ```ts automations/bulk-update-apollo-contacts.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Update Apollo contacts", () => { onDashboardRun({ title: "Update Apollo contacts" }) apollo.bulkUpdateContacts({ updates: [ { contact: "ada@example.com", title: "CTO" }, { contact: { id: "contact-id" }, account: "example.com" }, ], }) }) ``` `updates` must contain 1–100 items. Every item requires `contact`, identified by ID, exact email/name, or `{ id }`, plus at least one of `account`, `email`, `firstName`, `lastName`, `linkedinUrl`, `organizationName`, `presentAddress`, `title`, or `customFields`. Optional second argument `{ account }` selects the Apollo binding. Returns the updated `ApolloContact[]` in provider order. # Complete task Source: https://docs.automate.ax/reference/integrations/apollo/actions/complete-task Complete an Apollo task with an optional note. `apollo.completeTask` completes one task. ```ts automations/complete-apollo-task.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Complete an Apollo task", () => { onDashboardRun({ title: "Complete an Apollo task" }) apollo.completeTask({ task: { id: "task-id" }, note: "Reached the contact" }) }) ``` Provide `task` as an ID, exact title, or `{ id }`. Optional `note` adds a note. Optional second argument `{ account }` selects the binding. Returns the updated `ApolloTask`. # Create account Source: https://docs.automate.ax/reference/integrations/apollo/actions/create-account Create an Apollo account with optional owner, stage, and custom fields. `apollo.createAccount` creates a workspace account from at least a name or domain. ```ts automations/create-apollo-account.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Create an Apollo account", () => { onDashboardRun({ title: "Create an Apollo account" }) apollo.createAccount({ name: "Acme, Inc.", domain: "acme.example", stage: "Qualified", owner: "seller@example.com", }) }) ``` | Input | Type | Required | Description | | - | - | - | - | | `name` | `string` | One identity required | Name for the account. | | `domain` | `string` | One identity required | Primary domain without `www`. | | `stage` | `ApolloReference` | No | Stage ID, exact name, or `{ id }`. | | `owner` | `ApolloReference` | No | Owner ID, exact email/name, or `{ id }`. | | `phone` | `string` | No | Main phone number. | | `rawAddress` | `string` | No | Human-readable location. | | `customFields` | `Record` | No | Values keyed by Apollo field ID. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"apollo">` | No | Connected workspace. Defaults to project binding. | Returns the created `ApolloAccount`. Stage and owner strings must resolve to a unique exact match. # Create call Source: https://docs.automate.ax/reference/integrations/apollo/actions/create-call Create a phone-call activity in Apollo. `apollo.createCall` logs a phone-call activity and associates it with Apollo records. ```ts automations/create-apollo-call.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Log a call", () => { onDashboardRun({ title: "Log a call" }) apollo.createCall({ contact: "ada@example.com", status: "completed", logged: true, durationSeconds: 420, note: "Requested a proposal", }) }) ``` Contact, account, and user fields accept semantic references or `{ id }`. You can also set numbers, timestamps, duration, purpose, outcome, status, and note. Returns the created call. This action requires an Apollo master API key. Apollo's OAuth app registration omits the required call scope. # Create contact Source: https://docs.automate.ax/reference/integrations/apollo/actions/create-contact Create or upsert an Apollo contact. `apollo.createContact` creates a contact. Set `runDedupe` only to upsert a match and overwrite its fields. ```ts automations/create-apollo-contact.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Create an Apollo contact", () => { onDashboardRun({ title: "Create an Apollo contact" }) apollo.createContact({ email: "ada@example.com", firstName: "Ada", lastName: "Lovelace", title: "VP Engineering", associatedAccount: "example.com", }) }) ``` Provide at least one contact field. Supported fields are `email`, `firstName`, `lastName`, `title`, `organizationName`, `websiteUrl`, `associatedAccount`, `stage`, `listNames`, five phone fields, `presentAddress`, and `customFields`. `runDedupe` defaults to `false`. Optional second argument `{ account }` selects the Apollo binding. Returns the created or matched `ApolloContact`. > [!WARNING] > > `runDedupe: true` is an upsert, not a read-only duplicate check. Apollo can > overwrite supplied fields on an existing matching contact. # Create custom field Source: https://docs.automate.ax/reference/integrations/apollo/actions/create-custom-field Create a custom field in Apollo. `apollo.createCustomField` creates a custom field for contacts, accounts, or deals. ```ts automations/create-apollo-custom-field.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Create a renewal field", () => { onDashboardRun({ title: "Create a renewal field" }) apollo.createCustomField({ label: "Renewal owner", modality: "account", type: "string", maxLength: 120, }) }) ``` `modality` accepts `contact`, `account`, or `opportunity`. `type` accepts `string`, `textarea`, `number`, `date`, `datetime`, or `boolean`. Returns the new field's update-ready composite ID, label, modality, type, and optional maximum length. # Create deal Source: https://docs.automate.ax/reference/integrations/apollo/actions/create-deal Create a deal in Apollo. `apollo.createDeal` creates a deal and can associate it with a saved account, owner, and stage. ```ts automations/create-apollo-deal.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Create a deal", () => { onDashboardRun({ title: "Create a deal" }) apollo.createDeal({ name: "Acme expansion", account: "acme.com", stage: "Qualified", amount: 25000, }) }) ``` `name` is required. `account`, `owner`, and `stage` accept semantic references or `{ id }`; `amount`, `closedDate`, and `customFields` are optional. Returns the created `ApolloDeal`. # Create email draft Source: https://docs.automate.ax/reference/integrations/apollo/actions/create-email-draft Create an unsent Apollo email draft. `apollo.createEmailDraft` creates an unsent email for a saved contact or as a reply to an existing Apollo message. ```ts automations/create-apollo-email-draft.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Draft an email", () => { onDashboardRun({ title: "Draft an email" }) apollo.createEmailDraft({ contact: "ada@example.com", subject: "Following up", bodyHtml: "

Would Tuesday work?

", }) }) ``` Provide `contact` or `inResponseToMessageId`. Optional fields include recipients, template, attachments, subject, body, task, and tracking. Returns the draft as an `ApolloEmail`. # Create list Source: https://docs.automate.ax/reference/integrations/apollo/actions/create-list Create an Apollo contact or account list. `apollo.createList` creates a named list for one Apollo record type. ```ts automations/create-apollo-list.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Create an Apollo target list", () => { onDashboardRun({ title: "Create an Apollo target list" }) apollo.createList({ name: "2026 Targets", recordType: "accounts" }) }) ``` Provide `name` and `recordType: "contacts" | "accounts"`. `bookOfBusiness?: boolean` is available only for account lists. Optional second argument `{ account }` selects the Apollo binding. Returns the created `ApolloList`. # Create sequence Source: https://docs.automate.ax/reference/integrations/apollo/actions/create-sequence Create an Apollo sequence with ordered steps. `apollo.createSequence` creates a sequence with optional steps and email touches. ```ts automations/create-apollo-sequence.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Create an outbound sequence", () => { onDashboardRun({ title: "Create an outbound sequence" }) apollo.createSequence({ name: "Founder outreach", steps: [{ type: "manual_email", waitTime: 0, waitMode: "day" }], }) }) ``` `name` is required. Relative sequences require `waitTime` and `waitMode` on every step; exact-time sequences require `exactAt`. An active sequence requires at least one step. Returns `{ sequence, steps, touches }`. # Create task Source: https://docs.automate.ax/reference/integrations/apollo/actions/create-task Create an Apollo task for a saved contact. `apollo.createTask` assigns an Apollo user a scheduled, completed, or skipped task. ```ts automations/create-apollo-task.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Create an Apollo call task", () => { onDashboardRun({ title: "Create an Apollo call task" }) apollo.createTask({ contact: "ada@example.com", user: "seller@example.com", type: "call", dueAt: new Date("2026-08-06T17:00:00Z"), title: "Call Ada", }) }) ``` Provide `contact`, `user`, `type`, and `dueAt: Date | ISO string`. Types include `action_item`, `call`, LinkedIn step variants, and `outreach_manual_email`. `priority` defaults to `"medium"`. `status` defaults to `"scheduled"`. `title` and `note` are optional. Optional second argument `{ account }` selects the binding. Returns the created `ApolloTask`. # Deactivate sequence Source: https://docs.automate.ax/reference/integrations/apollo/actions/deactivate-sequence Deactivate an Apollo sequence and pause its contacts. `apollo.deactivateSequence` stops a sequence selected by exact name, ID, or `{ id }`. ```ts automations/deactivate-apollo-sequence.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Pause an Apollo sequence", () => { onDashboardRun({ title: "Pause an Apollo sequence" }) apollo.deactivateSequence({ sequence: "Outbound follow-up" }) }) ``` Provide `sequence`. Optional second argument `{ account }` selects the binding. Returns a mutation receipt with `sequenceId`, steps, and provider state. Deactivation pauses contacts. It doesn't remove them or mark them finished. # Enrich organization Source: https://docs.automate.ax/reference/integrations/apollo/actions/enrich-organization Enrich an organization by domain, LinkedIn URL, name, or website. `apollo.enrichOrganization` matches a company and returns its organization data. A match costs one Apollo credit. ```ts automations/enrich-apollo-organization.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Enrich a company", () => { onDashboardRun({ title: "Enrich a company" }) apollo.enrichOrganization({ domain: "example.com" }) }) ``` Provide at least one of `domain`, `linkedinUrl`, `name`, or `website`. Optional second argument `{ account }` selects the binding. Returns `{ organization: ApolloOrganization | null }`. A no-match result is `null`, not an action failure. # Enrich person Source: https://docs.automate.ax/reference/integrations/apollo/actions/enrich-person Enrich an Apollo person from identity data or an ID. Depending on the result and plan, `apollo.enrichPerson` matches and enriches one person for 1–9 Apollo credits. ```ts automations/enrich-apollo-person.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Enrich an Apollo prospect", () => { onDashboardRun({ title: "Enrich an Apollo prospect" }) apollo.enrichPerson({ personId: "person-id", revealPersonalEmails: true }) }) ``` Identify the person with `personId`, `email`, a 32/64-character `hashedEmail`, `linkedinUrl`, `name`, or first/last name, optionally with employer `domain` or `organizationName`. `revealPersonalEmails` defaults to `false`. `revealPhoneNumber`, `runWaterfallEmail`, and `runWaterfallPhone` also default to `false` and require a public HTTPS `webhookUrl`. Optional second argument `{ account }` selects the binding. Returns `{ person: ApolloPerson | null; requestId?: string | number }`. Use `apollo.pollWebhookResult` to check asynchronous phone and waterfall data that arrives through the webhook. Waterfall vendors may charge even without a match. # Export conversations Source: https://docs.automate.ax/reference/integrations/apollo/actions/export-conversations Start an Apollo conversation export. `apollo.exportConversations` starts an asynchronous export for a UTC time range. ```ts automations/export-apollo-conversations.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Export conversations", () => { onDashboardRun({ title: "Export conversations" }) apollo.exportConversations({ startTime: "2026-08-01T00:00:00Z", endTime: "2026-09-01T00:00:00Z", email: "owner@example.com", }) }) ``` `startTime` must precede `endTime`; `email` must belong to a valid Apollo team member. Apollo charges 0–1 credit for each exported conversation, so broad ranges can consume many credits. Returns `{ exportId, statusUrl }`. Use `apollo.getConversationExport` to retrieve the completed download URL. # Get account Source: https://docs.automate.ax/reference/integrations/apollo/actions/get-account Get an Apollo account by ID, exact name, or domain. `apollo.getAccount` returns a saved account's current workspace data. ```ts automations/get-apollo-account.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Get an Apollo account", () => { onDashboardRun({ title: "Get an Apollo account" }) apollo.getAccount({ target: { id: "account-id" } }) }) ``` | Input | Type | Required | Default | Description | | - | - | - | - | - | | `target` | `ApolloReference` | Yes | None | Account ID, exact name/domain, or `{ id }`. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"apollo">` | No | Project default | Connected Apollo workspace. | Returns an `ApolloAccount` containing `id`, `name`, `domain?`, `phone?`, `accountStageId?`, `ownerId?`, `organizationId?`, `labelIds`, `customFields`, timestamps, and contact/activity metadata when Apollo supplies them. A plain name or domain must resolve uniquely. Pass `{ id }` when you already have it. # Get API usage Source: https://docs.automate.ax/reference/integrations/apollo/actions/get-api-usage Get Apollo API usage by endpoint. `apollo.getApiUsage` returns request limits and usage for Apollo endpoint groups. ```ts automations/get-apollo-api-usage.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Inspect Apollo API usage", () => { onDashboardRun({ title: "Inspect Apollo API usage" }) apollo.getApiUsage() }) ``` The action has no schema input fields. Optional second argument `{ account }` defaults to the project binding. Returns `{ endpoints }`. Every entry has an `endpoint` key and optional `minute`, `hour`, and `day` windows containing `consumed`, `remaining`, and `limit`. Apollo returns only windows applicable to the connected plan and operation. # Get contact Source: https://docs.automate.ax/reference/integrations/apollo/actions/get-contact Get an Apollo contact by ID, exact email, or exact name. `apollo.getContact` returns one contact saved in your Apollo workspace. ```ts automations/get-apollo-contact.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Get an Apollo contact", () => { onDashboardRun({ title: "Get an Apollo contact" }) apollo.getContact({ contact: "ada@example.com" }) }) ``` | Input | Type | Required | Default | Description | | - | - | - | - | - | | `contact` | `ApolloReference` | Yes | None | Contact ID, exact email/name, or `{ id }`. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"apollo">` | No | Project default | Connected workspace. | Returns an `ApolloContact` with stable `id`, identity and job fields, stage, owner, account and organization links, list and sequence IDs, custom fields, and timestamps when Apollo supplies them. # Get contact sequence activity Source: https://docs.automate.ax/reference/integrations/apollo/actions/get-contact-sequence-activity Get a contact's recent Apollo sequence events. `apollo.getContactSequenceActivity` returns a contact's recent events, optionally for one sequence. ```ts automations/get-apollo-sequence-activity.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Inspect Apollo sequence activity", () => { onDashboardRun({ title: "Inspect Apollo sequence activity" }) apollo.getContactSequenceActivity({ contact: "ada@example.com", sequence: "Outbound follow-up", limit: 20, }) }) ``` Provide `contact`. `sequence` is optional. `limit` defaults to `50` and accepts 1–50. Optional second argument `{ account }` selects the binding. Returns canonical `contactId` and newest-first `events`. Event types are `completed`, `enrolled`, `failed`, `paused`, `removed`, `replied`, or `resumed`. Events also include `occurredAt` and optional sequence, step, message, and reason metadata. # Get conversation Source: https://docs.automate.ax/reference/integrations/apollo/actions/get-conversation Get an Apollo conversation, transcript, and insights. `apollo.getConversation` gets one recorded conversation. ```ts automations/get-apollo-conversation.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Read a conversation", () => { onDashboardRun({ title: "Read a conversation" }) apollo.getConversation({ conversationId: "64a1..." }) }) ``` Returns `{ conversation, details }`. `conversation` contains stable summary fields. `details` contains Apollo's complete available transcript, recordings, participants, opportunities, and generated insights with keys converted recursively to camel case. Apollo can charge one conversation credit when AI insights are present. # Get conversation export Source: https://docs.automate.ax/reference/integrations/apollo/actions/get-conversation-export Get a completed Apollo conversation export URL. `apollo.getConversationExport` gets the temporary download URL for an export. ```ts automations/get-apollo-conversation-export.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Download conversation export", () => { onDashboardRun({ title: "Download conversation export" }) apollo.getConversationExport({ exportId: "6a060f34585b480015951efd" }) }) ``` Returns `{ downloadUrl }`. The provider URL is temporary; fetch or store the export promptly after it becomes available. # Get credit usage Source: https://docs.automate.ax/reference/integrations/apollo/actions/get-credit-usage Get current Apollo credit balances. `apollo.getCreditUsage` gets consumed and remaining credits by category for the current billing cycle. ```ts automations/get-apollo-credit-usage.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Inspect Apollo credits", () => { onDashboardRun({ title: "Inspect Apollo credits" }) apollo.getCreditUsage() }) ``` The action has no input fields. Returns `{ categories, cycle }`; every category contains `category`, `limit`, `consumed`, and `remaining`. `cycle` contains `startDate` and `endDate` when the workspace has an active billing cycle. # Get current user Source: https://docs.automate.ax/reference/integrations/apollo/actions/get-current-user Get the user connected to an Apollo account. `apollo.getCurrentUser` returns the selected connection's Apollo profile. ```ts automations/get-apollo-user.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Get Apollo credit usage", () => { onDashboardRun({ title: "Get Apollo credit usage" }) apollo.getCurrentUser({ includeCreditUsage: true }) }) ``` `includeCreditUsage` defaults to `false`. Optional second argument `{ account }` selects the binding. Returns an `ApolloUser` plus optional `creditUsage` with Apollo's available and consumed AI, direct-dial, export, lead, power-up, and unified credit fields. Apollo may omit balances unavailable to the plan. # Get deal Source: https://docs.automate.ax/reference/integrations/apollo/actions/get-deal Get one Apollo deal. `apollo.getDeal` gets a deal by ID or exact name. ```ts automations/get-apollo-deal.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Get a deal", () => { onDashboardRun({ title: "Get a deal" }) apollo.getDeal({ deal: "Acme expansion" }) }) ``` `deal` accepts an ID, exact name, or `{ id }`. Exact-name lookup fails when no deal or multiple deals match. Returns an `ApolloDeal`. # Get email content Source: https://docs.automate.ax/reference/integrations/apollo/actions/get-email-content Get completed Apollo email bodies. `apollo.getEmailContent` gets content for up to ten completed outreach emails. ```ts automations/get-apollo-email-content.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Read sent email", () => { onDashboardRun({ title: "Read sent email" }) apollo.getEmailContent({ emailIds: ["66f1..."], bodyFormat: "html" }) }) ``` `emailIds` accepts 1–10 IDs. `bodyFormat` defaults to `plain` and also accepts `html`. Returns `{ emails }`; Apollo omits unavailable IDs. # Get email send status Source: https://docs.automate.ax/reference/integrations/apollo/actions/get-email-send-status Get delivery state for an Apollo email. `apollo.getEmailSendStatus` gets the asynchronous send state for one email. ```ts automations/get-apollo-email-send-status.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Check email status", () => { onDashboardRun({ title: "Check email status" }) apollo.getEmailSendStatus({ emailId: "66f1..." }) }) ``` Returns the email `id`, `status`, provider `message`, and optional completion, failure, not-sent, and retry fields. # Get email stats Source: https://docs.automate.ax/reference/integrations/apollo/actions/get-email-stats Get content and engagement stats for an Apollo sequence email. `apollo.getEmailStats` gets complete sequence-email content and engagement counters. ```ts automations/get-apollo-email-stats.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Inspect email engagement", () => { onDashboardRun({ title: "Inspect email engagement" }) apollo.getEmailStats({ emailId: "66f1..." }) }) ``` Returns an `ApolloEmail`, including opens, clicks, reply, bounce, and delivery fields when Apollo reports them. > [!WARNING] > > This endpoint requires a master API key and does not support Apollo OAuth. # Get organization Source: https://docs.automate.ax/reference/integrations/apollo/actions/get-organization Get an Apollo organization record. `apollo.getOrganization` returns complete company data. An ID lookup costs one credit. An exact name or domain adds a one-credit search. ```ts automations/get-apollo-organization.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Get an Apollo organization", () => { onDashboardRun({ title: "Get an Apollo organization" }) apollo.getOrganization({ organization: { id: "organization-id" } }) }) ``` `organization` accepts a plain ID, `{ id }`, `{ domain }`, or `{ name }`. Optional second argument `{ account }` selects the binding. Returns `ApolloOrganization` with identity, domain, website, social, industry, location, phone, revenue, funding, headcount, technology, and description fields when available. Prefer `{ id }` to avoid the extra search and ambiguity. # Get person Source: https://docs.automate.ax/reference/integrations/apollo/actions/get-person Get a person by Apollo ID. `apollo.getPerson` returns complete data for a person ID from search or enrichment. The lookup costs one Apollo credit. ```ts automations/get-apollo-person.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Get an Apollo person", () => { onDashboardRun({ title: "Get an Apollo person" }) apollo.getPerson({ personId: "person-id" }) }) ``` Provide `personId`. Optional second argument `{ account }` selects the binding. Returns an `ApolloPerson` with identity, job, location, contact, organization, email, phone, social, seniority, and department data when available. Apollo returning no person record causes the action to fail. # Get task Source: https://docs.automate.ax/reference/integrations/apollo/actions/get-task Get an Apollo task by ID or exact title. `apollo.getTask` returns a task selected by ID, exact title, or `{ id }`. ```ts automations/get-apollo-task.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Get an Apollo task", () => { onDashboardRun({ title: "Get an Apollo task" }) apollo.getTask({ task: { id: "task-id" } }) }) ``` Provide `task`. Optional second argument `{ account }` selects the Apollo binding. Returns an `ApolloTask` with stable IDs, type, status, priority, due time, title/note, contact, creator and assignee metadata when supplied by Apollo. # List account stages Source: https://docs.automate.ax/reference/integrations/apollo/actions/list-account-stages List Apollo account stages. `apollo.listAccountStages` returns stages available to saved accounts. ```ts automations/list-apollo-account-stages.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("List Apollo account stages", () => { onDashboardRun({ title: "List Apollo account stages" }) apollo.listAccountStages() }) ``` Optional second argument `{ account }` defaults to the project's Apollo binding. Returns `ApolloStage[]`. Each stage includes `id`, `name`, `displayName`, `displayOrder`, and optional `category`, `isMeetingSet`, and `teamId`. Use `id` in later mutations to avoid name lookup. # List contact deals Source: https://docs.automate.ax/reference/integrations/apollo/actions/list-contact-deals List deals associated with a saved Apollo contact. `apollo.listContactDeals` lists the deals associated with one saved contact. ```ts automations/list-apollo-contact-deals.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("List contact deals", () => { onDashboardRun({ title: "List contact deals" }) apollo.listContactDeals({ contact: "ada@example.com" }) }) ``` `contact` accepts an Apollo contact ID, exact email or name, or `{ id }`. Returns `{ deals: ApolloDeal[] }`. Optional second argument `{ account }` selects the Apollo binding. This action requires an Apollo master API key because Apollo rejects OAuth access tokens for this endpoint. # List contact stages Source: https://docs.automate.ax/reference/integrations/apollo/actions/list-contact-stages List Apollo contact stages. `apollo.listContactStages` returns stages available to saved contacts. ```ts automations/list-apollo-contact-stages.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("List Apollo contact stages", () => { onDashboardRun({ title: "List Apollo contact stages" }) apollo.listContactStages() }) ``` Optional second argument `{ account }` defaults to the project's Apollo binding. Returns `ApolloStage[]` with `id`, `name`, `displayName`, `displayOrder`, and optional category, meeting, and team metadata. Use `id` in later mutations to skip name lookup. # List deal stages Source: https://docs.automate.ax/reference/integrations/apollo/actions/list-deal-stages List deal stages in an Apollo workspace. `apollo.listDealStages` lists every deal stage available in the connected workspace. ```ts automations/list-apollo-deal-stages.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("List deal stages", () => { onDashboardRun({ title: "List deal stages" }) apollo.listDealStages() }) ``` The action has no input fields. Returns `{ stages }` with stage IDs, names, order, probability, pipeline, and closed/won state. # List deals Source: https://docs.automate.ax/reference/integrations/apollo/actions/list-deals List one page of Apollo deals. `apollo.listDeals` lists saved deals with explicit pagination. ```ts automations/list-apollo-deals.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("List deals", () => { onDashboardRun({ title: "List deals" }) apollo.listDeals({ page: 1, perPage: 50, sortBy: "amount" }) }) ``` `page` defaults to `1`, `perPage` to `100`, and `sortBy` accepts `amount`, `isClosed`, or `isWon`. Returns `{ deals: ApolloDeal[]; pagination: ApolloPagination }`. # List email accounts Source: https://docs.automate.ax/reference/integrations/apollo/actions/list-email-accounts List linked Apollo sending mailboxes. `apollo.listEmailAccounts` returns mailboxes available for sequence enrollment. ```ts automations/list-apollo-mailboxes.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("List Apollo mailboxes", () => { onDashboardRun({ title: "List Apollo mailboxes" }) apollo.listEmailAccounts() }) ``` Optional second argument `{ account }` selects the binding. Returns `{ emailAccounts }`. Each mailbox includes `id`, `email`, aliases, active/default state, thresholds and delays, provider, owner, synchronization, revocation, and deliverability metadata when Apollo supplies it. Pass `{ id: emailAccount.id }` to sequence actions to skip mailbox lookup. # List email schedules Source: https://docs.automate.ax/reference/integrations/apollo/actions/list-email-schedules List Apollo sequence sending schedules. `apollo.listEmailSchedules` returns every sequence sending schedule. ```ts automations/list-apollo-schedules.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("List Apollo sending schedules", () => { onDashboardRun({ title: "List Apollo sending schedules" }) apollo.listEmailSchedules() }) ``` Optional second argument `{ account }` selects the binding. Returns `{ emailSchedules }`. Each schedule includes `id`, `name`, default state, `IANA` `timeZone`, weekly sending windows by day, holiday behavior, contact-time-zone behavior, and optional creation time. # List fields Source: https://docs.automate.ax/reference/integrations/apollo/actions/list-fields List Apollo system, custom, and fields synchronized from customer relationship management systems. `apollo.listFields` returns field IDs for `customFields` inputs and dynamic mappings. ```ts automations/list-apollo-fields.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("List custom Apollo fields", () => { onDashboardRun({ title: "List custom Apollo fields" }) apollo.listFields({ source: "custom" }) }) ``` Optional `source` is `"crm_synced" | "custom" | "system"`. Omitting it returns all sources. Optional second argument `{ account }` selects the binding. Returns `{ fields }` with `fieldId`, `label`, `modality`, `type`, contexts, source, metadata, workspace, and timestamps. Custom-field mutation inputs use `fieldId` as the key, not the label. # List lists Source: https://docs.automate.ax/reference/integrations/apollo/actions/list-lists List Apollo contact and account lists. `apollo.listLists` returns contact and account lists. ```ts automations/list-apollo-lists.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("List Apollo contact lists", () => { onDashboardRun({ title: "List Apollo contact lists" }) apollo.listLists({ recordType: "contacts" }) }) ``` Optional `recordType` is `"contacts" | "accounts"`. Omitting it returns both. Optional second argument `{ account }` selects the Apollo binding. Returns `{ lists: ApolloList[] }`. Each list includes `id`, `name`, `cachedCount`, optional `modality`, owner/team IDs, and timestamps. Use `id` where a later action accepts a list reference. Membership mutations use exact `listNames` because that's Apollo's native API. # List notes Source: https://docs.automate.ax/reference/integrations/apollo/actions/list-notes List notes attached to Apollo records. `apollo.listNotes` lists notes attached to contacts, accounts, deals, calendar events, or conversations. ```ts automations/list-apollo-notes.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("List contact notes", () => { onDashboardRun({ title: "List contact notes" }) apollo.listNotes({ contactId: "60a5...", limit: 50 }) }) ``` Provide at least one account, contact, deal, calendar event, or conversation relationship. You can use singular record IDs or contact and conversation ID arrays. `skip` defaults to `0`, `limit` to `100`, `sortBy` to `createdAt`, and descending order is the default. Returns `{ notes }` with camel-case relationship, timestamp, pin, and system fields. # List organization job postings Source: https://docs.automate.ax/reference/integrations/apollo/actions/list-organization-job-postings List one page of an Apollo organization's job postings. `apollo.listOrganizationJobPostings` returns open postings. Each page costs one credit. Resolving a name or domain adds a search credit. ```ts automations/list-apollo-jobs.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("List company jobs", () => { onDashboardRun({ title: "List company jobs" }) apollo.listOrganizationJobPostings({ organization: { id: "organization-id" }, perPage: 100, }) }) ``` `organization` accepts a plain organization ID, `{ id }`, `{ domain }`, or `{ name }`. `page` defaults to `1`. `perPage` defaults to `100` and permits up to 10,000. Optional second argument `{ account }` selects the binding. Returns `{ jobPostings, hasMore, page, perPage }`. Each posting includes `id`, `title`, `url`, and optional location and posting timestamps. The action infers `hasMore` from a full page because Apollo supplies no total count. # List users Source: https://docs.automate.ax/reference/integrations/apollo/actions/list-users List Apollo workspace users. `apollo.listUsers` returns one page of workspace users. ```ts automations/list-apollo-users.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("List Apollo users", () => { onDashboardRun({ title: "List Apollo users" }) apollo.listUsers({ page: 1, perPage: 100 }) }) ``` `page` defaults to `1`. `perPage` defaults to `100` and accepts 1–100. Optional second argument `{ account }` selects the binding. Returns `{ users, pagination }`. Users include stable ID, name, deletion state, and optional email, names, title, team, `CRM`, and creation metadata. # Poll webhook result Source: https://docs.automate.ax/reference/integrations/apollo/actions/poll-webhook-result Check an Apollo phone or waterfall enrichment request. `apollo.pollWebhookResult` gets the current result for a phone or waterfall enrichment request ID. ```ts automations/poll-apollo-enrichment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Poll Apollo enrichment", () => { onDashboardRun({ title: "Poll Apollo enrichment" }) apollo.pollWebhookResult({ requestId: "request-id" }) }) ``` `requestId` is a non-empty string or integer. Optional second argument `{ account }` selects the same Apollo binding used for enrichment. Returns `requestId`, `requestType: "email" | "phone" | "waterfall"`, `status: "in_progress" | "success" | "failed"`, nullable provider-native `result`, and optional last-dispatch and failure details. Polling checks state. It doesn't cause Apollo to retry a failed webhook delivery. # Query analytics report Source: https://docs.automate.ax/reference/integrations/apollo/actions/query-analytics-report Run a synchronous Apollo analytics report. `apollo.queryAnalyticsReport` runs an Apollo report with explicit metrics, dimensions, filters, and date range. ```ts automations/query-apollo-analytics.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Report email volume", () => { onDashboardRun({ title: "Report email volume" }) apollo.queryAnalyticsReport({ dateRange: "last_30_days", metrics: [ { value: "num_emails_sent", smartDatetimeReference: "activity_datetime", smartUserIdReference: "user_id", }, ], groupBy: { name: "smart_user_id" }, }) }) ``` Metric, dimension, and filter identifiers come from Apollo's report contract. `groupBy` and `pivotGroupBy` each accept at most one dimension. Returns `{ report }` with every provider key converted recursively to camel case. Apollo limits this endpoint to five requests per hour. # Remove records from lists Source: https://docs.automate.ax/reference/integrations/apollo/actions/remove-records-from-list Remove Apollo contacts or accounts from lists. `apollo.removeRecordsFromLists` removes contacts or accounts from exact list names. ```ts automations/remove-apollo-list-members.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Remove stale Apollo contacts", () => { onDashboardRun({ title: "Remove stale Apollo contacts" }) apollo.removeRecordsFromLists({ recordType: "contacts", records: [{ id: "contact-id" }], listNames: ["Active Leads"], }) }) ``` Set `recordType` to `"contacts" | "accounts"`. Provide non-empty `records` and `listNames` arrays. Set `async: true` for background processing. Optional second argument `{ account }` selects the Apollo binding. Returns `{ lists, job?, message? }` with the same synchronous/background semantics as `apollo.addRecordsToLists`. # Search accounts Source: https://docs.automate.ax/reference/integrations/apollo/actions/search-accounts Search saved Apollo accounts by stage, list, and keywords. `apollo.searchAccounts` searches the connected workspace's accounts. Use `apollo.searchOrganizations` for Apollo's broader company database. ```ts automations/search-apollo-accounts.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Find target accounts", () => { onDashboardRun({ title: "Find target accounts" }) apollo.searchAccounts({ query: "Acme", stages: ["Qualified"], page: 1 }) }) ``` | Input | Type | Required | Default | Description | | - | - | - | - | - | | `query` | `string` | No | None | Account-name keywords. | | `stages` | `ApolloReference[]` | No | All | Stage IDs, exact names, or `{ id }` references. | | `lists` | `ApolloReference[]` | No | All | Account-list IDs, exact names, or `{ id }` references. | | `sortBy` | `"account_created_at" \| "account_last_activity_date" \| "account_updated_at"` | No | Provider order | Field used to sort. | | `sortAscending` | `boolean` | No | `false` | Sort oldest to newest. | | `page` | `number` | No | `1` | One-based page. | | `perPage` | `number` | No | `100` | Page size from 1 through 100. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"apollo">` | No | Project default | Connected Apollo workspace. | Returns `{ accounts: ApolloAccount[]; pagination: ApolloPagination }`. Pagination includes `page`, `perPage`, `totalEntries`, and `totalPages`. # Search calls Source: https://docs.automate.ax/reference/integrations/apollo/actions/search-calls Search phone calls logged in Apollo. `apollo.searchCalls` searches logged phone-call activities. ```ts automations/search-apollo-calls.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Find connected calls", () => { onDashboardRun({ title: "Find connected calls" }) apollo.searchCalls({ direction: "outgoing", dateFrom: "2026-08-01", durationMinSeconds: 60, }) }) ``` Filter by date, duration, direction, users, contact labels, purposes, outcomes, or keywords. `users` accepts IDs, exact emails or names, or `{ id }`. Returns `{ calls, pagination }`. This action requires an Apollo master API key. Apollo's OAuth app registration omits the required call scope. # Search contacts Source: https://docs.automate.ax/reference/integrations/apollo/actions/search-contacts Search saved Apollo contacts by stage, list, and keywords. `apollo.searchContacts` searches the connected workspace's contacts. Use `apollo.searchPeople` for Apollo's broader prospect database. ```ts automations/search-apollo-contacts.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Find qualified contacts", () => { onDashboardRun({ title: "Find qualified contacts" }) apollo.searchContacts({ query: "engineering", stages: ["Qualified"], perPage: 50, }) }) ``` | Input | Type | Required | Default | Description | | - | - | - | - | - | | `query` | `string` | No | None | Name, title, employer, or email keywords. | | `stages` | `ApolloReference[]` | No | All | Contact stages to include. | | `lists` | `ApolloReference[]` | No | All | Contact lists to include. | | `sortBy` | `"contact_created_at" \| "contact_email_last_clicked_at" \| "contact_email_last_opened_at" \| "contact_last_activity_date" \| "contact_updated_at"` | No | Provider order | Sort field. | | `sortAscending` | `boolean` | No | `false` | Sort oldest to newest. | | `page` | `number` | No | `1` | One-based page. | | `perPage` | `number` | No | `100` | Page size from 1 through 100. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"apollo">` | No | Project default | Connected workspace. | Returns `{ contacts: ApolloContact[]; pagination: ApolloPagination }`. # Search conversations Source: https://docs.automate.ax/reference/integrations/apollo/actions/search-conversations Search recorded Apollo conversations. `apollo.searchConversations` searches recorded dialer calls and video meetings. ```ts automations/search-apollo-conversations.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Find recent meetings", () => { onDashboardRun({ title: "Find recent meetings" }) apollo.searchConversations({ account: "acme.com", type: "videoConference", dateFrom: "2026-08-01T00:00:00Z", }) }) ``` Filter by account, contacts, type, dates, tags, trackers, organizations, scorecard, visibility boundary, or provider sort field. Returns `{ conversations, pagination }`. # Search emails Source: https://docs.automate.ax/reference/integrations/apollo/actions/search-emails Search Apollo sequence outreach emails. `apollo.searchEmails` searches one page of Apollo outreach emails. ```ts automations/search-apollo-emails.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Find replied emails", () => { onDashboardRun({ title: "Find replied emails" }) apollo.searchEmails({ statuses: ["opened"], page: 1, perPage: 50 }) }) ``` Filter by query, status, reply class, date range, sequence, user, mailbox, or not-sent reason. Returns `{ emails, page, perPage, hasMore }`; `hasMore` is true when Apollo fills the requested page. # Search news articles Source: https://docs.automate.ax/reference/integrations/apollo/actions/search-news-articles Search company news in Apollo. `apollo.searchNewsArticles` searches news associated with Apollo organization IDs. ```ts automations/search-apollo-news.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Find company news", () => { onDashboardRun({ title: "Find company news" }) apollo.searchNewsArticles({ organizationIds: ["5e66b6381e05b4008c8331b8"], categories: ["hires"], publishedFrom: "2026-01-01", }) }) ``` `organizationIds` is required. Optional category and date filters narrow the result; `page` defaults to `1` and `perPage` to `25`. Returns `{ articles, pagination }`. Apollo charges one credit for each requested page. # Search organizations Source: https://docs.automate.ax/reference/integrations/apollo/actions/search-organizations Search Apollo's organization database. `apollo.searchOrganizations` returns one page of company results. Each page costs one Apollo credit. ```ts automations/search-apollo-organizations.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Find funded software companies", () => { onDashboardRun({ title: "Find funded software companies" }) apollo.searchOrganizations({ organizationKeywords: ["software"], employeeRanges: [{ min: 50, max: 500 }], locations: ["California"], perPage: 25, }) }) ``` Filters include `name`, `organizationIds`, up to 1,000 `domains`, included and excluded locations, employee and revenue ranges, funding ranges for total funding and the most recent round, funding dates for the most recent round, organization keywords, technologies, and active job titles/locations/count/date ranges. Ranges are inclusive. `page` defaults to `1`. `perPage` defaults to `100` and accepts 1–100. Optional second argument `{ account }` selects the binding. Returns `{ organizations, pagination, partialResultsOnly? }`. Every organization has a stable ID and normalized company, funding, location, technology, and headcount fields when Apollo supplies them. # Search people Source: https://docs.automate.ax/reference/integrations/apollo/actions/search-people Search Apollo prospects without using enrichment credits. `apollo.searchPeople` returns one page of sparse prospects. Use it before a credit-consuming enrichment action. ```ts automations/search-apollo-people.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Find engineering leaders", () => { onDashboardRun({ title: "Find engineering leaders" }) apollo.searchPeople({ titles: ["VP Engineering", "CTO"], seniorities: ["vp", "c_suite"], organizationEmployeeRanges: [{ min: 50, max: 500 }], organizationLocations: ["United States"], perPage: 25, }) }) ``` Filters include `titles`, `seniorities`, `personLocations`, `emailStatuses`, `keywords`, `organizationIds`, and up to 1,000 `organizationDomains`. Other filters cover `organizationLocations`, employee and revenue ranges, hiring titles, job locations/count/date ranges, and employer technology include/exclude sets. `includeSimilarTitles` expands title matching. Integer/date range objects use inclusive `min` and `max`. `page` defaults to `1`. `perPage` defaults to `100` and accepts 1–100. Optional second argument `{ account }` selects the binding. Returns `{ people, pagination }`. Results include a stable `id` and limited name, title, and employer fields but omit email addresses and phone numbers. Pass `id` to `apollo.enrichPerson` or `apollo.getPerson` for complete data. # Search sequences Source: https://docs.automate.ax/reference/integrations/apollo/actions/search-sequences Search Apollo sequences by name. `apollo.searchSequences` returns one page of workspace sequences. ```ts automations/search-apollo-sequences.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Find an Apollo sequence", () => { onDashboardRun({ title: "Find an Apollo sequence" }) apollo.searchSequences({ name: "Outbound", page: 1, perPage: 50 }) }) ``` `name` is an optional substring. `page` defaults to `1`. `perPage` defaults to `100` and accepts 1–100. Optional second argument `{ account }` selects the binding. Returns `{ sequences: ApolloSequence[]; pagination: ApolloPagination }`. Keep a sequence `id` and pass `{ id }` to later actions to skip exact-name resolution. # Search tasks Source: https://docs.automate.ax/reference/integrations/apollo/actions/search-tasks Search Apollo workspace tasks. `apollo.searchTasks` returns one page of Apollo tasks. ```ts automations/search-apollo-tasks.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("List Apollo tasks", () => { onDashboardRun({ title: "List Apollo tasks" }) apollo.searchTasks({ page: 1, perPage: 50, sortBy: "due_at" }) }) ``` `page` defaults to `1`. `perPage` defaults to `100` and accepts 1–100. `openFactorNames?: string[]` filters task queues and `sortBy?: string` passes an Apollo-native task field. Optional second argument `{ account }` selects the binding. Returns `{ tasks: ApolloTask[]; pagination: ApolloPagination }`. # Send email now Source: https://docs.automate.ax/reference/integrations/apollo/actions/send-email-now Queue an Apollo email for immediate sending. `apollo.sendEmailNow` queues a drafted, scheduled, or failed Apollo email for immediate sending. ```ts automations/send-apollo-email-now.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Send an Apollo email", () => { onDashboardRun({ title: "Send an Apollo email" }) apollo.sendEmailNow({ emailId: "66f1..." }) }) ``` `emailId` is required; `surface` is optional provider context. Returns the updated `ApolloEmail`. Sending is asynchronous, so use `apollo.getEmailSendStatus` to confirm delivery state. # Set account owner Source: https://docs.automate.ax/reference/integrations/apollo/actions/set-account-owner Assign an Apollo owner to saved accounts. `apollo.setAccountOwner` assigns one workspace user to one or more accounts. ```ts automations/set-apollo-account-owner.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Assign Apollo accounts", () => { onDashboardRun({ title: "Assign Apollo accounts" }) apollo.setAccountOwner({ accounts: [{ id: "account-one" }, "globex.example"], owner: "ada@example.com", }) }) ``` | Input | Type | Required | Description | | - | - | - | - | | `accounts` | `ApolloReference[]` | Yes | One or more account IDs, names/domains, or `{ id }`. | | `owner` | `ApolloReference` | Yes | User ID, exact email/name, or `{ id }`. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"apollo">` | No | Connected workspace. Defaults to project binding. | Returns one sparse mutation receipt per account with `id` and optional owner, `CRM` owner, and stage IDs. # Set contact owner Source: https://docs.automate.ax/reference/integrations/apollo/actions/set-contact-owner Assign an Apollo owner to saved contacts. `apollo.setContactOwner` assigns one workspace user to one or more contacts. ```ts automations/set-apollo-contact-owner.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Assign Apollo contacts", () => { onDashboardRun({ title: "Assign Apollo contacts" }) apollo.setContactOwner({ contacts: ["ada@example.com", "grace@example.com"], owner: "seller@example.com", }) }) ``` Provide a non-empty `ApolloReference[]` as `contacts`. `owner` accepts a user ID, exact email/name, or `{ id }`. Optional second argument `{ account }` selects the Apollo binding. Returns the complete updated `ApolloContact[]`. # Set contact stage Source: https://docs.automate.ax/reference/integrations/apollo/actions/set-contact-stage Assign an Apollo stage to saved contacts. `apollo.setContactStage` assigns one stage to one or more contacts. ```ts automations/set-apollo-contact-stage.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Qualify Apollo contacts", () => { onDashboardRun({ title: "Qualify Apollo contacts" }) apollo.setContactStage({ contacts: ["ada@example.com", { id: "contact-id" }], stage: "Qualified", }) }) ``` Provide a non-empty `ApolloReference[]` as `contacts`. `stage` accepts an ID, exact name, or `{ id }`. Optional second argument `{ account }` selects the Apollo binding. Returns the complete updated `ApolloContact[]`. # Skip task Source: https://docs.automate.ax/reference/integrations/apollo/actions/skip-task Skip an Apollo task with an optional reason. `apollo.skipTask` skips one task. ```ts automations/skip-apollo-task.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Skip an Apollo task", () => { onDashboardRun({ title: "Skip an Apollo task" }) apollo.skipTask({ task: { id: "task-id" }, note: "Contact opted out" }) }) ``` Provide `task`. Optional `note` adds a note. `reindexImmediately` defaults to `false`. Set it when task search must reflect the skip immediately. Optional second argument `{ account }` selects the binding. Returns the updated `ApolloTask`. # Update account Source: https://docs.automate.ax/reference/integrations/apollo/actions/update-account Update an Apollo account's selected fields. `apollo.updateAccount` updates only the supplied fields on a saved account. ```ts automations/update-apollo-account.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Advance an Apollo account", () => { onDashboardRun({ title: "Advance an Apollo account" }) apollo.updateAccount({ target: "acme.example", stage: "Customer" }) }) ``` | Input | Type | Required | Description | | - | - | - | - | | `target` | `ApolloReference` | Yes | Account ID, exact name/domain, or `{ id }`. | | `name`, `domain`, `phone`, `rawAddress` | `string` | At least one change | Account fields to replace. | | `stage`, `owner` | `ApolloReference` | At least one change | New stage or owner. | | `customFields` | `Record` | At least one change | Values keyed by field ID. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"apollo">` | No | Connected workspace. Defaults to project binding. | Returns the updated `ApolloAccount`. The action rejects an update with no changed fields. # Update call Source: https://docs.automate.ax/reference/integrations/apollo/actions/update-call Update a phone-call activity in Apollo. `apollo.updateCall` changes selected fields on a logged phone call. ```ts automations/update-apollo-call.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Update a call", () => { onDashboardRun({ title: "Update a call" }) apollo.updateCall({ callId: "6859...", note: "Proposal sent" }) }) ``` `callId` is required. Set at least one call field; association fields accept the same semantic references as `apollo.createCall`. Returns the updated call. This action requires an Apollo master API key. Apollo's OAuth app registration omits the required call scope. # Update contact Source: https://docs.automate.ax/reference/integrations/apollo/actions/update-contact Update an Apollo contact's selected fields. `apollo.updateContact` updates only the supplied fields on a saved contact. ```ts automations/update-apollo-contact.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Advance an Apollo contact", () => { onDashboardRun({ title: "Advance an Apollo contact" }) apollo.updateContact({ contact: "ada@example.com", stage: "Qualified" }) }) ``` Provide `contact` as an ID, exact email/name, or `{ id }`. Supply at least one of the contact fields supported by `apollo.createContact`: names, email, title, organization, website, associated account, stage, lists, phones, address, or custom fields. Optional second argument `{ account }` selects the Apollo binding. Returns the updated `ApolloContact`. Apollo rejects an input with no changed field. # Update contact sequence status Source: https://docs.automate.ax/reference/integrations/apollo/actions/update-contact-sequence-status Finish, remove, or stop contacts in Apollo sequences. `apollo.updateContactSequenceStatus` changes selected contacts across sequences in a background job. ```ts automations/stop-apollo-sequence-contacts.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Stop Apollo contacts", () => { onDashboardRun({ title: "Stop Apollo contacts" }) apollo.updateContactSequenceStatus({ contacts: ["ada@example.com"], sequences: ["Outbound follow-up"], mode: "stop", }) }) ``` `contacts` and `sequences` are non-empty reference arrays. `mode` is `"mark_as_finished" | "remove" | "stop"`. Optional second argument `{ account }` selects the binding. Returns a background-job receipt with `jobId`, canonical contact and sequence IDs, mode, current progress, and optional batch size. The receipt means Apollo accepted the job, not that every change is already complete. # Update custom field Source: https://docs.automate.ax/reference/integrations/apollo/actions/update-custom-field Update one Apollo custom field. `apollo.updateCustomField` updates one custom field's label, group, enrichment schedule, or metadata. ```ts automations/update-apollo-custom-field.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Rename a custom field", () => { onDashboardRun({ title: "Rename a custom field" }) apollo.updateCustomField({ fieldId: "contact.694095a80f1b6000110fc556", label: "Renewal owner", }) }) ``` `fieldId` requires a modality-prefixed ID, such as `contact.694095a80f1b6000110fc556`. Use the value returned by `apollo.createCustomField` or `apollo.listFields`. Set at least one mutable field. Apollo doesn't let you change a field's modality or type. > [!WARNING] > > `picklistValues` replaces the complete option set. Include every option you > want to retain and preserve existing option IDs, or stored values can become > orphaned. # Update deal Source: https://docs.automate.ax/reference/integrations/apollo/actions/update-deal Update selected fields on an Apollo deal. `apollo.updateDeal` changes selected fields on one deal. ```ts automations/update-apollo-deal.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Advance a deal", () => { onDashboardRun({ title: "Advance a deal" }) apollo.updateDeal({ deal: "Acme expansion", stage: "Contract sent" }) }) ``` `deal` is required. Set at least one of `name`, `owner`, `stage`, `amount`, `closedDate`, or `customFields`. Apollo does not support moving a deal to a different account through this endpoint. Returns the updated `ApolloDeal`. # Update list Source: https://docs.automate.ax/reference/integrations/apollo/actions/update-list Rename an Apollo list or change its Book of Business status. `apollo.updateList` changes a list selected by exact name, ID, or `{ id }`. ```ts automations/update-apollo-list.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Rename an Apollo list", () => { onDashboardRun({ title: "Rename an Apollo list" }) apollo.updateList({ list: "2026 Targets", recordType: "accounts", name: "Priority Accounts", }) }) ``` Provide `list`. Supply `name`, `bookOfBusiness`, or both. `recordType` can disambiguate lists with the same name and must not be `"contacts"` when enabling Book of Business. Optional second argument `{ account }` selects the Apollo binding. Returns the updated `ApolloList`. Ambiguous names fail with the matching IDs. # Update sequence Source: https://docs.automate.ax/reference/integrations/apollo/actions/update-sequence Update an Apollo sequence and its steps. `apollo.updateSequence` updates sequence settings and replaces its ordered steps when `steps` is supplied. ```ts automations/update-apollo-sequence.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Rename a sequence", () => { onDashboardRun({ title: "Rename a sequence" }) apollo.updateSequence({ sequence: "Founder outreach", name: "CEO outreach" }) }) ``` `sequence` accepts an ID, exact name, or `{ id }`. Set at least one mutable field. `steps` replaces the ordered step list. Existing steps and email variants accept their Apollo `id`; new steps require `type`; provide `waitTime` and `waitMode` together. Update AI email content with `generationOptions` and `generationTone` on an email variant. Use `sharingPermission` to replace Apollo's deprecated `permissions` field. Set `visibility` to `everyone` or `restricted`, choose `accessType` from `canView`, `canEdit`, or `fullAccess`, and manage individual users or teams with `addedAccesses`, `updatedAccesses`, and `deletedAccessIds`. Returns `{ sequence, steps, touches }`. # Update task Source: https://docs.automate.ax/reference/integrations/apollo/actions/update-task Update an Apollo task's selected fields. `apollo.updateTask` updates selected assignment, content, type, and due-time fields. ```ts automations/update-apollo-task.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { apollo } from "automate.ax/apollo" export default automation("Reschedule an Apollo task", () => { onDashboardRun({ title: "Reschedule an Apollo task" }) apollo.updateTask({ task: { id: "task-id" }, dueAt: "2026-08-07T17:00:00Z" }) }) ``` Provide `task` and at least one of `callScript`, `contact`, `creator`, `dueAt`, `note`, `priority`, `relevantFields`, `title`, `type`, or `user`. Optional second argument `{ account }` selects the binding. Returns the updated `ApolloTask`. For a scheduled task, Apollo must return its current creator unless you supply `creator`. Otherwise, the action fails rather than silently resetting it. # Connect Apollo and extend its API Source: https://docs.automate.ax/reference/integrations/apollo/authorization-and-raw-api Connect Apollo with OAuth or a master API key, receive Workflow webhooks, and call uncovered v1 endpoints. Automate.ax connects Apollo through OAuth or an API key. OAuth requests the exact scopes used by each action. API-key requests act in the connected Apollo workspace; Apollo attributes them to the workspace's oldest active administrator. `apollo.listContactDeals`, `apollo.searchCalls`, `apollo.createCall`, `apollo.updateCall`, and `apollo.getEmailStats` require a master API key. Apollo rejects OAuth access tokens for contact deals, omits the call scopes from OAuth app registration, and doesn't support OAuth for email stats. Apollo does not expose a lifecycle webhook subscription API with a stable event payload. Apollo Workflows can send a user-configured webhook for people and company events, so receive those deliveries with `onHttpRequest` and validate the workflow's body in your automation. Automate.ax does not create, reconcile, or label those workflow webhooks as managed Apollo triggers. ```ts automations/apollo-workflow-webhook.automation.ts theme={null} import { automation, markSignificant, onHttpRequest } from "automate.ax" export default automation("Receive an Apollo workflow", () => { const request = onHttpRequest({ scope: "automation" }) markSignificant(request) }) ``` Use `getApolloApi(account)` inside a custom account-backed action for an uncovered Apollo REST endpoint. Paths are relative to `https://api.apollo.io/api/v1/`; queries use provider-native names, and every response requires a Zod schema. Failures throw `ApolloApiError` with HTTP status, provider code and message, and retry delay. Apollo rate limits apply per workspace, endpoint, and minute, hour, or day. A `429` response includes the retry delay when available. The synchronous analytics report is limited to five requests per hour. The deprecated `GET /typed_custom_fields` endpoint is intentionally excluded; use `apollo.listFields({ source: "custom" })`. See Apollo's [API overview](https://docs.apollo.io/reference/apollo-api), [authentication guide](https://docs.apollo.io/reference/authentication), [OAuth flow](https://docs.apollo.io/docs/use-oauth-20-authorization-flow-to-access-apollo-user-information-partners), [rate limits](https://docs.apollo.io/reference/rate-limits), and [status codes](https://docs.apollo.io/reference/status-codes). # Apollo Source: https://docs.automate.ax/reference/integrations/apollo/index Search and enrich people and companies, then manage Apollo accounts, sequences, tasks, opportunities, and conversations. ## Exports ```ts theme={null} import { apollo, apolloAccount, getApolloApi } from "automate.ax/apollo" ``` * `apollo` contains the packaged Apollo actions. * `apolloAccount("name")` selects a named Apollo connection. * `getApolloApi` creates the authenticated Apollo API helper for a custom account-backed action. Read [Connect Apollo and extend its API](/reference/integrations/apollo/authorization-and-raw-api) for OAuth and master-key limits, Workflow webhooks, raw v1 calls, and rate limits. ## Actions * [Activate sequence](/reference/integrations/apollo/actions/activate-sequence) * [Add contacts to sequence](/reference/integrations/apollo/actions/add-contacts-to-sequence) * [Add records to lists](/reference/integrations/apollo/actions/add-records-to-list) * [Archive sequence](/reference/integrations/apollo/actions/archive-sequence) * [Bulk create accounts](/reference/integrations/apollo/actions/bulk-create-accounts) * [Bulk create contacts](/reference/integrations/apollo/actions/bulk-create-contacts) * [Bulk create tasks](/reference/integrations/apollo/actions/bulk-create-tasks) * [Bulk enrich organizations](/reference/integrations/apollo/actions/bulk-enrich-organizations) * [Bulk enrich people](/reference/integrations/apollo/actions/bulk-enrich-people) * [Bulk update accounts](/reference/integrations/apollo/actions/bulk-update-accounts) * [Bulk update contacts](/reference/integrations/apollo/actions/bulk-update-contacts) * [Complete task](/reference/integrations/apollo/actions/complete-task) * [Create account](/reference/integrations/apollo/actions/create-account) * [Create call](/reference/integrations/apollo/actions/create-call) * [Create contact](/reference/integrations/apollo/actions/create-contact) * [Create custom field](/reference/integrations/apollo/actions/create-custom-field) * [Create deal](/reference/integrations/apollo/actions/create-deal) * [Create email draft](/reference/integrations/apollo/actions/create-email-draft) * [Create list](/reference/integrations/apollo/actions/create-list) * [Create sequence](/reference/integrations/apollo/actions/create-sequence) * [Create task](/reference/integrations/apollo/actions/create-task) * [Deactivate sequence](/reference/integrations/apollo/actions/deactivate-sequence) * [Enrich organization](/reference/integrations/apollo/actions/enrich-organization) * [Enrich person](/reference/integrations/apollo/actions/enrich-person) * [Export conversations](/reference/integrations/apollo/actions/export-conversations) * [Get account](/reference/integrations/apollo/actions/get-account) * [Get API usage](/reference/integrations/apollo/actions/get-api-usage) * [Get conversation export](/reference/integrations/apollo/actions/get-conversation-export) * [Get conversation](/reference/integrations/apollo/actions/get-conversation) * [Get contact sequence activity](/reference/integrations/apollo/actions/get-contact-sequence-activity) * [Get contact](/reference/integrations/apollo/actions/get-contact) * [Get credit usage](/reference/integrations/apollo/actions/get-credit-usage) * [Get current user](/reference/integrations/apollo/actions/get-current-user) * [Get deal](/reference/integrations/apollo/actions/get-deal) * [Get email content](/reference/integrations/apollo/actions/get-email-content) * [Get email send status](/reference/integrations/apollo/actions/get-email-send-status) * [Get email stats](/reference/integrations/apollo/actions/get-email-stats) * [Get organization](/reference/integrations/apollo/actions/get-organization) * [Get person](/reference/integrations/apollo/actions/get-person) * [Get task](/reference/integrations/apollo/actions/get-task) * [List account stages](/reference/integrations/apollo/actions/list-account-stages) * [List contact stages](/reference/integrations/apollo/actions/list-contact-stages) * [List contact deals](/reference/integrations/apollo/actions/list-contact-deals) * [List deal stages](/reference/integrations/apollo/actions/list-deal-stages) * [List deals](/reference/integrations/apollo/actions/list-deals) * [List email accounts](/reference/integrations/apollo/actions/list-email-accounts) * [List email schedules](/reference/integrations/apollo/actions/list-email-schedules) * [List fields](/reference/integrations/apollo/actions/list-fields) * [List lists](/reference/integrations/apollo/actions/list-lists) * [List notes](/reference/integrations/apollo/actions/list-notes) * [List organization job postings](/reference/integrations/apollo/actions/list-organization-job-postings) * [List users](/reference/integrations/apollo/actions/list-users) * [Poll webhook result](/reference/integrations/apollo/actions/poll-webhook-result) * [Query analytics report](/reference/integrations/apollo/actions/query-analytics-report) * [Remove records from lists](/reference/integrations/apollo/actions/remove-records-from-list) * [Search accounts](/reference/integrations/apollo/actions/search-accounts) * [Search calls](/reference/integrations/apollo/actions/search-calls) * [Search contacts](/reference/integrations/apollo/actions/search-contacts) * [Search conversations](/reference/integrations/apollo/actions/search-conversations) * [Search emails](/reference/integrations/apollo/actions/search-emails) * [Search news articles](/reference/integrations/apollo/actions/search-news-articles) * [Search organizations](/reference/integrations/apollo/actions/search-organizations) * [Search people](/reference/integrations/apollo/actions/search-people) * [Search sequences](/reference/integrations/apollo/actions/search-sequences) * [Search tasks](/reference/integrations/apollo/actions/search-tasks) * [Set account owner](/reference/integrations/apollo/actions/set-account-owner) * [Set contact owner](/reference/integrations/apollo/actions/set-contact-owner) * [Set contact stage](/reference/integrations/apollo/actions/set-contact-stage) * [Send email now](/reference/integrations/apollo/actions/send-email-now) * [Skip task](/reference/integrations/apollo/actions/skip-task) * [Update account](/reference/integrations/apollo/actions/update-account) * [Update call](/reference/integrations/apollo/actions/update-call) * [Update contact sequence status](/reference/integrations/apollo/actions/update-contact-sequence-status) * [Update contact](/reference/integrations/apollo/actions/update-contact) * [Update custom field](/reference/integrations/apollo/actions/update-custom-field) * [Update deal](/reference/integrations/apollo/actions/update-deal) * [Update list](/reference/integrations/apollo/actions/update-list) * [Update sequence](/reference/integrations/apollo/actions/update-sequence) * [Update task](/reference/integrations/apollo/actions/update-task) # Add project custom field Source: https://docs.automate.ax/reference/integrations/asana/actions/add-project-custom-field Add an existing custom field to an Asana project. `asana.addProjectCustomField` add an existing custom field to an Asana project. ```ts automations/asana-add-project-custom-field.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Add project custom field", () => { onDashboardRun({ title: "Add project custom field" }) asana.addProjectCustomField({ projectId: "project-gid", customFieldId: "custom-field-gid", }) }) ``` Provide `projectId` and `customFieldId`. Optional `isImportant` controls prominence. Optional second argument `{ account }` selects a named Asana binding. Returns no value. # Add project followers Source: https://docs.automate.ax/reference/integrations/asana/actions/add-project-followers Subscribe users to updates from an Asana project. `asana.addProjectFollowers` subscribe users to updates from an Asana project. ```ts automations/asana-add-project-followers.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Add project followers", () => { onDashboardRun({ title: "Add project followers" }) asana.addProjectFollowers({ projectId: "project-gid", userIds: ["user-gid"] }) }) ``` Provide `projectId` and one or more `userIds`. Optional second argument `{ account }` selects a named Asana binding. Returns the updated project. # Add project members Source: https://docs.automate.ax/reference/integrations/asana/actions/add-project-members Add users as members of an Asana project. `asana.addProjectMembers` add users as members of an Asana project. ```ts automations/asana-add-project-members.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Add project members", () => { onDashboardRun({ title: "Add project members" }) asana.addProjectMembers({ projectId: "project-gid", userIds: ["user-gid"] }) }) ``` Provide `projectId` and one or more `userIds`. Optional second argument `{ account }` selects a named Asana binding. Returns the updated project. # Add task comment Source: https://docs.automate.ax/reference/integrations/asana/actions/add-task-comment Comment on an Asana task with plain text or rich text. `asana.addTaskComment` posts one comment and can pin it atop the task activity. ```ts automations/comment-on-asana-task.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Comment on Asana task", () => { onDashboardRun({ title: "Comment on Asana task" }) asana.addTaskComment({ taskId: "task-gid", text: "Ready for review.", isPinned: true, }) }) ``` Provide `taskId` and exactly one of non-empty `text` or `htmlText`. The `htmlText` value must use Asana-supported rich-text HTML. Optional `isPinned` controls pinning, and second argument `{ account }` defaults to the project binding. Returns the created `AsanaStory`. Keep its `id` to update or delete it. # Add task dependencies Source: https://docs.automate.ax/reference/integrations/asana/actions/add-task-dependencies Add blocking dependencies to an Asana task. `asana.addTaskDependencies` add blocking dependencies to an Asana task. ```ts automations/asana-add-task-dependencies.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Add task dependencies", () => { onDashboardRun({ title: "Add task dependencies" }) asana.addTaskDependencies({ taskId: "task-gid", dependencyTaskIds: ["blocker-task-gid"], }) }) ``` Provide `taskId` and one or more `dependencyTaskIds`. Optional second argument `{ account }` selects a named Asana binding. Returns no value. # Add task followers Source: https://docs.automate.ax/reference/integrations/asana/actions/add-task-followers Add followers to an Asana task. `asana.addTaskFollowers` subscribes users to task updates. ```ts automations/add-asana-followers.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Follow Asana task", () => { onDashboardRun({ title: "Follow Asana task" }) asana.addTaskFollowers({ taskId: "task-gid", followerIds: ["me", "user-gid"], }) }) ``` Provide `taskId` and a non-empty `followerIds` array. IDs may include `"me"`. Optional second argument `{ account }` defaults to the project binding. Returns the refreshed `AsanaTask` with all followers. # Add task tag Source: https://docs.automate.ax/reference/integrations/asana/actions/add-task-tag Add an existing tag to an Asana task. `asana.addTaskTag` add an existing tag to an Asana task. ```ts automations/asana-add-task-tag.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Add task tag", () => { onDashboardRun({ title: "Add task tag" }) asana.addTaskTag({ taskId: "task-gid", tagId: "tag-gid" }) }) ``` Provide `taskId` and `tagId`. Optional second argument `{ account }` selects a named Asana binding. Returns no value. # Add task to project Source: https://docs.automate.ax/reference/integrations/asana/actions/add-task-to-project Add and position an existing task in an Asana project. `asana.addTaskToProject` adds a project membership without copying the task. ```ts automations/add-asana-task-to-project.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Add task to Asana project", () => { onDashboardRun({ title: "Add task to Asana project" }) asana.addTaskToProject({ taskId: "task-gid", projectId: "project-gid", sectionId: "section-gid", }) }) ``` Provide `taskId` and `projectId`. Optional `sectionId` chooses a destination section. Optional `insertAfterTaskId` or `insertBeforeTaskId` controls order. Supply at most one. Optional second argument `{ account }` defaults to the project binding. Returns `Signal`. The task remains in any other projects. # Create custom field Source: https://docs.automate.ax/reference/integrations/asana/actions/create-custom-field Create a custom-field definition in an Asana workspace. `asana.createCustomField` creates a custom-field definition in an Asana workspace. ```ts automations/asana-create-custom-field.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Create custom field", () => { onDashboardRun({ title: "Create custom field" }) asana.createCustomField({ workspaceId: "workspace-gid", name: "Priority", subtype: "enum", enumOptions: [ { name: "High", color: "red" }, { name: "Normal", color: "blue" }, ], }) }) ``` Provide `workspaceId`, `name`, and `subtype`. `enum` and `multi_enum` fields also require at least one `enumOptions` entry with a name and optional color or enabled state. Other optional formatting inputs are `description`, `format`, `precision`, `currencyCode`, and `customLabel`. Optional second argument `{ account }` selects a named Asana binding. Returns the created custom field. Use the enum-option actions after creating an `enum` or `multi_enum` field. # Create custom-field enum option Source: https://docs.automate.ax/reference/integrations/asana/actions/create-custom-field-enum-option Create and position an enum option on an Asana custom field. `asana.createCustomFieldEnumOption` create and position an enum option on an Asana custom field. ```ts automations/asana-create-custom-field-enum-option.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Create custom-field enum option", () => { onDashboardRun({ title: "Create custom-field enum option" }) asana.createCustomFieldEnumOption({ customFieldId: "custom-field-gid", name: "High", }) }) ``` Provide `customFieldId` and `name`. Optional `color`, `enabled`, and exactly one of `insertBeforeOptionId` or `insertAfterOptionId` control presentation and position. Optional second argument `{ account }` selects a named Asana binding. Returns the created enum option. # Create project Source: https://docs.automate.ax/reference/integrations/asana/actions/create-project Create a project in an Asana workspace or organization. `asana.createProject` supports schedules, descriptions, visibility, and team placement. ```ts automations/create-asana-project.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Create Asana launch project", () => { onDashboardRun({ title: "Create Asana launch project" }) asana.createProject({ workspaceId: "workspace-gid", teamId: "team-gid", name: "Launch", dueOn: "2026-09-30", }) }) ``` Provide `workspaceId` and a non-empty `name`. Asana requires `teamId` when the workspace is an organization. Optional inputs are `archived`, `color`, `dueOn`, `startOn`, `htmlNotes`, `notes`, and `public`. Optional second argument `{ account }` selects the Asana binding. Dates use `YYYY-MM-DD` or `null`. Don't combine the `htmlNotes` and `notes` description formats. Returns the created `AsanaProject`. # Create section Source: https://docs.automate.ax/reference/integrations/asana/actions/create-section Create a section in an Asana project and set its position. `asana.createSection` can position the new section relative to an existing one. ```ts automations/create-asana-section.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Create Asana section", () => { onDashboardRun({ title: "Create Asana section" }) asana.createSection({ projectId: "project-gid", name: "Review", insertAfterSectionId: "doing-section-gid", }) }) ``` Provide `projectId` and a non-empty `name`. Optional `insertAfterSectionId` or `insertBeforeSectionId` positions the section. Supply at most one. Optional second argument `{ account }` defaults to the project binding. Returns the created `AsanaSection`. # Create subtask Source: https://docs.automate.ax/reference/integrations/asana/actions/create-subtask Create a direct subtask of an Asana task. `asana.createSubtask` uses its parent as the workspace context. ```ts automations/create-asana-subtask.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Create Asana subtask", () => { onDashboardRun({ title: "Create Asana subtask" }) asana.createSubtask({ parentTaskId: "task-gid", name: "Review release notes", assignee: "me", }) }) ``` Provide `parentTaskId` and `name`. It supports the same assignment, status, completion, custom-field, due/start, description, subtype, follower, and account inputs as `asana.createTask`, but not workspace or project placement. Date and description formats are mutually exclusive, as with `asana.createTask`. Returns the created `AsanaTask` with Asana's `parent` reference when available. # Create tag Source: https://docs.automate.ax/reference/integrations/asana/actions/create-tag Create a tag in an Asana workspace. `asana.createTag` create a tag in an Asana workspace. ```ts automations/asana-create-tag.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Create tag", () => { onDashboardRun({ title: "Create tag" }) asana.createTag({ workspaceId: "workspace-gid", name: "Urgent" }) }) ``` Provide `workspaceId` and `name`. Optional `color`, `notes`, and `followerIds` set initial metadata. Optional second argument `{ account }` selects a named Asana binding. Returns the created tag. # Create task Source: https://docs.automate.ax/reference/integrations/asana/actions/create-task Create and place an Asana task with a schedule, assignee, and followers. `asana.createTask` requires a workspace, project, or parent task. ```ts automations/create-asana-task.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Create Asana launch task", () => { onDashboardRun({ title: "Create Asana launch task" }) asana.createTask({ name: "Publish release", projectIds: ["project-gid"], assignee: "me", dueOn: "2026-09-01", notes: "Complete the release checklist.", }) }) ``` Provide `name` and at least one of `workspaceId`, non-empty `projectIds`, or `parentId`. Optional `assignee` accepts an Asana `GID`, email, `"me"`, or `null`. Other optional inputs are `assigneeStatus`, `completed`, `customFields`, `dueAt`, `dueOn`, `followerIds`, `htmlNotes`, `notes`, `startAt`, `startOn`, and `subtype`. Optional second argument `{ account }` selects the Asana binding. Use only one description format, one due format, and one start format. Timestamp fields accept `Date` or an `ISO` timestamp with offset. Date fields use `YYYY-MM-DD`. `startAt` requires `dueAt`. `startOn` requires a due date or time. Returns the created `AsanaTask`. # Delete attachment Source: https://docs.automate.ax/reference/integrations/asana/actions/delete-attachment Permanently delete an Asana attachment. `asana.deleteAttachment` permanently delete an Asana attachment. ```ts automations/asana-delete-attachment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Delete attachment", () => { onDashboardRun({ title: "Delete attachment" }) asana.deleteAttachment({ attachmentId: "attachment-gid" }) }) ``` Provide `attachmentId`. Optional second argument `{ account }` selects a named Asana binding. Returns no value. Asana permanently removes the attachment. # Delete custom field Source: https://docs.automate.ax/reference/integrations/asana/actions/delete-custom-field Permanently delete an Asana custom-field definition. `asana.deleteCustomField` permanently delete an Asana custom-field definition. ```ts automations/asana-delete-custom-field.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Delete custom field", () => { onDashboardRun({ title: "Delete custom field" }) asana.deleteCustomField({ customFieldId: "custom-field-gid" }) }) ``` Provide `customFieldId`. Optional second argument `{ account }` selects a named Asana binding. Returns no value. Remove a shared field from individual projects with `removeProjectCustomField` instead. # Delete project Source: https://docs.automate.ax/reference/integrations/asana/actions/delete-project Permanently delete an Asana project. `asana.deleteProject` permanently removes a project. For a reversible change, set `archived: true` with [Update project](/reference/integrations/asana/actions/update-project). ```ts automations/delete-asana-project.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Delete Asana project", () => { onDashboardRun({ title: "Delete Asana project" }) asana.deleteProject({ projectId: "project-gid" }) }) ``` Provide `projectId`. Optional second argument `{ account }` defaults to the project binding. Returns `Signal`. Asana permission checks apply, and you can't undo the deletion. # Delete section Source: https://docs.automate.ax/reference/integrations/asana/actions/delete-section Delete an Asana section without deleting its tasks. `asana.deleteSection` permanently removes the section but leaves its tasks in Asana. ```ts automations/delete-asana-section.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Delete Asana section", () => { onDashboardRun({ title: "Delete Asana section" }) asana.deleteSection({ sectionId: "section-gid" }) }) ``` Provide `sectionId`. Optional second argument `{ account }` defaults to the project binding. Returns `Signal`. # Delete tag Source: https://docs.automate.ax/reference/integrations/asana/actions/delete-tag Permanently delete an Asana tag. `asana.deleteTag` permanently delete an Asana tag. ```ts automations/asana-delete-tag.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Delete tag", () => { onDashboardRun({ title: "Delete tag" }) asana.deleteTag({ tagId: "tag-gid" }) }) ``` Provide `tagId`. Optional second argument `{ account }` selects a named Asana binding. Returns no value. # Delete task Source: https://docs.automate.ax/reference/integrations/asana/actions/delete-task Permanently delete an Asana task. `asana.deleteTask` permanently removes a task. Complete it instead for a reversible change. ```ts automations/delete-asana-task.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Delete Asana task", () => { onDashboardRun({ title: "Delete Asana task" }) asana.deleteTask({ taskId: "task-gid" }) }) ``` Provide `taskId`. Optional second argument `{ account }` defaults to the project binding. Returns `Signal`. Asana permission checks apply, and you can't undo the deletion. # Delete task comment Source: https://docs.automate.ax/reference/integrations/asana/actions/delete-task-comment Delete an Asana task comment owned by the connected user. `asana.deleteTaskComment` deletes one editable comment. ```ts automations/delete-asana-comment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Delete Asana comment", () => { onDashboardRun({ title: "Delete Asana comment" }) asana.deleteTaskComment({ storyId: "story-gid" }) }) ``` Provide `storyId`. Optional second argument `{ account }` defaults to the project binding. Returns `Signal`. Asana rejects deletion of system stories and comments the connected user can't delete. # Duplicate project Source: https://docs.automate.ax/reference/integrations/asana/actions/duplicate-project Start an asynchronous Asana project duplication job. `asana.duplicateProject` start an asynchronous Asana project duplication job. ```ts automations/asana-duplicate-project.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Duplicate project", () => { onDashboardRun({ title: "Duplicate project" }) asana.duplicateProject({ projectId: "project-gid", name: "Launch copy", include: ["members", "task_dates"], }) }) ``` Provide `projectId` and `name`. Optional `include` selects copied content. Supply either `dueOn` or `startOn`, include `task_dates`, and optionally set `shouldSkipWeekends` when shifting dates. Optional second argument `{ account }` selects a named Asana binding. Returns an `AsanaJob`. Poll `getJob` until its status is `succeeded` or `failed`. # Duplicate task Source: https://docs.automate.ax/reference/integrations/asana/actions/duplicate-task Start an asynchronous Asana task duplication job. `asana.duplicateTask` start an asynchronous Asana task duplication job. ```ts automations/asana-duplicate-task.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Duplicate task", () => { onDashboardRun({ title: "Duplicate task" }) asana.duplicateTask({ taskId: "task-gid", name: "Ship copy", include: ["assignee", "projects"], }) }) ``` Provide `taskId`. Optional `name` and `include` control the copy. Optional second argument `{ account }` selects a named Asana binding. Returns an `AsanaJob`. Poll `getJob` until it settles. # Get attachment Source: https://docs.automate.ax/reference/integrations/asana/actions/get-attachment Get an Asana attachment and its download metadata. `asana.getAttachment` get an Asana attachment and its download metadata. ```ts automations/asana-get-attachment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Get attachment", () => { onDashboardRun({ title: "Get attachment" }) asana.getAttachment({ attachmentId: "attachment-gid" }) }) ``` Provide `attachmentId`. Optional second argument `{ account }` selects a named Asana binding. Returns the normalized attachment, including available download, view, permanent URL, host, size, parent, and creation metadata. # Get current user Source: https://docs.automate.ax/reference/integrations/asana/actions/get-current-user Get the Asana user represented by the connected account. `asana.getCurrentUser` returns the connected user. Use its `GID` for assignments, followers, or user-specific queries. ```ts automations/get-asana-user.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Get Asana user", () => { onDashboardRun({ title: "Get Asana user" }) asana.getCurrentUser() }) ``` The action has no schema input fields. Optional second argument `{ account }`, which defaults to the project binding. Returns `Signal` with `id`, optional `name`, `type`, `email`, and `photoUrl`, plus visible `workspaces` references. Asana can omit email or photo data based on visibility. # Get custom field Source: https://docs.automate.ax/reference/integrations/asana/actions/get-custom-field Get an Asana custom-field definition and its enum options. `asana.getCustomField` get an Asana custom-field definition and its enum options. ```ts automations/asana-get-custom-field.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Get custom field", () => { onDashboardRun({ title: "Get custom field" }) asana.getCustomField({ customFieldId: "custom-field-gid" }) }) ``` Provide `customFieldId`. Optional second argument `{ account }` selects a named Asana binding. Returns the normalized custom field, including subtype, formatting metadata, and enum options. # Get job Source: https://docs.automate.ax/reference/integrations/asana/actions/get-job Get the state and created resource for an asynchronous Asana job. `asana.getJob` get the state and created resource for an asynchronous Asana job. ```ts automations/asana-get-job.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Get job", () => { onDashboardRun({ title: "Get job" }) asana.getJob({ jobId: "job-gid" }) }) ``` Provide `jobId`. Optional second argument `{ account }` selects a named Asana binding. Returns the job status plus `newTask` or `newProject` when the provider has created it. # Get project Source: https://docs.automate.ax/reference/integrations/asana/actions/get-project Get an Asana project's metadata. `asana.getProject` gets one project by its Asana `GID`. ```ts automations/get-asana-project.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Get Asana project", () => { onDashboardRun({ title: "Get Asana project" }) asana.getProject({ projectId: "project-gid" }) }) ``` Provide `projectId`. Optional second argument `{ account }` defaults to the project binding. Returns `Signal` with identity, descriptions, dates, archive/public state, color, default view, permalink, and optional team and workspace references. # Get project task counts Source: https://docs.automate.ax/reference/integrations/asana/actions/get-project-task-counts Get complete and incomplete task and milestone counts for a project. `asana.getProjectTaskCounts` get complete and incomplete task and milestone counts for a project. ```ts automations/asana-get-project-task-counts.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Get project task counts", () => { onDashboardRun({ title: "Get project task counts" }) asana.getProjectTaskCounts({ projectId: "project-gid" }) }) ``` Provide `projectId`. Optional second argument `{ account }` selects a named Asana binding. Returns total, complete, and incomplete counts for tasks and milestones. # Get tag Source: https://docs.automate.ax/reference/integrations/asana/actions/get-tag Get one Asana tag and its workspace metadata. `asana.getTag` get one Asana tag and its workspace metadata. ```ts automations/asana-get-tag.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Get tag", () => { onDashboardRun({ title: "Get tag" }) asana.getTag({ tagId: "tag-gid" }) }) ``` Provide `tagId`. Optional second argument `{ account }` selects a named Asana binding. Returns the normalized tag, including color, notes, followers, and workspace when available. # Get task Source: https://docs.automate.ax/reference/integrations/asana/actions/get-task Get an Asana task's metadata. `asana.getTask` gets one task by its Asana `GID`, including assignments, project memberships, schedule, followers, descriptions, and custom fields. ```ts automations/get-asana-task.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Get Asana task", () => { onDashboardRun({ title: "Get Asana task" }) asana.getTask({ taskId: "task-gid" }) }) ``` Provide `taskId`. Optional second argument `{ account }` defaults to the project binding. Returns `Signal`. Optional provider fields remain absent, timestamps remain strings, and `customFields` preserves provider-native JSON entries. # Get team Source: https://docs.automate.ax/reference/integrations/asana/actions/get-team Get one Asana team visible to the connected account. `asana.getTeam` get one Asana team visible to the connected account. ```ts automations/asana-get-team.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Get team", () => { onDashboardRun({ title: "Get team" }) asana.getTeam({ teamId: "team-gid" }) }) ``` Provide `teamId`. Optional second argument `{ account }` selects a named Asana binding. Returns the normalized team, including its organization, descriptions, and permalink when available. # Get user Source: https://docs.automate.ax/reference/integrations/asana/actions/get-user Get an Asana user visible to the connected account. `asana.getUser` gets one user by their Asana `GID`. ```ts automations/get-asana-user-by-id.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Get Asana teammate", () => { onDashboardRun({ title: "Get Asana teammate" }) asana.getUser({ userId: "user-gid" }) }) ``` Provide the user's Asana `GID` as `userId`. Optional second argument `{ account }` defaults to the project binding. Returns the `AsanaUser`, whose email and profile photo can be absent. The user must be visible to the connected account. # List assigned tasks Source: https://docs.automate.ax/reference/integrations/asana/actions/list-assigned-tasks List tasks assigned to a user in an Asana workspace. `asana.listAssignedTasks` doesn't require Asana's premium advanced search. ```ts automations/list-my-asana-tasks.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("List my Asana tasks", () => { onDashboardRun({ title: "List my Asana tasks" }) asana.listAssignedTasks({ workspaceId: "workspace-gid", assignee: "me", completedSince: "now", }) }) ``` Provide `workspaceId`. `assignee` accepts a user `GID` or `"me"` and defaults to `"me"`. `completedSince` accepts `"now"` or an `ISO` timestamp with offset. `limit` is 1–100 and defaults to `100`. `offset` continues pagination. Second argument `{ account }` defaults to the project binding. Returns `Signal<{ tasks: AsanaTask[]; pageInfo: { nextOffset?: string } }>`. # List project tasks Source: https://docs.automate.ax/reference/integrations/asana/actions/list-project-tasks List tasks in an Asana project in project order. `asana.listProjectTasks` returns one page in project order. ```ts automations/list-asana-project-tasks.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("List active project tasks", () => { onDashboardRun({ title: "List active project tasks" }) asana.listProjectTasks({ projectId: "project-gid", completedSince: "now" }) }) ``` Provide `projectId`. `completedSince` accepts `"now"` or an `ISO` timestamp with offset and returns incomplete tasks plus tasks completed since that cutoff. `limit` is 1–100 and defaults to `100`. `offset` continues pagination. Second argument `{ account }` defaults to the project binding. Returns `Signal<{ tasks: AsanaTask[]; pageInfo: { nextOffset?: string } }>`. # List projects Source: https://docs.automate.ax/reference/integrations/asana/actions/list-projects List projects in an Asana workspace or organization. `asana.listProjects` returns project GIDs and metadata. ```ts automations/list-asana-projects.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("List Asana projects", () => { onDashboardRun({ title: "List Asana projects" }) asana.listProjects({ workspaceId: "workspace-gid", archived: false }) }) ``` Provide `workspaceId`. Optional `archived` determines whether the result includes archived projects. `limit` is 1–100 and defaults to `100`. `offset` continues pagination. Second argument `{ account }` defaults to the project binding. Returns `Signal<{ projects: AsanaProject[]; pageInfo: { nextOffset?: string } }>` with project dates, descriptions, visibility, team/workspace references, layout, URLs, and archive state. # List section tasks Source: https://docs.automate.ax/reference/integrations/asana/actions/list-section-tasks List tasks in an Asana section in display order. `asana.listSectionTasks` returns one page in section order. ```ts automations/list-asana-section-tasks.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("List section tasks", () => { onDashboardRun({ title: "List section tasks" }) asana.listSectionTasks({ sectionId: "section-gid", completedSince: "now" }) }) ``` Provide `sectionId`. `completedSince` accepts `"now"` or an `ISO` timestamp with offset. `limit` is 1–100 and defaults to `100`. `offset` continues pagination. Second argument `{ account }` defaults to the project binding. Returns `Signal<{ tasks: AsanaTask[]; pageInfo: { nextOffset?: string } }>`. # List sections Source: https://docs.automate.ax/reference/integrations/asana/actions/list-sections List sections in an Asana project in display order. `asana.listSections` returns section GIDs in project order for task placement. ```ts automations/list-asana-sections.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("List Asana sections", () => { onDashboardRun({ title: "List Asana sections" }) asana.listSections({ projectId: "project-gid" }) }) ``` Provide `projectId`. `limit` is 1–100 and defaults to `100`. `offset` continues pagination. Optional second argument `{ account }` defaults to the project binding. Returns `Signal<{ sections: AsanaSection[]; pageInfo: { nextOffset?: string } }>`. Each section includes its `id`, name/type, optional creation timestamp, and optional project reference. # List subtasks Source: https://docs.automate.ax/reference/integrations/asana/actions/list-subtasks List an Asana task's direct subtasks. `asana.listSubtasks` returns only immediate children. Call it again for deeper levels. ```ts automations/list-asana-subtasks.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("List Asana subtasks", () => { onDashboardRun({ title: "List Asana subtasks" }) asana.listSubtasks({ taskId: "parent-task-gid" }) }) ``` Provide `taskId`. `limit` is 1–100 and defaults to `100`. `offset` continues pagination. Optional second argument `{ account }` defaults to the project binding. Returns `Signal<{ tasks: AsanaTask[]; pageInfo: { nextOffset?: string } }>`. # List tag tasks Source: https://docs.automate.ax/reference/integrations/asana/actions/list-tag-tasks List tasks carrying an Asana tag. `asana.listTagTasks` list tasks carrying an Asana tag. ```ts automations/asana-list-tag-tasks.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("List tag tasks", () => { onDashboardRun({ title: "List tag tasks" }) asana.listTagTasks({ tagId: "tag-gid" }) }) ``` Provide `tagId`. Optional `limit` defaults to `100`; pass `offset` to continue. Optional second argument `{ account }` selects a named Asana binding. Returns `tasks` and `pageInfo`. `pageInfo.nextOffset` is present only when another page is available. # List task attachments Source: https://docs.automate.ax/reference/integrations/asana/actions/list-task-attachments List files and external attachments on an Asana task. `asana.listTaskAttachments` list files and external attachments on an Asana task. ```ts automations/asana-list-task-attachments.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("List task attachments", () => { onDashboardRun({ title: "List task attachments" }) asana.listTaskAttachments({ taskId: "task-gid" }) }) ``` Provide `taskId`. Optional `limit` defaults to `100`; pass the opaque `offset` returned by the previous page. Optional second argument `{ account }` selects a named Asana binding. Returns `attachments` and `pageInfo`. `pageInfo.nextOffset` is present only when another page is available. # List task dependencies Source: https://docs.automate.ax/reference/integrations/asana/actions/list-task-dependencies List tasks that block an Asana task. `asana.listTaskDependencies` list tasks that block an Asana task. ```ts automations/asana-list-task-dependencies.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("List task dependencies", () => { onDashboardRun({ title: "List task dependencies" }) asana.listTaskDependencies({ taskId: "task-gid" }) }) ``` Provide `taskId`. Optional `limit` defaults to `100`; pass `offset` to continue. Optional second argument `{ account }` selects a named Asana binding. Returns blocking `tasks` and `pageInfo`. `pageInfo.nextOffset` is present only when another page is available. # List task dependents Source: https://docs.automate.ax/reference/integrations/asana/actions/list-task-dependents List tasks blocked by an Asana task. `asana.listTaskDependents` list tasks blocked by an Asana task. ```ts automations/asana-list-task-dependents.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("List task dependents", () => { onDashboardRun({ title: "List task dependents" }) asana.listTaskDependents({ taskId: "task-gid" }) }) ``` Provide `taskId`. Optional `limit` defaults to `100`; pass `offset` to continue. Optional second argument `{ account }` selects a named Asana binding. Returns dependent `tasks` and `pageInfo`. `pageInfo.nextOffset` is present only when another page is available. # List task stories Source: https://docs.automate.ax/reference/integrations/asana/actions/list-task-stories List activity stories and comments for an Asana task. `asana.listTaskStories` returns the task activity stream with user comments and system stories. ```ts automations/list-asana-stories.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("List Asana task stories", () => { onDashboardRun({ title: "List Asana task stories" }) asana.listTaskStories({ taskId: "task-gid", limit: 100 }) }) ``` Provide `taskId`. `limit` is 1–100 and defaults to `100`. `offset` continues from `pageInfo.nextOffset`. Optional second argument `{ account }` defaults to the project binding. Returns `Signal<{ stories: AsanaStory[]; pageInfo: { nextOffset?: string } }>` with each story's `id`, text and optional HTML, creator and timestamps, subtype, and edited/pinned state. Not every story is an editable comment. # List team users Source: https://docs.automate.ax/reference/integrations/asana/actions/list-team-users List users who belong to an Asana team. `asana.listTeamUsers` list users who belong to an Asana team. ```ts automations/asana-list-team-users.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("List team users", () => { onDashboardRun({ title: "List team users" }) asana.listTeamUsers({ teamId: "team-gid" }) }) ``` Provide `teamId`. Optional `limit` defaults to `100`; pass `offset` to continue. Optional second argument `{ account }` selects a named Asana binding. Returns `users` and `pageInfo`. `pageInfo.nextOffset` is present only when another page is available. # List workspace custom fields Source: https://docs.automate.ax/reference/integrations/asana/actions/list-workspace-custom-fields List custom fields available in an Asana workspace. `asana.listWorkspaceCustomFields` list custom fields available in an Asana workspace. ```ts automations/asana-list-workspace-custom-fields.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("List workspace custom fields", () => { onDashboardRun({ title: "List workspace custom fields" }) asana.listWorkspaceCustomFields({ workspaceId: "workspace-gid" }) }) ``` Provide `workspaceId`. Optional `limit` defaults to `100`; pass `offset` to continue. Optional second argument `{ account }` selects a named Asana binding. Returns `customFields` and `pageInfo`. `pageInfo.nextOffset` is present only when another page is available. # List workspace tags Source: https://docs.automate.ax/reference/integrations/asana/actions/list-workspace-tags List tags available in an Asana workspace. `asana.listWorkspaceTags` list tags available in an Asana workspace. ```ts automations/asana-list-workspace-tags.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("List workspace tags", () => { onDashboardRun({ title: "List workspace tags" }) asana.listWorkspaceTags({ workspaceId: "workspace-gid" }) }) ``` Provide `workspaceId`. Optional `limit` defaults to `100`; pass `offset` to continue. Optional second argument `{ account }` selects a named Asana binding. Returns `tags` and `pageInfo`. `pageInfo.nextOffset` is present only when another page is available. # List workspace teams Source: https://docs.automate.ax/reference/integrations/asana/actions/list-workspace-teams List teams in an Asana workspace or organization. `asana.listWorkspaceTeams` list teams in an Asana workspace or organization. ```ts automations/asana-list-workspace-teams.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("List workspace teams", () => { onDashboardRun({ title: "List workspace teams" }) asana.listWorkspaceTeams({ workspaceId: "workspace-gid" }) }) ``` Provide `workspaceId`. Optional `limit` defaults to `100`; pass `offset` to continue. Optional second argument `{ account }` selects a named Asana binding. Returns `teams` and `pageInfo`. `pageInfo.nextOffset` is present only when another page is available. # List workspace users Source: https://docs.automate.ax/reference/integrations/asana/actions/list-workspace-users List users in an Asana workspace or organization. `asana.listWorkspaceUsers` returns user GIDs for assignees and followers. ```ts automations/list-asana-users.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("List Asana users", () => { onDashboardRun({ title: "List Asana users" }) asana.listWorkspaceUsers({ workspaceId: "workspace-gid", limit: 100 }) }) ``` Provide `workspaceId`. `limit` is 1–100 and defaults to `100`. `offset` continues from `pageInfo.nextOffset`. Optional second argument `{ account }` defaults to the project binding. Returns `Signal<{ users: AsanaUser[]; pageInfo: { nextOffset?: string } }>`. # List workspaces Source: https://docs.automate.ax/reference/integrations/asana/actions/list-workspaces List the connected user's Asana workspaces and organizations. `asana.listWorkspaces` returns the workspace GIDs used by project and task actions. ```ts automations/list-asana-workspaces.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("List Asana workspaces", () => { onDashboardRun({ title: "List Asana workspaces" }) asana.listWorkspaces({ limit: 100 }) }) ``` `limit` is 1–100 and defaults to `100`. Optional `offset` is the opaque token from the previous result. Optional second argument `{ account }` defaults to the project binding. Returns `Signal<{ workspaces: AsanaWorkspace[]; pageInfo: { nextOffset?: string } }>`. Workspaces include `id` and name/type. Asana may also return `emailDomains` and `isOrganization`; these fields are omitted when the provider does not include that optional metadata. # Move custom-field enum option Source: https://docs.automate.ax/reference/integrations/asana/actions/move-custom-field-enum-option Move an enum option before or after another option. `asana.moveCustomFieldEnumOption` moves an enum option before or after another option. ```ts automations/asana-move-custom-field-enum-option.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Move custom-field enum option", () => { onDashboardRun({ title: "Move custom-field enum option" }) asana.moveCustomFieldEnumOption({ customFieldId: "custom-field-gid", optionId: "option-gid", insertBeforeOptionId: "other-option-gid", }) }) ``` Provide `customFieldId`, `optionId`, and exactly one of `insertBeforeOptionId` or `insertAfterOptionId`. Optional second argument `{ account }` selects a named Asana binding. Returns no data. Use `asana.getCustomField` to read the updated option order. # Move task to section Source: https://docs.automate.ax/reference/integrations/asana/actions/move-task-to-section Move and position an Asana task in a project section. `asana.moveTaskToSection` places an existing task in another section. ```ts automations/move-asana-task.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Move Asana task", () => { onDashboardRun({ title: "Move Asana task" }) asana.moveTaskToSection({ taskId: "task-gid", sectionId: "review-section-gid", }) }) ``` Provide `taskId` and `sectionId`. Optional `insertAfterTaskId` or `insertBeforeTaskId` controls ordering. Supply at most one. Optional second argument `{ account }` defaults to the project binding. Returns `Signal`. The task must belong to the section's project or be eligible for Asana to add through that section. # Remove project custom field Source: https://docs.automate.ax/reference/integrations/asana/actions/remove-project-custom-field Remove a custom field from an Asana project. `asana.removeProjectCustomField` remove a custom field from an Asana project. ```ts automations/asana-remove-project-custom-field.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Remove project custom field", () => { onDashboardRun({ title: "Remove project custom field" }) asana.removeProjectCustomField({ projectId: "project-gid", customFieldId: "custom-field-gid", }) }) ``` Provide `projectId` and `customFieldId`. Optional second argument `{ account }` selects a named Asana binding. Returns no value. This removes the project setting, not the shared custom-field definition. # Remove project followers Source: https://docs.automate.ax/reference/integrations/asana/actions/remove-project-followers Unsubscribe users from updates from an Asana project. `asana.removeProjectFollowers` unsubscribe users from updates from an Asana project. ```ts automations/asana-remove-project-followers.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Remove project followers", () => { onDashboardRun({ title: "Remove project followers" }) asana.removeProjectFollowers({ projectId: "project-gid", userIds: ["user-gid"], }) }) ``` Provide `projectId` and one or more `userIds`. Optional second argument `{ account }` selects a named Asana binding. Returns the updated project. # Remove project members Source: https://docs.automate.ax/reference/integrations/asana/actions/remove-project-members Remove users from an Asana project. `asana.removeProjectMembers` remove users from an Asana project. ```ts automations/asana-remove-project-members.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Remove project members", () => { onDashboardRun({ title: "Remove project members" }) asana.removeProjectMembers({ projectId: "project-gid", userIds: ["user-gid"], }) }) ``` Provide `projectId` and one or more `userIds`. Optional second argument `{ account }` selects a named Asana binding. Returns the updated project. # Remove task dependencies Source: https://docs.automate.ax/reference/integrations/asana/actions/remove-task-dependencies Remove blocking dependencies from an Asana task. `asana.removeTaskDependencies` remove blocking dependencies from an Asana task. ```ts automations/asana-remove-task-dependencies.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Remove task dependencies", () => { onDashboardRun({ title: "Remove task dependencies" }) asana.removeTaskDependencies({ taskId: "task-gid", dependencyTaskIds: ["blocker-task-gid"], }) }) ``` Provide `taskId` and one or more `dependencyTaskIds`. Optional second argument `{ account }` selects a named Asana binding. Returns no value. # Remove task followers Source: https://docs.automate.ax/reference/integrations/asana/actions/remove-task-followers Remove followers from an Asana task. `asana.removeTaskFollowers` unsubscribes selected users from task updates. ```ts automations/remove-asana-followers.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Unfollow Asana task", () => { onDashboardRun({ title: "Unfollow Asana task" }) asana.removeTaskFollowers({ taskId: "task-gid", followerIds: ["me"] }) }) ``` Provide `taskId` and a non-empty `followerIds` array. Optional second argument `{ account }` defaults to the project binding. Returns the refreshed `AsanaTask`. # Remove task from project Source: https://docs.automate.ax/reference/integrations/asana/actions/remove-task-from-project Remove a task from an Asana project without deleting it. `asana.removeTaskFromProject` removes one project membership but leaves the task and its other memberships. ```ts automations/remove-asana-task-from-project.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Remove task from Asana project", () => { onDashboardRun({ title: "Remove task from Asana project" }) asana.removeTaskFromProject({ taskId: "task-gid", projectId: "project-gid" }) }) ``` Provide `taskId` and `projectId`. Optional second argument `{ account }` defaults to the project binding. Returns `Signal`. # Remove task tag Source: https://docs.automate.ax/reference/integrations/asana/actions/remove-task-tag Remove a tag from an Asana task. `asana.removeTaskTag` remove a tag from an Asana task. ```ts automations/asana-remove-task-tag.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Remove task tag", () => { onDashboardRun({ title: "Remove task tag" }) asana.removeTaskTag({ taskId: "task-gid", tagId: "tag-gid" }) }) ``` Provide `taskId` and `tagId`. Optional second argument `{ account }` selects a named Asana binding. Returns no value. # Search projects Source: https://docs.automate.ax/reference/integrations/asana/actions/search-projects Search projects by name in an Asana workspace. `asana.searchProjects` searches projects by name in an Asana workspace. ```ts automations/asana-search-projects.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Search projects", () => { onDashboardRun({ title: "Search projects" }) asana.searchProjects({ workspaceId: "workspace-gid", text: "launch" }) }) ``` Provide `workspaceId` and non-empty `text`. Optional `teamId` and `completed` narrow results. `limit` defaults to `100`. Asana doesn't support offset pagination for project search. Optional second argument `{ account }` selects a named Asana binding. Returns the matching `projects`. # Search tasks Source: https://docs.automate.ax/reference/integrations/asana/actions/search-tasks Search tasks across a premium Asana workspace. `asana.searchTasks` filters by text, ownership, state, dates, projects, and sections through Asana advanced search. ```ts automations/search-asana-tasks.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Find overdue launch work", () => { onDashboardRun({ title: "Find overdue launch work" }) asana.searchTasks({ workspaceId: "workspace-gid", text: "launch", completed: false, dueBefore: "2026-09-01", sortBy: "due_date", }) }) ``` Provide `workspaceId`. Optional `assignee` accepts a user `GID`, `"me"`, or `null` for unassigned. Other optional filters are `completed`, `createdAfter`, `dueAfter`, `dueBefore`, `modifiedAfter`, `projectIds`, `sectionIds`, and `text`. `sortBy` accepts `"completed_at"`, `"created_at"`, `"due_date"`, `"likes"`, or `"modified_at"`. `sortAscending` sets direction. `limit` is 1–100 and defaults to `100`. Optional second argument `{ account }` defaults to the project binding. Returns `Signal<{ tasks: AsanaTask[] }>`. Asana advanced search requires an eligible paid workspace and doesn't expose cursor pagination here. # Set task completed Source: https://docs.automate.ax/reference/integrations/asana/actions/set-task-completed Mark an Asana task complete or incomplete. `asana.setTaskCompletion` sets a task's completion state. ```ts automations/complete-asana-task.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Complete Asana task", () => { onDashboardRun({ title: "Complete Asana task" }) asana.setTaskCompletion({ taskId: "task-gid" }) }) ``` Provide `taskId`. `completed` defaults to `true`. Pass `false` to reopen. Optional second argument `{ account }` defaults to the project binding. Returns the updated `AsanaTask` with any completion timestamp and user that Asana supplies. # Set task parent Source: https://docs.automate.ax/reference/integrations/asana/actions/set-task-parent Move an Asana task under a parent task or clear its parent. `asana.setTaskParent` move an Asana task under a parent task or clear its parent. ```ts automations/asana-set-task-parent.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Set task parent", () => { onDashboardRun({ title: "Set task parent" }) asana.setTaskParent({ taskId: "task-gid", parentTaskId: "parent-task-gid" }) }) ``` Provide `taskId` and `parentTaskId`; use `null` to clear the parent. Optional `insertBeforeTaskId` or `insertAfterTaskId` positions the subtask. Optional second argument `{ account }` selects a named Asana binding. Returns the updated task. # Update custom field Source: https://docs.automate.ax/reference/integrations/asana/actions/update-custom-field Update an Asana custom-field definition. `asana.updateCustomField` update an Asana custom-field definition. ```ts automations/asana-update-custom-field.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Update custom field", () => { onDashboardRun({ title: "Update custom field" }) asana.updateCustomField({ customFieldId: "custom-field-gid", name: "Severity", }) }) ``` Provide `customFieldId` and at least one of `name`, `description`, `format`, `precision`, `currencyCode`, or `customLabel`. Optional second argument `{ account }` selects a named Asana binding. Returns the updated custom field. # Update custom-field enum option Source: https://docs.automate.ax/reference/integrations/asana/actions/update-custom-field-enum-option Update or disable an Asana custom-field enum option. `asana.updateCustomFieldEnumOption` update or disable an Asana custom-field enum option. ```ts automations/asana-update-custom-field-enum-option.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Update custom-field enum option", () => { onDashboardRun({ title: "Update custom-field enum option" }) asana.updateCustomFieldEnumOption({ optionId: "option-gid", enabled: false }) }) ``` Provide `optionId` and at least one of `name`, `color`, or `enabled`. Optional second argument `{ account }` selects a named Asana binding. Returns the updated enum option. Disable an option to preserve existing task values without allowing new selections. # Update project Source: https://docs.automate.ax/reference/integrations/asana/actions/update-project Update an Asana project's metadata, dates, visibility, or archive state. `asana.updateProject` leaves omitted inputs unchanged. ```ts automations/archive-asana-project.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Archive Asana project", () => { onDashboardRun({ title: "Archive Asana project" }) asana.updateProject({ projectId: "project-gid", archived: true }) }) ``` Provide `projectId`. Optional mutation fields are `name`, `archived`, `color`, `dueOn`, `startOn`, `htmlNotes`, `notes`, and `public`. Second argument `{ account }` defaults to the project binding. Dates use `YYYY-MM-DD` or `null`. Don't supply both `htmlNotes` and `notes`. Returns the updated `AsanaProject`. # Update section Source: https://docs.automate.ax/reference/integrations/asana/actions/update-section Rename an Asana section. `asana.updateSection` renames a section. ```ts automations/rename-asana-section.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Rename Asana section", () => { onDashboardRun({ title: "Rename Asana section" }) asana.updateSection({ sectionId: "section-gid", name: "Ready for review" }) }) ``` Provide `sectionId` and a non-empty `name`. Optional second argument `{ account }` defaults to the project binding. Returns the updated `AsanaSection`. # Update tag Source: https://docs.automate.ax/reference/integrations/asana/actions/update-tag Update an Asana tag's name, color, or notes. `asana.updateTag` update an Asana tag's name, color, or notes. ```ts automations/asana-update-tag.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Update tag", () => { onDashboardRun({ title: "Update tag" }) asana.updateTag({ tagId: "tag-gid", name: "Critical" }) }) ``` Provide `tagId` and at least one of `name`, `color`, or `notes`. Set `color` to `null` to clear it. Optional second argument `{ account }` selects a named Asana binding. Returns the updated tag. # Update task Source: https://docs.automate.ax/reference/integrations/asana/actions/update-task Update an Asana task's content, assignment, schedule, subtype, custom fields, or completion. `asana.updateTask` doesn't change placement or followers. Use their dedicated actions instead. ```ts automations/update-asana-task.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Reschedule Asana task", () => { onDashboardRun({ title: "Reschedule Asana task" }) asana.updateTask({ taskId: "task-gid", dueOn: "2026-09-15", assignee: "me" }) }) ``` Provide `taskId`. Optional `assignee` accepts `null` to unassign. Other optional fields are `name`, `assigneeStatus`, `completed`, `customFields`, `dueAt`, `dueOn`, `htmlNotes`, `notes`, `startAt`, `startOn`, and `subtype`. Optional second argument `{ account }` selects the Asana binding. Omitted fields remain unchanged. Nullable due fields clear schedules. Description, due, and start formats are mutually exclusive as on `asana.createTask`. Start fields require a compatible due field in the same input. Returns the updated `AsanaTask`. # Update task comment Source: https://docs.automate.ax/reference/integrations/asana/actions/update-task-comment Edit or pin an Asana task comment. `asana.updateTaskComment` edits one user comment. ```ts automations/update-asana-comment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Update Asana comment", () => { onDashboardRun({ title: "Update Asana comment" }) asana.updateTaskComment({ storyId: "story-gid", text: "Approved.", isPinned: false, }) }) ``` Provide `storyId` and at least one of `text`, `htmlText`, or `isPinned`. Don't provide both text formats. Optional second argument `{ account }` defaults to the project binding. Returns the updated `AsanaStory`. Asana generally permits edits only to comments owned by the connected user. You can't edit system stories. # Upload task attachment Source: https://docs.automate.ax/reference/integrations/asana/actions/upload-task-attachment Upload a file attachment to an Asana task. `asana.uploadTaskAttachment` upload a file attachment to an Asana task. ```ts automations/asana-upload-task-attachment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Upload task attachment", () => { onDashboardRun({ title: "Upload task attachment" }) asana.uploadTaskAttachment({ taskId: "task-gid", file: new File(["release"], "brief.txt", { lastModified: 0 }), }) }) ``` Provide `taskId` and a `File`. When you construct a file directly in automation code, set a stable `lastModified` value so durable replay sees the same input. Optional second argument `{ account }` selects a named Asana binding. Returns the created attachment. Uploads are not replay-safe, so Automate.ax does not automatically repeat an ambiguous request. # Asana Source: https://docs.automate.ax/reference/integrations/asana/index Manage Asana tasks, projects, portfolios, goals, teams, and custom fields, or react to workspace resource changes. ## Exports ```ts theme={null} import { asana, asanaAccount, getAsanaApi } from "automate.ax/asana" ``` * `asana` contains the packaged Asana actions and triggers. * `asanaAccount("name")` selects a named Asana connection. * `getAsanaApi` creates the authenticated Asana API helper for a custom account-backed action. ## Triggers * [On Asana resource event](/reference/integrations/asana/triggers/on-resource-event) * [On attachment deleted](/reference/integrations/asana/triggers/on-attachment-deleted) * [On attachment restored](/reference/integrations/asana/triggers/on-attachment-restored) * [On comment deleted](/reference/integrations/asana/triggers/on-comment-deleted) * [On comment restored](/reference/integrations/asana/triggers/on-comment-restored) * [On comment updated](/reference/integrations/asana/triggers/on-comment-updated) * [On project added](/reference/integrations/asana/triggers/on-project-added) * [On project changed](/reference/integrations/asana/triggers/on-project-changed) * [On project deleted](/reference/integrations/asana/triggers/on-project-deleted) * [On project removed](/reference/integrations/asana/triggers/on-project-removed) * [On project restored](/reference/integrations/asana/triggers/on-project-restored) * [On section added](/reference/integrations/asana/triggers/on-section-added) * [On section changed](/reference/integrations/asana/triggers/on-section-changed) * [On section deleted](/reference/integrations/asana/triggers/on-section-deleted) * [On section restored](/reference/integrations/asana/triggers/on-section-restored) * [On tag added](/reference/integrations/asana/triggers/on-tag-added) * [On tag changed](/reference/integrations/asana/triggers/on-tag-changed) * [On tag deleted](/reference/integrations/asana/triggers/on-tag-deleted) * [On tag restored](/reference/integrations/asana/triggers/on-tag-restored) * [On task assigned](/reference/integrations/asana/triggers/on-task-assigned) * [On task due date changed](/reference/integrations/asana/triggers/on-task-due-date-changed) * [On task follower added](/reference/integrations/asana/triggers/on-task-follower-added) * [On task follower removed](/reference/integrations/asana/triggers/on-task-follower-removed) * [On task incomplete](/reference/integrations/asana/triggers/on-task-incomplete) * [On task project added](/reference/integrations/asana/triggers/on-task-project-added) * [On task project removed](/reference/integrations/asana/triggers/on-task-project-removed) * [On task restored](/reference/integrations/asana/triggers/on-task-restored) * [On task tag added](/reference/integrations/asana/triggers/on-task-tag-added) * [On task tag removed](/reference/integrations/asana/triggers/on-task-tag-removed) * [On task unassigned](/reference/integrations/asana/triggers/on-task-unassigned) * [On Asana comment added](/reference/integrations/asana/triggers/on-comment-added) * [On Asana task added](/reference/integrations/asana/triggers/on-task-added) * [On Asana task changed](/reference/integrations/asana/triggers/on-task-changed) * [On Asana task completed](/reference/integrations/asana/triggers/on-task-completed) * [On Asana task deleted](/reference/integrations/asana/triggers/on-task-deleted) * [On Asana task removed](/reference/integrations/asana/triggers/on-task-removed) ## Actions * [Add project custom field](/reference/integrations/asana/actions/add-project-custom-field) * [Add project followers](/reference/integrations/asana/actions/add-project-followers) * [Add project members](/reference/integrations/asana/actions/add-project-members) * [Add task dependencies](/reference/integrations/asana/actions/add-task-dependencies) * [Add task tag](/reference/integrations/asana/actions/add-task-tag) * [Create custom field](/reference/integrations/asana/actions/create-custom-field) * [Create custom-field enum option](/reference/integrations/asana/actions/create-custom-field-enum-option) * [Create tag](/reference/integrations/asana/actions/create-tag) * [Delete attachment](/reference/integrations/asana/actions/delete-attachment) * [Delete custom field](/reference/integrations/asana/actions/delete-custom-field) * [Delete tag](/reference/integrations/asana/actions/delete-tag) * [Duplicate project](/reference/integrations/asana/actions/duplicate-project) * [Duplicate task](/reference/integrations/asana/actions/duplicate-task) * [Get attachment](/reference/integrations/asana/actions/get-attachment) * [Get custom field](/reference/integrations/asana/actions/get-custom-field) * [Get job](/reference/integrations/asana/actions/get-job) * [Get project task counts](/reference/integrations/asana/actions/get-project-task-counts) * [Get tag](/reference/integrations/asana/actions/get-tag) * [Get team](/reference/integrations/asana/actions/get-team) * [List tag tasks](/reference/integrations/asana/actions/list-tag-tasks) * [List task attachments](/reference/integrations/asana/actions/list-task-attachments) * [List task dependencies](/reference/integrations/asana/actions/list-task-dependencies) * [List task dependents](/reference/integrations/asana/actions/list-task-dependents) * [List team users](/reference/integrations/asana/actions/list-team-users) * [List workspace custom fields](/reference/integrations/asana/actions/list-workspace-custom-fields) * [List workspace tags](/reference/integrations/asana/actions/list-workspace-tags) * [List workspace teams](/reference/integrations/asana/actions/list-workspace-teams) * [Move custom-field enum option](/reference/integrations/asana/actions/move-custom-field-enum-option) * [Remove project custom field](/reference/integrations/asana/actions/remove-project-custom-field) * [Remove project followers](/reference/integrations/asana/actions/remove-project-followers) * [Remove project members](/reference/integrations/asana/actions/remove-project-members) * [Remove task dependencies](/reference/integrations/asana/actions/remove-task-dependencies) * [Remove task tag](/reference/integrations/asana/actions/remove-task-tag) * [Search projects](/reference/integrations/asana/actions/search-projects) * [Set task parent](/reference/integrations/asana/actions/set-task-parent) * [Update custom field](/reference/integrations/asana/actions/update-custom-field) * [Update custom-field enum option](/reference/integrations/asana/actions/update-custom-field-enum-option) * [Update tag](/reference/integrations/asana/actions/update-tag) * [Upload task attachment](/reference/integrations/asana/actions/upload-task-attachment) * [Add task comment](/reference/integrations/asana/actions/add-task-comment) * [Add task followers](/reference/integrations/asana/actions/add-task-followers) * [Add task to project](/reference/integrations/asana/actions/add-task-to-project) * [Create project](/reference/integrations/asana/actions/create-project) * [Create section](/reference/integrations/asana/actions/create-section) * [Create subtask](/reference/integrations/asana/actions/create-subtask) * [Create task](/reference/integrations/asana/actions/create-task) * [Delete project](/reference/integrations/asana/actions/delete-project) * [Delete section](/reference/integrations/asana/actions/delete-section) * [Delete task comment](/reference/integrations/asana/actions/delete-task-comment) * [Delete task](/reference/integrations/asana/actions/delete-task) * [Get current user](/reference/integrations/asana/actions/get-current-user) * [Get project](/reference/integrations/asana/actions/get-project) * [Get task](/reference/integrations/asana/actions/get-task) * [Get user](/reference/integrations/asana/actions/get-user) * [List assigned tasks](/reference/integrations/asana/actions/list-assigned-tasks) * [List project tasks](/reference/integrations/asana/actions/list-project-tasks) * [List projects](/reference/integrations/asana/actions/list-projects) * [List section tasks](/reference/integrations/asana/actions/list-section-tasks) * [List sections](/reference/integrations/asana/actions/list-sections) * [List subtasks](/reference/integrations/asana/actions/list-subtasks) * [List task stories](/reference/integrations/asana/actions/list-task-stories) * [List workspace users](/reference/integrations/asana/actions/list-workspace-users) * [List workspaces](/reference/integrations/asana/actions/list-workspaces) * [Move task to section](/reference/integrations/asana/actions/move-task-to-section) * [Remove task followers](/reference/integrations/asana/actions/remove-task-followers) * [Remove task from project](/reference/integrations/asana/actions/remove-task-from-project) * [Search tasks](/reference/integrations/asana/actions/search-tasks) * [Set task completed](/reference/integrations/asana/actions/set-task-completed) * [Update project](/reference/integrations/asana/actions/update-project) * [Update section](/reference/integrations/asana/actions/update-section) * [Update task comment](/reference/integrations/asana/actions/update-task-comment) * [Update task](/reference/integrations/asana/actions/update-task) # On attachment deleted Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-attachment-deleted Runs when Asana permanently deletes an attachment propagated through the watched resource. `asana.onAttachmentDeleted` watches one Asana resource. Runs when Asana permanently deletes an attachment propagated through the watched resource. ```ts automations/asana-on-attachment-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("On attachment deleted", () => { const change = asana.onAttachmentDeleted({ resourceId: "project-gid" }) // Remove the deleted Asana attachment from the document index. }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. Returns a signal containing the affected attachment reference and the compact normalized webhook event. The event has `resourceType: "attachment"` and `action: "deleted"`; field-specific triggers also narrow `event.change.field` and `event.change.action`. Call the corresponding get action when you need full current resource state. # On attachment restored Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-attachment-restored Runs when Asana restores an attachment propagated through the watched resource. `asana.onAttachmentRestored` watches one Asana resource. Runs when Asana restores an attachment propagated through the watched resource. ```ts automations/asana-on-attachment-restored.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("On attachment restored", () => { const change = asana.onAttachmentRestored({ resourceId: "project-gid" }) // Restore the Asana attachment in the document index. }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. Returns a signal containing the affected attachment reference and the compact normalized webhook event. The event has `resourceType: "attachment"` and `action: "undeleted"`; field-specific triggers also narrow `event.change.field` and `event.change.action`. Call the corresponding get action when you need full current resource state. # On Asana comment added Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-comment-added Run an automation when a user comments on an Asana resource. `asana.onCommentAdded` matches `comment_added` stories from the selected resource and fetches the comment. ```ts automations/watch-asana-comments.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Watch Asana comments", () => { const comment = asana.onCommentAdded({ resourceId: "project-gid" }) // Send the new Asana comment to the task owner. }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. ## Trigger data Returns a `Signal` containing the fetched comment story: ```ts theme={null} interface AsanaCommentAddedEvent { id: string name?: string type: "story" createdAt?: string createdBy?: AsanaResource htmlText?: string isEdited: boolean isPinned: boolean subtype: "comment_added" text: string event: AsanaWebhookEvent<"added", "story"> } ``` `AsanaResource` and the common webhook fields have the [shared Asana event shapes](/reference/integrations/asana/triggers/on-task-added#trigger-data). The top-level fields contain the fetched comment. `event` contains the webhook metadata, including `action: "added"`, parent, user, and watched resource. # On comment deleted Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-comment-deleted Runs when Asana removes a comment story propagated through the watched resource. `asana.onCommentDeleted` watches one Asana resource. Runs when Asana removes a comment story propagated through the watched resource. ```ts automations/asana-on-comment-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("On comment deleted", () => { const change = asana.onCommentDeleted({ resourceId: "project-gid" }) // Remove state tied to the deleted Asana comment. }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. Returns a signal containing the affected story reference and the compact normalized webhook event. The event has `resourceType: "story"` and `action: "removed"`; field-specific triggers also narrow `event.change.field` and `event.change.action`. Call the corresponding get action when you need full current resource state. # On comment restored Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-comment-restored Runs when Asana restores a comment story propagated through the watched resource. `asana.onCommentRestored` watches one Asana resource. Runs when Asana restores a comment story propagated through the watched resource. ```ts automations/asana-on-comment-restored.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("On comment restored", () => { const change = asana.onCommentRestored({ resourceId: "project-gid" }) // Reprocess the restored Asana comment. }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. Returns a signal containing the affected story reference and the compact normalized webhook event. The event has `resourceType: "story"` and `action: "undeleted"`; field-specific triggers also narrow `event.change.field` and `event.change.action`. Call the corresponding get action when you need full current resource state. # On comment updated Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-comment-updated Runs when Asana changes a comment story. `asana.onCommentUpdated` watches one Asana resource. Runs when Asana changes a comment story. The compact event identifies the story; call `getTask` or list stories when current surrounding state is needed. ```ts automations/asana-on-comment-updated.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("On comment updated", () => { const change = asana.onCommentUpdated({ resourceId: "project-gid" }) // Sync changes from the updated Asana comment. }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. Returns a signal containing the affected story reference and the compact normalized webhook event. The event has `resourceType: "story"` and `action: "changed"`; field-specific triggers also narrow `event.change.field` and `event.change.action`. Call the corresponding get action when you need full current resource state. # On project added Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-project-added Runs when a project is added through the watched resource. `asana.onProjectAdded` watches one Asana resource. Runs when a project is added through the watched resource. ```ts automations/asana-on-project-added.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("On project added", () => { const change = asana.onProjectAdded({ resourceId: "project-gid" }) // Add the Asana project to the portfolio dashboard. }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. Returns a signal containing the affected project reference and the compact normalized webhook event. The event has `resourceType: "project"` and `action: "added"`; field-specific triggers also narrow `event.change.field` and `event.change.action`. Call the corresponding get action when you need full current resource state. # On project changed Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-project-changed Runs when a project changes through the watched resource. `asana.onProjectChanged` watches one Asana resource. Runs when a project changes through the watched resource. ```ts automations/asana-on-project-changed.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("On project changed", () => { const change = asana.onProjectChanged({ resourceId: "project-gid" }) // Sync changes from the updated Asana project. }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. Returns a signal containing the affected project reference and the compact normalized webhook event. The event has `resourceType: "project"` and `action: "changed"`; field-specific triggers also narrow `event.change.field` and `event.change.action`. Call the corresponding get action when you need full current resource state. # On project deleted Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-project-deleted Runs when a project is deleted through the watched resource. `asana.onProjectDeleted` watches one Asana resource. Runs when a project is deleted through the watched resource. ```ts automations/asana-on-project-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("On project deleted", () => { const change = asana.onProjectDeleted({ resourceId: "project-gid" }) // Remove state tied to the deleted Asana project. }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. Returns a signal containing the affected project reference and the compact normalized webhook event. The event has `resourceType: "project"` and `action: "deleted"`; field-specific triggers also narrow `event.change.field` and `event.change.action`. Call the corresponding get action when you need full current resource state. # On project removed Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-project-removed Runs when a project is removed through the watched resource. `asana.onProjectRemoved` watches one Asana resource. Runs when a project is removed through the watched resource. ```ts automations/asana-on-project-removed.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("On project removed", () => { const change = asana.onProjectRemoved({ resourceId: "project-gid" }) // Remove the Asana project from the portfolio dashboard. }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. Returns a signal containing the affected project reference and the compact normalized webhook event. The event has `resourceType: "project"` and `action: "removed"`; field-specific triggers also narrow `event.change.field` and `event.change.action`. Call the corresponding get action when you need full current resource state. # On project restored Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-project-restored Runs when a project is restored through the watched resource. `asana.onProjectRestored` watches one Asana resource. Runs when a project is restored through the watched resource. ```ts automations/asana-on-project-restored.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("On project restored", () => { const change = asana.onProjectRestored({ resourceId: "project-gid" }) // Reprocess the restored Asana project. }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. Returns a signal containing the affected project reference and the compact normalized webhook event. The event has `resourceType: "project"` and `action: "undeleted"`; field-specific triggers also narrow `event.change.field` and `event.change.action`. Call the corresponding get action when you need full current resource state. # On Asana resource event Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-resource-event Run an automation for every compact event propagated through an Asana resource. `asana.onResourceEvent` is the broad Asana webhook trigger. Prefer a semantic trigger when the automation handles one known change. ```ts automations/watch-asana-resource.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Audit Asana project activity", () => { const event = asana.onResourceEvent({ resourceId: "project-gid" }) // Route the Asana event by action and resource type. }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. The platform creates one authenticated Asana webhook for the selected account and resource and shares it across compatible triggers. Returns a compact normalized event with camelCase fields: `action`, `change`, `createdAt`, `parent`, `resource`, `resourceSubtype`, `resourceType`, `user`, and `watchedResourceId`. Nested provider resource references use `id`, `name`, and `type`. # On section added Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-section-added Runs when a section is added through the watched resource. `asana.onSectionAdded` watches one Asana resource. Runs when a section is added through the watched resource. ```ts automations/asana-on-section-added.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("On section added", () => { const change = asana.onSectionAdded({ resourceId: "project-gid" }) // Sync the new Asana section to the project layout. }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. Returns a signal containing the affected section reference and the compact normalized webhook event. The event has `resourceType: "section"` and `action: "added"`; field-specific triggers also narrow `event.change.field` and `event.change.action`. Call the corresponding get action when you need full current resource state. # On section changed Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-section-changed Runs when a section changes through the watched resource. `asana.onSectionChanged` watches one Asana resource. Runs when a section changes through the watched resource. ```ts automations/asana-on-section-changed.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("On section changed", () => { const change = asana.onSectionChanged({ resourceId: "project-gid" }) // Sync changes from the updated Asana section. }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. Returns a signal containing the affected section reference and the compact normalized webhook event. The event has `resourceType: "section"` and `action: "changed"`; field-specific triggers also narrow `event.change.field` and `event.change.action`. Call the corresponding get action when you need full current resource state. # On section deleted Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-section-deleted Runs when a section is deleted through the watched resource. `asana.onSectionDeleted` watches one Asana resource. Runs when a section is deleted through the watched resource. ```ts automations/asana-on-section-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("On section deleted", () => { const change = asana.onSectionDeleted({ resourceId: "project-gid" }) // Remove state tied to the deleted Asana section. }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. Returns a signal containing the affected section reference and the compact normalized webhook event. The event has `resourceType: "section"` and `action: "deleted"`; field-specific triggers also narrow `event.change.field` and `event.change.action`. Call the corresponding get action when you need full current resource state. # On section restored Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-section-restored Runs when a section is restored through the watched resource. `asana.onSectionRestored` watches one Asana resource. Runs when a section is restored through the watched resource. ```ts automations/asana-on-section-restored.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("On section restored", () => { const change = asana.onSectionRestored({ resourceId: "project-gid" }) // Reprocess the restored Asana section. }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. Returns a signal containing the affected section reference and the compact normalized webhook event. The event has `resourceType: "section"` and `action: "undeleted"`; field-specific triggers also narrow `event.change.field` and `event.change.action`. Call the corresponding get action when you need full current resource state. # On tag added Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-tag-added Runs when a tag is added through the watched resource. `asana.onTagAdded` watches one Asana resource. Runs when a tag is added through the watched resource. ```ts automations/asana-on-tag-added.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("On tag added", () => { const change = asana.onTagAdded({ resourceId: "project-gid" }) // Sync the new Asana tag to the workspace taxonomy. }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. Returns a signal containing the affected tag reference and the compact normalized webhook event. The event has `resourceType: "tag"` and `action: "added"`; field-specific triggers also narrow `event.change.field` and `event.change.action`. Call the corresponding get action when you need full current resource state. # On tag changed Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-tag-changed Runs when a tag changes through the watched resource. `asana.onTagChanged` watches one Asana resource. Runs when a tag changes through the watched resource. ```ts automations/asana-on-tag-changed.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("On tag changed", () => { const change = asana.onTagChanged({ resourceId: "project-gid" }) // Sync changes from the updated Asana tag. }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. Returns a signal containing the affected tag reference and the compact normalized webhook event. The event has `resourceType: "tag"` and `action: "changed"`; field-specific triggers also narrow `event.change.field` and `event.change.action`. Call the corresponding get action when you need full current resource state. # On tag deleted Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-tag-deleted Runs when a tag is deleted through the watched resource. `asana.onTagDeleted` watches one Asana resource. Runs when a tag is deleted through the watched resource. ```ts automations/asana-on-tag-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("On tag deleted", () => { const change = asana.onTagDeleted({ resourceId: "project-gid" }) // Remove state tied to the deleted Asana tag. }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. Returns a signal containing the affected tag reference and the compact normalized webhook event. The event has `resourceType: "tag"` and `action: "deleted"`; field-specific triggers also narrow `event.change.field` and `event.change.action`. Call the corresponding get action when you need full current resource state. # On tag restored Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-tag-restored Runs when a tag is restored through the watched resource. `asana.onTagRestored` watches one Asana resource. Runs when a tag is restored through the watched resource. ```ts automations/asana-on-tag-restored.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("On tag restored", () => { const change = asana.onTagRestored({ resourceId: "project-gid" }) // Reprocess the restored Asana tag. }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. Returns a signal containing the affected tag reference and the compact normalized webhook event. The event has `resourceType: "tag"` and `action: "undeleted"`; field-specific triggers also narrow `event.change.field` and `event.change.action`. Call the corresponding get action when you need full current resource state. # On Asana task added Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-task-added Run an automation when Asana adds a task to a resource. `asana.onTaskAdded` matches task `added` events from the selected project or resource. ```ts automations/watch-new-asana-tasks.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Load added Asana tasks", () => { const task = asana.onTaskAdded({ resourceId: "project-gid" }) asana.getTask({ taskId: task.id }) }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. ## Trigger data Returns a `Signal`: ```ts theme={null} type AsanaTaskAddedEvent = AsanaTaskReference & { event: AsanaWebhookEvent<"added"> } interface AsanaTaskReference { id: string name?: string type: "task" } interface AsanaWebhookEvent< TAction extends string, TResourceType extends string = "task", > { action: TAction change?: { action: "added" | "changed" | "removed" addedValue?: JSONValue field: string newValue?: JSONValue removedValue?: JSONValue } createdAt: string parent?: AsanaResource resource: AsanaResource resourceSubtype?: string resourceType: TResourceType user?: AsanaResource watchedResourceId: string } interface AsanaResource { id: string name?: string type?: string } ``` The top-level fields identify the affected task. `event` contains the webhook metadata, including `action: "added"`, creation time, watched resource ID, parent, and user. Call `asana.getTask` for the task's full current state. # On task assigned Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-task-assigned Runs when the task assignee field changes to a user. `asana.onTaskAssigned` watches one Asana resource. Runs when the task `assignee` field changes to a user. `event.change.newValue` identifies the assignee. ```ts automations/asana-on-task-assigned.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("On task assigned", () => { const change = asana.onTaskAssigned({ resourceId: "project-gid" }) // Notify the new assignee of the Asana task. }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. Returns a signal containing the affected task reference and the compact normalized webhook event. The event has `resourceType: "task"` and `action: "changed"`; field-specific triggers also narrow `event.change.field` and `event.change.action`. Call the corresponding get action when you need full current resource state. # On Asana task changed Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-task-changed Run an automation when a task field changes in an Asana resource. `asana.onTaskChanged` matches all task `changed` events, including completion changes. ```ts automations/watch-asana-task-changes.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Watch Asana task changes", () => { const task = asana.onTaskChanged({ resourceId: "project-gid" }) task.event.change?.field }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. ## Trigger data Returns the [Asana task event shape](/reference/integrations/asana/triggers/on-task-added#trigger-data) with webhook action `"changed"`: ```ts theme={null} type AsanaTaskChangedEvent = AsanaTaskReference & { event: AsanaWebhookEvent<"changed"> } ``` The top-level fields identify the affected task. `event` contains `action: "changed"` and optional field-level details in `change`. Fetch the task for its full current state. Completion events also match [On Asana task completed](/reference/integrations/asana/triggers/on-task-completed). # On Asana task completed Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-task-completed Run an automation when someone completes a task in an Asana resource. `asana.onTaskCompleted` fetches the task and emits only when its current `completed` value is `true`. ```ts automations/respond-to-asana-completion.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Celebrate Asana completion", () => { const task = asana.onTaskCompleted({ resourceId: "project-gid" }) asana.addTaskComment({ taskId: task.id, text: "Nice work!" }) }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. ## Trigger data Returns a `Signal` containing the fetched task: ```ts theme={null} interface AsanaTaskCompletedEvent extends AsanaTask { completed: true type: "task" event: AsanaWebhookEvent<"changed"> & { change: { action: "changed" field: "completed" newValue?: true } } } interface AsanaTask { id: string name?: string type?: string assignee?: AsanaResource assigneeStatus?: string completed: boolean completedAt?: string completedBy?: AsanaResource createdAt?: string createdBy?: AsanaResource customFields: AsanaCustomFieldValue[] dueAt?: string dueOn?: string followers: AsanaResource[] htmlNotes?: string memberships: { project: AsanaResource section?: AsanaResource }[] modifiedAt?: string notes?: string parent?: AsanaResource permalinkUrl?: string projects: AsanaResource[] subtype?: string startAt?: string startOn?: string tags: AsanaResource[] workspace?: AsanaResource } ``` `AsanaResource` and `AsanaWebhookEvent` have the [shared Asana event shapes](/reference/integrations/asana/triggers/on-task-added#trigger-data). Returns the current `AsanaTask` with `completed: true`. `event` contains `action: "changed"` and `change.action: "changed"` for the `completed` field. Reopening a task doesn't emit this trigger. # On Asana task deleted Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-task-deleted Run an automation when someone deletes a task from an Asana resource. `asana.onTaskDeleted` matches task deletion events from the watched resource. ```ts automations/watch-deleted-asana-tasks.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Watch deleted Asana tasks", () => { const task = asana.onTaskDeleted({ resourceId: "project-gid" }) // Remove the deleted Asana task from downstream systems. }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. ## Trigger data Returns the [Asana task event shape](/reference/integrations/asana/triggers/on-task-added#trigger-data) with webhook action `"deleted"`: ```ts theme={null} type AsanaTaskDeletedEvent = AsanaTaskReference & { event: AsanaWebhookEvent<"deleted"> } ``` The top-level fields identify the affected task. `event` contains `action: "deleted"` and the watched resource ID. `asana.getTask` can't load the deleted task. # On task due date changed Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-task-due-date-changed Runs when a task due date changes. `asana.onTaskDueDateChanged` watches one Asana resource. Runs when the task `dueOn` or `dueAt` field changes. ```ts automations/asana-on-task-due-date-changed.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("On task due date changed", () => { const change = asana.onTaskDueDateChanged({ resourceId: "project-gid" }) // Reschedule work for the Asana task. }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. Returns a signal containing the affected task reference and the compact normalized webhook event. The event has `resourceType: "task"` and `action: "changed"`; field-specific triggers also narrow `event.change.field` and `event.change.action`. Call the corresponding get action when you need full current resource state. # On task follower added Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-task-follower-added Runs when Asana adds a follower to a task. `asana.onTaskFollowerAdded` watches one Asana resource. Runs when Asana adds a follower to a task. `event.change.addedValue` identifies the follower when Asana includes it. ```ts automations/asana-on-task-follower-added.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("On task follower added", () => { const change = asana.onTaskFollowerAdded({ resourceId: "project-gid" }) // Notify the new Asana task follower. }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. Returns a signal containing the affected task reference and the compact normalized webhook event. The event has `resourceType: "task"` and `action: "changed"`; field-specific triggers also narrow `event.change.field` and `event.change.action`. Call the corresponding get action when you need full current resource state. # On task follower removed Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-task-follower-removed Runs when Asana removes a follower from a task. `asana.onTaskFollowerRemoved` watches one Asana resource. Runs when Asana removes a follower from a task. `event.change.removedValue` identifies the follower when Asana includes it. ```ts automations/asana-on-task-follower-removed.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("On task follower removed", () => { const change = asana.onTaskFollowerRemoved({ resourceId: "project-gid" }) // Stop notifications for the removed Asana task follower. }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. Returns a signal containing the affected task reference and the compact normalized webhook event. The event has `resourceType: "task"` and `action: "changed"`; field-specific triggers also narrow `event.change.field` and `event.change.action`. Call the corresponding get action when you need full current resource state. # On task incomplete Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-task-incomplete Fetches the current task and runs only when its completed value is false after the change. `asana.onTaskIncomplete` watches one Asana resource. Fetches the current task and runs only when its `completed` value is `false` after the change. ```ts automations/asana-on-task-incomplete.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("On task incomplete", () => { const change = asana.onTaskIncomplete({ resourceId: "project-gid" }) // Reopen downstream work for the incomplete Asana task. }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. Returns a signal containing the current task and the compact normalized webhook event. The task has `completed: false`, and the event has `resourceType: "task"`, `action: "changed"`, and `change.field: "completed"`. # On task project added Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-task-project-added Runs when Asana adds a task to a project. `asana.onTaskProjectAdded` watches one Asana resource. Runs when Asana adds a task to a project. `event.change.addedValue` identifies the project when supplied. ```ts automations/asana-on-task-project-added.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("On task project added", () => { const change = asana.onTaskProjectAdded({ resourceId: "project-gid" }) // Sync the Asana task's new project membership. }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. Returns a signal containing the affected task reference and the compact normalized webhook event. The event has `resourceType: "task"` and `action: "changed"`; field-specific triggers also narrow `event.change.field` and `event.change.action`. Call the corresponding get action when you need full current resource state. # On task project removed Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-task-project-removed Runs when Asana removes a task from a project. `asana.onTaskProjectRemoved` watches one Asana resource. Runs when Asana removes a task from a project. `event.change.removedValue` identifies the project when supplied. ```ts automations/asana-on-task-project-removed.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("On task project removed", () => { const change = asana.onTaskProjectRemoved({ resourceId: "project-gid" }) // Remove the Asana task's old project membership. }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. Returns a signal containing the affected task reference and the compact normalized webhook event. The event has `resourceType: "task"` and `action: "changed"`; field-specific triggers also narrow `event.change.field` and `event.change.action`. Call the corresponding get action when you need full current resource state. # On Asana task removed Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-task-removed Run an automation when someone removes a task from an Asana resource. `asana.onTaskRemoved` matches task `removed` events, such as removing a task from a watched project without deleting the task. ```ts automations/watch-removed-asana-tasks.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("Load removed Asana tasks", () => { const task = asana.onTaskRemoved({ resourceId: "project-gid" }) asana.getTask({ taskId: task.id }) }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. ## Trigger data Returns the [Asana task event shape](/reference/integrations/asana/triggers/on-task-added#trigger-data) with webhook action `"removed"`: ```ts theme={null} type AsanaTaskRemovedEvent = AsanaTaskReference & { event: AsanaWebhookEvent<"removed"> } ``` The top-level fields identify the affected task. `event` contains `action: "removed"`, the former parent, and the watched resource ID. The task normally still exists and may remain in other projects. # On task restored Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-task-restored Runs when Asana restores a deleted task. `asana.onTaskRestored` watches one Asana resource. Runs when Asana restores a deleted task. ```ts automations/asana-on-task-restored.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("On task restored", () => { const change = asana.onTaskRestored({ resourceId: "project-gid" }) // Reprocess the restored Asana task. }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. Returns a signal containing the affected task reference and the compact normalized webhook event. The event has `resourceType: "task"` and `action: "undeleted"`; field-specific triggers also narrow `event.change.field` and `event.change.action`. Call the corresponding get action when you need full current resource state. # On task tag added Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-task-tag-added Runs when Asana adds a tag to a task. `asana.onTaskTagAdded` watches one Asana resource. Runs when Asana adds a tag to a task. ```ts automations/asana-on-task-tag-added.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("On task tag added", () => { const change = asana.onTaskTagAdded({ resourceId: "project-gid" }) // Recalculate routing for the newly tagged Asana task. }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. Returns a signal containing the affected task reference and the compact normalized webhook event. The event has `resourceType: "task"` and `action: "changed"`; field-specific triggers also narrow `event.change.field` and `event.change.action`. Call the corresponding get action when you need full current resource state. # On task tag removed Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-task-tag-removed Runs when Asana removes a tag from a task. `asana.onTaskTagRemoved` watches one Asana resource. Runs when Asana removes a tag from a task. ```ts automations/asana-on-task-tag-removed.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("On task tag removed", () => { const change = asana.onTaskTagRemoved({ resourceId: "project-gid" }) // Recalculate routing after the Asana task loses its tag. }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. Returns a signal containing the affected task reference and the compact normalized webhook event. The event has `resourceType: "task"` and `action: "changed"`; field-specific triggers also narrow `event.change.field` and `event.change.action`. Call the corresponding get action when you need full current resource state. # On task unassigned Source: https://docs.automate.ax/reference/integrations/asana/triggers/on-task-unassigned Runs when the task assignee field is cleared. `asana.onTaskUnassigned` watches one Asana resource. Runs when the task `assignee` field is cleared. ```ts automations/asana-on-task-unassigned.automation.ts theme={null} import { automation } from "automate.ax" import { asana } from "automate.ax/asana" export default automation("On task unassigned", () => { const change = asana.onTaskUnassigned({ resourceId: "project-gid" }) // Route the unassigned Asana task for reassignment. }) ``` Provide `resourceId`. Optional static `account` defaults to the project binding. Returns a signal containing the affected task reference and the compact normalized webhook event. The event has `resourceType: "task"` and `action: "changed"`; field-specific triggers also narrow `event.change.field` and `event.change.action`. Call the corresponding get action when you need full current resource state. # Cancel deployment Source: https://docs.automate.ax/reference/integrations/automate/actions/cancel-deployment Cancel an Automate.ax deployment before publishing begins. `automate.cancelDeployment` cancels a deployment in `planning`, `awaiting_authorization`, or `configuring` state. ```ts automations/cancel-deployment.automation.ts theme={null} import { automation } from "automate.ax" import { automate } from "automate.ax/automate" export default automation("Cancel deployment", () => { automate.cancelDeployment({ deploymentId: "dep_123" }) }) ``` Cancelling an already cancelled deployment succeeds without scheduling another cleanup, so retrying the action is safe. Deployments that reached `publishing`, `succeeded`, or `failed` cannot be cancelled. The action requires `deployment:cancel`. # Get automation Source: https://docs.automate.ax/reference/integrations/automate/actions/get-automation Get one active Automate.ax automation. `automate.getAutomation` gets one active automation by descriptor, description, or ID. ```ts automations/get-automation.automation.ts theme={null} import { automation } from "automate.ax" import { automate } from "automate.ax/automate" export default automation("Inspect automation", () => { automate.getAutomation({ automation: "auto_123" }) }) ``` `automation` accepts an imported automation descriptor, exact ID, or unique deployed description. The result includes its project, enabled state, triggers, and integration account bindings. The action requires `project:read`. # Get deployment Source: https://docs.automate.ax/reference/integrations/automate/actions/get-deployment Get one Automate.ax deployment. `automate.getDeployment` gets one deployment by `deploymentId`. ```ts automations/get-deployment.automation.ts theme={null} import { automation } from "automate.ax" import { automate } from "automate.ax/automate" export default automation("Inspect deployment", () => { automate.getDeployment({ deploymentId: "dep_123" }) }) ``` The result includes normalized status, authorization requirements, failure details, Git source metadata, and planned automations. The action requires `deployment:read`. # Get execution Source: https://docs.automate.ax/reference/integrations/automate/actions/get-execution Get one Automate.ax execution and its logical attempt history. `automate.getExecution` returns one execution with its decoded events, emitted outputs, actions, and durable logical attempts. ```ts automations/get-execution.automation.ts theme={null} import { automation } from "automate.ax" import { automate } from "automate.ax/automate" export default automation("Inspect execution", () => { automate.getExecution({ automation: "auto_123", executionId: "actx_123", }) }) ``` `automation` accepts an imported automation descriptor, exact ID, or unique deployed description. Each action includes status, replay safety, maximum attempts, normalized failure, and attempts ordered by logical ordinal. Attempts contain status, start and completion times, nullable retry time, and normalized failure. Event payloads, action outputs, and emitted output data are decoded before the action returns. The complete result is treated as sensitive because stored execution payloads can contain customer data. The action requires `project:read`. # Get project Source: https://docs.automate.ax/reference/integrations/automate/actions/get-project Get one Automate.ax project and its active automations. `automate.getProject` gets one project by `projectId`. ```ts automations/get-project.automation.ts theme={null} import { automation } from "automate.ax" import { automate } from "automate.ax/automate" export default automation("Inspect project", () => { automate.getProject({ projectId: "proj_123" }) }) ``` The result includes the organization, active deployment ID, and active automation summaries. The action requires `project:read`. # Invoke automation Source: https://docs.automate.ax/reference/integrations/automate/actions/invoke-automation Invoke an active Automate.ax automation. `automate.invokeAutomation` schedules an immediate or delayed programmatic invocation for an active automation with a matching `onInvocation` entrypoint. ```ts automations/invoke-automation.automation.ts theme={null} import { automation } from "automate.ax" import { automate } from "automate.ax/automate" import billing from "./billing.automation" export default automation("Invoke billing", () => { automate.invokeAutomation({ automation: billing, payload: { customerId: "cus_123" }, runIn: "5m", }) }) ``` `automation` accepts an imported automation descriptor, exact ID, or unique deployed description. Set either `runAt` or `runIn`, not both. `entrypoint` defaults to `"default"`. The action returns the durable invocation `id` and normalized `runAt` and requires `project:update`. Retries reuse the active action invocation as the management idempotency identity. This account-backed action does not change the typed same-project `invokeAutomation` primitive from `automate.ax`. # List automations Source: https://docs.automate.ax/reference/integrations/automate/actions/list-automations List and filter active Automate.ax automations. `automate.listAutomations` returns a cursor-paginated page of active automations. ```ts automations/list-disabled.automation.ts theme={null} import { automation } from "automate.ax" import { automate } from "automate.ax/automate" export default automation("List disabled automations", () => { automate.listAutomations({ enabled: false, projectId: "proj_123" }) }) ``` Filter with `projectId`, `enabled`, or `query`. `limit` defaults to `50` and accepts 1–100; pass `cursor` from the previous page to continue. The action requires `project:read`. # List deployments Source: https://docs.automate.ax/reference/integrations/automate/actions/list-deployments List and filter Automate.ax deployments. `automate.listDeployments` returns a cursor-paginated page of deployments. ```ts automations/list-failed-deployments.automation.ts theme={null} import { automation } from "automate.ax" import { automate } from "automate.ax/automate" export default automation("List failed deployments", () => { automate.listDeployments({ projectId: "proj_123", status: "failed" }) }) ``` Filter by `projectId`, `status`, `since`, or `until`. `since` must be no later than `until`. `limit` defaults to `50` and accepts 1–100. The action requires `deployment:read`. # List executions Source: https://docs.automate.ax/reference/integrations/automate/actions/list-executions List recent executions for one Automate.ax automation. `automate.listExecutions` returns up to 100 recent execution summaries for one automation. ```ts automations/list-executions.automation.ts theme={null} import { automation } from "automate.ax" import { automate } from "automate.ax/automate" export default automation("List executions", () => { automate.listExecutions({ automation: "auto_123", limit: 25 }) }) ``` `automation` accepts an imported automation descriptor, exact ID, or unique deployed description. Each summary contains `id`, `status`, `createdAt`, nullable `settledAt`, `eventTypes`, and nullable terminal `failure`. `limit` defaults to `50`. The action requires `project:read`. # List projects Source: https://docs.automate.ax/reference/integrations/automate/actions/list-projects List and search projects in an Automate.ax organization. `automate.listProjects` returns a cursor-paginated page of projects from the current runtime organization or an explicit connected account. ```ts automations/list-projects.automation.ts theme={null} import { automation } from "automate.ax" import { automate } from "automate.ax/automate" export default automation("Find projects", () => { automate.listProjects({ limit: 25, query: "billing" }) }) ``` `limit` defaults to `50` and accepts 1–100. Pass `cursor` from `pageInfo.nextCursor` to continue. `query` searches project names. The action requires `project:read`. # Redeploy project Source: https://docs.automate.ax/reference/integrations/automate/actions/redeploy-project Redeploy an Automate.ax project from its active artifact. `automate.redeployProject` creates a deployment from the project's active artifact and a complete set of integration account bindings. ```ts automations/redeploy-project.automation.ts theme={null} import { automation } from "automate.ax" import { automate } from "automate.ax/automate" export default automation("Redeploy project", () => { automate.redeployProject({ bindings: [], projectId: "proj_123" }) }) ``` Each binding contains `serviceId`, `binding`, and `accountId`; service and binding pairs must be unique. The action returns the new deployment `id` and transaction ID and requires `deployment:create`. Redeployment is replay-unsafe because the management endpoint creates a new deployment and does not accept an idempotency key. Automate.ax will not replay it after an ambiguous delivery outcome. # Set automation enabled Source: https://docs.automate.ax/reference/integrations/automate/actions/set-automation-enabled Enable or disable an Automate.ax automation. `automate.setAutomationEnabled` sets the desired enabled state of one automation. ```ts automations/disable-automation.automation.ts theme={null} import { automation } from "automate.ax" import { automate } from "automate.ax/automate" export default automation("Disable automation", () => { automate.setAutomationEnabled({ automation: "auto_123", enabled: false, }) }) ``` `automation` accepts an imported automation descriptor, exact ID, or unique deployed description. Setting the current value again is a safe, idempotent operation. The action returns the database transaction ID and requires `project:update`. # Automate.ax Source: https://docs.automate.ax/reference/integrations/automate/index Call project and deployment actions or react to automation, deployment, execution, and action-attempt events. ```ts automations/list-disabled-automations.automation.ts theme={null} import { automation, markSignificant, onSchedule } from "automate.ax" import { automate } from "automate.ax/automate" export default automation("List disabled automations", () => { onSchedule({ schedule: "0 * * * *" }) const disabledAutomations = automate.listAutomations({ enabled: false }) markSignificant(disabledAutomations) }) ``` ## Choose the organization No connection is required for the current Automate.ax organization. When you omit `account`, actions use the active execution's runtime token and organization identity. To manage a different organization, create an organization API key with `automate org apikey create`, then connect it with `automate accounts`. The account represents exactly one Automate.ax organization, and its key never appears in automation code or signals. Use `automateAccount("name")` for a named binding, then pass `{ account: "name" }` as an action's second argument. Event triggers use the deploying project's organization when you omit `account`, so they need no connection for that organization. To watch another organization, select a static organization API-key binding with `account`. The selected automation or project must belong to the resulting organization identity. ## Grant required permissions The runtime-token path is limited to the permissions used by this integration: `project:read`, `project:update`, `deployment:create`, `deployment:read`, and `deployment:cancel`. For an explicit connected account, planning records the least permission needed by each action or trigger and deployment authorization rejects an API key that lacks it. Automation, execution, and action-attempt triggers require `project:read`; deployment triggers require `deployment:read`. Execution and action-attempt triggers do not deliver back to the automation whose work produced the event. Their payloads expose durable logical attempt state, never worker delivery IDs or queue retry details. ## Exports ```ts theme={null} import { automate, automateAccount, getAutomateApi } from "automate.ax/automate" ``` * `automate` contains the packaged Automate.ax actions and triggers. * `automateAccount("name")` selects a named Automate.ax connection. * `getAutomateApi` creates the authenticated Automate.ax API helper for a custom account-backed action. ## Triggers * [On Automate.ax automation state changed](/reference/integrations/automate/triggers/on-automation-state-changed) * [On Automate.ax automation enabled](/reference/integrations/automate/triggers/on-automation-enabled) * [On Automate.ax automation disabled](/reference/integrations/automate/triggers/on-automation-disabled) * [On Automate.ax deployment event](/reference/integrations/automate/triggers/on-deployment-event) * [On Automate.ax deployment awaiting authorization](/reference/integrations/automate/triggers/on-deployment-awaiting-authorization) * [On Automate.ax deployment succeeded](/reference/integrations/automate/triggers/on-deployment-succeeded) * [On Automate.ax deployment failed](/reference/integrations/automate/triggers/on-deployment-failed) * [On Automate.ax deployment cancelled](/reference/integrations/automate/triggers/on-deployment-cancelled) * [On Automate.ax execution event](/reference/integrations/automate/triggers/on-execution-event) * [On Automate.ax execution settled](/reference/integrations/automate/triggers/on-execution-settled) * [On Automate.ax execution failed](/reference/integrations/automate/triggers/on-execution-failed) * [On Automate.ax action attempt event](/reference/integrations/automate/triggers/on-action-attempt-event) * [On Automate.ax action retry scheduled](/reference/integrations/automate/triggers/on-action-retry-scheduled) * [On Automate.ax action failed](/reference/integrations/automate/triggers/on-action-failed) * [On Automate.ax action indeterminate](/reference/integrations/automate/triggers/on-action-indeterminate) ## Actions * [List projects](/reference/integrations/automate/actions/list-projects) * [Get project](/reference/integrations/automate/actions/get-project) * [List automations](/reference/integrations/automate/actions/list-automations) * [Get automation](/reference/integrations/automate/actions/get-automation) * [List executions](/reference/integrations/automate/actions/list-executions) * [Get execution](/reference/integrations/automate/actions/get-execution) * [Set automation enabled](/reference/integrations/automate/actions/set-automation-enabled) * [List deployments](/reference/integrations/automate/actions/list-deployments) * [Get deployment](/reference/integrations/automate/actions/get-deployment) * [Cancel deployment](/reference/integrations/automate/actions/cancel-deployment) * [Redeploy project](/reference/integrations/automate/actions/redeploy-project) * [Invoke automation](/reference/integrations/automate/actions/invoke-automation) # On Automate.ax action attempt event Source: https://docs.automate.ax/reference/integrations/automate/triggers/on-action-attempt-event Run an automation for every logical attempt transition in another Automate.ax automation. `automate.onActionAttemptEvent` emits for `running`, `retrying`, `succeeded`, `failed`, and `indeterminate` logical attempt transitions. ```ts automations/watch-action-attempts.automation.ts theme={null} import { automation } from "automate.ax" import { automate } from "automate.ax/automate" export default automation("Watch action attempts", () => { const event = automate.onActionAttemptEvent({ account: "operations", automation: "auto_123", }) // Route the Automate.ax action attempt by status. }) ``` The payload contains `action`, `attempt`, `execution`, `automation`, `project`, `organization`, `transitionedAt`, and nullable `failure`. Action data includes name, slot, status, replay safety, and maximum attempts. Attempt data includes its one-based logical ordinal, status, start and completion times, and nullable retry time. `automation` accepts an imported automation descriptor, exact ID, or unique deployed description. When `account` is omitted, the trigger uses the deploying project's organization. An explicit static Automate.ax binding requires `project:read` and can watch another organization. The trigger never exposes worker delivery IDs or queue retry data, and it does not deliver to the automation whose action produced the event. # On Automate.ax action failed Source: https://docs.automate.ax/reference/integrations/automate/triggers/on-action-failed Run an automation when another action reaches a certain terminal failure. `automate.onActionFailed` uses the [action-attempt event payload](/reference/integrations/automate/triggers/on-action-attempt-event) with `attempt.status: "failed"`, `action.status: "failed"`, and normalized `failure`. ```ts automations/on-action-failed.automation.ts theme={null} import { automation } from "automate.ax" import { automate } from "automate.ax/automate" export default automation("Action failed", () => { const event = automate.onActionFailed({ automation: "auto_123" }) // Notify an owner about the failed Automate.ax action. }) ``` `automation` accepts an imported automation descriptor, exact ID, or unique deployed description. When `account` is omitted, the trigger uses the deploying project's organization. An explicit static Automate.ax binding requires `project:read` and can watch another organization. # On Automate.ax action indeterminate Source: https://docs.automate.ax/reference/integrations/automate/triggers/on-action-indeterminate Run an automation when an unsafe action has an ambiguous provider outcome. `automate.onActionIndeterminate` uses the [action-attempt event payload](/reference/integrations/automate/triggers/on-action-attempt-event) with `attempt.status: "indeterminate"`, `action.status: "failed"`, and an `action_outcome_indeterminate` failure. ```ts automations/on-action-indeterminate.automation.ts theme={null} import { automation } from "automate.ax" import { automate } from "automate.ax/automate" export default automation("Action outcome unknown", () => { const event = automate.onActionIndeterminate({ automation: "auto_123" }) // Escalate the indeterminate Automate.ax action. }) ``` `automation` accepts an imported automation descriptor, exact ID, or unique deployed description. When `account` is omitted, the trigger uses the deploying project's organization. An explicit static Automate.ax binding requires `project:read` and can watch another organization. Treat the provider effect as unknown; do not assume it failed or replay it automatically. # On Automate.ax action retry scheduled Source: https://docs.automate.ax/reference/integrations/automate/triggers/on-action-retry-scheduled Run an automation when another action schedules a logical retry. `automate.onActionRetryScheduled` uses the [action-attempt event payload](/reference/integrations/automate/triggers/on-action-attempt-event) with `attempt.status: "retrying"`, populated completion and retry times, and normalized `failure`. ```ts automations/on-action-retry.automation.ts theme={null} import { automation } from "automate.ax" import { automate } from "automate.ax/automate" export default automation("Action retry scheduled", () => { const event = automate.onActionRetryScheduled({ automation: "auto_123" }) // Notify an owner about the scheduled Automate.ax action retry. }) ``` `automation` accepts an imported automation descriptor, exact ID, or unique deployed description. When `account` is omitted, the trigger uses the deploying project's organization. An explicit static Automate.ax binding requires `project:read` and can watch another organization. # On Automate.ax automation disabled Source: https://docs.automate.ax/reference/integrations/automate/triggers/on-automation-disabled Run an automation when another Automate.ax automation becomes disabled. `automate.onAutomationDisabled` emits when the selected automation changes from enabled to disabled, including when account revocation disables it. ```ts automations/watch-disabled-automation.automation.ts theme={null} import { automation } from "automate.ax" import { automate } from "automate.ax/automate" export default automation("Watch disabled automation", () => { automate.onAutomationDisabled({ account: "operations", automation: "auto_01", }) }) ``` When `account` is omitted, the trigger uses the deploying project's organization. An explicit static Automate.ax binding requires `project:read` and can select another organization. `automation` accepts an imported descriptor, exact ID, or unique deployed description in that organization. ## Trigger data Returns the [automation state event shape](/reference/integrations/automate/triggers/on-automation-state-changed) with `previousEnabled: true` and `enabled: false`. # On Automate.ax automation enabled Source: https://docs.automate.ax/reference/integrations/automate/triggers/on-automation-enabled Run an automation when another Automate.ax automation becomes enabled. `automate.onAutomationEnabled` emits when the selected automation changes from disabled to enabled. ```ts automations/watch-enabled-automation.automation.ts theme={null} import { automation } from "automate.ax" import { automate } from "automate.ax/automate" export default automation("Watch enabled automation", () => { automate.onAutomationEnabled({ account: "operations", automation: "auto_01", }) }) ``` When `account` is omitted, the trigger uses the deploying project's organization. An explicit static Automate.ax binding requires `project:read` and can select another organization. `automation` accepts an imported descriptor, exact ID, or unique deployed description in that organization. ## Trigger data Returns the [automation state event shape](/reference/integrations/automate/triggers/on-automation-state-changed) with `previousEnabled: false` and `enabled: true`. # On Automate.ax automation state changed Source: https://docs.automate.ax/reference/integrations/automate/triggers/on-automation-state-changed Run an automation when another Automate.ax automation is enabled or disabled. `automate.onAutomationStateChanged` emits whenever the selected automation's enabled state changes. Use a semantic trigger when only one direction matters. ```ts automations/watch-automation-state.automation.ts theme={null} import { automation } from "automate.ax" import { automate } from "automate.ax/automate" export default automation("Watch automation state", () => { const event = automate.onAutomationStateChanged({ account: "operations", automation: "auto_01", }) // Notify an owner when the Automate.ax automation changes state. }) ``` ## Configuration | Property | Type | Required | Description | | - | - | - | - | | `account` | `string \| IntegrationAccountReference<"automate">` | No | Static binding with `project:read` for another organization. Omit it to use the deploying project's organization. | | `automation` | `AutomationDescriptor \| string` | Yes | Imported descriptor, exact ID, or unique deployed description to watch. It must belong to the resulting organization identity. | ## Trigger data Returns the selected automation and its project and organization, plus `previousEnabled`, `enabled`, and `transitionedAt`. The automation includes `id`, `identityKey`, and deployed `description`. Automate.ax stores this event in the same transaction as the state change. An action does not wake the automation that performed that action, but other subscribed automations still receive it. # On Automate.ax deployment awaiting authorization Source: https://docs.automate.ax/reference/integrations/automate/triggers/on-deployment-awaiting-authorization Run an automation when a deployment needs integration-account authorization. `automate.onDeploymentAwaitingAuthorization` emits when a deployment cannot proceed until its required integration accounts are authorized, including after a bound account is revoked. ```ts automations/watch-deployment-authorization.automation.ts theme={null} import { automation } from "automate.ax" import { automate } from "automate.ax/automate" export default automation("Watch deployment authorization", () => { automate.onDeploymentAwaitingAuthorization({ account: "operations", projectId: "proj_01", }) }) ``` When `account` is omitted, the trigger uses the deploying project's organization. An explicit static Automate.ax binding requires `deployment:read` and can select another organization. `projectId` must identify a project in the resulting organization. ## Trigger data Returns the [deployment event shape](/reference/integrations/automate/triggers/on-deployment-event) with `status: "awaiting_authorization"`. # On Automate.ax deployment cancelled Source: https://docs.automate.ax/reference/integrations/automate/triggers/on-deployment-cancelled Run an automation when a deployment is cancelled. `automate.onDeploymentCancelled` emits when a cancellable deployment becomes cancelled, including when creating a replacement deployment cancels in-progress work. ```ts automations/watch-cancelled-deployments.automation.ts theme={null} import { automation } from "automate.ax" import { automate } from "automate.ax/automate" export default automation("Watch cancelled deployments", () => { automate.onDeploymentCancelled({ account: "operations", projectId: "proj_01", }) }) ``` When `account` is omitted, the trigger uses the deploying project's organization. An explicit static Automate.ax binding requires `deployment:read` and can select another organization. `projectId` must identify a project in the resulting organization. ## Trigger data Returns the [deployment event shape](/reference/integrations/automate/triggers/on-deployment-event) with `status: "cancelled"` and a populated `deployment.completedAt`. # On Automate.ax deployment event Source: https://docs.automate.ax/reference/integrations/automate/triggers/on-deployment-event Run an automation for every status transition in an Automate.ax project. `automate.onDeploymentEvent` covers the complete deployment lifecycle. Use a semantic trigger when only awaiting authorization, success, failure, or cancellation matters. ```ts automations/watch-deployments.automation.ts theme={null} import { automation } from "automate.ax" import { automate } from "automate.ax/automate" export default automation("Watch deployments", () => { const event = automate.onDeploymentEvent({ account: "operations", projectId: "proj_01", }) // Route the Automate.ax deployment by status. }) ``` ## Configuration | Property | Type | Required | Description | | - | - | - | - | | `account` | `string \| IntegrationAccountReference<"automate">` | No | Static binding with `deployment:read` for another organization. Omit it to use the deploying project's organization. | | `projectId` | `string` | Yes | Project whose deployments should be watched. It must belong to the resulting organization identity. | ## Trigger data Returns `deployment`, `project`, `organization`, `previousStatus`, `status`, `transitionedAt`, and `failure`. Deployment contains `id`, `createdAt`, and nullable `completedAt`. Project and organization each contain `id` and `name`. `previousStatus` is `null` for a newly created deployment. Otherwise, `previousStatus` and `status` use `planning`, `awaiting_authorization`, `configuring`, `publishing`, `succeeded`, `failed`, or `cancelled`. `failure` is normally `null`; a failed deployment includes its terminal error message. Automate.ax stores the event in the same transaction as the status transition. An action does not wake the automation that performed that action, but other subscribed automations still receive it. # On Automate.ax deployment failed Source: https://docs.automate.ax/reference/integrations/automate/triggers/on-deployment-failed Run an automation when a deployment permanently fails. `automate.onDeploymentFailed` emits after a deployment stage exhausts its attempts and Automate.ax marks the deployment failed. ```ts automations/watch-failed-deployments.automation.ts theme={null} import { automation } from "automate.ax" import { automate } from "automate.ax/automate" export default automation("Watch failed deployments", () => { const event = automate.onDeploymentFailed({ account: "operations", projectId: "proj_01", }) // Notify an owner about the failed Automate.ax deployment. }) ``` When `account` is omitted, the trigger uses the deploying project's organization. An explicit static Automate.ax binding requires `deployment:read` and can select another organization. `projectId` must identify a project in the resulting organization. ## Trigger data Returns the [deployment event shape](/reference/integrations/automate/triggers/on-deployment-event) with `status: "failed"`, a populated `deployment.completedAt`, and a `failure` containing the terminal error message. # On Automate.ax deployment succeeded Source: https://docs.automate.ax/reference/integrations/automate/triggers/on-deployment-succeeded Run an automation when a deployment becomes active. `automate.onDeploymentSucceeded` emits after Automate.ax publishes and activates a deployment. ```ts automations/watch-successful-deployments.automation.ts theme={null} import { automation } from "automate.ax" import { automate } from "automate.ax/automate" export default automation("Watch successful deployments", () => { automate.onDeploymentSucceeded({ account: "operations", projectId: "proj_01", }) }) ``` When `account` is omitted, the trigger uses the deploying project's organization. An explicit static Automate.ax binding requires `deployment:read` and can select another organization. `projectId` must identify a project in the resulting organization. ## Trigger data Returns the [deployment event shape](/reference/integrations/automate/triggers/on-deployment-event) with `status: "succeeded"` and a populated `deployment.completedAt`. # On Automate.ax execution event Source: https://docs.automate.ax/reference/integrations/automate/triggers/on-execution-event Run an automation for every lifecycle transition of another Automate.ax automation execution. `automate.onExecutionEvent` emits when an execution starts, settles, or permanently fails. ```ts automations/watch-executions.automation.ts theme={null} import { automation } from "automate.ax" import { automate } from "automate.ax/automate" export default automation("Watch executions", () => { const event = automate.onExecutionEvent({ account: "operations", automation: "auto_123", }) // Route the Automate.ax run by status. }) ``` `automation` accepts an imported automation descriptor, exact ID, or unique deployed description. When `account` is omitted, the trigger uses the deploying project's organization. An explicit static Automate.ax binding requires `project:read` and can watch another organization. The payload contains `execution`, `automation`, `project`, `organization`, `eventTypes`, `transitionedAt`, and nullable `failure`. Execution status is `running`, `settled`, or `failed`. Events are stored in the same transaction as the execution transition and are not delivered to the automation whose execution produced them. # On Automate.ax execution failed Source: https://docs.automate.ax/reference/integrations/automate/triggers/on-execution-failed Run an automation when another Automate.ax execution permanently fails. `automate.onExecutionFailed` uses the [execution event payload](/reference/integrations/automate/triggers/on-execution-event) with `execution.status: "failed"`, a populated `execution.settledAt`, and normalized `failure`. ```ts automations/on-execution-failed.automation.ts theme={null} import { automation } from "automate.ax" import { automate } from "automate.ax/automate" export default automation("Execution failed", () => { const event = automate.onExecutionFailed({ automation: "auto_123" }) // Notify an owner with the Automate.ax failure code. }) ``` `automation` accepts an imported automation descriptor, exact ID, or unique deployed description. When `account` is omitted, the trigger uses the deploying project's organization. An explicit static Automate.ax binding requires `project:read` and can watch another organization. # On Automate.ax execution settled Source: https://docs.automate.ax/reference/integrations/automate/triggers/on-execution-settled Run an automation when another Automate.ax execution settles. `automate.onExecutionSettled` uses the [execution event payload](/reference/integrations/automate/triggers/on-execution-event) with `execution.status: "settled"`, a populated `execution.settledAt`, and `failure: null`. ```ts automations/on-execution-settled.automation.ts theme={null} import { automation } from "automate.ax" import { automate } from "automate.ax/automate" export default automation("Execution settled", () => { const event = automate.onExecutionSettled({ automation: "auto_123" }) // Store the settled Automate.ax run in the reporting database. }) ``` `automation` accepts an imported automation descriptor, exact ID, or unique deployed description. When `account` is omitted, the trigger uses the deploying project's organization. An explicit static Automate.ax binding requires `project:read` and can watch another organization. # Create annotation Source: https://docs.automate.ax/reference/integrations/axiom/actions/create-annotation Creates an annotation across one or more datasets. `axiom.createAnnotation` creates an annotation across one or more datasets. `type` accepts lowercase letters, digits, and hyphens; omit `time` to use Axiom's current time. ```ts automations/axiom-create-annotation.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Create annotation", () => { onHttpRequest({ scope: "automation" }) axiom.createAnnotation({ datasets: ["production"], type: "deploy", title: "Version 2.4 deployed", time: "2026-08-30T18:00:00Z", }) }) ``` ## Inputs | Input | Required | Description | | - | - | - | | `datasets` | Yes | One or more dataset names or IDs. | | `type` | Yes | Category containing only lowercase letters, digits, and hyphens, up to 256 characters. | | `time` | No | Start time. Axiom uses the current time when omitted. | | `endTime` | No | End time for a ranged annotation. | | `title` | No | Display title, up to 256 characters. | | `description` | No | Detail text, up to 512 characters. | | `url` | No | Related URL, up to 512 characters. | ## Output Returns the created annotation with its `id`, datasets, type, start time, and any optional display fields. ## Permission and failures The API token needs the organization-level `annotations|create` capability. Axiom rejects inaccessible datasets, invalid time values, and annotation fields outside their documented constraints. Authentication and permission failures are returned as action errors. # Create dashboard Source: https://docs.automate.ax/reference/integrations/axiom/actions/create-dashboard Creates a schema-version 2 dashboard. `axiom.createDashboard` creates a schema-version 2 dashboard. Query charts require exactly one APL or MPL query. Note, monitor-list, and smart-filter charts require their chart-specific content. Layout heights are whole grid units from 1 through 100, and time windows use Axiom's `qr-now` form, timestamps, or dates. Axiom can generate the UID; use `X-AXIOM-EVERYONE` as owner for organization visibility. ```ts automations/axiom-create-dashboard.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Create dashboard", () => { onHttpRequest({ scope: "automation" }) axiom.createDashboard({ uid: "operations", dashboard: { name: "Operations", owner: "X-AXIOM-EVERYONE", charts: [], layout: [], refreshTime: 60, schemaVersion: 2, timeWindowStart: "qr-now-30m", timeWindowEnd: "qr-now", }, }) }) ``` ## Inputs `dashboard` is required and must contain a 1–100 character `name`, non-empty `owner`, up to 200 charts and layout entries, `refreshTime` of `15`, `60`, or `300`, `schemaVersion: 2`, and valid `timeWindowStart` and `timeWindowEnd`. Use values such as `"qr-now-30m"` and `"qr-now"`, numeric timestamps, or ISO 8601 dates. Each layout entry uses a 12-column grid and references a chart ID. Optional dashboard fields configure description, comparison window, sections, and UID. `uid` and commit `message` are optional. Axiom generates the stable UID when `uid` is omitted. Automate.ax adds no other defaults. ## Output Returns `status` (`"created"` or `"updated"`) and the complete dashboard resource with `id`, stable `uid`, exact decimal `version` string, document, and audit metadata. `overwritten` appears when Axiom reports it. ## Permission and failures The API token needs the organization-level `dashboards|create` capability. Axiom rejects invalid chart or layout documents and can return `409` or `412` for a UID or version conflict. This mutation is not retried automatically after an ambiguous provider response. # Create dataset Source: https://docs.automate.ax/reference/integrations/axiom/actions/create-dataset Creates a dataset and returns its resource. `axiom.createDataset` creates a dataset and returns its resource. `kind` defaults to `axiom:events:v1`; use an OpenTelemetry kind for logs, metrics, or traces. ```ts automations/axiom-create-dataset.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Create dataset", () => { onHttpRequest({ scope: "automation" }) axiom.createDataset({ name: "production", description: "Production logs", retentionDays: 30, useRetentionPeriod: true, }) }) ``` ## Inputs | Input | Required | Default | Description | | - | - | - | - | | `name` | Yes | — | Non-empty dataset name. | | `kind` | No | `"axiom:events:v1"` | `"axiom:events:v1"`, `"otel:logs:v1"`, `"otel:metrics:v1"`, or `"otel:traces:v1"`. | | `description` | No | — | Dataset description. | | `retentionDays` | No | — | Non-negative retention period in days. | | `useRetentionPeriod` | No | — | Whether Axiom applies `retentionDays`. | | `edgeDeployment` | No | — | Axiom edge deployment identifier. | ## Output Returns the created dataset resource, including its stable `id`, name, kind, owner, timestamps, and configured retention or edge fields. ## Permission and failures The API token needs the organization-level `datasets|create` capability. Axiom rejects duplicate or invalid names, unsupported settings, and edge deployments the token cannot use. This mutation is not retried automatically after an ambiguous provider response. # Create map field Source: https://docs.automate.ax/reference/integrations/axiom/actions/create-map-field Marks one existing field as a map field and returns its name. `axiom.createMapField` marks one existing field as a map field and returns its name. This changes indexing, not retained event values. ```ts automations/axiom-create-map-field.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Create map field", () => { onHttpRequest({ scope: "automation" }) axiom.createMapField({ datasetName: "production", fieldName: "attributes" }) }) ``` ## Inputs `datasetName` selects the dataset by name or ID. `fieldName` is the existing field to mark as a map field. ## Output Returns `{ name: string }` for the configured map field. ## Permission and failures The API token needs the organization-level `datasets|update` capability and access to the target dataset. Axiom rejects missing datasets, unknown fields, and fields that cannot be configured as maps. This mutation is not retried automatically after an ambiguous provider response. # Create monitor Source: https://docs.automate.ax/reference/integrations/axiom/actions/create-monitor Creates a threshold, match-event, or anomaly monitor. `axiom.createMonitor` creates a threshold, match-event, or anomaly monitor. Provide exactly one APL or MPL query plus interval and range minutes; `notifierIds` attaches destinations. ```ts automations/axiom-create-monitor.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Create monitor", () => { onHttpRequest({ scope: "automation" }) axiom.createMonitor({ name: "Error volume", type: "Threshold", aplQuery: "['production'] | where severity == 'error' | count", intervalMinutes: 5, rangeMinutes: 15, operator: "Above", threshold: 100, }) }) ``` ## Inputs `name`, `type`, positive `intervalMinutes`, and positive `rangeMinutes` are required. Provide exactly one non-empty `aplQuery` or `mplQuery`. Optional settings include `operator`, `threshold`, anomaly `compareDays` from 1–7, `tolerance` from 0–100, notifier IDs, grouping and repeat behavior, no-data behavior, resolution behavior, whether the monitor is paused, a delay from 0–86,400 seconds, and positive run-count thresholds. No optional monitor setting has an Automate.ax default; Axiom applies its service defaults when a field is omitted. ## Output Returns the complete monitor with its Axiom `id` and audit timestamps or actor IDs when provided. ## Permission and failures The API token needs the organization-level `monitors|create` capability. Axiom rejects invalid queries, settings incompatible with the selected monitor type, and unknown notifier IDs. This mutation is not retried automatically after an ambiguous provider response. # Create notifier Source: https://docs.automate.ax/reference/integrations/axiom/actions/create-notifier Creates exactly one notifier channel. `axiom.createNotifier` creates exactly one notifier channel. Supported channels include email, Slack, webhooks, PagerDuty, incident-management services, Discord, and Microsoft Teams. ```ts automations/axiom-create-notifier.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Create notifier", () => { onHttpRequest({ scope: "automation" }) axiom.createNotifier({ name: "Operations email", properties: { email: { emails: ["ops@example.com"] } }, }) }) ``` ## Inputs `name` and exactly one channel in `properties` are required. Supported shapes are: * `email.emails` with at least one email address * `slack.slackUrl`, `webhook.url`, `discordWebhook.discordWebhookUrl`, or `microsoftTeams.microsoftTeamsUrl` * `customWebhook` with `url`, non-empty `body`, and optional public or secret header maps * `pagerduty` with `routingKey` or `token` * `opsgenie` with `apiKey` and optional `isEU` * `discord` with `discordChannel` and `discordToken` `disabledUntil` is optional and may be an Axiom timestamp or `null`. Automate.ax adds no defaults. ## Output Returns the created notifier with its `id`, effective properties, pause schedule, and available audit metadata. ## Permission and failures The API token needs the organization-level `notifiers|create` capability. Axiom rejects invalid destination URLs, credentials, templates, and unsupported channel configurations. This mutation is not retried automatically after an ambiguous provider response. # Create saved query Source: https://docs.automate.ax/reference/integrations/axiom/actions/create-saved-query Creates a reusable APL query. `axiom.createSavedQuery` creates a reusable APL query. Include its owner, string metadata, and complete query request; returns the saved query with ID. ```ts automations/axiom-create-saved-query.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Create saved query", () => { onHttpRequest({ scope: "automation" }) axiom.createSavedQuery({ kind: "apl", name: "Recent errors", metadata: {}, who: "user-id", query: { apl: "['production'] | where severity == 'error'", startTime: "now-30m", endTime: "now", }, }) }) ``` ## Inputs `kind` must be `"apl"`; `name`, `who`, `metadata`, and `query` are required. The query requires non-empty `apl`; `startTime` defaults to `"now-30m"` and `endTime` to `"now"`. Optional query fields configure cursor inclusion, default limits and ordering, libraries, variables, and query display or execution options. `dataset` is an optional dataset hint. ## Output Returns the saved query with its Axiom `id` and complete stored configuration. ## Permission and failures The API token needs the dataset-level `starredQueries|create` capability for the relevant dataset. Axiom rejects invalid APL, inaccessible dataset references, invalid time expressions, and unsupported query options. This mutation is not retried automatically after an ambiguous provider response. # Delete annotation Source: https://docs.automate.ax/reference/integrations/axiom/actions/delete-annotation Deletes one annotation and returns `null`. `axiom.deleteAnnotation` deletes one annotation and returns `null`. Dataset events and dashboard configuration are unchanged. ```ts automations/axiom-delete-annotation.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Delete annotation", () => { onHttpRequest({ scope: "automation" }) axiom.deleteAnnotation({ annotationId: "annotation-id" }) }) ``` > [!WARNING] > > This operation changes or deletes provider data. Confirm the target before > deployment. ## Input `annotationId` is required and selects the annotation to delete. ## Output Returns `null` after Axiom confirms deletion. ## Permission and failures The API token needs the organization-level `annotations|delete` capability. Axiom returns an error when the annotation does not exist or the token cannot delete it. This mutation is not retried automatically after an ambiguous provider response. # Delete dashboard Source: https://docs.automate.ax/reference/integrations/axiom/actions/delete-dashboard Deletes a dashboard by stable UID and returns `null`. `axiom.deleteDashboard` deletes a dashboard by stable UID and returns `null`. Referenced datasets, monitors, queries, and annotations remain. ```ts automations/axiom-delete-dashboard.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Delete dashboard", () => { onHttpRequest({ scope: "automation" }) axiom.deleteDashboard({ dashboardUid: "operations" }) }) ``` > [!WARNING] > > This operation changes or deletes provider data. Confirm the target before > deployment. ## Input `dashboardUid` is required and selects the dashboard by its stable UID. ## Output Returns `null` after Axiom confirms deletion. Datasets and other resources referenced by the dashboard remain. ## Permission and failures The API token needs the organization-level `dashboards|delete` capability. Axiom returns `404` when the dashboard does not exist or the token cannot access it. This mutation is not retried automatically after an ambiguous provider response. # Delete dataset Source: https://docs.automate.ax/reference/integrations/axiom/actions/delete-dataset Permanently deletes one dataset and its stored data. `axiom.deleteDataset` permanently deletes one dataset and its stored data. Returns `null` after Axiom accepts the deletion. ```ts automations/axiom-delete-dataset.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Delete dataset", () => { onHttpRequest({ scope: "automation" }) axiom.deleteDataset({ datasetName: "temporary-logs" }) }) ``` > [!WARNING] > > This operation changes or deletes provider data. Confirm the target before > deployment. ## Input `datasetName` is required and accepts the dataset name or ID to delete. ## Output Returns `null` after Axiom confirms deletion. ## Permission and failures The API token needs the organization-level `datasets|delete` capability. Axiom rejects missing or inaccessible datasets. Deletion removes retained data permanently and is not retried automatically after an ambiguous provider response. # Delete map field Source: https://docs.automate.ax/reference/integrations/axiom/actions/delete-map-field Removes one field from the map-field configuration. `axiom.deleteMapField` removes one field from the map-field configuration. The underlying field and retained event values remain. ```ts automations/axiom-delete-map-field.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Delete map field", () => { onHttpRequest({ scope: "automation" }) axiom.deleteMapField({ datasetName: "production", fieldName: "attributes" }) }) ``` > [!WARNING] > > This operation changes or deletes provider data. Confirm the target before > deployment. ## Inputs `datasetName` selects the dataset by name or ID. `fieldName` selects the map-field designation to remove. ## Output Returns `null` after Axiom confirms removal. The underlying field and retained events remain. ## Permission and failures The API token needs the organization-level `datasets|update` capability and access to the target dataset. Axiom returns an error when the dataset or map field is missing. This mutation is not retried automatically after an ambiguous provider response. # Delete monitor Source: https://docs.automate.ax/reference/integrations/axiom/actions/delete-monitor Deletes one monitor and returns `null`. `axiom.deleteMonitor` deletes one monitor and returns `null`. This stops evaluations but does not delete datasets or standalone notifiers. ```ts automations/axiom-delete-monitor.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Delete monitor", () => { onHttpRequest({ scope: "automation" }) axiom.deleteMonitor({ monitorId: "monitor-id" }) }) ``` > [!WARNING] > > This operation changes or deletes provider data. Confirm the target before > deployment. ## Input `monitorId` is required and selects the monitor to delete. ## Output Returns `null` after Axiom confirms deletion. ## Permission and failures The API token needs the organization-level `monitors|delete` capability. Axiom returns an error when the monitor is missing or cannot be deleted. This mutation is not retried automatically after an ambiguous provider response. # Delete notifier Source: https://docs.automate.ax/reference/integrations/axiom/actions/delete-notifier Deletes one notifier and returns `null`. `axiom.deleteNotifier` deletes one notifier and returns `null`. Remove it from monitors first unless you also replace their configurations. ```ts automations/axiom-delete-notifier.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Delete notifier", () => { onHttpRequest({ scope: "automation" }) axiom.deleteNotifier({ notifierId: "notifier-id" }) }) ``` > [!WARNING] > > This operation changes or deletes provider data. Confirm the target before > deployment. ## Input `notifierId` is required and selects the notifier to delete. ## Output Returns `null` after Axiom confirms deletion. ## Permission and failures The API token needs the organization-level `notifiers|delete` capability. Axiom returns an error when the notifier is missing, cannot be deleted, or is still required by provider configuration. This mutation is not retried automatically after an ambiguous provider response. # Delete saved query Source: https://docs.automate.ax/reference/integrations/axiom/actions/delete-saved-query Deletes one saved query and returns `null`. `axiom.deleteSavedQuery` deletes one saved query and returns `null`. It does not delete data or dashboard query copies. ```ts automations/axiom-delete-saved-query.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Delete saved query", () => { onHttpRequest({ scope: "automation" }) axiom.deleteSavedQuery({ savedQueryId: "saved-query-id" }) }) ``` > [!WARNING] > > This operation changes or deletes provider data. Confirm the target before > deployment. ## Input `savedQueryId` is required and selects the saved query to delete. ## Output Returns `null` after Axiom confirms deletion. ## Permission and failures The API token needs the dataset-level `starredQueries|delete` capability. Axiom returns an error when the saved query does not exist or the token cannot delete it. This mutation is not retried automatically after an ambiguous provider response. # Get annotation Source: https://docs.automate.ax/reference/integrations/axiom/actions/get-annotation Retrieves one annotation by ID. `axiom.getAnnotation` retrieves one annotation by ID. The result includes its datasets, type, time range, title, description, and URL. ```ts automations/axiom-get-annotation.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Get annotation", () => { onHttpRequest({ scope: "automation" }) axiom.getAnnotation({ annotationId: "annotation-id" }) }) ``` ## Input `annotationId` is required and must identify an annotation visible to the connected token. ## Output Returns the annotation's `id`, `datasets`, `type`, and `time`, plus `endTime`, `title`, `description`, and `url` when present. ## Permission and failures The API token needs the organization-level `annotations|read` capability. Axiom returns an error when the annotation does not exist or the token cannot access it. # Get dashboard Source: https://docs.automate.ax/reference/integrations/axiom/actions/get-dashboard Retrieves a dashboard by stable UID. `axiom.getDashboard` retrieves a dashboard by stable UID. The result includes its current version, complete document, and update metadata. ```ts automations/axiom-get-dashboard.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Get dashboard", () => { onHttpRequest({ scope: "automation" }) axiom.getDashboard({ dashboardUid: "operations" }) }) ``` ## Input `dashboardUid` is required and selects the dashboard by its stable UID, not its internal resource ID. ## Output Returns the complete dashboard resource with `id`, `uid`, exact decimal `version` string, document, and creation and update metadata. ## Permission and failures The API token needs the organization-level `dashboards|read` capability. Axiom returns `404` when the UID does not identify an accessible dashboard. # Get dataset Source: https://docs.automate.ax/reference/integrations/axiom/actions/get-dataset Retrieves one dataset by name or ID. `axiom.getDataset` retrieves one dataset by name or ID. The result includes its kind, owner, timestamps, retention configuration, and edge metadata. ```ts automations/axiom-get-dataset.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Get dataset", () => { onHttpRequest({ scope: "automation" }) axiom.getDataset({ datasetName: "production" }) }) ``` ## Input `datasetName` is required and accepts a dataset name or ID. ## Output Returns the dataset resource, including `id`, `name`, `kind`, `description`, owner, timestamps, and optional retention, sharing, map-field, write-access, and edge-deployment metadata. ## Permission and failures Axiom requires a valid API token but no specific token capability for this endpoint. The token must still have access to the requested dataset. Axiom returns an error when the dataset is missing or inaccessible. # Get dataset field Source: https://docs.automate.ax/reference/integrations/axiom/actions/get-dataset-field Retrieves one dataset field definition. `axiom.getDatasetField` retrieves one dataset field definition. The result includes its type, visibility, description, and unit. ```ts automations/axiom-get-dataset-field.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Get dataset field", () => { onHttpRequest({ scope: "automation" }) axiom.getDatasetField({ datasetName: "production", fieldName: "service.name", }) }) ``` ## Inputs `datasetName` selects an events, logs, or traces dataset by name or ID. `fieldName` selects one non-empty field name. ## Output Returns the field's `name` and `type`, with `hidden`, `description`, and `unit` when configured. ## Permission and failures The API token needs the organization-level `datasets|read` capability and access to the target dataset. Axiom returns an error when the dataset or field is missing or inaccessible. # Get monitor Source: https://docs.automate.ax/reference/integrations/axiom/actions/get-monitor Retrieves one monitor with its complete query, evaluation, notification, and attached-notifier configuration. `axiom.getMonitor` retrieves one monitor with its complete query, evaluation, notification, and attached-notifier configuration. ```ts automations/axiom-get-monitor.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Get monitor", () => { onHttpRequest({ scope: "automation" }) axiom.getMonitor({ monitorId: "monitor-id" }) }) ``` ## Input `monitorId` is required and selects one Axiom monitor. ## Output Returns the monitor's ID, name, type, query, evaluation cadence and range, plus configured thresholds, anomaly settings, notification behavior, pause state, notifier IDs, and audit metadata. ## Permission and failures The API token needs the organization-level `monitors|read` capability. Axiom returns an error when the monitor does not exist or the token cannot access it. # Get notifier Source: https://docs.automate.ax/reference/integrations/axiom/actions/get-notifier Retrieves one notifier with its channel properties, pause schedule, and creation metadata when present. `axiom.getNotifier` retrieves one notifier with its channel properties, pause schedule, and creation metadata when present. ```ts automations/axiom-get-notifier.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Get notifier", () => { onHttpRequest({ scope: "automation" }) axiom.getNotifier({ notifierId: "notifier-id" }) }) ``` ## Input `notifierId` is required and selects one Axiom notifier. ## Output Returns the notifier's `id`, `name`, channel-specific `properties`, optional `disabledUntil`, and available audit metadata. Axiom can redact secret channel values. ## Permission and failures The API token needs the organization-level `notifiers|read` capability. Axiom returns an error when the notifier does not exist or the token cannot access it. # Get saved query Source: https://docs.automate.ax/reference/integrations/axiom/actions/get-saved-query Retrieves one saved APL query. `axiom.getSavedQuery` retrieves one saved APL query. The result includes its query text, time range, metadata, dataset hint, and owner. ```ts automations/axiom-get-saved-query.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Get saved query", () => { onHttpRequest({ scope: "automation" }) axiom.getSavedQuery({ savedQueryId: "saved-query-id" }) }) ``` ## Input `savedQueryId` is required and selects one saved query. ## Output Returns `id`, `name`, `kind: "apl"`, string `metadata`, `who`, the complete query request, and the optional dataset hint. ## Permission and failures The API token needs the dataset-level `starredQueries|read` capability. Axiom returns an error when the saved query does not exist or the token cannot access it. # Ingest events Source: https://docs.automate.ax/reference/integrations/axiom/actions/ingest-events Ingests 1–10,000 structured JSON events into one dataset. `axiom.ingestEvents` ingests 1–10,000 structured JSON events into one dataset. `edgeUrl` defaults to the US East 1 (AWS) edge at `https://us-east-1.aws.edge.axiom.co`; set it to the edge that stores the target dataset. The result includes `ingested`, `failed`, `processedBytes`, `blocksCreated`, `walLength`, and optional per-event `failures`. ```ts automations/axiom-ingest-events.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Ingest events", () => { onHttpRequest({ scope: "automation" }) axiom.ingestEvents({ datasetName: "production", events: [{ service: "api", level: "info", message: "Started" }], }) }) ``` ## Inputs | Input | Required | Default | Description | | - | - | - | - | | `datasetName` | Yes | — | Target dataset name or ID. | | `events` | Yes | — | Array of 1–10,000 JSON objects. | | `edgeUrl` | No | `"https://us-east-1.aws.edge.axiom.co"` | Axiom ingest edge or an HTTPS `*.edge.axiom.co` origin. | ## Output Returns `ingested`, `failed`, `processedBytes`, `blocksCreated`, and `walLength`. When individual events fail validation, `failures` contains their error and timestamp. Check `failed` even when the action succeeds because Axiom can accept part of a batch. ## Permission and failures The API token needs the dataset-level `ingest|create` capability for `datasetName`. Axiom's edge data endpoint supports API tokens, not personal access tokens. Axiom rejects missing or inaccessible datasets and malformed events. Request-rate limits return `429`, while exhausted ingest limits return `430`; Automate.ax uses Axiom's reset timing when available. This mutation is not retried automatically after an ambiguous provider response. # List annotations Source: https://docs.automate.ax/reference/integrations/axiom/actions/list-annotations Lists annotations, optionally filtered by datasets and time. `axiom.listAnnotations` lists annotations. You can limit results to selected datasets or a time range. Results include IDs, type, timestamps, and optional title, description, URL, and end time. ```ts automations/axiom-list-annotations.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("List annotations", () => { onHttpRequest({ scope: "automation" }) axiom.listAnnotations({ datasets: ["production"], startTime: "2026-08-01T00:00:00Z", endTime: "2026-09-01T00:00:00Z", }) }) ``` ## Inputs All inputs are optional. `datasets` filters by dataset names or IDs. `startTime` and `endTime` bound the annotation window using Axiom time expressions or timestamps. Omitting all three returns every annotation visible to the token. ## Output Returns an array of annotations. Each item includes `id`, `datasets`, `type`, and `time`, plus `endTime`, `title`, `description`, and `url` when present. An empty match returns `[]`. ## Permission and failures The API token needs the organization-level `annotations|read` capability. Axiom rejects invalid time expressions; authentication and permission failures are returned as action errors. # List dashboards Source: https://docs.automate.ax/reference/integrations/axiom/actions/list-dashboards Lists dashboards visible to the token. `axiom.listDashboards` lists dashboards visible to the token. Each resource includes stable UID, version, ownership metadata, and the complete document. ```ts automations/axiom-list-dashboards.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("List dashboards", () => { onHttpRequest({ scope: "automation" }) axiom.listDashboards({ limit: 20, offset: 0 }) }) ``` ## Inputs `limit` is an optional positive page size. `offset` is an optional non-negative page offset. Automate.ax supplies no pagination defaults, so Axiom applies its service defaults when either value is omitted. ## Output Returns one array page of dashboard resources. Each item includes `id`, stable `uid`, exact decimal `version` string, the complete document, and creation and update metadata. No visible dashboards in the page returns `[]`. ## Permission and failures The API token needs the organization-level `dashboards|read` capability. Axiom limits results to dashboards the token can access and returns authentication or authorization failures as action errors. # List dataset fields Source: https://docs.automate.ax/reference/integrations/axiom/actions/list-dataset-fields Lists fields for an events, logs, or traces dataset. `axiom.listDatasetFields` lists fields for an events, logs, or traces dataset. Each item includes its name and type plus visibility, description, and unit when configured. ```ts automations/axiom-list-dataset-fields.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("List dataset fields", () => { onHttpRequest({ scope: "automation" }) axiom.listDatasetFields({ datasetName: "production" }) }) ``` ## Input `datasetName` is required and accepts an events, logs, or traces dataset name or ID. Metrics datasets use the metric-discovery actions instead. ## Output Returns an array of field definitions. Each item contains `name` and `type`, with `hidden`, `description`, and `unit` when configured. A dataset with no discovered fields returns `[]`. ## Permission and failures The API token needs the organization-level `datasets|read` capability and access to the target dataset. Axiom returns an error for missing, inaccessible, or unsupported dataset kinds. # List datasets Source: https://docs.automate.ax/reference/integrations/axiom/actions/list-datasets Lists datasets visible to the token. `axiom.listDatasets` lists datasets visible to the token. Each item includes its ID, name, kind, description, timestamps, owner, retention settings, and edge metadata when present. ```ts automations/axiom-list-datasets.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("List datasets", () => { onHttpRequest({ scope: "automation" }) axiom.listDatasets({}) }) ``` ## Inputs This action has no inputs. ## Output Returns an array of datasets visible to the token. Each item includes `id`, `name`, `kind`, `description`, `created`, `updatedAt`, and `who`; retention, write access, sharing, map-field, and edge-deployment fields appear when Axiom provides them. No visible datasets returns `[]`. ## Permission and failures Axiom requires a valid API token but no specific token capability for this endpoint. The result is limited to datasets the token can access. Expired or revoked tokens fail authentication. # List map fields Source: https://docs.automate.ax/reference/integrations/axiom/actions/list-map-fields Lists fields configured as maps. `axiom.listMapFields` lists fields configured as maps. Map fields store dynamic keys that you address with bracket notation in APL. ```ts automations/axiom-list-map-fields.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("List map fields", () => { onHttpRequest({ scope: "automation" }) axiom.listMapFields({ datasetName: "production" }) }) ``` ## Input `datasetName` is required and accepts a dataset name or ID. ## Output Returns the configured map-field names as `string[]`. No configured map fields returns `[]`. ## Permission and failures The API token needs the organization-level `datasets|read` capability and access to the target dataset. Axiom returns an error when the dataset is missing or inaccessible. # List metric tag values Source: https://docs.automate.ax/reference/integrations/axiom/actions/list-metric-tag-values Lists values observed for one metrics tag. `axiom.listMetricTagValues` lists values observed for one metrics tag. The result is an array of strings suitable for exact MPL filters. ```ts automations/axiom-list-metric-tag-values.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("List metric tag values", () => { onHttpRequest({ scope: "automation" }) axiom.listMetricTagValues({ datasetName: "metrics", tag: "service.name" }) }) ``` ## Inputs `datasetName` and the non-empty tag name `tag` are required. Omit `startTime` and `endTime` to search the previous 30 minutes, or provide RFC3339 timestamps for a fixed window. `edgeUrl` defaults to the US East 1 (AWS) edge at `"https://us-east-1.aws.edge.axiom.co"`. Set it to the edge that stores the dataset; a custom edge URL must use HTTPS on `*.edge.axiom.co`. ## Output Returns values observed for the tag in the selected window as `string[]`. No observed values returns `[]`. ## Permission and failures The API token needs the dataset-level `query|read` capability for `datasetName`. Axiom returns an error when the dataset or tag is missing or inaccessible, and rejects invalid time windows. Request-rate limits return `429`, while exhausted query-cost limits return `430`. Automate.ax uses Axiom's reset timing when available. # List metric tag values for a metric Source: https://docs.automate.ax/reference/integrations/axiom/actions/list-metric-tag-values-for-metric Lists values observed for one tag on one metric. `axiom.listMetricTagValuesForMetric` lists values observed for one tag on one metric. Use the result to build a valid exact filter without mixing values observed only on other metrics. ```ts automations/axiom-list-metric-tag-values-for-metric.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("List metric tag values for a metric", () => { onHttpRequest({ scope: "automation" }) axiom.listMetricTagValuesForMetric({ datasetName: "metrics", metric: "http.server.duration", tag: "service.name", }) }) ``` ## Inputs | Input | Required | Default | Description | | - | - | - | - | | `datasetName` | Yes | — | OpenTelemetry metrics dataset name or ID. | | `metric` | Yes | — | Non-empty metric name. | | `tag` | Yes | — | Non-empty tag name. | | `startTime` | No | 30 minutes before execution | Discovery-window start as an RFC3339 timestamp. | | `endTime` | No | Execution time | Discovery-window end as an RFC3339 timestamp. | | `edgeUrl` | No | `"https://us-east-1.aws.edge.axiom.co"` | Axiom query edge or an HTTPS `*.edge.axiom.co` origin. | Set `edgeUrl` to the edge that stores the dataset. ## Output Returns values observed for the tag on the metric in the selected window as `string[]`. No observed values returns `[]`. ## Permission and failures The API token needs the dataset-level `query|read` capability for `datasetName`. Axiom returns an error when the dataset, metric, or tag is missing or inaccessible, and rejects invalid time windows. Request-rate limits return `429`, while exhausted query-cost limits return `430`. Automate.ax uses Axiom's reset timing when available. # List metric tags Source: https://docs.automate.ax/reference/integrations/axiom/actions/list-metric-tags Lists tag names observed in one metrics dataset. `axiom.listMetricTags` lists tag names observed in one metrics dataset. Use the result to build valid MPL filters instead of guessing dimensions. ```ts automations/axiom-list-metric-tags.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("List metric tags", () => { onHttpRequest({ scope: "automation" }) axiom.listMetricTags({ datasetName: "metrics" }) }) ``` ## Inputs `datasetName` is required. Omit `startTime` and `endTime` to search the previous 30 minutes, or provide RFC3339 timestamps for a fixed window. `edgeUrl` defaults to the US East 1 (AWS) edge at `"https://us-east-1.aws.edge.axiom.co"`. Set it to the edge that stores the dataset; a custom edge URL must use HTTPS on `*.edge.axiom.co`. ## Output Returns tag names observed in the selected window as `string[]`. No observed tags returns `[]`. ## Permission and failures The API token needs the dataset-level `query|read` capability for `datasetName`. Axiom returns an error when the metrics dataset is missing or inaccessible, and rejects invalid time windows. Request-rate limits return `429`, while exhausted query-cost limits return `430`. Automate.ax uses Axiom's reset timing when available. # List metric tags for a metric Source: https://docs.automate.ax/reference/integrations/axiom/actions/list-metric-tags-for-metric Lists tag names observed on one metric. `axiom.listMetricTagsForMetric` lists tag names observed on one metric. Use it after selecting a metric to discover only the dimensions available for that metric. ```ts automations/axiom-list-metric-tags-for-metric.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("List metric tags for a metric", () => { onHttpRequest({ scope: "automation" }) axiom.listMetricTagsForMetric({ datasetName: "metrics", metric: "http.server.duration", }) }) ``` ## Inputs | Input | Required | Default | Description | | - | - | - | - | | `datasetName` | Yes | — | OpenTelemetry metrics dataset name or ID. | | `metric` | Yes | — | Non-empty metric name. | | `startTime` | No | 30 minutes before execution | Discovery-window start as an RFC3339 timestamp. | | `endTime` | No | Execution time | Discovery-window end as an RFC3339 timestamp. | | `edgeUrl` | No | `"https://us-east-1.aws.edge.axiom.co"` | Axiom query edge or an HTTPS `*.edge.axiom.co` origin. | Set `edgeUrl` to the edge that stores the dataset. ## Output Returns tag names observed on the metric in the selected window as `string[]`. No observed tags returns `[]`. ## Permission and failures The API token needs the dataset-level `query|read` capability for `datasetName`. Axiom returns an error when the dataset or metric is missing or inaccessible, and rejects invalid time windows. Request-rate limits return `429`, while exhausted query-cost limits return `430`. Automate.ax uses Axiom's reset timing when available. # List metrics Source: https://docs.automate.ax/reference/integrations/axiom/actions/list-metrics Lists observed metric definitions keyed by metric name. `axiom.listMetrics` lists observed metric definitions keyed by metric name. Each definition includes its type, aggregation behavior, and unit; the discovery window defaults to the previous 30 minutes. ```ts automations/axiom-list-metrics.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("List metrics", () => { onHttpRequest({ scope: "automation" }) axiom.listMetrics({ datasetName: "metrics" }) }) ``` ## Inputs `datasetName` is required. Omit `startTime` and `endTime` to search the previous 30 minutes, or provide RFC3339 timestamps for a fixed window. `edgeUrl` defaults to the US East 1 (AWS) edge at `"https://us-east-1.aws.edge.axiom.co"`. Set it to the edge that stores the dataset; a custom edge URL must use HTTPS on `*.edge.axiom.co`. ## Output Returns an object keyed by metric name. Each value contains `type`, `temporality`, and nullable `unit`. No metrics observed in the window returns an empty object. ## Permission and failures The API token needs the dataset-level `query|read` capability for `datasetName`. Axiom returns an error when the metrics dataset is missing or inaccessible, and rejects invalid time windows. Request-rate limits return `429`, while exhausted query-cost limits return `430`. Automate.ax uses Axiom's reset timing when available. # List monitor history Source: https://docs.automate.ax/reference/integrations/axiom/actions/list-monitor-history Lists open and closed alert history. `axiom.listMonitorHistory` lists open and closed alert history. When you omit the window, Automate.ax computes RFC3339 timestamps for the previous 30 minutes at execution time. Each item includes check ID, monitor name, state, and timestamp. ```ts automations/axiom-list-monitor-history.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("List monitor history", () => { onHttpRequest({ scope: "automation" }) axiom.listMonitorHistory({ monitorId: "monitor-id", startTime: "2026-08-29T12:00:00Z", endTime: "2026-08-30T12:00:00Z", }) }) ``` ## Inputs `monitorId` is required. `startTime` and `endTime` accept RFC3339 timestamps. At execution, an omitted `startTime` defaults to the current time minus 30 minutes and an omitted `endTime` defaults to the current time. Automate.ax serializes both defaults as RFC3339 timestamps. Provide both inputs for a custom fixed window. ## Output Returns an array of alert-history items. Each contains `checkId`, `name`, a `state` of `"open"` or `"closed"`, and `timestamp`. No state changes in the window returns `[]`. ## Permission and failures The API token needs the organization-level `monitors|read` capability. Axiom returns an error for missing monitors, invalid RFC3339 timestamps, and reversed time windows. # List monitors Source: https://docs.automate.ax/reference/integrations/axiom/actions/list-monitors Lists threshold, match-event, and anomaly monitors. `axiom.listMonitors` lists threshold, match-event, and anomaly monitors. Results include query configuration, cadence, thresholds, notification behavior, and notifier IDs. ```ts automations/axiom-list-monitors.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("List monitors", () => { onHttpRequest({ scope: "automation" }) axiom.listMonitors({}) }) ``` ## Inputs This action has no inputs. ## Output Returns an array of monitors visible through the token's dataset access. Each item includes `id`, `name`, `type`, exactly one of `aplQuery` or `mplQuery`, `intervalMinutes`, `rangeMinutes`, and configured threshold, anomaly, notification, pause, notifier, and audit fields. No visible monitors returns `[]`. ## Permission and failures The API token needs the organization-level `monitors|read` capability and dataset-level `query|read` access to each monitor's datasets. Axiom omits monitors whose datasets the token cannot query. If this action returns `[]` unexpectedly, add `query|read` for the datasets used by those monitors. Expired or revoked tokens fail authentication. # List notifiers Source: https://docs.automate.ax/reference/integrations/axiom/actions/list-notifiers Lists notification destinations visible to the token. `axiom.listNotifiers` lists notification destinations visible to the token. Channels include email, chat, incident-management, and webhooks. ```ts automations/axiom-list-notifiers.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("List notifiers", () => { onHttpRequest({ scope: "automation" }) axiom.listNotifiers({}) }) ``` ## Inputs This action has no inputs. ## Output Returns an array of notifiers. Each item includes `id`, `name`, one channel-specific `properties` object, optional `disabledUntil`, and audit metadata when Axiom provides it. No configured notifiers returns `[]`. ## Permission and failures The API token needs the organization-level `notifiers|read` capability. Axiom can redact secret channel values in responses. Authentication and permission failures are returned as action errors. # List saved queries Source: https://docs.automate.ax/reference/integrations/axiom/actions/list-saved-queries Lists saved APL queries. `axiom.listSavedQueries` lists saved APL queries. Each result includes its ID, name, query request, metadata, dataset hint, and owner. ```ts automations/axiom-list-saved-queries.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("List saved queries", () => { onHttpRequest({ scope: "automation" }) axiom.listSavedQueries({}) }) ``` ## Inputs This action has no inputs. ## Output Returns an array of saved APL queries visible to the token. Each item includes `id`, `name`, `kind: "apl"`, string `metadata`, `who`, the complete query request, and an optional dataset hint. No visible saved queries returns `[]`. ## Permission and failures The API token needs the dataset-level `starredQueries|read` capability. Axiom limits the result to saved queries the token can access. Authentication and permission failures are returned as action errors. # Query data Source: https://docs.automate.ax/reference/integrations/axiom/actions/query-data Runs APL against events, logs, or traces and returns Axiom's v1 tabular query result. `axiom.queryData` runs APL against events, logs, or traces and returns Axiom's v1 tabular result. The result includes `datasetNames`, `tables`, and query status such as `elapsedTime`, `isPartial`, row counts, cursors, and scanned-block metadata. The time window defaults to `now-30m` through `now`. ```ts automations/axiom-query-data.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Query data", () => { onHttpRequest({ scope: "automation" }) axiom.queryData({ apl: "['production'] | where severity == 'error' | take 20", startTime: "now-15m", endTime: "now", }) }) ``` ## Inputs | Input | Required | Default | Description | | - | - | - | - | | `apl` | Yes | — | Non-empty Axiom Processing Language query. | | `startTime` | No | `"now-30m"` | Query-window start as an Axiom time expression or timestamp. | | `endTime` | No | `"now"` | Query-window end. | | `edgeUrl` | No | `"https://us-east-1.aws.edge.axiom.co"` | Axiom query edge or an HTTPS `*.edge.axiom.co` origin. | Optional inputs include pagination `cursor`, positive `defaultLimit`, `defaultOrder`, cursor-field flags, libraries, variables, and `queryOptions`. Query options control cache, statistics, tracing, priority, resolution, series and data-point limits, null display, interpolation, aggregation, shown columns, and time-series presentation. Automate.ax adds no defaults for these options. ## Output Returns a tabular result with `datasetNames`, `format: "tabular"`, `tables`, and query `status`. Status includes elapsed time, partial and estimate flags, examined and matched rows, block bounds, group count, cache status, cursors, continuation token, and provider messages when present. Each table describes its fields, groups, order, sources, columns, range, and optional buckets. ## Permission and failures The API token needs the dataset-level `query|read` capability for every dataset referenced by the query. Axiom rejects invalid APL, inaccessible datasets, and invalid time or query options. A partial result has `status.isPartial: true`; inspect its status and messages before treating it as complete. Request-rate limits return `429`, exhausted query-cost limits return `430`, and queries that exceed memory constraints can return `432`. Automate.ax uses Axiom's reset timing when available. # Query metrics Source: https://docs.automate.ax/reference/integrations/axiom/actions/query-metrics Runs MPL against an OpenTelemetry metrics dataset and returns Axiom's metrics-v2 response. `axiom.queryMetrics` runs MPL against an OpenTelemetry metrics dataset and returns Axiom's metrics-v2 response. Discover metric names and tags first; the time window defaults to the previous 30 minutes. ```ts automations/axiom-query-metrics.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Query metrics", () => { onHttpRequest({ scope: "automation" }) axiom.queryMetrics({ mpl: "metrics:http.server.duration | align to 1m using avg", startTime: "now-15m", endTime: "now", }) }) ``` ## Inputs | Input | Required | Default | Description | | - | - | - | - | | `mpl` | Yes | — | Non-empty MPL query. | | `startTime` | No | `"now-30m"` | Query-window start as an Axiom time expression or timestamp. | | `endTime` | No | `"now"` | Query-window end. | | `edgeUrl` | No | `"https://us-east-1.aws.edge.axiom.co"` | Axiom query edge or an HTTPS `*.edge.axiom.co` origin. | ## Output Returns Axiom's metrics-v2 result as a JSON object. Its keys and series shape depend on the MPL query. ## Permission and failures The API token needs the dataset-level `query|read` capability for every metrics dataset referenced by the MPL query. Axiom rejects invalid MPL, inaccessible datasets, and invalid time windows. Request-rate limits return `429`, while exhausted query-cost limits return `430`. Automate.ax uses Axiom's reset timing when available. # Replace map fields Source: https://docs.automate.ax/reference/integrations/axiom/actions/replace-map-fields Replaces the complete map-field list. `axiom.replaceMapFields` replaces the complete map-field list. Pass an empty `fieldNames` array to clear it; returns the resulting list. ```ts automations/axiom-replace-map-fields.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Replace map fields", () => { onHttpRequest({ scope: "automation" }) axiom.replaceMapFields({ datasetName: "production", fieldNames: ["attributes", "resource"], }) }) ``` ## Inputs `datasetName` selects the dataset by name or ID. `fieldNames` is the complete replacement list; it may be empty to remove every map-field designation. ## Output Returns the resulting map-field names as `string[]`. ## Permission and failures The API token needs the organization-level `datasets|update` capability and access to the target dataset. Axiom rejects missing datasets and fields that cannot be configured as maps. This operation replaces the entire list and is not retried automatically after an ambiguous provider response. # Search metrics Source: https://docs.automate.ax/reference/integrations/axiom/actions/search-metrics Returns metric names associated with one exact observed tag value. `axiom.searchMetrics` returns metric names associated with one exact observed tag value. Set `startTime` and `endTime` to bound discovery outside the default 30-minute window. ```ts automations/axiom-search-metrics.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Search metrics", () => { onHttpRequest({ scope: "automation" }) axiom.searchMetrics({ datasetName: "metrics", value: "api" }) }) ``` ## Inputs `datasetName` and the exact non-empty tag `value` are required. Omit `startTime` and `endTime` to search the previous 30 minutes, or provide RFC3339 timestamps for a fixed window. `edgeUrl` defaults to the US East 1 (AWS) edge at `"https://us-east-1.aws.edge.axiom.co"`. Set it to the edge that stores the dataset; a custom edge URL must use HTTPS on `*.edge.axiom.co`. ## Output Returns the matching metric names as `string[]`. No metric associated with the value in the selected window returns `[]`. ## Permission and failures The API token needs the dataset-level `query|read` capability for `datasetName`. Axiom returns an error when the metrics dataset is missing or inaccessible, and rejects invalid time windows. Request-rate limits return `429`, while exhausted query-cost limits return `430`. Automate.ax uses Axiom's reset timing when available. # Trim dataset Source: https://docs.automate.ax/reference/integrations/axiom/actions/trim-dataset Deletes events older than the relative `maxDuration`. `axiom.trimDataset` deletes events older than the relative `maxDuration`. Axiom evaluates the duration at execution time and returns no response body. ```ts automations/axiom-trim-dataset.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Trim dataset", () => { onHttpRequest({ scope: "automation" }) axiom.trimDataset({ datasetName: "production", maxDuration: "720h" }) }) ``` > [!WARNING] > > This operation changes or deletes provider data. Confirm the target before > deployment. ## Inputs `datasetName` selects the dataset by name or ID. `maxDuration` is a required, non-empty relative duration such as `"720h"`; Axiom removes events older than that duration when it processes the request. There are no defaults. ## Output Returns `null` after Axiom accepts the trim request. A successful response means Axiom queued the deletion, not that every matching event has already disappeared; completion can take several hours. ## Permission and failures The API token needs the dataset-level `trim|update` capability for `datasetName`. Axiom rejects missing or inaccessible datasets and invalid duration expressions. This destructive mutation is not retried automatically after an ambiguous provider response. # Update annotation Source: https://docs.automate.ax/reference/integrations/axiom/actions/update-annotation Updates one or more mutable annotation fields. `axiom.updateAnnotation` updates one or more mutable annotation fields. Provide at least one field in addition to `annotationId`; returns the complete annotation. ```ts automations/axiom-update-annotation.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Update annotation", () => { onHttpRequest({ scope: "automation" }) axiom.updateAnnotation({ annotationId: "annotation-id", title: "Rollout complete", }) }) ``` ## Inputs `annotationId` is required. Provide at least one of `datasets`, `type`, `time`, `endTime`, `title`, `description`, or `url`. `datasets` must contain at least one dataset; `type` accepts lowercase letters, digits, and hyphens; title, description, and URL lengths use the same limits as creation. ## Output Returns the complete updated annotation rather than only the changed fields. ## Permission and failures The API token needs the organization-level `annotations|update` capability. Axiom rejects missing annotations, inaccessible datasets, invalid times, and values outside the annotation limits. This mutation is not retried automatically after an ambiguous provider response. # Update dashboard Source: https://docs.automate.ax/reference/integrations/axiom/actions/update-dashboard Replaces a complete dashboard. `axiom.updateDashboard` replaces a complete dashboard. Pass its current `version` for optimistic concurrency or set `overwrite: true`. ```ts automations/axiom-update-dashboard.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Update dashboard", () => { onHttpRequest({ scope: "automation" }) axiom.updateDashboard({ dashboardUid: "operations", version: "1751546157768154000", dashboard: { name: "Operations", owner: "X-AXIOM-EVERYONE", charts: [], layout: [], refreshTime: 60, schemaVersion: 2, timeWindowStart: "qr-now-1h", timeWindowEnd: "qr-now", }, }) }) ``` ## Inputs `dashboardUid` and the complete schema-version 2 `dashboard` document are required. By default, `overwrite` is `false`, so provide the dashboard's current positive decimal `version` string; alternatively set `overwrite: true`. The string preserves Axiom's 64-bit version exactly. Optional `message` records the change. This action replaces the entire document. Include every chart, layout entry, section, description, comparison setting, and time-window value to retain. ## Output Returns `status` (`"created"` or `"updated"`) and the complete resulting dashboard resource. `overwritten` appears when Axiom reports it. ## Permission and failures The API token needs the organization-level `dashboards|update` capability. Axiom rejects invalid documents and returns `409` or `412` when the supplied version conflicts with the current resource. This replacement mutation is not retried automatically after an ambiguous provider response. # Update dashboard chart Source: https://docs.automate.ax/reference/integrations/axiom/actions/update-dashboard-chart Applies a JSON merge patch to one chart. `axiom.updateDashboardChart` applies a JSON merge patch to one chart. Pass the current dashboard `version` or `overwrite: true`; `chart.id` must match `chartId` when present. ```ts automations/axiom-update-dashboard-chart.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Update dashboard chart", () => { onHttpRequest({ scope: "automation" }) axiom.updateDashboardChart({ dashboardUid: "operations", chartId: "latency", version: "1751546157768154000", chart: { name: "API latency" }, }) }) ``` ## Inputs `dashboardUid`, `chartId`, and the JSON merge patch `chart` are required. If `chart.id` is present, it must equal `chartId`. By default, `overwrite` is `false`, so provide the dashboard's current positive decimal `version` string; alternatively set `overwrite: true`. The string preserves Axiom's 64-bit version exactly. Optional `message` records the change. A JSON merge patch changes only the supplied chart fields. Values set to `null` follow Axiom's merge-patch behavior and can remove optional fields. ## Output Returns `status` (`"created"` or `"updated"`) and the complete resulting dashboard resource. `overwritten` appears when Axiom reports it. ## Permission and failures The API token needs the organization-level `dashboards|update` capability. Axiom returns `404` for a missing dashboard or chart, `400` for an invalid patch, and `412` for a version conflict. This mutation is not retried automatically after an ambiguous provider response. # Update dataset Source: https://docs.automate.ax/reference/integrations/axiom/actions/update-dataset Updates the description or retention settings for a dataset. `axiom.updateDataset` updates the description or retention settings for a dataset. Provide at least one mutable setting; the action returns the updated dataset. ```ts automations/axiom-update-dataset.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Update dataset", () => { onHttpRequest({ scope: "automation" }) axiom.updateDataset({ datasetName: "production", description: "Production logs and events", retentionDays: 45, }) }) ``` ## Inputs `datasetName` is required. Provide at least one of `description`, non-negative `retentionDays`, or `useRetentionPeriod`. Omitted settings are left unchanged. ## Output Returns the complete updated dataset resource, including its effective retention configuration. ## Permission and failures The API token needs the organization-level `datasets|update` capability. Axiom rejects missing datasets and invalid retention settings. This mutation is not retried automatically after an ambiguous provider response. # Update dataset field Source: https://docs.automate.ax/reference/integrations/axiom/actions/update-dataset-field Updates a field's name, type, visibility, description, or unit. `axiom.updateDatasetField` updates a field's name, type, visibility, description, or unit. Supply the field's current or replacement `type`; when `name` is omitted, `fieldName` is preserved. ```ts automations/axiom-update-dataset-field.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Update dataset field", () => { onHttpRequest({ scope: "automation" }) axiom.updateDatasetField({ datasetName: "production", fieldName: "service.name", type: "string", hidden: false, description: "OpenTelemetry service name", }) }) ``` ## Inputs | Input | Required | Description | | - | - | - | | `datasetName` | Yes | Dataset name or ID. | | `fieldName` | Yes | Existing field name. | | `name` | No | Replacement name; defaults to `fieldName`. | | `type` | Yes | Current or replacement Axiom field type. | | `hidden` | No | Whether the field is hidden in Axiom. | | `description` | No | Field description. | | `unit` | No | Display unit. | ## Output Returns the complete updated field definition. ## Permission and failures The API token needs the organization-level `datasets|update` capability and access to the target dataset. Axiom rejects missing fields, unsupported type changes, and invalid names. This mutation is not retried automatically after an ambiguous provider response. # Update monitor Source: https://docs.automate.ax/reference/integrations/axiom/actions/update-monitor Replaces a monitor's complete configuration. `axiom.updateMonitor` replaces a monitor's complete configuration. Include every setting to retain, including `notifierIds`, and exactly one APL or MPL query. ```ts automations/axiom-update-monitor.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Update monitor", () => { onHttpRequest({ scope: "automation" }) axiom.updateMonitor({ monitorId: "monitor-id", name: "Error volume", type: "Threshold", aplQuery: "['production'] | where severity == 'error' | count", intervalMinutes: 5, rangeMinutes: 15, operator: "Above", threshold: 200, }) }) ``` ## Inputs `monitorId`, `name`, `type`, positive `intervalMinutes`, and positive `rangeMinutes` are required. Provide exactly one non-empty `aplQuery` or `mplQuery`. The optional fields match `createMonitor`, but this action replaces the full monitor: omitted optional fields are removed or reset by Axiom rather than preserved. ## Output Returns the complete updated monitor with its ID and available audit metadata. ## Permission and failures The API token needs the organization-level `monitors|update` capability. Axiom rejects missing monitors, invalid queries, incompatible monitor settings, and unknown notifier IDs. This mutation is not retried automatically after an ambiguous provider response. # Update notifier Source: https://docs.automate.ax/reference/integrations/axiom/actions/update-notifier Replaces one notifier's name, channel properties, and optional `disabledUntil`. `axiom.updateNotifier` replaces one notifier's name, channel properties, and optional `disabledUntil`. Configure exactly one channel and include every value to retain. ```ts automations/axiom-update-notifier.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Update notifier", () => { onHttpRequest({ scope: "automation" }) axiom.updateNotifier({ notifierId: "notifier-id", name: "Operations email", properties: { email: { emails: ["on-call@example.com"] } }, }) }) ``` ## Inputs `notifierId`, `name`, and exactly one supported channel in `properties` are required. `disabledUntil` is optional and may be an Axiom timestamp or `null`. Channel shapes match `createNotifier`. This action replaces the complete notifier configuration. Include every destination URL, credential, header, template, or channel value to retain; omitted values are not merged with the existing notifier. ## Output Returns the complete updated notifier with its ID and available audit metadata. ## Permission and failures The API token needs the organization-level `notifiers|update` capability. Axiom rejects missing notifiers, invalid destination settings, and incomplete channel credentials. This mutation is not retried automatically after an ambiguous provider response. # Update saved query Source: https://docs.automate.ax/reference/integrations/axiom/actions/update-saved-query Replaces one saved APL query. `axiom.updateSavedQuery` replaces one saved APL query. Include the complete query, metadata, owner, name, and `kind: "apl"`. ```ts automations/axiom-update-saved-query.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Update saved query", () => { onHttpRequest({ scope: "automation" }) axiom.updateSavedQuery({ savedQueryId: "saved-query-id", kind: "apl", name: "Recent critical errors", metadata: {}, who: "user-id", query: { apl: "['production'] | where severity == 'critical'", startTime: "now-30m", endTime: "now", }, }) }) ``` ## Inputs `savedQueryId`, `kind: "apl"`, `name`, `who`, `metadata`, and the complete `query` are required. Within `query`, `apl` is required, while `startTime` defaults to `"now-30m"` and `endTime` defaults to `"now"`. Optional cursor, ordering, library, variable, display, and execution settings replace their stored values; `dataset` is optional. ## Output Returns the complete updated saved query with its Axiom ID. ## Permission and failures The API token needs the dataset-level `starredQueries|update` capability for the relevant dataset. Axiom rejects missing saved queries, invalid APL or time expressions, and inaccessible dataset references. This replacement mutation is not retried automatically after an ambiguous provider response. # Vacuum dataset Source: https://docs.automate.ax/reference/integrations/axiom/actions/vacuum-dataset Removes field definitions absent from retained data. `axiom.vacuumDataset` queues removal of field definitions absent from retained data. It does not delete retained events and returns `null` after Axiom accepts the request. ```ts automations/axiom-vacuum-dataset.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Vacuum dataset", () => { onHttpRequest({ scope: "automation" }) axiom.vacuumDataset({ datasetName: "production" }) }) ``` > [!WARNING] > > This operation changes or deletes provider data. Confirm the target before > deployment. ## Inputs `datasetName` is required and accepts the dataset name or ID to vacuum. ## Output Returns `null` after Axiom queues the vacuum request. A successful response does not mean vacuuming is complete; processing can take several hours. ## Permission and failures The API token needs the dataset-level `vacuum|update` capability for the target dataset. Axiom can return `429` when too many vacuum requests are in progress. Missing or inaccessible datasets also fail, and the mutation is not retried automatically after an ambiguous provider response. # Axiom Source: https://docs.automate.ax/reference/integrations/axiom/index Ingest, query, manage, and react to Axiom observability data. Use the Axiom integration to ingest structured events, query logs and traces with APL, query OpenTelemetry metrics with MPL, manage observability resources, and start automations from monitor state changes. ## Connect Axiom Create an API token in Axiom and connect it from your Automate.ax project. Advanced tokens must grant every capability used by your automation. Query and ingestion actions need dataset and query access; resource actions need matching datasets, monitors, notifiers, saved queries, or dashboards permissions. Monitor triggers need read and write access to monitors and notifiers. ```ts automations/investigate-axiom-alerts.automation.ts theme={null} import { automation } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("Investigate Axiom alerts", () => { const alert = axiom.onMonitorOpened({ monitorId: "monitor-id" }) axiom.queryData({ apl: "['production'] | where severity == 'error' | take 20", startTime: alert.event.queryStartTime, endTime: alert.event.queryEndTime, }) }) ``` `axiomAccount` declares a named static project binding when an automation uses more than one Axiom account. Every action and trigger also accepts an optional `account` binding. ## Query and ingest endpoints APL, MPL, metrics discovery, and ingest actions accept an optional `edgeUrl`. It defaults to the US East 1 (AWS) edge at `https://us-east-1.aws.edge.axiom.co`; set it to the edge that stores the target dataset. Automate.ax accepts only HTTPS `*.edge.axiom.co` origins and never follows redirects. Query windows default to the 30 minutes before execution. Metrics discovery accepts fixed RFC3339 timestamps because Axiom's discovery endpoints require them. ## Monitor triggers Automate.ax creates one custom webhook notifier, attaches it without replacing the monitor's existing notifier IDs, authenticates deliveries with a managed secret header, and emits an ordinary root event. When no deployment needs the source, Automate.ax detaches and deletes only its managed notifier. Axiom API errors include the HTTP status and provider details. Automate.ax retries `429` request-rate limits and `430` ingest or query limits using Axiom's reset timing when available. ## Exports ```ts theme={null} import { axiom, axiomAccount } from "automate.ax/axiom" ``` * `axiom` contains the packaged Axiom actions and triggers. * `axiomAccount("name")` selects a named Axiom connection. ## Triggers * [On monitor notification](/reference/integrations/axiom/triggers/on-monitor-notification) * [On monitor opened](/reference/integrations/axiom/triggers/on-monitor-opened) * [On monitor closed](/reference/integrations/axiom/triggers/on-monitor-closed) ## Actions * [Ingest events](/reference/integrations/axiom/actions/ingest-events) * [Query data](/reference/integrations/axiom/actions/query-data) * [Query metrics](/reference/integrations/axiom/actions/query-metrics) * [List metrics](/reference/integrations/axiom/actions/list-metrics) * [Search metrics](/reference/integrations/axiom/actions/search-metrics) * [List metric tags](/reference/integrations/axiom/actions/list-metric-tags) * [List metric tags for a metric](/reference/integrations/axiom/actions/list-metric-tags-for-metric) * [List metric tag values](/reference/integrations/axiom/actions/list-metric-tag-values) * [List metric tag values for a metric](/reference/integrations/axiom/actions/list-metric-tag-values-for-metric) * [List datasets](/reference/integrations/axiom/actions/list-datasets) * [Create dataset](/reference/integrations/axiom/actions/create-dataset) * [Get dataset](/reference/integrations/axiom/actions/get-dataset) * [Update dataset](/reference/integrations/axiom/actions/update-dataset) * [Delete dataset](/reference/integrations/axiom/actions/delete-dataset) * [Trim dataset](/reference/integrations/axiom/actions/trim-dataset) * [Vacuum dataset](/reference/integrations/axiom/actions/vacuum-dataset) * [List dataset fields](/reference/integrations/axiom/actions/list-dataset-fields) * [Get dataset field](/reference/integrations/axiom/actions/get-dataset-field) * [Update dataset field](/reference/integrations/axiom/actions/update-dataset-field) * [List map fields](/reference/integrations/axiom/actions/list-map-fields) * [Replace map fields](/reference/integrations/axiom/actions/replace-map-fields) * [Create map field](/reference/integrations/axiom/actions/create-map-field) * [Delete map field](/reference/integrations/axiom/actions/delete-map-field) * [List annotations](/reference/integrations/axiom/actions/list-annotations) * [Create annotation](/reference/integrations/axiom/actions/create-annotation) * [Get annotation](/reference/integrations/axiom/actions/get-annotation) * [Update annotation](/reference/integrations/axiom/actions/update-annotation) * [Delete annotation](/reference/integrations/axiom/actions/delete-annotation) * [List monitors](/reference/integrations/axiom/actions/list-monitors) * [Create monitor](/reference/integrations/axiom/actions/create-monitor) * [Get monitor](/reference/integrations/axiom/actions/get-monitor) * [Update monitor](/reference/integrations/axiom/actions/update-monitor) * [Delete monitor](/reference/integrations/axiom/actions/delete-monitor) * [List monitor history](/reference/integrations/axiom/actions/list-monitor-history) * [List notifiers](/reference/integrations/axiom/actions/list-notifiers) * [Create notifier](/reference/integrations/axiom/actions/create-notifier) * [Get notifier](/reference/integrations/axiom/actions/get-notifier) * [Update notifier](/reference/integrations/axiom/actions/update-notifier) * [Delete notifier](/reference/integrations/axiom/actions/delete-notifier) * [List saved queries](/reference/integrations/axiom/actions/list-saved-queries) * [Create saved query](/reference/integrations/axiom/actions/create-saved-query) * [Get saved query](/reference/integrations/axiom/actions/get-saved-query) * [Update saved query](/reference/integrations/axiom/actions/update-saved-query) * [Delete saved query](/reference/integrations/axiom/actions/delete-saved-query) * [List dashboards](/reference/integrations/axiom/actions/list-dashboards) * [Create dashboard](/reference/integrations/axiom/actions/create-dashboard) * [Get dashboard](/reference/integrations/axiom/actions/get-dashboard) * [Update dashboard](/reference/integrations/axiom/actions/update-dashboard) * [Delete dashboard](/reference/integrations/axiom/actions/delete-dashboard) * [Update dashboard chart](/reference/integrations/axiom/actions/update-dashboard-chart) # On monitor closed Source: https://docs.automate.ax/reference/integrations/axiom/triggers/on-monitor-closed Runs when the selected monitor resolves. `axiom.onMonitorClosed` runs when the selected monitor resolves. It returns the same normalized payload as the broad notification trigger. ```ts automations/axiom-on-monitor-closed.automation.ts theme={null} import { automation } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("On monitor closed", () => { const notification = axiom.onMonitorClosed({ monitorId: "monitor-id" }) notification.transform(({ action, event }) => ({ expectedAction: "Closed", action, monitorId: event.monitorId, title: event.title, value: event.value, })) }) ``` Automate.ax manages a custom webhook notifier for this subscription, preserves other notifier IDs, authenticates each delivery, and removes only the managed notifier during cleanup. Optional `account` selects a static project binding. # On monitor notification Source: https://docs.automate.ax/reference/integrations/axiom/triggers/on-monitor-notification Runs when the selected monitor opens or closes. `axiom.onMonitorNotification` runs when the selected monitor opens or closes. The payload contains action, monitor identity, query window, value, groups, and matched event. ```ts automations/axiom-on-monitor-notification.automation.ts theme={null} import { automation } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("On monitor notification", () => { const notification = axiom.onMonitorNotification({ monitorId: "monitor-id" }) notification.transform(({ action, event }) => ({ expectedAction: "Open or Closed", action, monitorId: event.monitorId, title: event.title, value: event.value, })) }) ``` Automate.ax manages a custom webhook notifier for this subscription, preserves other notifier IDs, authenticates each delivery, and removes only the managed notifier during cleanup. Optional `account` selects a static project binding. # On monitor opened Source: https://docs.automate.ax/reference/integrations/axiom/triggers/on-monitor-opened Runs when the selected monitor enters the open state. `axiom.onMonitorOpened` runs when the selected monitor enters the open state. Use the query window and value to investigate the exact evaluation. ```ts automations/axiom-on-monitor-opened.automation.ts theme={null} import { automation } from "automate.ax" import { axiom } from "automate.ax/axiom" export default automation("On monitor opened", () => { const notification = axiom.onMonitorOpened({ monitorId: "monitor-id" }) notification.transform(({ action, event }) => ({ expectedAction: "Open", action, monitorId: event.monitorId, title: event.title, value: event.value, })) }) ``` Automate.ax manages a custom webhook notifier for this subscription, preserves other notifier IDs, authenticates each delivery, and removes only the managed notifier during cleanup. Optional `account` selects a static project binding. # Activate template Source: https://docs.automate.ax/reference/integrations/brevo/actions/activate-template Activate a Brevo transactional email template. `brevo.activateEmailTemplate` makes an existing template available for sending. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Activate a receipt template", () => { onDashboardRun({ title: "Activate a receipt template" }) brevo.activateEmailTemplate({ templateId: 42 }) }) ``` Provide `templateId: number | string`. The optional second argument `{ account }` selects the Brevo binding. The action returns `Signal` after Brevo accepts the change. It doesn't send or test the template and consumes no send credit. # Add contacts to list Source: https://docs.automate.ax/reference/integrations/brevo/actions/add-contacts-to-list Add existing Brevo contacts to a contact list. `brevo.addContactsToList` adds contacts by email and returns separate success and failure lists. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Add launch contacts", () => { onDashboardRun({ title: "Add launch contacts" }) brevo.addContactsToList({ list: "2026 Launch", emails: ["ada@example.com", "grace@example.com"], }) }) ``` Provide `list: string | number` and a non-empty `emails` array. Contacts must already exist. This action doesn't upsert them. Second argument `{ account }` selects the Brevo binding. Returns `{ success: string[]; failure: string[] }`. Partial failure doesn't fail the action, so inspect `failure` before assuming every membership changed. # Authenticate sending domain Source: https://docs.automate.ax/reference/integrations/brevo/actions/authenticate-domain Recheck DNS and authenticate a Brevo sending domain. `brevo.authenticateDomain` recheck DNS and authenticate a Brevo sending domain. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Authenticate sending domain", () => { onDashboardRun({ title: "Authenticate sending domain" }) brevo.authenticateDomain({ domainName: "mail.example.com" }) }) ``` ## Inputs `domainName` identifies the configured domain after you publish its required DNS records. The second argument can select `{ account }`. ## Output Returns `{ domainName, message }`. A provider error usually means DNS has not propagated or a record does not match. # Block email domain Source: https://docs.automate.ax/reference/integrations/brevo/actions/block-email-domain Block a recipient domain from Brevo transactional email. `brevo.blockEmailDomain` block a recipient domain from Brevo transactional email. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Block email domain", () => { onDashboardRun({ title: "Block email domain" }) brevo.blockEmailDomain({ domain: "blocked.example.com" }) }) ``` ## Inputs `domain` must be a fully qualified domain and is normalized to lowercase. The second argument can select `{ account }`. ## Output Returns nothing. Future transactional messages to addresses in the domain are suppressed. # Cancel scheduled email Source: https://docs.automate.ax/reference/integrations/brevo/actions/cancel-scheduled-email Cancel a scheduled Brevo email or batch before processing. `brevo.cancelScheduledEmail` cancel a scheduled Brevo email or batch before processing. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Cancel scheduled email", () => { onDashboardRun({ title: "Cancel scheduled email" }) brevo.cancelScheduledEmail({ identifier: "44a78691-b608-4c6a-9c88-7599024d2c76", }) }) ``` ## Inputs `identifier` is the batch UUID or provider message ID returned by a scheduled send. The second argument can select `{ account }`. ## Output Returns nothing. Brevo rejects cancellation after processing has begun or completed. # Create batch events Source: https://docs.automate.ax/reference/integrations/brevo/actions/create-batch-events Create batch events through the Brevo API. `brevo.createBatchEvents` create batch events through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Create batch events", () => { onDashboardRun({ title: "Create batch events" }) brevo.createBatchEvents({ events: [ { eventName: "order_created", identifiers: { extId: "customer-1" } }, ], }) }) ``` ## Inputs and output Inputs: `events` is a non-empty array of the same event payload accepted by `createEvent`. Accepted count or detailed partial-failure totals. Brevo queues the batch and can report failed event indexes. Pass `{ account }` as the second argument to select a named Brevo account binding. # Create consent group Source: https://docs.automate.ax/reference/integrations/brevo/actions/create-consent-group Create consent group through the Brevo API. `brevo.createConsentGroup` create consent group through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Create consent group", () => { onDashboardRun({ title: "Create consent group" }) brevo.createConsentGroup({ name: "Product updates", signupMode: "manual", listIds: [12], }) }) ``` ## Inputs and output Inputs: `name` is 1–255 characters and `signupMode` is `manual` or `automatic`. Optional `description` is at most 500 characters and `listIds` seeds the group. The created consent group. Consent Groups is plan-gated; list IDs can seed membership. Pass `{ account }` as the second argument to select a named Brevo account binding. # Create contact attribute Source: https://docs.automate.ax/reference/integrations/brevo/actions/create-contact-attribute Create contact attribute through the Brevo API. `brevo.createContactAttribute` create contact attribute through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Create contact attribute", () => { onDashboardRun({ title: "Create contact attribute" }) brevo.createContactAttribute({ category: "normal", name: "TIER", type: "text", }) }) ``` ## Inputs and output Inputs: ```ts theme={null} { category: "normal" | "transactional" | "category" | "calculated" | "global" name: string type?: "text" | "date" | "float" | "boolean" | "id" | "category" | "multiple-choice" | "user" enumeration?: Array<{ label: string; value: number }> multiCategoryOptions?: string[] isRecurring?: boolean value?: string } ``` `name` must be non-empty. Enumeration labels and multi-category options are limited to 200 characters. Optional fields have no implicit default. Completes without a value. Choose the Brevo category and type when the attribute is created. Pass `{ account }` as the second argument to select a named Brevo account binding. # Create contact folder Source: https://docs.automate.ax/reference/integrations/brevo/actions/create-contact-folder Create contact folder through the Brevo API. `brevo.createContactFolder` create contact folder through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Create contact folder", () => { onDashboardRun({ title: "Create contact folder" }) brevo.createContactFolder({ name: "Customers" }) }) ``` ## Inputs and output Inputs: `name` is a non-empty string. `{ id }` for the new folder. Folders organize contact lists. Pass `{ account }` as the second argument to select a named Brevo account binding. # Create contact list Source: https://docs.automate.ax/reference/integrations/brevo/actions/create-contact-list Create an empty Brevo contact list inside an existing folder. `brevo.createContactList` creates an empty list. It doesn't create or add contacts. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Create a launch list", () => { onDashboardRun({ title: "Create a launch list" }) brevo.createContactList({ folder: "Campaigns", name: "2026 Launch" }) }) ``` Provide `folder: string | number` and a non-empty `name`. Brevo resolves folder names case-insensitively by exact match across all folders. Ambiguous or missing names fail. Second argument `{ account }` selects the Brevo binding. Returns `{ id: number }` for the created list. Use [Add contacts to list](/reference/integrations/brevo/actions/add-contacts-to-list) for existing contacts. # Create sending domain Source: https://docs.automate.ax/reference/integrations/brevo/actions/create-domain Create a Brevo sending domain and retrieve its DNS requirements. `brevo.createDomain` create a Brevo sending domain and retrieve its DNS requirements. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Create sending domain", () => { onDashboardRun({ title: "Create sending domain" }) brevo.createDomain({ domainName: "mail.example.com" }) }) ``` ## Inputs `domainName` must be a fully qualified domain name. It is normalized to lowercase. The second argument can select `{ account }`. ## Output Returns the domain ID, normalized name, provider message, and DNS records when Brevo supplies them. Publish the records before calling `authenticateDomain`. # Create double-opt-in contact Source: https://docs.automate.ax/reference/integrations/brevo/actions/create-double-opt-in-contact Create double-opt-in contact through the Brevo API. `brevo.createDoubleOptInContact` create double-opt-in contact through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Create double-opt-in contact", () => { onDashboardRun({ title: "Create double-opt-in contact" }) brevo.createDoubleOptInContact({ email: "person@example.com", includeListIds: [12], redirectionUrl: "https://example.com/confirmed", templateId: 42, }) }) ``` ## Inputs and output Inputs: `email`, non-empty `includeListIds`, positive `templateId`, and absolute `redirectionUrl` are required. `attributes` and `excludeListIds` are optional. Completes after Brevo accepts the confirmation flow. Brevo sends the DOI template and adds the contact only after confirmation. Pass `{ account }` as the second argument to select a named Brevo account binding. # Create email campaign Source: https://docs.automate.ax/reference/integrations/brevo/actions/create-email-campaign Create email campaign through the Brevo API. `brevo.createEmailCampaign` create email campaign through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Create email campaign", () => { onDashboardRun({ title: "Create email campaign" }) brevo.createEmailCampaign({ name: "Launch", sender: { id: 7 }, subject: "We launched", htmlContent: "

See what is new.

", }) }) ``` ## Inputs and output Inputs: ```ts theme={null} { name: string sender: { id: number; name?: string } | { email: string; name?: string } subject?: string htmlContent?: string htmlUrl?: string templateId?: number recipients?: { listIds?: number[] segmentIds?: number[] exclusionListIds?: number[] exclusionSegmentIds?: number[] } scheduledAt?: string abTesting?: boolean subjectA?: string subjectB?: string splitRule?: number winnerCriteria?: "open" | "click" winnerDelay?: number sendAtBestTime?: boolean ipWarmupEnable?: boolean initialQuota?: number increaseRate?: number emailExpirationDate?: { duration: number; unit: "days" | "weeks" | "months" } attachmentUrl?: string footer?: string header?: string inlineImageActivation?: boolean mirrorActive?: boolean params?: Record previewText?: string replyTo?: string tag?: string toField?: string unsubscriptionPageId?: string updateFormId?: string utmCampaign?: string utmContent?: string utmTerm?: string } ``` IDs are positive integers; `scheduledAt` is an ISO 8601 timestamp with an offset; email and URL fields must be valid. `splitRule` is 1–50, `winnerDelay` is 1–168 hours, `initialQuota` is at least 2, and `increaseRate` is 0–100. Expiration is limited to 3,600 days, 480 weeks, or 120 months. Optional fields have no implicit default. Returns `{ id }` for the draft campaign. `name`, `sender`, and one of `htmlContent`, `htmlUrl`, or `templateId` are required. Standard campaigns require `subject`. A/B campaigns require different `subjectA` and `subjectB` values; campaigns with recipients also require `splitRule`, and rules below 50 require `winnerCriteria` and `winnerDelay`. Scheduled campaigns require recipient list or segment IDs. IP warmup requires `initialQuota` of at least 2 and `increaseRate`. Pass `{ account }` as the second argument to select a named Brevo account binding. # Create event Source: https://docs.automate.ax/reference/integrations/brevo/actions/create-event Create event through the Brevo API. `brevo.createEvent` create event through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Create event", () => { onDashboardRun({ title: "Create event" }) brevo.createEvent({ eventName: "order_created", identifiers: { emailId: "person@example.com" }, eventProperties: { orderId: "order-1", total: 49 }, }) }) ``` ## Inputs and output Inputs: `eventName` uses letters, numbers, underscores, or hyphens, and `identifiers` contains at least one contact identifier. Optional ISO `eventDate`, contact properties, event properties, and custom object data enrich the event. Completes after Brevo records the event. Provide at least one contact identifier. Event names use letters, numbers, underscores, or hyphens. Pass `{ account }` as the second argument to select a named Brevo account binding. # Create sender Source: https://docs.automate.ax/reference/integrations/brevo/actions/create-sender Create a Brevo email sender and begin verification. `brevo.createSender` create a Brevo email sender and begin verification. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Create sender", () => { onDashboardRun({ title: "Create sender" }) brevo.createSender({ name: "Example", email: "hello@example.com" }) }) ``` ## Inputs `name` and `email` are required. Optional `ips` assign dedicated IPv4 addresses. If any IP has a `weight`, every IP must and the weights must total 100. The second argument can select `{ account }`. ## Output Returns the new sender `id` and optional SPF/DKIM error flags. Brevo emails a verification code when verification is required. # Create SMS campaign Source: https://docs.automate.ax/reference/integrations/brevo/actions/create-sms-campaign Create SMS campaign through the Brevo API. `brevo.createSmsCampaign` create SMS campaign through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Create SMS campaign", () => { onDashboardRun({ title: "Create SMS campaign" }) brevo.createSmsCampaign({ name: "Launch", sender: "Example", content: "We launched!", }) }) ``` ## Inputs and output Inputs: ```ts theme={null} { name: string content: string sender: string organisationPrefix?: string recipients?: { listIds: number[] exclusionListIds?: number[] } scheduledAt?: string unicodeEnabled?: boolean unsubscribeInstruction?: string } ``` `name`, `content`, and `sender` must be non-empty; `sender` is limited to 15 characters. Recipient IDs are positive integers, `listIds` can't be empty, and `scheduledAt` is an ISO 8601 timestamp with an offset. Optional fields have no implicit default. `{ id }` for the draft campaign. A scheduled campaign also requires recipient list IDs. Brevo counts content beyond one SMS segment separately. Pass `{ account }` as the second argument to select a named Brevo account binding. # Create template Source: https://docs.automate.ax/reference/integrations/brevo/actions/create-template Create a Brevo transactional email template from inline HTML or a public URL. Set `isActive` to make the new template immediately available to `brevo.sendEmail`. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Create a receipt template", () => { onDashboardRun({ title: "Create a receipt template" }) brevo.createEmailTemplate({ templateName: "Receipt", subject: "Your receipt", sender: { email: "receipts@example.com", name: "Example" }, htmlContent: "

Thanks for your purchase.

", isActive: true, }) }) ``` ## Inputs Provide `templateName`, `subject`, and a registered `sender`. Provide exactly one inline `htmlContent` value of at least 11 characters or a public `htmlUrl`. You can also use `attachmentUrl`, `isActive`, `replyTo`, `tag`, and personalized `toField`. Second argument `{ account }` selects the Brevo binding. ## Output Returns `{ id: number }`. Creating a template doesn't send or test it and doesn't consume a transactional send credit. # Deactivate template Source: https://docs.automate.ax/reference/integrations/brevo/actions/deactivate-template Deactivate a Brevo transactional email template. `brevo.deactivateEmailTemplate` prevents new sends without deleting the template or its history. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Retire a receipt template", () => { onDashboardRun({ title: "Retire a receipt template" }) brevo.deactivateEmailTemplate({ templateId: 42 }) }) ``` Provide `templateId: number | string`. The optional second argument `{ account }` selects the Brevo binding. The action returns `Signal`. Existing sent messages and their events remain available. Sends that reference an inactive template fail. # Delete consent group Source: https://docs.automate.ax/reference/integrations/brevo/actions/delete-consent-group Delete consent group through the Brevo API. `brevo.deleteConsentGroup` delete consent group through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Delete consent group", () => { onDashboardRun({ title: "Delete consent group" }) brevo.deleteConsentGroup({ id: 4 }) }) ``` ## Inputs and output Inputs: `id` is Brevo's positive numeric consent-group ID. Completes without a value. Brevo removes the deleted group from associated contacts. Pass `{ account }` as the second argument to select a named Brevo account binding. # Delete contact Source: https://docs.automate.ax/reference/integrations/brevo/actions/delete-contact Permanently delete a Brevo contact by email, ID, phone, or external ID. `brevo.deleteContact` removes the entire contact record rather than only a subscription or list membership. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Delete a former contact", () => { onDashboardRun({ title: "Delete a former contact" }) brevo.deleteContact({ identifier: "former@example.com", identifierType: "email_id", }) }) ``` Provide `identifier: string | number`. Optional `identifierType` is one of the types on [Get contact](/reference/integrations/brevo/actions/get-contact#inputs). The optional second argument `{ account }` selects the Brevo binding. Returns `Signal` after Brevo accepts the permanent deletion. Campaign history may remain subject to Brevo retention and compliance rules. # Delete contact attribute Source: https://docs.automate.ax/reference/integrations/brevo/actions/delete-contact-attribute Delete contact attribute through the Brevo API. `brevo.deleteContactAttribute` delete contact attribute through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Delete contact attribute", () => { onDashboardRun({ title: "Delete contact attribute" }) brevo.deleteContactAttribute({ category: "normal", name: "TIER" }) }) ``` ## Inputs and output Inputs: `category` and non-empty `name` identify the attribute. Completes without a value. Deletion is permanent and removes the attribute from contacts. Pass `{ account }` as the second argument to select a named Brevo account binding. # Delete contact attribute option Source: https://docs.automate.ax/reference/integrations/brevo/actions/delete-contact-attribute-option Delete contact attribute option through the Brevo API. `brevo.deleteContactAttributeOption` delete contact attribute option through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Delete contact attribute option", () => { onDashboardRun({ title: "Delete contact attribute option" }) brevo.deleteContactAttributeOption({ attribute: "TIER", option: "Pro" }) }) ``` ## Inputs and output Inputs: non-empty `attribute` and `option` strings identify the multiple-choice value. Completes without a value. Use this only for an existing multiple-choice option. Pass `{ account }` as the second argument to select a named Brevo account binding. # Delete contact folder Source: https://docs.automate.ax/reference/integrations/brevo/actions/delete-contact-folder Delete contact folder through the Brevo API. `brevo.deleteContactFolder` delete contact folder through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Delete contact folder", () => { onDashboardRun({ title: "Delete contact folder" }) brevo.deleteContactFolder({ folderId: 8 }) }) ``` ## Inputs and output Inputs: `folderId` is Brevo's positive numeric folder ID. Completes without a value. Brevo also deletes every contact list inside the folder. Pass `{ account }` as the second argument to select a named Brevo account binding. # Delete contact list Source: https://docs.automate.ax/reference/integrations/brevo/actions/delete-contact-list Delete a Brevo contact list while preserving its contacts. `brevo.deleteContactList` removes the list and its memberships but preserves its contacts. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Delete an obsolete list", () => { onDashboardRun({ title: "Delete an obsolete list" }) brevo.deleteContactList({ list: "Obsolete" }) }) ``` Provide `list: string | number`. The optional second argument `{ account }` selects the Brevo binding. Returns `Signal`. Use `brevo.deleteContact` separately only when you want to remove the underlying contact records permanently. # Delete sending domain Source: https://docs.automate.ax/reference/integrations/brevo/actions/delete-domain Permanently delete a Brevo sending domain. `brevo.deleteDomain` permanently delete a Brevo sending domain. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Delete sending domain", () => { onDashboardRun({ title: "Delete sending domain" }) brevo.deleteDomain({ domainName: "mail.example.com" }) }) ``` ## Inputs `domainName` identifies the configured sending domain. The second argument can select `{ account }`. ## Output Returns nothing. Existing sends are not recalled. This destructive action is not replay-safe. # Delete email campaign Source: https://docs.automate.ax/reference/integrations/brevo/actions/delete-email-campaign Delete email campaign through the Brevo API. `brevo.deleteEmailCampaign` delete email campaign through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Delete email campaign", () => { onDashboardRun({ title: "Delete email campaign" }) brevo.deleteEmailCampaign({ campaignId: 42 }) }) ``` ## Inputs and output Inputs: `campaignId` is Brevo's positive numeric campaign ID. Completes without a value. The campaign must exist in the connected Brevo account. Pass `{ account }` as the second argument to select a named Brevo account binding. # Delete email logs Source: https://docs.automate.ax/reference/integrations/brevo/actions/delete-email-logs Delete Brevo transactional email logs by recipient or message ID. `brevo.deleteEmailLogs` delete Brevo transactional email logs by recipient or message ID. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Delete email logs", () => { onDashboardRun({ title: "Delete email logs" }) brevo.deleteEmailLogs({ identifier: "person@example.com", startDate: "2026-08-01", endDate: "2026-08-07", }) }) ``` ## Inputs `identifier` is a recipient email or provider message ID. Optional `startDate` and `endDate` must be supplied together. The second argument can select `{ account }`. ## Output Returns nothing. This permanently removes matching log records and does not recall delivered messages. # Delete email template Source: https://docs.automate.ax/reference/integrations/brevo/actions/delete-email-template Permanently delete a Brevo transactional email template. `brevo.deleteEmailTemplate` permanently delete a Brevo transactional email template. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Delete email template", () => { onDashboardRun({ title: "Delete email template" }) brevo.deleteEmailTemplate({ templateId: 42 }) }) ``` ## Inputs `templateId` is the positive numeric template ID. The second argument can select `{ account }`. ## Output Returns nothing. Existing sent messages remain in logs, but future sends cannot use the deleted template. # Delete hard bounces Source: https://docs.automate.ax/reference/integrations/brevo/actions/delete-hard-bounces Delete selected or all Brevo transactional hard-bounce records. `brevo.deleteHardBounces` delete selected or all Brevo transactional hard-bounce records. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Delete hard bounces", () => { onDashboardRun({ title: "Delete hard bounces" }) brevo.deleteHardBounces({ contactEmail: "person@example.com" }) }) ``` ## Inputs Choose exactly one scope: `{ all: true }`, `{ contactEmail }`, or paired `{ startDate, endDate }` values in `YYYY-MM-DD` form. The second argument can select `{ account }`. ## Output Returns nothing. This deletes bounce history; it does not guarantee future delivery. Use `{ all: true }` only when you intend an account-wide deletion. # Delete sender Source: https://docs.automate.ax/reference/integrations/brevo/actions/delete-sender Permanently delete a Brevo email sender. `brevo.deleteSender` permanently delete a Brevo email sender. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Delete sender", () => { onDashboardRun({ title: "Delete sender" }) brevo.deleteSender({ senderId: 42 }) }) ``` ## Inputs `senderId` is the positive sender ID. The second argument can select `{ account }`. ## Output Returns nothing. Templates or campaigns that reference the sender may need another sender before they can send. # Delete SMS campaign Source: https://docs.automate.ax/reference/integrations/brevo/actions/delete-sms-campaign Delete SMS campaign through the Brevo API. `brevo.deleteSmsCampaign` delete SMS campaign through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Delete SMS campaign", () => { onDashboardRun({ title: "Delete SMS campaign" }) brevo.deleteSmsCampaign({ campaignId: 21 }) }) ``` ## Inputs and output Inputs: `campaignId` is Brevo's positive numeric SMS campaign ID. Completes without a value. The campaign must exist and be an SMS campaign. Pass `{ account }` as the second argument to select a named Brevo account binding. # Export contacts Source: https://docs.automate.ax/reference/integrations/brevo/actions/export-contacts Export contacts through the Brevo API. `brevo.exportContacts` export contacts through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Export contacts", () => { onDashboardRun({ title: "Export contacts" }) brevo.exportContacts({ customContactFilter: { actionForContacts: "allContacts", listId: 12 }, exportAttributes: ["EMAIL", "FIRSTNAME"], }) }) ``` ## Inputs and output Inputs: ```ts theme={null} { customContactFilter: { actionForContacts?: "allContacts" | "subscribed" | "unsubscribed" | "unsubscribedPerList" actionForEmailCampaigns?: "openers" | "nonOpeners" | "clickers" | "nonClickers" | "unsubscribed" | "hardBounces" | "softBounces" actionForSmsCampaigns?: "hardBounces" | "softBounces" | "unsubscribed" emailCampaignId?: number listId?: number segmentId?: number smsCampaignId?: number } disableNotification?: boolean // default: false exportAttributes?: string[] exportDateInUtc?: boolean // default: false exportMandatoryAttributes?: boolean // default: true exportMetadata?: string[] exportSubscriptionStatus?: Array<"email_marketing" | "sms_marketing"> notifyUrl?: string } ``` IDs must be positive integers, array values must be non-empty strings, and `notifyUrl` must be an absolute URL. `{ processId }` for the asynchronous CSV export. Choose exactly one contact, email-campaign, or SMS-campaign action. Contact actions require `listId` or `segmentId`. Engagement email actions require `emailCampaignId`; bounce-only email actions and SMS actions can span campaigns when their ID is omitted. Pass `{ account }` as the second argument to select a named Brevo account binding. # Export email campaign recipients Source: https://docs.automate.ax/reference/integrations/brevo/actions/export-email-campaign-recipients Export email campaign recipients through the Brevo API. `brevo.exportEmailCampaignRecipients` export email campaign recipients through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Export email campaign recipients", () => { onDashboardRun({ title: "Export email campaign recipients" }) brevo.exportEmailCampaignRecipients({ campaignId: 42, recipientsType: "openers", }) }) ``` ## Inputs and output Inputs: positive `campaignId` and `recipientsType` of `all`, engagement, bounce, or unsubscribe. Optional `notifyURL` receives completion. `{ processId }` for tracking with `brevo.getProcess`. Choose all recipients or an engagement/delivery subset; `notifyURL` is optional. Pass `{ account }` as the second argument to select a named Brevo account binding. # Export SMS campaign recipients Source: https://docs.automate.ax/reference/integrations/brevo/actions/export-sms-campaign-recipients Export SMS campaign recipients through the Brevo API. `brevo.exportSmsCampaignRecipients` export SMS campaign recipients through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Export SMS campaign recipients", () => { onDashboardRun({ title: "Export SMS campaign recipients" }) brevo.exportSmsCampaignRecipients({ campaignId: 21, recipientsType: "delivered", }) }) ``` ## Inputs and output Inputs: positive `campaignId` and `recipientsType` of `all`, `delivered`, `answered`, a bounce type, or `unsubscribed`. Optional `notifyURL` receives completion. `{ processId }` for tracking with `brevo.getProcess`. Choose all, delivered, answered, bounce, or unsubscribed recipients. Pass `{ account }` as the second argument to select a named Brevo account binding. # Get account Source: https://docs.automate.ax/reference/integrations/brevo/actions/get-account Retrieve the connected Brevo account, plans, credits, and SMTP relay configuration. `brevo.getAccount` retrieve the connected Brevo account, plans, credits, and SMTP relay configuration. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Get account", () => { onDashboardRun({ title: "Get account" }) brevo.getAccount() }) ``` ## Inputs This action has no first argument. Pass `{ account }` as the second argument to select a non-default Brevo API-key binding. ## Output Returns the account identity, company profile, `organizationId`, `userId`, plan arrays, and SMTP relay state. Plan and credit availability depends on the Brevo account. # Get aggregate email report Source: https://docs.automate.ax/reference/integrations/brevo/actions/get-aggregate-email-report Retrieve aggregate Brevo transactional email statistics. `brevo.getAggregateEmailReport` retrieve aggregate Brevo transactional email statistics. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Get aggregate email report", () => { onDashboardRun({ title: "Get aggregate email report" }) brevo.getAggregateEmailReport({ days: 7 }) }) ``` ## Inputs Use `days` from 1–90 or paired `startDate` and `endDate`, never both. Optional `tag` filters the report. The second argument can select `{ account }`. ## Output Returns aggregate request, delivery, bounce, open, click, spam, invalid, block, and unsubscribe counts when Brevo reports them, plus an optional range. # Get aggregate SMS report Source: https://docs.automate.ax/reference/integrations/brevo/actions/get-aggregate-sms-report Retrieve aggregate Brevo transactional SMS statistics. `brevo.getAggregateSmsReport` retrieve aggregate Brevo transactional SMS statistics. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Get aggregate SMS report", () => { onDashboardRun({ title: "Get aggregate SMS report" }) brevo.getAggregateSmsReport({ days: 7 }) }) ``` ## Inputs Use `days` from 1–90 or paired `startDate` and `endDate`, never both. Optional `tag` filters the report. The second argument can select `{ account }`. ## Output Returns available request, accepted, delivered, bounce, rejection, reply, block, skip, and unsubscribe counts, plus an optional range. # Get consent group Source: https://docs.automate.ax/reference/integrations/brevo/actions/get-consent-group Get consent group through the Brevo API. `brevo.getConsentGroup` get consent group through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Get consent group", () => { onDashboardRun({ title: "Get consent group" }) brevo.getConsentGroup({ id: 4 }) }) ``` ## Inputs and output Inputs: `id` is Brevo's positive numeric consent-group ID. The consent group and contact count. Consent Groups is plan-gated by Brevo. Pass `{ account }` as the second argument to select a named Brevo account binding. # Get contact Source: https://docs.automate.ax/reference/integrations/brevo/actions/get-contact Retrieve one Brevo contact by email, ID, phone, or external ID. `brevo.getContact` returns a contact and optional campaign statistics for a date interval. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Load a customer", () => { onDashboardRun({ title: "Load a customer" }) brevo.getContact({ identifier: "ada@example.com", identifierType: "email_id", }) }) ``` ## Inputs Provide `identifier: string | number`. `identifierType` can be `email_id`, `contact_id`, `ext_id`, `phone_id`, `whatsapp_id`, or `landline_number_id`. Provide it when the value is ambiguous. Supply both optional inclusive dates, `startDate` and `endDate`, or neither. Second argument `{ account }` selects the Brevo binding. ## Output Returns a contact with positive numeric `id`, optional `email`, `attributes`, `createdAt`, `modifiedAt`, `listIds`, email/`SMS`/WhatsApp blacklist booleans, and optional `listUnsubscribed`, `consentGroups`, and `statistics`. Brevo returns statistics only when it has them, normally for a requested date interval. # Get contact folder Source: https://docs.automate.ax/reference/integrations/brevo/actions/get-contact-folder Get contact folder through the Brevo API. `brevo.getContactFolder` get contact folder through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Get contact folder", () => { onDashboardRun({ title: "Get contact folder" }) brevo.getContactFolder({ folderId: 8 }) }) ``` ## Inputs and output Inputs: `folderId` is Brevo's positive numeric folder ID. The folder and its subscriber counts. The input is Brevo's numeric folder ID. Pass `{ account }` as the second argument to select a named Brevo account binding. # Get contact list Source: https://docs.automate.ax/reference/integrations/brevo/actions/get-contact-list Retrieve one Brevo contact list and optional campaign statistics. `brevo.getContactList` returns list metadata for an exact name or positive ID. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Inspect the customer list", () => { onDashboardRun({ title: "Inspect the customer list" }) brevo.getContactList({ list: "Customers" }) }) ``` Provide `list: string | number`. To request campaign statistics, provide both optional inclusive dates: `startDate` and `endDate`. Second argument `{ account }` selects the Brevo binding. Returns the list fields documented by [List contact lists](/reference/integrations/brevo/actions/list-contact-lists), plus `createdAt`, optional `dynamicList`, and optional `campaignStats`. # Get contact statistics Source: https://docs.automate.ax/reference/integrations/brevo/actions/get-contact-statistics Get contact statistics through the Brevo API. `brevo.getContactStatistics` get contact statistics through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Get contact statistics", () => { onDashboardRun({ title: "Get contact statistics" }) brevo.getContactStatistics({ identifier: "person@example.com", startDate: "2026-08-01", endDate: "2026-08-26", }) }) ``` ## Inputs and output Inputs: `identifier` is an email or positive contact ID. Optional ISO `startDate` and `endDate` must appear together. Returns campaign activity grouped into sent, opened, clicked, delivered, bounce, complaint, transactional-attribute, and unsubscribe records. The unsubscribe result contains separate administrator and user arrays. Supply date bounds together; Brevo supports up to 90 days. Pass `{ account }` as the second argument to select a named Brevo account binding. # Get sending domain Source: https://docs.automate.ax/reference/integrations/brevo/actions/get-domain Retrieve a Brevo sending domain's DNS and authentication state. `brevo.getDomain` retrieve a Brevo sending domain's DNS and authentication state. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Get sending domain", () => { onDashboardRun({ title: "Get sending domain" }) brevo.getDomain({ domainName: "mail.example.com" }) }) ``` ## Inputs `domainName` must be a fully qualified domain name. The second argument can select `{ account }`. ## Output Returns `domain`, `verified`, `authenticated`, and the Brevo-code, DKIM, and DMARC records with their current status. # Get email campaign Source: https://docs.automate.ax/reference/integrations/brevo/actions/get-email-campaign Get email campaign through the Brevo API. `brevo.getEmailCampaign` get email campaign through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Get email campaign", () => { onDashboardRun({ title: "Get email campaign" }) brevo.getEmailCampaign({ campaignId: 42 }) }) ``` ## Inputs and output Inputs: positive `campaignId`; optional `statistics` selects one detail view and `excludeHtmlContent` omits the HTML body. The campaign, recipients, and requested statistics. Use `excludeHtmlContent` to avoid returning large HTML bodies. Pass `{ account }` as the second argument to select a named Brevo account binding. # Get email campaign A/B result Source: https://docs.automate.ax/reference/integrations/brevo/actions/get-email-campaign-ab-result Get email campaign A/B result through the Brevo API. `brevo.getEmailCampaignAbResult` get email campaign A/B result through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Get email campaign A/B result", () => { onDashboardRun({ title: "Get email campaign A/B result" }) brevo.getEmailCampaignAbResult({ campaignId: 42 }) }) ``` ## Inputs and output Inputs: `campaignId` is a positive numeric A/B campaign ID. Returns available winning-version state, rates, link clicks, and version statistics. Brevo can omit details before it chooses a winner. A result can be `pending`, `tie`, `notAvailable`, `A`, or `B`. Pass `{ account }` as the second argument to select a named Brevo account binding. # Get email campaign shared URL Source: https://docs.automate.ax/reference/integrations/brevo/actions/get-email-campaign-shared-url Get email campaign shared URL through the Brevo API. `brevo.getEmailCampaignSharedUrl` get email campaign shared URL through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Get email campaign shared URL", () => { onDashboardRun({ title: "Get email campaign shared URL" }) brevo.getEmailCampaignSharedUrl({ campaignId: 42 }) }) ``` ## Inputs and output Inputs: `campaignId` is a positive numeric campaign or template ID. `{ sharedUrl }` for cross-account sharing and import. Brevo supports sharing email campaigns and templates through this URL. Pass `{ account }` as the second argument to select a named Brevo account binding. # Get email content Source: https://docs.automate.ax/reference/integrations/brevo/actions/get-email-content Retrieve personalized content and event history for one sent Brevo email. `brevo.getEmailContent` returns a recipient's message body and event history by Brevo email `UUID` or send-action message ID. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Inspect a sent email", () => { onDashboardRun({ title: "Inspect a sent email" }) brevo.getEmailContent({ emailId: "" }) }) ``` ## Inputs Provide `emailId: string`. Optional second argument `{ account }` selects the Brevo binding. For non-`UUID` values, Automate.ax uses the first transactional email record matching that message ID. ## Output Returns `{ email, subject, body?, date, events, attachmentCount?, templateId? }`. Each event includes `name`, `time`, and optional `ip`, `link`, and `subject`. `templateId` may be a number, `null`, or absent. The action normalizes an absent event list to `[]` and fails if it can't resolve the message ID in the connected account's retained transactional logs. # Get email report Source: https://docs.automate.ax/reference/integrations/brevo/actions/get-email-report Retrieve daily Brevo transactional email statistics. `brevo.getEmailReport` retrieve daily Brevo transactional email statistics. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Get email report", () => { onDashboardRun({ title: "Get email report" }) brevo.getEmailReport({ days: 7, sort: "desc" }) }) ``` ## Inputs Use `days` from 1–30 or paired dates. Optional `tag` filters results. `limit` defaults to 50 (maximum 500), `offset` to 0, and `sort` to `desc`. The second argument can select `{ account }`. ## Output Returns `{ reports }`, one metrics object per date. Advance `offset` by the number of rows returned. # Get process Source: https://docs.automate.ax/reference/integrations/brevo/actions/get-process Retrieve one asynchronous Brevo process and its result metadata. `brevo.getProcess` retrieve one asynchronous Brevo process and its result metadata. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Get process", () => { onDashboardRun({ title: "Get process" }) brevo.getProcess({ processId: 123 }) }) ``` ## Inputs `processId` is the positive numeric ID returned by another Brevo operation. The second argument can select `{ account }`. ## Output Returns the process `id`, `name`, and `status`, plus an optional `exportUrl` and import-diagnostic URLs. # Get scheduled email Source: https://docs.automate.ax/reference/integrations/brevo/actions/get-scheduled-email Retrieve one scheduled Brevo email or batch. `brevo.getScheduledEmail` retrieve one scheduled Brevo email or batch. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Get scheduled email", () => { onDashboardRun({ title: "Get scheduled email" }) brevo.getScheduledEmail({ identifier: "44a78691-b608-4c6a-9c88-7599024d2c76", }) }) ``` ## Inputs `identifier` is a batch UUID or provider message ID. Optional paired dates and `status` (`processed`, `inProgress`, or `queued`) filter batch results. `limit` defaults to 50, `offset` to 0, and `sort` to `desc`. The second argument can select `{ account }`. ## Output Returns one `{ createdAt, scheduledAt, status }` record or `{ count, batches }`, depending on the identifier. # Get SMS campaign Source: https://docs.automate.ax/reference/integrations/brevo/actions/get-sms-campaign Get SMS campaign through the Brevo API. `brevo.getSmsCampaign` get SMS campaign through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Get SMS campaign", () => { onDashboardRun({ title: "Get SMS campaign" }) brevo.getSmsCampaign({ campaignId: 21 }) }) ``` ## Inputs and output Inputs: `campaignId` is Brevo's positive numeric SMS campaign ID. Returns the campaign, delivery statistics, tags, and recipient lists as `{ id?, name? }` objects. The input is Brevo's numeric SMS campaign ID. Pass `{ account }` as the second argument to select a named Brevo account binding. # Get SMS report Source: https://docs.automate.ax/reference/integrations/brevo/actions/get-sms-report Retrieve daily Brevo transactional SMS statistics. `brevo.getSmsReport` retrieve daily Brevo transactional SMS statistics. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Get SMS report", () => { onDashboardRun({ title: "Get SMS report" }) brevo.getSmsReport({ days: 7, sort: "desc" }) }) ``` ## Inputs Use `days` from 1–90 or paired dates. Optional `tag` filters results and `sort` defaults to `desc`. The second argument can select `{ account }`. ## Output Returns `{ reports }`, one available metrics object per date. # Get template Source: https://docs.automate.ax/reference/integrations/brevo/actions/get-template Retrieve one Brevo transactional email template by ID. `brevo.getEmailTemplate` returns a template's content, sender, and activation state. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Inspect a template", () => { onDashboardRun({ title: "Inspect a template" }) brevo.getEmailTemplate({ templateId: 42 }) }) ``` ## Inputs Provide `templateId: number | string`. Numbers must be positive. Strings support Brevo custom identifiers. Second argument `{ account }` selects the Brevo binding. ## Output Returns one `Template` with the shape described by [List templates](/reference/integrations/brevo/actions/list-templates#output). You can inspect an inactive template, but you must activate it before sending. # Import contacts Source: https://docs.automate.ax/reference/integrations/brevo/actions/import-contacts Import contacts through the Brevo API. `brevo.importContacts` import contacts through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Import contacts", () => { onDashboardRun({ title: "Import contacts" }) brevo.importContacts({ fileUrl: "https://example.com/contacts.csv", listIds: [12], }) }) ``` ## Inputs and output Inputs: ```ts theme={null} { fileBody?: string fileUrl?: string jsonBody?: Array<{ email?: string attributes?: Record }> listIds?: number[] newList?: { folderId: number; listName: string } consentGroupIds?: number[] disableNotification?: boolean // default: false emailBlacklist?: boolean // default: false emptyContactsAttributes?: boolean // default: false notifyUrl?: string smsBlacklist?: boolean // default: false updateExistingContacts?: boolean // default: true } ``` Provide exactly one source: `fileBody` (at most 10 MB), absolute `fileUrl`, or `jsonBody`. Provide either non-empty `listIds` or `newList`, not both. IDs must be positive integers, `listName` must be non-empty, and `notifyUrl` must be absolute. Every JSON row needs an email or attributes. Returns `{ processId }` for tracking with `brevo.getProcess`. Provide exactly one of `fileBody`, `fileUrl`, or `jsonBody`, and either existing `listIds` or `newList`. Each JSON row needs an email or provider-recognized attributes, allowing SMS-only contacts. By default, Brevo updates existing contacts, keeps contacts unblocked, and sends import notifications. Pass `{ account }` as the second argument to select a named Brevo account binding. # List account activity Source: https://docs.automate.ax/reference/integrations/brevo/actions/list-account-activity List Brevo security and configuration activity. `brevo.listAccountActivity` list Brevo security and configuration activity. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("List account activity", () => { onDashboardRun({ title: "List account activity" }) brevo.listAccountActivity({ startDate: "2026-08-01", endDate: "2026-08-07" }) }) ``` ## Inputs `limit` defaults to 50 and accepts up to 500; `offset` defaults to 0. Filter by `userEmail`. Provide both `startDate` and `endDate` in `YYYY-MM-DD` form or neither. A range can span at most one month and must fall within the preceding 12 months. This endpoint requires a Brevo Enterprise plan. The second argument can select `{ account }`. ## Output Returns `{ logs }`. Each log includes `action`, `date`, `userAgent`, `userEmail`, and `userIp`. Advance `offset` by the number of rows returned. # List blocked contacts Source: https://docs.automate.ax/reference/integrations/brevo/actions/list-blocked-contacts List contacts blocked from Brevo transactional email. `brevo.listBlockedContacts` list contacts blocked from Brevo transactional email. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("List blocked contacts", () => { onDashboardRun({ title: "List blocked contacts" }) brevo.listBlockedContacts({ startDate: "2026-08-01", endDate: "2026-08-07" }) }) ``` ## Inputs Filter with paired `startDate` and `endDate`, or a non-empty `senders` email array. `limit` defaults to 50 (maximum 100), `offset` to 0, and `sort` to `desc`. The second argument can select `{ account }`. ## Output Returns `{ count, contacts }`. Each contact includes its email, block time, reason, and nullable sender email. # List blocked email domains Source: https://docs.automate.ax/reference/integrations/brevo/actions/list-blocked-email-domains List domains blocked from Brevo transactional email. `brevo.listBlockedEmailDomains` list domains blocked from Brevo transactional email. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("List blocked email domains", () => { onDashboardRun({ title: "List blocked email domains" }) brevo.listBlockedEmailDomains() }) ``` ## Inputs This action has no first argument. Pass `{ account }` as the second argument to select a non-default Brevo binding. ## Output Returns `{ domains: string[] }`. The block applies to recipient domains for transactional email. # List consent groups Source: https://docs.automate.ax/reference/integrations/brevo/actions/list-consent-groups List consent groups through the Brevo API. `brevo.listConsentGroups` list consent groups through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("List consent groups", () => { onDashboardRun({ title: "List consent groups" }) brevo.listConsentGroups({ signupMode: "manual" }) }) ``` ## Inputs and output Inputs: optional positive `id`, non-empty `name`, and `signupMode` of `manual` or `automatic`. `limit` defaults to 10 with a maximum of 50; `offset` defaults to 0. Pagination metadata and matching consent groups. Consent Groups is plan-gated by Brevo. Pass `{ account }` as the second argument to select a named Brevo account binding. # List contact attributes Source: https://docs.automate.ax/reference/integrations/brevo/actions/list-contact-attributes List contact attributes through the Brevo API. `brevo.listContactAttributes` list contact attributes through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("List contact attributes", () => { onDashboardRun({ title: "List contact attributes" }) brevo.listContactAttributes({}) }) ``` ## Inputs and output Inputs: none. `{ attributes }` with each configured attribute, category, type, and options. Use it before writing attribute values or changing category options. Pass `{ account }` as the second argument to select a named Brevo account binding. # List contact folder lists Source: https://docs.automate.ax/reference/integrations/brevo/actions/list-contact-folder-lists List contact folder lists through the Brevo API. `brevo.listContactFolderLists` list contact folder lists through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("List contact folder lists", () => { onDashboardRun({ title: "List contact folder lists" }) brevo.listContactFolderLists({ folderId: 8, limit: 20 }) }) ``` ## Inputs and output Inputs: positive `folderId`; `limit` defaults to 10, `offset` to 0, and `sort` to `desc`. `{ count, lists }` for the selected folder. Use offset pagination for large folders. Pass `{ account }` as the second argument to select a named Brevo account binding. # List contact folders Source: https://docs.automate.ax/reference/integrations/brevo/actions/list-contact-folders List contact folders through the Brevo API. `brevo.listContactFolders` list contact folders through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("List contact folders", () => { onDashboardRun({ title: "List contact folders" }) brevo.listContactFolders({ limit: 20 }) }) ``` ## Inputs and output Inputs: `limit` is 0–50 and defaults to 10, `offset` defaults to 0, and `sort` defaults to `desc`. `{ count, folders }` with subscriber totals. Use `offset`, `limit`, and `sort` for pagination. Pass `{ account }` as the second argument to select a named Brevo account binding. # List contact lists Source: https://docs.automate.ax/reference/integrations/brevo/actions/list-contact-lists List contact lists in a Brevo account. `brevo.listContactLists` returns a page of lists and membership counts. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Inventory contact lists", () => { onDashboardRun({ title: "Inventory contact lists" }) brevo.listContactLists({ limit: 50, sort: "asc" }) }) ``` `limit` defaults to 10 and accepts up to 50. `offset` defaults to 0, and `sort` defaults to `desc`. Second argument `{ account }` selects the Brevo binding. Returns `{ count, lists }`. Each list has positive numeric `id` and `folderId`, `name`, `uniqueSubscribers`, and optional `totalSubscribers` and `totalBlacklisted`. Use the ID for stable follow-up references. The action also accepts exact names but fails when they're duplicated. # List contact segments Source: https://docs.automate.ax/reference/integrations/brevo/actions/list-contact-segments List contact segments through the Brevo API. `brevo.listContactSegments` list contact segments through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("List contact segments", () => { onDashboardRun({ title: "List contact segments" }) brevo.listContactSegments({ limit: 20 }) }) ``` ## Inputs and output Inputs: `limit` defaults to 10, `offset` to 0, and `sort` to `desc`. `{ count, segments }` with segment and category names. Segments are read-only through this Brevo API surface. Pass `{ account }` as the second argument to select a named Brevo account binding. # List contacts Source: https://docs.automate.ax/reference/integrations/brevo/actions/list-contacts List filtered Brevo contacts with offset pagination. `brevo.listContacts` returns one page of contacts from the account. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("List recent customers", () => { onDashboardRun({ title: "List recent customers" }) brevo.listContacts({ lists: ["Customers"], limit: 250, sort: "desc" }) }) ``` ## Inputs `limit` defaults to 50 and accepts up to 1,000. `offset` defaults to 0, and `sort` defaults to `desc`. Optional filters are `RFC 3339` `createdSince` and `modifiedSince`, a Brevo attribute `filter` expression, up to 20 positive contact `ids`, list names/IDs, or positive `segmentId`. Don't combine lists and segment. Second argument `{ account }` selects the Brevo binding. ## Output Returns `{ count: number; contacts: Contact[] }`. See [Get contact](/reference/integrations/brevo/actions/get-contact#output). `count` is the matching total. Increment `offset` by the number returned to continue. Filtering by list name requires a list lookup before the contact query. # List contacts in list Source: https://docs.automate.ax/reference/integrations/brevo/actions/list-contacts-in-list List contacts in a Brevo contact list. `brevo.listContactsInList` returns one page of a list's contacts. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("List launch contacts", () => { onDashboardRun({ title: "List launch contacts" }) brevo.listContactsInList({ list: "2026 Launch", limit: 200 }) }) ``` Provide `list`. `limit` defaults to 50 and accepts up to 500. `offset` defaults to 0, and `sort` defaults to `desc`. Optional `modifiedSince` filters by an `RFC 3339` timestamp. Second argument `{ account }` selects the Brevo binding. Returns `{ count, contacts }`. Each contact has the shape from [Get contact](/reference/integrations/brevo/actions/get-contact#output). Advance `offset` to page. # List sending domains Source: https://docs.automate.ax/reference/integrations/brevo/actions/list-domains List sending domains configured in Brevo. `brevo.listDomains` list sending domains configured in Brevo. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("List sending domains", () => { onDashboardRun({ title: "List sending domains" }) brevo.listDomains() }) ``` ## Inputs This action has no first argument. Pass `{ account }` as the second argument to select a non-default Brevo binding. ## Output Returns page metadata and `domains`. Each domain includes its provider, creator, verification state, authentication state, and optional dedicated IP. # List email campaigns Source: https://docs.automate.ax/reference/integrations/brevo/actions/list-email-campaigns List email campaigns through the Brevo API. `brevo.listEmailCampaigns` list email campaigns through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("List email campaigns", () => { onDashboardRun({ title: "List email campaigns" }) brevo.listEmailCampaigns({ status: "draft", limit: 50 }) }) ``` ## Inputs and output Inputs: optional `type`, `status`, statistics view, date range, and HTML/PDF exclusion flags. `limit` defaults to 500 with a maximum of 1,000; `offset` defaults to 0 and `sort` to `desc`. Returns `{ campaigns, count }` with recipients and statistics. `limit` defaults to 500, `offset` to 0, and `sort` to `desc`. Supply `startDate` and `endDate` together; the range can't be in the future or exceed two years, and it requires `status: "sent"` or no status. Pass `{ account }` as the second argument to select a named Brevo account binding. # List email events Source: https://docs.automate.ax/reference/integrations/brevo/actions/list-email-events List filtered Brevo transactional email delivery and engagement events. `brevo.listEmailEvents` queries Brevo's transactional event log with offset pagination. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("List recent bounces", () => { onDashboardRun({ title: "List recent bounces" }) brevo.listEmailEvents({ days: 7, event: "hardBounces", limit: 500, tags: ["welcome"], }) }) ``` ## Inputs `limit` defaults to 250 and accepts up to 5,000. `offset` defaults to 0, and `sort` defaults to `desc`. Filter by recipient `email`, `messageId`, a non-empty `tags` array, or positive `templateId`. `event` accepts `bounces`, `hardBounces`, `softBounces`, `delivered`, `spam`, `requests`, `opened`, `clicks`, `invalid`, `deferred`, `blocked`, `unsubscribed`, `error`, or `loadedByProxy`. For time, use `days` from 1–90 or provide both inclusive `startDate` and `endDate` in `YYYY-MM-DD` form, never both approaches. Second argument `{ account }` selects the Brevo binding. ## Output Returns `{ events: EmailEvent[] }`. Each event has `date`, `email`, `event`, `messageId`, and optional `from`, `reason`, `tag`, and `templateId`. There is no total count or next token. Advance `offset` by the number returned. Event filters use Brevo API names, not trigger helper names. # List email logs Source: https://docs.automate.ax/reference/integrations/brevo/actions/list-email-logs List Brevo transactional email records by recipient, template, or message. `brevo.listEmailLogs` list Brevo transactional email records by recipient, template, or message. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("List email logs", () => { onDashboardRun({ title: "List email logs" }) brevo.listEmailLogs({ email: "person@example.com", limit: 100 }) }) ``` ## Inputs Provide at least one of `email`, `messageId`, or positive `templateId`. Optional dates must be paired. `limit` defaults to 50 (maximum 500), `offset` to 0, and `sort` to `desc`. The second argument can select `{ account }`. ## Output Returns `{ count, emails }`. Each row includes its UUID, provider message ID, recipient, subject, date, and optional sender, tags, and template ID. # List events Source: https://docs.automate.ax/reference/integrations/brevo/actions/list-events List events through the Brevo API. `brevo.listEvents` list events through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("List events", () => { onDashboardRun({ title: "List events" }) brevo.listEvents({ eventNames: ["order_created"], limit: 100 }) }) ``` ## Inputs and output Inputs: optional arrays of positive `contactIds`, event names, and object types, plus paired ISO date filters. `limit` defaults to 100 with a maximum of 10,000; `offset` defaults to 0. `{ count, events }` with normalized camelCase fields. Filter by contact IDs, event names, object types, or a paired date range. Pass `{ account }` as the second argument to select a named Brevo account binding. # List dedicated IP addresses Source: https://docs.automate.ax/reference/integrations/brevo/actions/list-ips List dedicated sending IP addresses available in a Brevo account. `brevo.listIps` lists dedicated sending IP addresses available in a Brevo account. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("List dedicated IP addresses", () => { onDashboardRun({ title: "List dedicated IP addresses" }) brevo.listIps() }) ``` ## Inputs This action has no first argument. Pass `{ account }` as the second argument to select a non-default Brevo binding. ## Output Returns `{ ips }`. Each entry includes `id`, IPv4 `ip`, associated `domain`, and active state. # List processes Source: https://docs.automate.ax/reference/integrations/brevo/actions/list-processes List asynchronous Brevo imports, exports, and campaign processes. `brevo.listProcesses` list asynchronous Brevo imports, exports, and campaign processes. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("List processes", () => { onDashboardRun({ title: "List processes" }) brevo.listProcesses({ limit: 50, sort: "desc" }) }) ``` ## Inputs `limit` defaults to 50 and accepts up to 50. `offset` defaults to 0 and `sort` defaults to `desc`. The second argument can select `{ account }`. ## Output Returns `{ count, processes }`. Each process includes `id`, `name`, `status`, and optional `exportUrl` or import-diagnostic URLs. # List sender IP addresses Source: https://docs.automate.ax/reference/integrations/brevo/actions/list-sender-ips List dedicated IP addresses assigned to one Brevo sender. `brevo.listSenderIps` lists dedicated IP addresses assigned to one Brevo sender. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("List sender IP addresses", () => { onDashboardRun({ title: "List sender IP addresses" }) brevo.listSenderIps({ senderId: 42 }) }) ``` ## Inputs `senderId` is the positive sender ID. The second argument can select `{ account }`. ## Output Returns `{ ips }`. Each assignment includes the IP ID, address, domain, and traffic `weight`. # List senders Source: https://docs.automate.ax/reference/integrations/brevo/actions/list-senders List configured Brevo email senders. `brevo.listSenders` list configured Brevo email senders. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("List senders", () => { onDashboardRun({ title: "List senders" }) brevo.listSenders({ domain: "example.com" }) }) ``` ## Inputs Filter by optional sending `domain` or dedicated IPv4 `ip`. The second argument can select `{ account }`. ## Output Returns `{ senders }`. Each sender includes its ID, name, email, active state, and weighted dedicated-IP assignments. # List SMS campaigns Source: https://docs.automate.ax/reference/integrations/brevo/actions/list-sms-campaigns List SMS campaigns through the Brevo API. `brevo.listSmsCampaigns` list SMS campaigns through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("List SMS campaigns", () => { onDashboardRun({ title: "List SMS campaigns" }) brevo.listSmsCampaigns({ status: "draft", limit: 50 }) }) ``` ## Inputs and output Inputs: optional status and paired ISO date filters. `limit` defaults to 500 with a maximum of 1,000; `offset` defaults to 0 and `sort` to `desc`. Returns `{ campaigns, count }` with recipients and SMS statistics. `limit` defaults to 500, `offset` to 0, and `sort` to `desc`. Supply `startDate` and `endDate` together; the range can't be in the future, and it requires `status: "sent"` or no status. Pass `{ account }` as the second argument to select a named Brevo account binding. # List SMS events Source: https://docs.automate.ax/reference/integrations/brevo/actions/list-sms-events List filtered Brevo transactional SMS delivery and reply events. `brevo.listSmsEvents` list filtered Brevo transactional SMS delivery and reply events. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("List SMS events", () => { onDashboardRun({ title: "List SMS events" }) brevo.listSmsEvents({ days: 7, tags: ["booking"] }) }) ``` ## Inputs Use `days` from 1–90 or paired dates. Filter by `event`, `phoneNumber`, or `tags`. `limit` defaults to 50 (maximum 100), `offset` to 0, and `sort` to `desc`. The second argument can select `{ account }`. ## Output Returns `{ events }`. Each event can include date, event type, message ID, phone number, reason, reply, and tag. # List templates Source: https://docs.automate.ax/reference/integrations/brevo/actions/list-templates List Brevo transactional email templates with filters and offset pagination. `brevo.listEmailTemplates` returns a page of templates with current content and status. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("List active templates", () => { onDashboardRun({ title: "List active templates" }) brevo.listEmailTemplates({ templateStatus: true, limit: 100 }) }) ``` ## Inputs `limit` defaults to 50 and accepts up to 1,000. `offset` defaults to 0, and `sort` defaults to `desc`. `templateStatus` filters active templates when `true` or inactive templates when `false`. `editorType: "richTextEditor"` restricts editor type. Second argument `{ account }` selects the Brevo binding. ## Output Returns `{ count: number; templates: Template[] }`. Each template includes numeric `id`, `name`, `subject`, `htmlContent`, `isActive`, timestamps, sender email and optional ID/name, plus optional `replyTo`, `tag`, `testSent`, and `toField`. `count` is the provider's matching total. Use `offset` to page. # Preview email template Source: https://docs.automate.ax/reference/integrations/brevo/actions/preview-email-template Render a Brevo transactional email template with resolved variables. `brevo.previewEmailTemplate` render a Brevo transactional email template with resolved variables. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Preview email template", () => { onDashboardRun({ title: "Preview email template" }) brevo.previewEmailTemplate({ templateId: 42, params: { name: "Ada" } }) }) ``` ## Inputs `templateId` accepts a positive numeric or non-empty custom ID. Provide a contact `email`, explicit `params`, or both. The second argument can select `{ account }`. ## Output Returns the rendered HTML and optional subject, sender identity, preview text, and feed names. It does not send email. # Remove contacts from list Source: https://docs.automate.ax/reference/integrations/brevo/actions/remove-contacts-from-list Remove existing Brevo contacts from a contact list. `brevo.removeContactsFromList` removes memberships without deleting contacts. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Remove launch contacts", () => { onDashboardRun({ title: "Remove launch contacts" }) brevo.removeContactsFromList({ list: "2026 Launch", emails: ["ada@example.com", "grace@example.com"], }) }) ``` Provide `list: string | number` and a non-empty `emails` array. Second argument `{ account }` selects the Brevo binding. Returns `{ success: string[]; failure: string[] }`. Contacts remain in the Brevo account and in any other lists. Inspect `failure` for addresses Brevo didn't remove. # Send email Source: https://docs.automate.ax/reference/integrations/brevo/actions/send-email Send or schedule a transactional email through Brevo. `brevo.sendEmail` sends inline content or an active template. Message versions let recipients use different content, parameters, or templates in one request. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Send a welcome email", () => { onDashboardRun({ title: "Send a welcome email" }) brevo.sendEmail({ sender: { email: "hello@example.com", name: "Example" }, to: [{ email: "ada@example.com", name: "Ada" }], subject: "Welcome", markdown: "# Welcome\n\nThanks for joining **Example**.", replyTo: { email: "support@example.com" }, tags: ["welcome"], }) }) ``` ## Inputs For inline email, provide `sender`, `subject`, `to`, and at least one of `text`, `markdown`, or `html`. Automate.ax preserves supplied plain-text and HTML bodies. Markdown generates either missing alternative. Otherwise, HTML generates plain text, and plain text generates HTML. Use a sender in the form `{ email, name? }` or `{ id, name? }` that you've registered in Brevo. With `templateId`, the template can supply sender, subject, and content. `to`, `cc`, and `bcc` contain `{ email, name?, contactPixelTrackingConsent? }`. Set `contactPixelTrackingConsent` when the recipient has explicitly granted or denied identified pixel tracking. Provide `to` unless `messageVersions` is present. Optional fields include `params: Record`, `replyTo`, custom string/number `headers`, `tags`, `RFC 3339` `scheduledAt`, `UUID` `batchId`, and attachments. An attachment is `{ content: string; name: string }` with base64 content or `{ url: string; name?: string }` with a public URL. Each message version requires 1–99 `to` recipients and can override `bcc`, `cc`, `text`, `markdown`, `html`, `params`, `replyTo`, `subject`, and `templateId`. Body overrides use the same derivation rules. All versions together support at most 2,000 recipients. Second argument `{ account }` selects the Brevo binding. ## Output Returns `{ messageId: string }` for a normal send or `{ messageIds: string[] }` for a multi-version send. Use those IDs with [Get email content](/reference/integrations/brevo/actions/get-email-content) or event filters. Brevo charges the connected account per recipient, including version recipients. Scheduling doesn't bypass plan limits. Success means Brevo accepted the request, not that the recipient mail server delivered it. Use the delivery triggers to track delivery. # Send email campaign now Source: https://docs.automate.ax/reference/integrations/brevo/actions/send-email-campaign-now Send email campaign now through the Brevo API. `brevo.sendEmailCampaignNow` send email campaign now through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Send email campaign now", () => { onDashboardRun({ title: "Send email campaign now" }) brevo.sendEmailCampaignNow({ campaignId: 42 }) }) ``` ## Inputs and output Inputs: `campaignId` is Brevo's positive numeric campaign ID. Completes after Brevo schedules the send. This spends email credits and sends to the campaign's configured recipients. Pass `{ account }` as the second argument to select a named Brevo account binding. # Send email campaign report Source: https://docs.automate.ax/reference/integrations/brevo/actions/send-email-campaign-report Send email campaign report through the Brevo API. `brevo.sendEmailCampaignReport` send email campaign report through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Send email campaign report", () => { onDashboardRun({ title: "Send email campaign report" }) brevo.sendEmailCampaignReport({ campaignId: 42, language: "en", email: { body: "Attached report", to: ["owner@example.com"] }, }) }) ``` ## Inputs and output Inputs: positive `campaignId`, `email.body`, and a non-empty `email.to` array. `language` defaults to `fr`. Completes after Brevo emails the PDF report. Supported report languages are `fr`, `es`, `pt`, `it`, `de`, and `en`. Pass `{ account }` as the second argument to select a named Brevo account binding. # Send email campaign test Source: https://docs.automate.ax/reference/integrations/brevo/actions/send-email-campaign-test Send email campaign test through the Brevo API. `brevo.sendEmailCampaignTest` send email campaign test through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Send email campaign test", () => { onDashboardRun({ title: "Send email campaign test" }) brevo.sendEmailCampaignTest({ campaignId: 42, emailTo: ["test@example.com"] }) }) ``` ## Inputs and output Inputs: positive `campaignId`; `emailTo` accepts up to 50 valid emails and defaults to an empty array. Completes after Brevo accepts the test. An empty `emailTo` uses the Brevo test list. Brevo limits test volume. Pass `{ account }` as the second argument to select a named Brevo account binding. # Send text message Source: https://docs.automate.ax/reference/integrations/brevo/actions/send-sms Send a transactional or opt-out-aware marketing text message through Brevo. `brevo.sendSms` sends one text message with an optional delivery webhook. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Send an appointment reminder", () => { onDashboardRun({ title: "Send an appointment reminder" }) brevo.sendSms({ sender: "Example", recipient: "+33689965433", content: "Your appointment is tomorrow at 10:00.", tags: ["appointments"], }) }) ``` ## Inputs | Property | Type | Required | Default | Description | | - | - | - | - | - | | `sender` | `string` | Yes | None | Up to 11 letters/digits or 15 digits. Availability varies by destination. | | `recipient` | `string` | Yes | None | 6–15 digit phone number, normally with country code and optional `+`. | | `content` | `string` | Conditional | None | Non-empty message body. Required without `templateId`; ignored when a template is used. | | `templateId` | `number` | Conditional | None | Positive SMS template ID. Required without `content`. | | `params` | `Record` | No | None | Template variables used with `templateId`. | | `type` | `"transactional" \| "marketing"` | No | `"transactional"` | Message classification. Marketing content must follow applicable opt-out rules. | | `unicodeEnabled` | `boolean` | No | `false` | Enable Unicode content. | | `organizationPrefix` | `string` | No | None | Brand prefix prepended by Brevo. | | `tags` | `string \| string[]` | No | None | One or up to ten reporting tags. | | `webhookUrl` | `string` | No | None | Public URL for text-message delivery callbacks. | | Second argument: `{ account }` | Brevo account reference | No | Project default | API-key binding to use. | ## Output Returns `{ messageId, reference, remainingCredits?, smsCount?, usedCredits? }`. The action converts numeric provider IDs to strings. Use `reference` to correlate later delivery events. Brevo charges `SMS` credits per segment, not per action call. Long content, the organization prefix, and Unicode can create multiple segments. Sender rules, marketing restrictions, and delivery availability vary by country. # Send SMS asynchronously Source: https://docs.automate.ax/reference/integrations/brevo/actions/send-sms-async Queue a Brevo SMS without waiting for credit details. `brevo.sendSmsAsync` queue a Brevo SMS without waiting for credit details. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Send SMS asynchronously", () => { onDashboardRun({ title: "Send SMS asynchronously" }) brevo.sendSmsAsync({ sender: "Example", recipient: "+33689965433", content: "Confirmed", }) }) ``` ## Inputs `sender` and `recipient` are required. Provide non-empty `content` or a positive `templateId`; a template overrides supplied content. Use `params: Record` for template variables. `type` defaults to `transactional`; `unicodeEnabled` defaults to `false`. Optional fields are `organizationPrefix`, one or more `tags`, and `webhookUrl`. The second argument can select `{ account }`. ## Output Returns `{ messageId: string }`. Brevo accepts the request asynchronously, so delivery outcome arrives later through events or webhooks. # Send SMS campaign now Source: https://docs.automate.ax/reference/integrations/brevo/actions/send-sms-campaign-now Send SMS campaign now through the Brevo API. `brevo.sendSmsCampaignNow` send SMS campaign now through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Send SMS campaign now", () => { onDashboardRun({ title: "Send SMS campaign now" }) brevo.sendSmsCampaignNow({ campaignId: 21 }) }) ``` ## Inputs and output Inputs: `campaignId` is Brevo's positive numeric SMS campaign ID. Completes after Brevo schedules the send. This spends SMS credits and sends to configured recipients. Pass `{ account }` as the second argument to select a named Brevo account binding. # Send SMS campaign report Source: https://docs.automate.ax/reference/integrations/brevo/actions/send-sms-campaign-report Send SMS campaign report through the Brevo API. `brevo.sendSmsCampaignReport` send SMS campaign report through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Send SMS campaign report", () => { onDashboardRun({ title: "Send SMS campaign report" }) brevo.sendSmsCampaignReport({ campaignId: 21, language: "en", email: { body: "Attached report", to: ["owner@example.com"] }, }) }) ``` ## Inputs and output Inputs: positive `campaignId`, `email.body`, and a non-empty `email.to` array. `language` defaults to `fr`. Completes after Brevo emails the PDF report. Reports are available for sent and archived campaigns. Pass `{ account }` as the second argument to select a named Brevo account binding. # Send SMS campaign test Source: https://docs.automate.ax/reference/integrations/brevo/actions/send-sms-campaign-test Send SMS campaign test through the Brevo API. `brevo.sendSmsCampaignTest` send SMS campaign test through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Send SMS campaign test", () => { onDashboardRun({ title: "Send SMS campaign test" }) brevo.sendSmsCampaignTest({ campaignId: 21, phoneNumber: "33689965433" }) }) ``` ## Inputs and output Inputs: positive `campaignId` and a digits-only `phoneNumber` including country code. Completes after Brevo accepts the test. The number must include its country code, belong to an existing contact, and not be blocked. Pass `{ account }` as the second argument to select a named Brevo account binding. # Send test email template Source: https://docs.automate.ax/reference/integrations/brevo/actions/send-test-email-template Send a Brevo transactional template to test recipients. `brevo.sendTestEmailTemplate` send a Brevo transactional template to test recipients. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Send test email template", () => { onDashboardRun({ title: "Send test email template" }) brevo.sendTestEmailTemplate({ templateId: 42, recipients: ["test@example.com"], }) }) ``` ## Inputs `templateId` is required. Optional `recipients` is a non-empty email array; omit it to use Brevo's configured test list. The second argument can select `{ account }`. ## Output Returns nothing. This creates real test deliveries and is not replay-safe. # Unblock contact Source: https://docs.automate.ax/reference/integrations/brevo/actions/unblock-contact Remove a contact from Brevo's transactional email blocklist. `brevo.unblockContact` remove a contact from Brevo's transactional email blocklist. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Unblock contact", () => { onDashboardRun({ title: "Unblock contact" }) brevo.unblockContact({ email: "person@example.com" }) }) ``` ## Inputs `email` is the blocked recipient to restore. The second argument can select `{ account }`. ## Output Returns nothing. This affects transactional-email suppression; it does not change marketing consent or list membership. # Unblock email domain Source: https://docs.automate.ax/reference/integrations/brevo/actions/unblock-email-domain Remove a recipient domain from Brevo's transactional email blocklist. `brevo.unblockEmailDomain` remove a recipient domain from Brevo's transactional email blocklist. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Unblock email domain", () => { onDashboardRun({ title: "Unblock email domain" }) brevo.unblockEmailDomain({ domain: "blocked.example.com" }) }) ``` ## Inputs `domain` must be a fully qualified domain. The second argument can select `{ account }`. ## Output Returns nothing. This does not unblock individual contacts that remain suppressed for another reason. # Update consent group Source: https://docs.automate.ax/reference/integrations/brevo/actions/update-consent-group Update consent group through the Brevo API. `brevo.updateConsentGroup` update consent group through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Update consent group", () => { onDashboardRun({ title: "Update consent group" }) brevo.updateConsentGroup({ id: 4, name: "Product news" }) }) ``` ## Inputs and output Inputs: positive `id` plus at least one of `name`, `description`, or `signupMode`. The updated consent group. Provide at least one of `name`, `description`, or `signupMode`. Pass `{ account }` as the second argument to select a named Brevo account binding. # Update contact attribute Source: https://docs.automate.ax/reference/integrations/brevo/actions/update-contact-attribute Update contact attribute through the Brevo API. `brevo.updateContactAttribute` update contact attribute through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Update contact attribute", () => { onDashboardRun({ title: "Update contact attribute" }) brevo.updateContactAttribute({ category: "category", name: "TIER", enumeration: [{ label: "Pro", value: 1 }], }) }) ``` ## Inputs and output Inputs: ```ts theme={null} { category: "normal" | "category" | "calculated" | "global" name: string enumeration?: Array<{ label: string; value: number }> multiCategoryOptions?: string[] value?: string } ``` `name` must be non-empty. Provide at least one of `enumeration`, `multiCategoryOptions`, or `value`. Enumeration labels and multi-category options are limited to 200 characters. Optional fields have no implicit default. Completes without a value. Transactional attributes cannot be updated through this endpoint. Pass `{ account }` as the second argument to select a named Brevo account binding. # Update contact folder Source: https://docs.automate.ax/reference/integrations/brevo/actions/update-contact-folder Update contact folder through the Brevo API. `brevo.updateContactFolder` update contact folder through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Update contact folder", () => { onDashboardRun({ title: "Update contact folder" }) brevo.updateContactFolder({ folderId: 8, name: "VIP customers" }) }) ``` ## Inputs and output Inputs: positive `folderId` and non-empty `name`. Completes without a value. This action renames the folder. Pass `{ account }` as the second argument to select a named Brevo account binding. # Update contact list Source: https://docs.automate.ax/reference/integrations/brevo/actions/update-contact-list Rename or move a Brevo contact list. `brevo.updateContactList` changes a list's name, parent folder, or both without changing its contact memberships. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Archive a contact list", () => { onDashboardRun({ title: "Archive a contact list" }) brevo.updateContactList({ list: "2026 Launch", folder: "Archive" }) }) ``` Provide `list: string | number` and a new non-empty `name`, a target folder name/ID, or both. Second argument `{ account }` selects the Brevo binding. Names resolve by case-insensitive exact match and must be unambiguous. Returns `Signal` after Brevo accepts the update. # Update contacts batch Source: https://docs.automate.ax/reference/integrations/brevo/actions/update-contacts-batch Update contacts batch through the Brevo API. `brevo.updateContactsBatch` update contacts batch through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Update contacts batch", () => { onDashboardRun({ title: "Update contacts batch" }) brevo.updateContactsBatch({ contacts: [{ email: "person@example.com", attributes: { TIER: "Pro" } }], }) }) ``` ## Inputs and output Inputs: ```ts theme={null} { contacts: Array<{ email?: string id?: number sms?: string extId?: string attributes?: Record emailBlacklisted?: boolean smsBlacklisted?: boolean smtpBlacklistSender?: string[] listIds?: number[] unlinkListIds?: number[] }> } ``` `contacts` can't be empty. Each contact needs exactly one of `email`, positive numeric `id`, or non-empty `sms`. Attribute names and `extId` must be non-empty, sender entries must be email addresses, and list IDs must be positive integers. Optional fields have no implicit default. Completes without a value. Each contact must use exactly one identifier: `email`, numeric `id`, or `sms`. Pass `{ account }` as the second argument to select a named Brevo account binding. # Update email campaign Source: https://docs.automate.ax/reference/integrations/brevo/actions/update-email-campaign Update email campaign through the Brevo API. `brevo.updateEmailCampaign` update email campaign through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Update email campaign", () => { onDashboardRun({ title: "Update email campaign" }) brevo.updateEmailCampaign({ campaignId: 42, subject: "Updated launch" }) }) ``` ## Inputs and output Inputs: ```ts theme={null} { campaignId: number recurring?: boolean name?: string sender?: { id: number; name?: string } | { email: string; name?: string } subject?: string htmlContent?: string htmlUrl?: string templateId?: number recipients?: { listIds?: number[] segmentIds?: number[] exclusionListIds?: number[] exclusionSegmentIds?: number[] } scheduledAt?: string abTesting?: boolean subjectA?: string subjectB?: string splitRule?: number winnerCriteria?: "open" | "click" winnerDelay?: number sendAtBestTime?: boolean ipWarmupEnable?: boolean initialQuota?: number increaseRate?: number emailExpirationDate?: { duration: number; unit: "days" | "weeks" | "months" } attachmentUrl?: string footer?: string header?: string inlineImageActivation?: boolean mirrorActive?: boolean params?: Record previewText?: string replyTo?: string tag?: string toField?: string unsubscriptionPageId?: string updateFormId?: string utmCampaign?: string utmContent?: string utmTerm?: string } ``` `campaignId` and other IDs are positive integers; `scheduledAt` is an ISO 8601 timestamp with an offset; email and URL fields must be valid. `splitRule` is 1–50, `winnerDelay` is 1–168 hours, `initialQuota` is at least 2, and `increaseRate` is 0–100. Expiration is limited to 3,600 days, 480 weeks, or 120 months. Optional fields have no implicit default. Completes without a value. Provide `campaignId` and the fields to change. Content sources remain mutually exclusive. A/B testing can't use best-time sending and follows the same subject, split, and winner requirements as creation. `recurring` controls repeat delivery for trigger campaigns. IP warmup requires both `initialQuota` and `increaseRate`. Pass `{ account }` as the second argument to select a named Brevo account binding. # Update email campaign status Source: https://docs.automate.ax/reference/integrations/brevo/actions/update-email-campaign-status Update email campaign status through the Brevo API. `brevo.updateEmailCampaignStatus` update email campaign status through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Update email campaign status", () => { onDashboardRun({ title: "Update email campaign status" }) brevo.updateEmailCampaignStatus({ campaignId: 42, status: "archive" }) }) ``` ## Inputs and output Inputs: positive `campaignId` and a Brevo status command such as `archive`, `darchive`, `replicate`, `cancel`, `queued`, or `draft`. Completes without a value. Status commands include archive, unarchive, replicate, cancel, queue, and draft operations. Pass `{ account }` as the second argument to select a named Brevo account binding. # Update sender Source: https://docs.automate.ax/reference/integrations/brevo/actions/update-sender Update a Brevo sender and its dedicated-IP assignments. `brevo.updateSender` update a Brevo sender and its dedicated-IP assignments. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Update sender", () => { onDashboardRun({ title: "Update sender" }) brevo.updateSender({ senderId: 42, name: "Example Support" }) }) ``` ## Inputs `senderId` is required. Provide at least one of `name`, `email`, or `ips`. Weighted IP assignments must total 100. Because `ips` replaces all assignments, pass an empty array to clear them. The second argument can select `{ account }`. ## Output Returns nothing. This mutation is not replay-safe. # Update SMS campaign Source: https://docs.automate.ax/reference/integrations/brevo/actions/update-sms-campaign Update SMS campaign through the Brevo API. `brevo.updateSmsCampaign` update SMS campaign through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Update SMS campaign", () => { onDashboardRun({ title: "Update SMS campaign" }) brevo.updateSmsCampaign({ campaignId: 21, content: "Updated launch message" }) }) ``` ## Inputs and output Inputs: ```ts theme={null} { campaignId: number name?: string content?: string sender?: string organisationPrefix?: string recipients?: { listIds: number[] exclusionListIds?: number[] } scheduledAt?: string unicodeEnabled?: boolean unsubscribeInstruction?: string } ``` `campaignId` and recipient IDs are positive integers. Text fields must be non-empty when present, `sender` is limited to 15 characters, `listIds` can't be empty, and `scheduledAt` is an ISO 8601 timestamp with an offset. Optional fields have no implicit default. Completes without a value. The sender is limited to Brevo's 15-character maximum. Pass `{ account }` as the second argument to select a named Brevo account binding. # Update SMS campaign status Source: https://docs.automate.ax/reference/integrations/brevo/actions/update-sms-campaign-status Update SMS campaign status through the Brevo API. `brevo.updateSmsCampaignStatus` update SMS campaign status through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Update SMS campaign status", () => { onDashboardRun({ title: "Update SMS campaign status" }) brevo.updateSmsCampaignStatus({ campaignId: 21, status: "archive" }) }) ``` ## Inputs and output Inputs: positive `campaignId` and a Brevo status command such as `archive`, `darchive`, `replicate`, `cancel`, `queued`, or `draft`. Completes without a value. Status commands include archive, unarchive, replicate, cancel, queue, and draft operations. Pass `{ account }` as the second argument to select a named Brevo account binding. # Update template Source: https://docs.automate.ax/reference/integrations/brevo/actions/update-template Update a Brevo transactional email template. `brevo.updateEmailTemplate` patches fields on an existing template. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Update receipt copy", () => { onDashboardRun({ title: "Update receipt copy" }) brevo.updateEmailTemplate({ templateId: 42, subject: "Your Example receipt", htmlContent: "

Thank you for your purchase.

", }) }) ``` ## Inputs Provide `templateId: number | string`. Optional fields are `templateName`, `subject`, registered `sender`, an `htmlContent` value of at least 11 characters, public `htmlUrl`, `attachmentUrl`, `isActive`, `replyTo`, `tag`, and `toField`. Second argument `{ account }` selects the Brevo binding. ## Output Returns `Signal` after Brevo accepts the update. Use `brevo.getEmailTemplate` to retrieve Brevo's resulting content. Don't supply both HTML sources in one patch. # Upload campaign image Source: https://docs.automate.ax/reference/integrations/brevo/actions/upload-campaign-image Upload campaign image through the Brevo API. `brevo.uploadCampaignImage` upload campaign image through the Brevo API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Upload campaign image", () => { onDashboardRun({ title: "Upload campaign image" }) brevo.uploadCampaignImage({ imageUrl: "https://example.com/hero.png", name: "hero.png", }) }) ``` ## Inputs and output Inputs: absolute `imageUrl`; optional non-empty `name`. Returns `{ url? }` for the uploaded gallery image. Pass an absolute image URL and an optional filename. Pass `{ account }` as the second argument to select a named Brevo account binding. # Upsert contact Source: https://docs.automate.ax/reference/integrations/brevo/actions/upsert-contact Create or update a Brevo contact by email address. `brevo.upsertContact` creates a contact or updates the record with the same email. It can set attributes, add list memberships, and change marketing blocklists. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Upsert a customer", () => { onDashboardRun({ title: "Upsert a customer" }) brevo.upsertContact({ email: "ada@example.com", extId: "customer_123", attributes: { firstname: "Ada", score: 10 }, lists: ["Customers"], }) }) ``` ## Inputs Provide `email`. `attributes` values may be string, number, boolean, or string array. Automate.ax uppercases attribute names before sending them. You can also use `extId`, list names or positive IDs, `emailBlacklisted`, `smsBlacklisted`, `smtpBlacklistSender`, and `forceMerge`. `forceMerge` defaults to `false`. Second argument `{ account }` selects the Brevo binding. ## Output Returns `{ id: number }` for the created or updated contact. Attribute definitions must already exist in the Brevo account and values must match their configured types. The action resolves list names case-insensitively by exact name. Missing or ambiguous names fail before the contact write. # Validate sender Source: https://docs.automate.ax/reference/integrations/brevo/actions/validate-sender Validate a Brevo sender with its emailed one-time code. `brevo.validateSender` validate a Brevo sender with its emailed one-time code. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Validate sender", () => { onDashboardRun({ title: "Validate sender" }) brevo.validateSender({ senderId: 42, otp: 123456 }) }) ``` ## Inputs `senderId` is the sender being verified. `otp` is the six-digit code Brevo emailed. The second argument can select `{ account }`. ## Output Returns nothing. An expired or incorrect code produces a structured Brevo provider error. # Brevo Source: https://docs.automate.ax/reference/integrations/brevo/index Send email and SMS, manage contacts and campaigns, and react to delivery, engagement, and contact events in Brevo. ## Exports ```ts theme={null} import { brevo, brevoAccount, getBrevoApi } from "automate.ax/brevo" ``` * `brevo` contains the packaged Brevo actions and triggers. * `brevoAccount("name")` selects a named Brevo connection. * `getBrevoApi` creates the authenticated Brevo API helper for a custom account-backed action. ## Triggers * [On Brevo event](/reference/integrations/brevo/triggers/on-event) * [On transactional email event](/reference/integrations/brevo/triggers/on-transactional-email-event) * [On transactional email sent](/reference/integrations/brevo/triggers/on-email-sent) * [On transactional email delivered](/reference/integrations/brevo/triggers/on-email-delivered) * [On transactional email hard bounced](/reference/integrations/brevo/triggers/on-email-hard-bounced) * [On transactional email soft bounced](/reference/integrations/brevo/triggers/on-email-soft-bounced) * [On transactional email blocked](/reference/integrations/brevo/triggers/on-email-blocked) * [On transactional email marked as spam](/reference/integrations/brevo/triggers/on-email-marked-as-spam) * [On transactional email invalid](/reference/integrations/brevo/triggers/on-email-invalid) * [On transactional email deferred](/reference/integrations/brevo/triggers/on-email-deferred) * [On transactional email clicked](/reference/integrations/brevo/triggers/on-email-clicked) * [On transactional email opened](/reference/integrations/brevo/triggers/on-email-opened) * [On transactional email first opened](/reference/integrations/brevo/triggers/on-email-first-opened) * [On transactional email unsubscribed](/reference/integrations/brevo/triggers/on-email-unsubscribed) * [On transactional SMS event](/reference/integrations/brevo/triggers/on-transactional-sms-event) * [On transactional SMS sent](/reference/integrations/brevo/triggers/on-transactional-sms-sent) * [On transactional SMS delivered](/reference/integrations/brevo/triggers/on-transactional-sms-delivered) * [On transactional SMS hard bounced](/reference/integrations/brevo/triggers/on-transactional-sms-hard-bounced) * [On transactional SMS soft bounced](/reference/integrations/brevo/triggers/on-transactional-sms-soft-bounced) * [On transactional SMS replied](/reference/integrations/brevo/triggers/on-transactional-sms-replied) * [On transactional SMS unsubscribed](/reference/integrations/brevo/triggers/on-transactional-sms-unsubscribed) * [On marketing email event](/reference/integrations/brevo/triggers/on-marketing-email-event) * [On marketing email delivered](/reference/integrations/brevo/triggers/on-marketing-email-delivered) * [On marketing email hard bounced](/reference/integrations/brevo/triggers/on-marketing-email-hard-bounced) * [On marketing email soft bounced](/reference/integrations/brevo/triggers/on-marketing-email-soft-bounced) * [On marketing email marked as spam](/reference/integrations/brevo/triggers/on-marketing-email-marked-as-spam) * [On marketing email opened](/reference/integrations/brevo/triggers/on-marketing-email-opened) * [On marketing email clicked](/reference/integrations/brevo/triggers/on-marketing-email-clicked) * [On marketing email unsubscribed](/reference/integrations/brevo/triggers/on-marketing-email-unsubscribed) * [On contact event](/reference/integrations/brevo/triggers/on-contact-event) * [On contact added to list](/reference/integrations/brevo/triggers/on-contact-added-to-list) * [On contact updated](/reference/integrations/brevo/triggers/on-contact-updated) * [On contact deleted](/reference/integrations/brevo/triggers/on-contact-deleted) * [On marketing SMS event](/reference/integrations/brevo/triggers/on-marketing-sms-event) * [On marketing SMS sent](/reference/integrations/brevo/triggers/on-marketing-sms-sent) * [On marketing SMS delivered](/reference/integrations/brevo/triggers/on-marketing-sms-delivered) * [On marketing SMS hard bounced](/reference/integrations/brevo/triggers/on-marketing-sms-hard-bounced) * [On marketing SMS soft bounced](/reference/integrations/brevo/triggers/on-marketing-sms-soft-bounced) * [On marketing SMS replied](/reference/integrations/brevo/triggers/on-marketing-sms-replied) * [On marketing SMS unsubscribed](/reference/integrations/brevo/triggers/on-marketing-sms-unsubscribed) ## Actions * [Activate template](/reference/integrations/brevo/actions/activate-template) * [Add contacts to list](/reference/integrations/brevo/actions/add-contacts-to-list) * [Authenticate sending domain](/reference/integrations/brevo/actions/authenticate-domain) * [Block email domain](/reference/integrations/brevo/actions/block-email-domain) * [Cancel scheduled email](/reference/integrations/brevo/actions/cancel-scheduled-email) * [Create contact list](/reference/integrations/brevo/actions/create-contact-list) * [Create sending domain](/reference/integrations/brevo/actions/create-domain) * [Create sender](/reference/integrations/brevo/actions/create-sender) * [Create template](/reference/integrations/brevo/actions/create-template) * [Deactivate template](/reference/integrations/brevo/actions/deactivate-template) * [Delete contact](/reference/integrations/brevo/actions/delete-contact) * [Delete contact list](/reference/integrations/brevo/actions/delete-contact-list) * [Delete sending domain](/reference/integrations/brevo/actions/delete-domain) * [Delete email logs](/reference/integrations/brevo/actions/delete-email-logs) * [Delete email template](/reference/integrations/brevo/actions/delete-email-template) * [Delete hard bounces](/reference/integrations/brevo/actions/delete-hard-bounces) * [Delete sender](/reference/integrations/brevo/actions/delete-sender) * [Get account](/reference/integrations/brevo/actions/get-account) * [Get aggregate email report](/reference/integrations/brevo/actions/get-aggregate-email-report) * [Get aggregate SMS report](/reference/integrations/brevo/actions/get-aggregate-sms-report) * [Get contact](/reference/integrations/brevo/actions/get-contact) * [Get contact list](/reference/integrations/brevo/actions/get-contact-list) * [Get sending domain](/reference/integrations/brevo/actions/get-domain) * [Get email content](/reference/integrations/brevo/actions/get-email-content) * [Get email report](/reference/integrations/brevo/actions/get-email-report) * [Get process](/reference/integrations/brevo/actions/get-process) * [Get scheduled email](/reference/integrations/brevo/actions/get-scheduled-email) * [Get SMS report](/reference/integrations/brevo/actions/get-sms-report) * [Get template](/reference/integrations/brevo/actions/get-template) * [List account activity](/reference/integrations/brevo/actions/list-account-activity) * [List blocked contacts](/reference/integrations/brevo/actions/list-blocked-contacts) * [List blocked email domains](/reference/integrations/brevo/actions/list-blocked-email-domains) * [List contact lists](/reference/integrations/brevo/actions/list-contact-lists) * [List contacts](/reference/integrations/brevo/actions/list-contacts) * [List contacts in list](/reference/integrations/brevo/actions/list-contacts-in-list) * [List sending domains](/reference/integrations/brevo/actions/list-domains) * [List email events](/reference/integrations/brevo/actions/list-email-events) * [List email logs](/reference/integrations/brevo/actions/list-email-logs) * [List dedicated IP addresses](/reference/integrations/brevo/actions/list-ips) * [List processes](/reference/integrations/brevo/actions/list-processes) * [List sender IP addresses](/reference/integrations/brevo/actions/list-sender-ips) * [List senders](/reference/integrations/brevo/actions/list-senders) * [List SMS events](/reference/integrations/brevo/actions/list-sms-events) * [List templates](/reference/integrations/brevo/actions/list-templates) * [Preview email template](/reference/integrations/brevo/actions/preview-email-template) * [Remove contacts from list](/reference/integrations/brevo/actions/remove-contacts-from-list) * [Send email](/reference/integrations/brevo/actions/send-email) * [Send text message](/reference/integrations/brevo/actions/send-sms) * [Send SMS asynchronously](/reference/integrations/brevo/actions/send-sms-async) * [Send test email template](/reference/integrations/brevo/actions/send-test-email-template) * [Unblock contact](/reference/integrations/brevo/actions/unblock-contact) * [Unblock email domain](/reference/integrations/brevo/actions/unblock-email-domain) * [Update contact list](/reference/integrations/brevo/actions/update-contact-list) * [Update sender](/reference/integrations/brevo/actions/update-sender) * [Update template](/reference/integrations/brevo/actions/update-template) * [Upsert contact](/reference/integrations/brevo/actions/upsert-contact) * [List contact attributes](/reference/integrations/brevo/actions/list-contact-attributes) * [Create contact attribute](/reference/integrations/brevo/actions/create-contact-attribute) * [Update contact attribute](/reference/integrations/brevo/actions/update-contact-attribute) * [Delete contact attribute](/reference/integrations/brevo/actions/delete-contact-attribute) * [Delete contact attribute option](/reference/integrations/brevo/actions/delete-contact-attribute-option) * [Update contacts batch](/reference/integrations/brevo/actions/update-contacts-batch) * [Create double-opt-in contact](/reference/integrations/brevo/actions/create-double-opt-in-contact) * [Import contacts](/reference/integrations/brevo/actions/import-contacts) * [Export contacts](/reference/integrations/brevo/actions/export-contacts) * [Get contact statistics](/reference/integrations/brevo/actions/get-contact-statistics) * [List contact folders](/reference/integrations/brevo/actions/list-contact-folders) * [Create contact folder](/reference/integrations/brevo/actions/create-contact-folder) * [Get contact folder](/reference/integrations/brevo/actions/get-contact-folder) * [Update contact folder](/reference/integrations/brevo/actions/update-contact-folder) * [Delete contact folder](/reference/integrations/brevo/actions/delete-contact-folder) * [List contact folder lists](/reference/integrations/brevo/actions/list-contact-folder-lists) * [List contact segments](/reference/integrations/brevo/actions/list-contact-segments) * [List consent groups](/reference/integrations/brevo/actions/list-consent-groups) * [Create consent group](/reference/integrations/brevo/actions/create-consent-group) * [Get consent group](/reference/integrations/brevo/actions/get-consent-group) * [Update consent group](/reference/integrations/brevo/actions/update-consent-group) * [Delete consent group](/reference/integrations/brevo/actions/delete-consent-group) * [List email campaigns](/reference/integrations/brevo/actions/list-email-campaigns) * [Create email campaign](/reference/integrations/brevo/actions/create-email-campaign) * [Get email campaign](/reference/integrations/brevo/actions/get-email-campaign) * [Update email campaign](/reference/integrations/brevo/actions/update-email-campaign) * [Delete email campaign](/reference/integrations/brevo/actions/delete-email-campaign) * [Upload campaign image](/reference/integrations/brevo/actions/upload-campaign-image) * [Get email campaign A/B result](/reference/integrations/brevo/actions/get-email-campaign-ab-result) * [Export email campaign recipients](/reference/integrations/brevo/actions/export-email-campaign-recipients) * [Send email campaign now](/reference/integrations/brevo/actions/send-email-campaign-now) * [Send email campaign test](/reference/integrations/brevo/actions/send-email-campaign-test) * [Send email campaign report](/reference/integrations/brevo/actions/send-email-campaign-report) * [Get email campaign shared URL](/reference/integrations/brevo/actions/get-email-campaign-shared-url) * [Update email campaign status](/reference/integrations/brevo/actions/update-email-campaign-status) * [List SMS campaigns](/reference/integrations/brevo/actions/list-sms-campaigns) * [Create SMS campaign](/reference/integrations/brevo/actions/create-sms-campaign) * [Get SMS campaign](/reference/integrations/brevo/actions/get-sms-campaign) * [Update SMS campaign](/reference/integrations/brevo/actions/update-sms-campaign) * [Delete SMS campaign](/reference/integrations/brevo/actions/delete-sms-campaign) * [Export SMS campaign recipients](/reference/integrations/brevo/actions/export-sms-campaign-recipients) * [Send SMS campaign now](/reference/integrations/brevo/actions/send-sms-campaign-now) * [Send SMS campaign test](/reference/integrations/brevo/actions/send-sms-campaign-test) * [Send SMS campaign report](/reference/integrations/brevo/actions/send-sms-campaign-report) * [Update SMS campaign status](/reference/integrations/brevo/actions/update-sms-campaign-status) * [List events](/reference/integrations/brevo/actions/list-events) * [Create event](/reference/integrations/brevo/actions/create-event) * [Create batch events](/reference/integrations/brevo/actions/create-batch-events) * [Validate sender](/reference/integrations/brevo/actions/validate-sender) # On contact added to list Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-contact-added-to-list Run an automation when Brevo adds a contact to a list. `brevo.onContactAddedToList` runs when Brevo adds a contact to a list. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo contact added to list", () => { const event = brevo.onContactAddedToList() log(t`Brevo contact added to list: ${event.email}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "contact"`, `type: "addedToList"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. `listIds` identifies affected lists when Brevo supplies it. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On contact deleted Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-contact-deleted Run an automation when a Brevo contact is deleted. `brevo.onContactDeleted` runs when a Brevo contact is deleted. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo contact deleted", () => { const event = brevo.onContactDeleted() log(t`Brevo contact deleted: ${event.email}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "contact"`, `type: "deleted"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. Do not assume the contact remains available through later API reads. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On contact event Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-contact-event Run an automation when a contact is added to a list, updated, or deleted. `brevo.onContactEvent` watches marketing contact webhooks. Use a narrower trigger when only one event matters. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo contact event", () => { const event = brevo.onContactEvent() log(t`Brevo ${event.family} / ${event.type}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data `family` is `contact`. `type` is one of `addedToList | updated | deleted`. Every event includes `webhookId` and the complete provider callback in `event`. Depending on the family, optional normalized fields include message identity, email or phone, campaign identity, timestamps, status, reason, link, reply, list IDs, and credit usage. Automate.ax manages authenticated, non-batched Brevo webhooks for the required channels and deduplicates exact callback retries. A callback also matches `brevo.onEvent` and its family trigger when those triggers are present. # On contact updated Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-contact-updated Run an automation when a Brevo contact changes. `brevo.onContactUpdated` runs when a Brevo contact changes. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo contact updated", () => { const event = brevo.onContactUpdated() log(t`Brevo contact updated: ${event.email}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "contact"`, `type: "updated"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. The raw `event` preserves provider fields for the update. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On transactional email blocked Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-email-blocked Run an automation when Brevo blocks a transactional email before delivery. `brevo.onEmailBlocked` runs when Brevo blocks a transactional email before delivery. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo transactional email blocked", () => { const event = brevo.onEmailBlocked() log(t`Brevo transactional email blocked: ${event.messageId}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "transactionalEmail"`, `type: "blocked"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. Blocking can reflect policy, reputation, or recipient suppression. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On transactional email clicked Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-email-clicked Run an automation when a recipient follows a tracked link in a transactional email. `brevo.onEmailClicked` runs when a recipient follows a tracked link in a transactional email. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo transactional email clicked", () => { const event = brevo.onEmailClicked() log(t`Brevo transactional email clicked: ${event.messageId}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "transactionalEmail"`, `type: "clicked"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. `link` contains the tracked destination when Brevo supplies it. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On transactional email deferred Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-email-deferred Run an automation when Brevo delays a transactional email delivery attempt. `brevo.onEmailDeferred` runs when Brevo delays a transactional email delivery attempt. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo transactional email deferred", () => { const event = brevo.onEmailDeferred() log(t`Brevo transactional email deferred: ${event.messageId}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "transactionalEmail"`, `type: "deferred"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. `reason` may explain the delay; a later delivery or bounce can follow. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On transactional email delivered Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-email-delivered Run an automation when a transactional email reaches the recipient mail server. `brevo.onEmailDelivered` runs when a transactional email reaches the recipient mail server. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo transactional email delivered", () => { const event = brevo.onEmailDelivered() log(t`Brevo transactional email delivered: ${event.messageId}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "transactionalEmail"`, `type: "delivered"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. Delivery confirms server acceptance, not that the recipient read the message. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On transactional email first opened Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-email-first-opened Run an automation when Brevo records the first tracked open of a transactional email. `brevo.onEmailFirstOpened` runs when Brevo records the first tracked open of a transactional email. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation( "Handle Brevo transactional email first opened", () => { const event = brevo.onEmailFirstOpened() log(t`Brevo transactional email first opened: ${event.messageId}`) }, ) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "transactionalEmail"`, `type: "firstOpened"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. This is Brevo's `unique_opened` event. Later opens use `onEmailOpened`. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On transactional email hard bounced Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-email-hard-bounced Run an automation when a transactional email has a permanent delivery failure. `brevo.onEmailHardBounced` runs when a transactional email has a permanent delivery failure. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation( "Handle Brevo transactional email hard bounced", () => { const event = brevo.onEmailHardBounced() log(t`Brevo transactional email hard bounced: ${event.messageId}`) }, ) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "transactionalEmail"`, `type: "hardBounced"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. `reason` may explain the permanent failure. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On transactional email invalid Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-email-invalid Run an automation when Brevo rejects an invalid transactional email address. `brevo.onEmailInvalid` runs when Brevo rejects an invalid transactional email address. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo transactional email invalid", () => { const event = brevo.onEmailInvalid() log(t`Brevo transactional email invalid: ${event.messageId}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "transactionalEmail"`, `type: "invalid"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. This event is distinct from a provider or mailbox bounce. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On transactional email marked as spam Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-email-marked-as-spam Run an automation when a recipient reports a transactional email as spam. `brevo.onEmailMarkedAsSpam` runs when a recipient reports a transactional email as spam. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation( "Handle Brevo transactional email marked as spam", () => { const event = brevo.onEmailMarkedAsSpam() log(t`Brevo transactional email marked as spam: ${event.messageId}`) }, ) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "transactionalEmail"`, `type: "markedAsSpam"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. Treat spam reports as a strong signal to stop further mail. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On transactional email opened Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-email-opened Run an automation when Brevo records an additional tracked open after the first open. `brevo.onEmailOpened` runs when Brevo records an additional tracked open after the first open. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo transactional email opened", () => { const event = brevo.onEmailOpened() log(t`Brevo transactional email opened: ${event.messageId}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "transactionalEmail"`, `type: "opened"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. Mail clients can proxy or preload tracking pixels, so an open does not prove a person read the message. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On transactional email sent Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-email-sent Run an automation when Brevo accepts a transactional email for sending. `brevo.onEmailSent` runs when Brevo accepts a transactional email for sending. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo transactional email sent", () => { const event = brevo.onEmailSent() log(t`Brevo transactional email sent: ${event.messageId}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "transactionalEmail"`, `type: "sent"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. Acceptance does not guarantee delivery; use `onEmailDelivered` for that. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On transactional email soft bounced Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-email-soft-bounced Run an automation when a transactional email has a temporary delivery failure. `brevo.onEmailSoftBounced` runs when a transactional email has a temporary delivery failure. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation( "Handle Brevo transactional email soft bounced", () => { const event = brevo.onEmailSoftBounced() log(t`Brevo transactional email soft bounced: ${event.messageId}`) }, ) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "transactionalEmail"`, `type: "softBounced"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. `reason` may explain the temporary failure; Brevo may retry delivery. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On transactional email unsubscribed Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-email-unsubscribed Run an automation when a recipient unsubscribes from transactional email. `brevo.onEmailUnsubscribed` runs when a recipient unsubscribes from transactional email. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation( "Handle Brevo transactional email unsubscribed", () => { const event = brevo.onEmailUnsubscribed() log(t`Brevo transactional email unsubscribed: ${event.messageId}`) }, ) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "transactionalEmail"`, `type: "unsubscribed"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. Honor unsubscribe events before sending related follow-up mail. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On Brevo event Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-event Run an automation when any supported Brevo webhook event. `brevo.onEvent` watches all managed Brevo email, SMS, and contact webhooks. Use a narrower trigger when only one event matters. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo Brevo event", () => { const event = brevo.onEvent() log(t`Brevo ${event.family} / ${event.type}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data `family` is one of `transactionalEmail | transactionalSms | marketingEmail | marketingSms | contact`. `type` identifies the semantic event within that family. Every event includes `webhookId` and the complete provider callback in `event`. Depending on the family, optional normalized fields include message identity, email or phone, campaign identity, timestamps, status, reason, link, reply, list IDs, and credit usage. Automate.ax manages authenticated, non-batched Brevo webhooks for the required channels and deduplicates exact callback retries. A callback also matches `brevo.onEvent` and its family trigger when those triggers are present. # On marketing email clicked Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-marketing-email-clicked Run an automation when a recipient follows a tracked marketing email link. `brevo.onMarketingEmailClicked` runs when a recipient follows a tracked marketing email link. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo marketing email clicked", () => { const event = brevo.onMarketingEmailClicked() log(t`Brevo marketing email clicked: ${event.messageId}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "marketingEmail"`, `type: "clicked"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. `link` contains the destination when Brevo supplies it. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On marketing email delivered Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-marketing-email-delivered Run an automation when a marketing campaign email reaches a recipient mail server. `brevo.onMarketingEmailDelivered` runs when a marketing campaign email reaches a recipient mail server. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo marketing email delivered", () => { const event = brevo.onMarketingEmailDelivered() log(t`Brevo marketing email delivered: ${event.messageId}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "marketingEmail"`, `type: "delivered"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. `campaignId` identifies the Brevo campaign when supplied. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On marketing email event Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-marketing-email-event Run an automation when any supported marketing email event. `brevo.onMarketingEmailEvent` watches marketing email webhooks. Use a narrower trigger when only one event matters. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo marketing email event", () => { const event = brevo.onMarketingEmailEvent() log(t`Brevo ${event.family} / ${event.type}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data `family` is `marketingEmail`. `type` is one of `delivered | hardBounced | softBounced | markedAsSpam | opened | clicked | unsubscribed`. Every event includes `webhookId` and the complete provider callback in `event`. Depending on the family, optional normalized fields include message identity, email or phone, campaign identity, timestamps, status, reason, link, reply, list IDs, and credit usage. Automate.ax manages authenticated, non-batched Brevo webhooks for the required channels and deduplicates exact callback retries. A callback also matches `brevo.onEvent` and its family trigger when those triggers are present. # On marketing email hard bounced Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-marketing-email-hard-bounced Run an automation when a marketing campaign email has a permanent delivery failure. `brevo.onMarketingEmailHardBounced` runs when a marketing campaign email has a permanent delivery failure. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo marketing email hard bounced", () => { const event = brevo.onMarketingEmailHardBounced() log(t`Brevo marketing email hard bounced: ${event.messageId}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "marketingEmail"`, `type: "hardBounced"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. Use hard bounces to protect list quality. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On marketing email marked as spam Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-marketing-email-marked-as-spam Run an automation when a recipient reports a marketing email as spam. `brevo.onMarketingEmailMarkedAsSpam` runs when a recipient reports a marketing email as spam. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo marketing email marked as spam", () => { const event = brevo.onMarketingEmailMarkedAsSpam() log(t`Brevo marketing email marked as spam: ${event.messageId}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "marketingEmail"`, `type: "markedAsSpam"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. Suppress future marketing sends where required. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On marketing email opened Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-marketing-email-opened Run an automation when Brevo records a tracked marketing email open. `brevo.onMarketingEmailOpened` runs when Brevo records a tracked marketing email open. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo marketing email opened", () => { const event = brevo.onMarketingEmailOpened() log(t`Brevo marketing email opened: ${event.messageId}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "marketingEmail"`, `type: "opened"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. Privacy protections and image proxies can affect open tracking. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On marketing email soft bounced Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-marketing-email-soft-bounced Run an automation when a marketing campaign email has a temporary delivery failure. `brevo.onMarketingEmailSoftBounced` runs when a marketing campaign email has a temporary delivery failure. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo marketing email soft bounced", () => { const event = brevo.onMarketingEmailSoftBounced() log(t`Brevo marketing email soft bounced: ${event.messageId}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "marketingEmail"`, `type: "softBounced"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. Brevo can report a later final status. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On marketing email unsubscribed Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-marketing-email-unsubscribed Run an automation when a recipient unsubscribes from marketing email. `brevo.onMarketingEmailUnsubscribed` runs when a recipient unsubscribes from marketing email. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo marketing email unsubscribed", () => { const event = brevo.onMarketingEmailUnsubscribed() log(t`Brevo marketing email unsubscribed: ${event.messageId}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "marketingEmail"`, `type: "unsubscribed"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. Honor the unsubscribe before another marketing send. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On marketing SMS delivered Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-marketing-sms-delivered Run an automation when a marketing campaign SMS is delivered. `brevo.onMarketingSmsDelivered` runs when a marketing campaign SMS is delivered. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo marketing SMS delivered", () => { const event = brevo.onMarketingSmsDelivered() log(t`Brevo marketing SMS delivered: ${event.messageId}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "marketingSms"`, `type: "delivered"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. Carrier delivery receipts can arrive asynchronously. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On marketing SMS event Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-marketing-sms-event Run an automation when any supported marketing SMS event. `brevo.onMarketingSmsEvent` watches marketing SMS webhooks. Use a narrower trigger when only one event matters. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo marketing SMS event", () => { const event = brevo.onMarketingSmsEvent() log(t`Brevo ${event.family} / ${event.type}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data `family` is `marketingSms`. `type` is one of `sent | delivered | hardBounced | softBounced | replied | unsubscribed`. Every event includes `webhookId` and the complete provider callback in `event`. Depending on the family, optional normalized fields include message identity, email or phone, campaign identity, timestamps, status, reason, link, reply, list IDs, and credit usage. Automate.ax manages authenticated, non-batched Brevo webhooks for the required channels and deduplicates exact callback retries. A callback also matches `brevo.onEvent` and its family trigger when those triggers are present. # On marketing SMS hard bounced Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-marketing-sms-hard-bounced Run an automation when a marketing campaign SMS has a permanent delivery failure. `brevo.onMarketingSmsHardBounced` runs when a marketing campaign SMS has a permanent delivery failure. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo marketing SMS hard bounced", () => { const event = brevo.onMarketingSmsHardBounced() log(t`Brevo marketing SMS hard bounced: ${event.messageId}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "marketingSms"`, `type: "hardBounced"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. Use permanent failures to protect list quality. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On marketing SMS replied Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-marketing-sms-replied Run an automation when a recipient replies to a marketing SMS. `brevo.onMarketingSmsReplied` runs when a recipient replies to a marketing campaign SMS. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo marketing SMS reply", () => { const event = brevo.onMarketingSmsReplied() log(t`Brevo marketing SMS reply from ${event.phone}: ${event.reply}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "marketingSms"`, `type: "replied"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reply`, and credit usage. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On marketing SMS sent Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-marketing-sms-sent Run an automation when Brevo sends a marketing campaign SMS. `brevo.onMarketingSmsSent` runs when Brevo sends a marketing campaign SMS. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo marketing SMS sent", () => { const event = brevo.onMarketingSmsSent() log(t`Brevo marketing SMS sent: ${event.messageId}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "marketingSms"`, `type: "sent"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. `campaignId` identifies the campaign when supplied. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On marketing SMS soft bounced Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-marketing-sms-soft-bounced Run an automation when a marketing campaign SMS has a temporary delivery failure. `brevo.onMarketingSmsSoftBounced` runs when a marketing campaign SMS has a temporary delivery failure. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo marketing SMS soft bounced", () => { const event = brevo.onMarketingSmsSoftBounced() log(t`Brevo marketing SMS soft bounced: ${event.messageId}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "marketingSms"`, `type: "softBounced"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. A later delivery can follow a temporary failure. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On marketing SMS unsubscribed Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-marketing-sms-unsubscribed Run an automation when a recipient unsubscribes from marketing SMS. `brevo.onMarketingSmsUnsubscribed` runs when a recipient unsubscribes from marketing SMS. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo marketing SMS unsubscribed", () => { const event = brevo.onMarketingSmsUnsubscribed() log(t`Brevo marketing SMS unsubscribed: ${event.messageId}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "marketingSms"`, `type: "unsubscribed"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. Honor the opt-out before another marketing SMS. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On transactional email event Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-transactional-email-event Run an automation when any supported transactional email event. `brevo.onTransactionalEmailEvent` watches transactional email webhooks. Use a narrower trigger when only one event matters. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo transactional email event", () => { const event = brevo.onTransactionalEmailEvent() log(t`Brevo ${event.family} / ${event.type}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data `family` is `transactionalEmail`. `type` is one of `sent | delivered | hardBounced | softBounced | blocked | markedAsSpam | invalid | deferred | clicked | opened | firstOpened | unsubscribed`. Every event includes `webhookId` and the complete provider callback in `event`. Depending on the family, optional normalized fields include message identity, email or phone, campaign identity, timestamps, status, reason, link, reply, list IDs, and credit usage. Automate.ax manages authenticated, non-batched Brevo webhooks for the required channels and deduplicates exact callback retries. A callback also matches `brevo.onEvent` and its family trigger when those triggers are present. # On transactional SMS delivered Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-transactional-sms-delivered Run an automation when a transactional SMS is delivered. `brevo.onTransactionalSmsDelivered` runs when a transactional SMS is delivered. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo transactional SMS delivered", () => { const event = brevo.onTransactionalSmsDelivered() log(t`Brevo transactional SMS delivered: ${event.messageId}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "transactionalSms"`, `type: "delivered"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. Carrier delivery receipts can arrive after the initial send. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On transactional SMS event Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-transactional-sms-event Run an automation when any supported transactional SMS event. `brevo.onTransactionalSmsEvent` watches transactional SMS webhooks. Use a narrower trigger when only one event matters. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo transactional SMS event", () => { const event = brevo.onTransactionalSmsEvent() log(t`Brevo ${event.family} / ${event.type}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data `family` is `transactionalSms`. `type` is one of `sent | delivered | hardBounced | softBounced | replied | unsubscribed`. Every event includes `webhookId` and the complete provider callback in `event`. Depending on the family, optional normalized fields include message identity, email or phone, campaign identity, timestamps, status, reason, link, reply, list IDs, and credit usage. Automate.ax manages authenticated, non-batched Brevo webhooks for the required channels and deduplicates exact callback retries. A callback also matches `brevo.onEvent` and its family trigger when those triggers are present. # On transactional SMS hard bounced Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-transactional-sms-hard-bounced Run an automation when a transactional SMS has a permanent delivery failure. `brevo.onTransactionalSmsHardBounced` runs when a transactional SMS has a permanent delivery failure. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo transactional SMS hard bounced", () => { const event = brevo.onTransactionalSmsHardBounced() log(t`Brevo transactional SMS hard bounced: ${event.messageId}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "transactionalSms"`, `type: "hardBounced"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. Avoid repeated sends to permanently failing numbers. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On transactional SMS replied Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-transactional-sms-replied Run an automation when a recipient replies to a transactional SMS. `brevo.onTransactionalSmsReplied` runs when a recipient replies to a transactional SMS. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo transactional SMS replied", () => { const event = brevo.onTransactionalSmsReplied() log(t`Brevo transactional SMS replied: ${event.messageId}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "transactionalSms"`, `type: "replied"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. `reply` contains the response text when Brevo supplies it. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On transactional SMS sent Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-transactional-sms-sent Run an automation when Brevo sends a transactional SMS. `brevo.onTransactionalSmsSent` runs when Brevo sends a transactional SMS. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo transactional SMS sent", () => { const event = brevo.onTransactionalSmsSent() log(t`Brevo transactional SMS sent: ${event.messageId}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "transactionalSms"`, `type: "sent"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. A sent event precedes final delivery or bounce status. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On transactional SMS soft bounced Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-transactional-sms-soft-bounced Run an automation when a transactional SMS has a temporary delivery failure. `brevo.onTransactionalSmsSoftBounced` runs when a transactional SMS has a temporary delivery failure. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo transactional SMS soft bounced", () => { const event = brevo.onTransactionalSmsSoftBounced() log(t`Brevo transactional SMS soft bounced: ${event.messageId}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "transactionalSms"`, `type: "softBounced"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. A later delivery can follow a temporary failure. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # On transactional SMS unsubscribed Source: https://docs.automate.ax/reference/integrations/brevo/triggers/on-transactional-sms-unsubscribed Run an automation when a recipient unsubscribes from transactional SMS. `brevo.onTransactionalSmsUnsubscribed` runs when a recipient unsubscribes from transactional SMS. ## Example ```ts theme={null} import { automation, log, t } from "automate.ax" import { brevo } from "automate.ax/brevo" export default automation("Handle Brevo transactional SMS unsubscribed", () => { const event = brevo.onTransactionalSmsUnsubscribed() log(t`Brevo transactional SMS unsubscribed: ${event.messageId}`) }) ``` ## Options `account?: string | IntegrationAccountReference<"brevo">` selects a static Brevo API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. ## Trigger data Returns a normalized event with `family: "transactionalSms"`, `type: "unsubscribed"`, `webhookId`, and the complete provider callback in `event`. Provider-dependent fields can include `email`, `phone`, `messageId`, `campaignId`, `occurredAt`, `status`, `reason`, `link`, `reply`, and `listIds`. Honor the opt-out before sending another related SMS. Automate.ax authenticates the managed webhook and deduplicates exact callback retries. # Create Browserbase agent Source: https://docs.automate.ax/reference/integrations/browserbase/actions/create-agent Create a reusable browser agent definition. `browserbase.createAgent` creates a reusable browser agent definition. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Create Browserbase agent", () => { onInvocation() browserbase.createAgent({ name: "Researcher", systemPrompt: "Cite primary sources.", }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `name` | `string` | Yes | — | Agent name, up to 255 characters. | | `systemPrompt` | `string` | No | None | Instructions applied to each run. | | `resultSchema` | `Record` | No | None | JSON Schema for structured results. | ## Output Returns the agent ID, definition, and timestamps. Creating an agent is not replay-safe. # Create Browserbase context Source: https://docs.automate.ax/reference/integrations/browserbase/actions/create-context Create reusable browser storage for cookies and authentication. `browserbase.createContext` creates reusable browser storage for cookies and authentication. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Create Browserbase context", () => { onInvocation() browserbase.createContext({ name: "Signed in" }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `name` | `string` | No | None | Context name, up to 128 characters. | | `projectId` | `string` | No | API-key project | Project override. | ## Output Returns the context ID and Browserbase encryption parameters. Store the returned context ID and pass it through session browser settings. Creation is not replay-safe. # Create Browserbase session Source: https://docs.automate.ax/reference/integrations/browserbase/actions/create-session Create a configurable cloud browser session and receive connection URLs. `browserbase.createSession` creates a configurable cloud browser session and receives connection URLs. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Create Browserbase session", () => { onInvocation() browserbase.createSession({ browserSettings: { recordSession: true }, region: "us-west-2", timeout: 900, }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `projectId` | `string` | No | API-key project | Project override. | | `timeout` | `number` | No | Project default | Session lifetime in seconds, from 60 through 21,600. | | `region` | `string` | No | Provider default | `us-west-2`, `us-east-1`, `eu-central-1`, or `ap-southeast-1`. | | `keepAlive` | `boolean` | No | `false` | Keep the session alive across client disconnects. | | `browserSettings` | `object` | No | Provider defaults | Context, viewport, recording, logging, stealth, CAPTCHA, OS, domain, ad, and TLS settings. | | `proxies` | `boolean \| BrowserbaseProxy[]` | No | Provider default | Browserbase, external, or no-proxy rules. | | `proxySettings` | `object` | No | None | Trusted certificate IDs. | | `userMetadata` | `Record` | No | None | Searchable session metadata. | ## Output Returns the session record plus `connectUrl`, `seleniumRemoteUrl`, and `signingKey`. Creating a session consumes browser capacity and is not replay-safe. # Delete Browserbase agent Source: https://docs.automate.ax/reference/integrations/browserbase/actions/delete-agent Permanently remove a reusable browser agent. `browserbase.deleteAgent` permanently removes a reusable browser agent. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Delete Browserbase agent", () => { onInvocation() browserbase.deleteAgent({ agentId: "agent-id" }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `agentId` | `string` | Yes | — | Browserbase agent ID. | ## Output Returns `{ deleted: true, id }`. Existing runs remain available; new runs cannot reference the deleted agent. # Delete Browserbase certificate Source: https://docs.automate.ax/reference/integrations/browserbase/actions/delete-certificate Permanently remove one uploaded TLS certificate. `browserbase.deleteCertificate` permanently removes one uploaded TLS certificate. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Delete Browserbase certificate", () => { onInvocation() browserbase.deleteCertificate({ certificateId: "certificate-id" }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `certificateId` | `string` | Yes | — | Browserbase certificate ID. | ## Output Returns `{ deleted: true, id }` after deletion. Future sessions cannot reference the deleted certificate. # Delete Browserbase context Source: https://docs.automate.ax/reference/integrations/browserbase/actions/delete-context Permanently remove one reusable browser context. `browserbase.deleteContext` permanently removes one reusable browser context. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Delete Browserbase context", () => { onInvocation() browserbase.deleteContext({ contextId: "context-id" }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `contextId` | `string` | Yes | — | Browserbase context ID. | ## Output Returns `{ deleted: true, id }` after Browserbase accepts deletion. Deletion is permanent and not replay-safe. # Delete Browserbase download Source: https://docs.automate.ax/reference/integrations/browserbase/actions/delete-download Remove one downloaded file from Browserbase storage. `browserbase.deleteDownload` removes one downloaded file from Browserbase storage. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Delete Browserbase download", () => { onInvocation() browserbase.deleteDownload({ downloadId: "download-id" }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `downloadId` | `string` | Yes | — | Browserbase download ID. | ## Output Returns `{ deleted: true, id }`. Deletion is permanent and not replay-safe. # Delete Browserbase extension Source: https://docs.automate.ax/reference/integrations/browserbase/actions/delete-extension Permanently remove one uploaded extension. `browserbase.deleteExtension` permanently removes one uploaded extension. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Delete Browserbase extension", () => { onInvocation() browserbase.deleteExtension({ extensionId: "extension-id" }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `extensionId` | `string` | Yes | — | Browserbase extension ID. | ## Output Returns `{ deleted: true, id }` after deletion. Existing sessions are unaffected; future sessions cannot use the deleted ID. # Download Browserbase file Source: https://docs.automate.ax/reference/integrations/browserbase/actions/download-file Retrieve the binary content of one session download. `browserbase.downloadFile` retrieves the binary content of one session download. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Download Browserbase file", () => { onInvocation() browserbase.downloadFile({ downloadId: "download-id" }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `downloadId` | `string` | Yes | — | Browserbase download ID. | ## Output Returns a `Blob` containing the stored bytes. Use `getDownload` when you also need the original filename or MIME type. # End Browserbase session Source: https://docs.automate.ax/reference/integrations/browserbase/actions/end-session Request early release of a running session. `browserbase.endSession` requests early release of a running session. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("End Browserbase session", () => { onInvocation() browserbase.endSession({ sessionId: "session-id" }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `sessionId` | `string` | Yes | — | Running session ID. | ## Output Returns the updated session record. Ending a session is not replay-safe. Browserbase may complete asynchronously after accepting the request. # Fetch page with Browserbase Source: https://docs.automate.ax/reference/integrations/browserbase/actions/fetch-page Fetch one URL as raw text, Markdown, or extracted JSON. `browserbase.fetchPage` fetches one URL as raw text, Markdown, or extracted JSON. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Fetch page with Browserbase", () => { onInvocation() browserbase.fetchPage({ format: "markdown", url: "https://example.com" }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `url` | `string` | Yes | — | Complete URL. | | `format` | `'raw' \| 'markdown' \| 'json'` | No | `'raw'` | Output format. | | `schema` | `Record` | For JSON | None | JSON Schema used for extraction. | | `allowRedirects` | `boolean` | No | `false` | Follow redirects. | | `allowInsecureSsl` | `boolean` | No | `false` | Skip target TLS verification. | | `proxies` | `boolean` | No | `false` | Route through Browserbase proxy support. | ## Output Returns request ID, target status, headers, content, MIME type, and encoding. `json` requires `schema`. Structured formats can require project enablement or additional quota. # Get Browserbase agent Source: https://docs.automate.ax/reference/integrations/browserbase/actions/get-agent Read one reusable browser agent definition. `browserbase.getAgent` reads one reusable browser agent definition. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Get Browserbase agent", () => { onInvocation() browserbase.getAgent({ agentId: "agent-id" }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `agentId` | `string` | Yes | — | Browserbase agent ID. | ## Output Returns the name, prompt, result schema, and timestamps. Use the returned `agentId` to start runs. # Get Browserbase agent run Source: https://docs.automate.ax/reference/integrations/browserbase/actions/get-agent-run Read current state and result for one agent run. `browserbase.getAgentRun` reads current state and result for one agent run. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Get Browserbase agent run", () => { onInvocation() browserbase.getAgentRun({ runId: "run-id" }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `runId` | `string` | Yes | — | Browserbase run ID. | ## Output Returns task, status, agent/session IDs, result, timing, and failure cause. Poll this action until the run reaches a terminal status. # Get Browserbase certificate Source: https://docs.automate.ax/reference/integrations/browserbase/actions/get-certificate Read metadata for one uploaded TLS certificate. `browserbase.getCertificate` reads metadata for one uploaded TLS certificate. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Get Browserbase certificate", () => { onInvocation() browserbase.getCertificate({ certificateId: "certificate-id" }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `certificateId` | `string` | Yes | — | Browserbase certificate ID. | ## Output Returns the certificate ID, project, and timestamps. The API does not return the certificate bytes. # Get Browserbase context Source: https://docs.automate.ax/reference/integrations/browserbase/actions/get-context Read metadata for one reusable browser context. `browserbase.getContext` reads metadata for one reusable browser context. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Get Browserbase context", () => { onInvocation() browserbase.getContext({ contextId: "context-id" }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `contextId` | `string` | Yes | — | Browserbase context ID. | ## Output Returns the context ID, project, optional name, and timestamps. Context contents are not returned by this endpoint. # Get Browserbase download Source: https://docs.automate.ax/reference/integrations/browserbase/actions/get-download Read metadata for one file downloaded in a session. `browserbase.getDownload` reads metadata for one file downloaded in a session. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Get Browserbase download", () => { onInvocation() browserbase.getDownload({ downloadId: "download-id" }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `downloadId` | `string` | Yes | — | Browserbase download ID. | ## Output Returns filename, MIME type, size, SHA-256 checksum, session ID, and creation time. Use `downloadFile` to retrieve bytes. # Get Browserbase extension Source: https://docs.automate.ax/reference/integrations/browserbase/actions/get-extension Read metadata for one uploaded Chrome extension. `browserbase.getExtension` reads metadata for one uploaded Chrome extension. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Get Browserbase extension", () => { onInvocation() browserbase.getExtension({ extensionId: "extension-id" }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `extensionId` | `string` | Yes | — | Browserbase extension ID. | ## Output Returns the extension ID, filename, project, and timestamps. The API does not return the extension archive. # Get Browserbase function Source: https://docs.automate.ax/reference/integrations/browserbase/actions/get-function Read one deployed Browserbase Function. `browserbase.getFunction` reads one deployed Browserbase Function. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Get Browserbase function", () => { onInvocation() browserbase.getFunction({ functionId: "00000000-0000-4000-8000-000000000001", }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `functionId` | UUID | Yes | — | Browserbase Function ID. | ## Output Returns function identity, project, name, and timestamps. Use a deployed function ID. A version ID or build ID won't work. # Get Browserbase function build Source: https://docs.automate.ax/reference/integrations/browserbase/actions/get-function-build Read lifecycle and output for one Function build. `browserbase.getFunctionBuild` reads lifecycle and output for one Function build. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Get Browserbase function build", () => { onInvocation() browserbase.getFunctionBuild({ buildId: "00000000-0000-4000-8000-000000000001", }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `buildId` | UUID | Yes | — | Function build ID. | ## Output Returns request entrypoint, status, timing, created functions, and failure cause. Completed builds can create multiple named functions and versions. # Get Browserbase function build logs Source: https://docs.automate.ax/reference/integrations/browserbase/actions/get-function-build-logs Read timestamped logs for one Function build. `browserbase.getFunctionBuildLogs` reads timestamped logs for one Function build. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Get Browserbase function build logs", () => { onInvocation() browserbase.getFunctionBuildLogs({ buildId: "00000000-0000-4000-8000-000000000001", }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `buildId` | UUID | Yes | — | Function build ID. | ## Output Returns `logs` and `total`. Each log has `message` and numeric `timestamp`. Use logs with the build's `cause` when diagnosing failures. # Get Browserbase function version Source: https://docs.automate.ax/reference/integrations/browserbase/actions/get-function-version Read one immutable Browserbase Function version. `browserbase.getFunctionVersion` reads one immutable Browserbase Function version. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Get Browserbase function version", () => { onInvocation() browserbase.getFunctionVersion({ versionId: "00000000-0000-4000-8000-000000000001", }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `versionId` | UUID | Yes | — | Function version ID. | ## Output Returns function, build, project, session defaults, parameter schema, and timestamps. A version ID is distinct from its function and build IDs. # Get Browserbase invocation Source: https://docs.automate.ax/reference/integrations/browserbase/actions/get-invocation Read current state and result for one Function invocation. `browserbase.getInvocation` reads current state and result for one Function invocation. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Get Browserbase invocation", () => { onInvocation() browserbase.getInvocation({ invocationId: "00000000-0000-4000-8000-000000000001", }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `invocationId` | UUID | Yes | — | Function invocation ID. | ## Output Returns function, version, session, status, params, JSON result, timing, and failure cause. Poll until `COMPLETED` or `FAILED`. # Get Browserbase invocation logs Source: https://docs.automate.ax/reference/integrations/browserbase/actions/get-invocation-logs Read timestamped logs for one Function invocation. `browserbase.getInvocationLogs` reads timestamped logs for one Function invocation. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Get Browserbase invocation logs", () => { onInvocation() browserbase.getInvocationLogs({ invocationId: "00000000-0000-4000-8000-000000000001", }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `invocationId` | UUID | Yes | — | Function invocation ID. | ## Output Returns `logs` and `total`. Logs may be available while an invocation is still running. Log ingestion is eventual. Browserbase may return `No logs found` immediately after completion, so add a short delay before reading newly completed logs. # Get Browserbase project Source: https://docs.automate.ax/reference/integrations/browserbase/actions/get-project Read one project's configuration and identity. `browserbase.getProject` reads one project's configuration and identity. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Get Browserbase project", () => { onInvocation() browserbase.getProject({ projectId: "project-id" }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `projectId` | `string` | Yes | — | Browserbase project ID. | ## Output Returns the project name, concurrency, default timeout, owner, and timestamps. The API key must have access to the project. # Get Browserbase project usage Source: https://docs.automate.ax/reference/integrations/browserbase/actions/get-project-usage Read accumulated browser and proxy usage for a project. `browserbase.getProjectUsage` reads accumulated browser and proxy usage for a project. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Get Browserbase project usage", () => { onInvocation() browserbase.getProjectUsage({ projectId: "project-id" }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `projectId` | `string` | Yes | — | Browserbase project ID. | ## Output Returns `browserMinutes` and `proxyBytes`. Usage is cumulative according to Browserbase's project accounting. # Get Browserbase session Source: https://docs.automate.ax/reference/integrations/browserbase/actions/get-session Read current state and connection details for one session. `browserbase.getSession` reads current state and connection details for one session. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Get Browserbase session", () => { onInvocation() browserbase.getSession({ sessionId: "session-id" }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `sessionId` | `string` | Yes | — | Browserbase session ID. | ## Output Returns the session record. Active sessions can include connection URLs and a signing key. Connection credentials are sensitive and expire with the session. # Get Browserbase session live URLs Source: https://docs.automate.ax/reference/integrations/browserbase/actions/get-session-live-urls Get live debugger URLs for a running session and its pages. `browserbase.getSessionLiveUrls` gets live debugger URLs for a running session and its pages. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Get Browserbase session live URLs", () => { onInvocation() browserbase.getSessionLiveUrls({ sessionId: "session-id" }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `sessionId` | `string` | Yes | — | Running session ID. | ## Output Returns session debugger URLs, a WebSocket URL, and page-level debugger links. A page's `faviconUrl` is an empty string when Browserbase doesn't detect a page icon. Live URLs work only while Browserbase retains an inspectable session. # Get Browserbase session replay Source: https://docs.automate.ax/reference/integrations/browserbase/actions/get-session-replay Get page and timing metadata for a session replay. `browserbase.getSessionReplay` gets page and timing metadata for a session replay. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Get Browserbase session replay", () => { onInvocation() browserbase.getSessionReplay({ sessionId: "session-id" }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `sessionId` | `string` | Yes | — | Recorded session ID. | ## Output Returns `pageCount` and page IDs, URLs, and millisecond time ranges. Replay metadata exists only for sessions Browserbase recorded and still retains. # Get Browserbase session replay page Source: https://docs.automate.ax/reference/integrations/browserbase/actions/get-session-replay-page Get the HLS playlist for one recorded page. `browserbase.getSessionReplayPage` gets the HLS playlist for one recorded page. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Get Browserbase session replay page", () => { onInvocation() browserbase.getSessionReplayPage({ pageId: "0", sessionId: "session-id" }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `sessionId` | `string` | Yes | — | Recorded session ID. | | `pageId` | `string` | Yes | — | Numeric page ID from `getSessionReplay`. | ## Output Returns `{ playlist }` containing the HLS VOD media playlist text. Use a page ID returned by the replay metadata action. # Invoke Browserbase function Source: https://docs.automate.ax/reference/integrations/browserbase/actions/invoke-function Start an asynchronous Browserbase Function invocation. `browserbase.invokeFunction` starts an asynchronous Browserbase Function invocation. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Invoke Browserbase function", () => { onInvocation() browserbase.invokeFunction({ functionId: "00000000-0000-4000-8000-000000000001", params: { query: "release notes" }, }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `functionId` | UUID | Yes | — | Function ID. | | `params` | `Record` | No | None | Function parameters. | | `sessionCreateParams` | `object` | No | Version defaults | Session overrides including browser, proxy, metadata, and 60–900 second timeout settings. | ## Output Returns the accepted invocation with status, version, session, and timestamps. Invocation is asynchronous and not replay-safe. Poll `getInvocation`. # List Browserbase agent run messages Source: https://docs.automate.ax/reference/integrations/browserbase/actions/list-agent-run-messages Read chronological assistant and tool messages from a run. `browserbase.listAgentRunMessages` reads chronological assistant and tool messages from a run. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("List Browserbase agent run messages", () => { onInvocation() browserbase.listAgentRunMessages({ runId: "run-id", limit: 100 }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `runId` | `string` | Yes | — | Browserbase run ID. | | `since` | `string` | No | Beginning | Cursor from `nextSince`. | | `limit` | `number` | No | Provider default | 1 through 100. | | `all` | `boolean` | No | `false` | Ask Browserbase for all available messages. | ## Output Returns AI SDK-compatible messages and nullable `nextSince`. Pass `nextSince` as `since` for incremental polling. # List Browserbase agent runs Source: https://docs.automate.ax/reference/integrations/browserbase/actions/list-agent-runs List agent runs with status and time filters. `browserbase.listAgentRuns` lists agent runs with status and time filters. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("List Browserbase agent runs", () => { onInvocation() browserbase.listAgentRuns({ agentId: "agent-id", status: "COMPLETED" }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `agentId` | `string` | No | All agents | Agent filter. | | `status` | Run status | No | All | Lifecycle filter. | | `cursor` | `string` | No | First page | Cursor from `nextCursor`. | | `limit` | `number` | No | Provider default | 1 through 1,000. | | `startAt` / `endAt` | ISO date-time | No | None | Creation-time bounds. | ## Output Returns `data`, `limit`, and nullable `nextCursor`. Terminal statuses are `COMPLETED`, `FAILED`, `STOPPED`, and `TIMED_OUT`. # List Browserbase agents Source: https://docs.automate.ax/reference/integrations/browserbase/actions/list-agents List a cursor page of reusable browser agents. `browserbase.listAgents` lists a cursor page of reusable browser agents. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("List Browserbase agents", () => { onInvocation() browserbase.listAgents({ limit: 100 }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `cursor` | `string` | No | First page | Cursor from `nextCursor`. | | `limit` | `number` | No | Provider default | 1 through 1,000. | | `startAt` / `endAt` | ISO date-time | No | None | Creation-time bounds. | ## Output Returns `data`, `limit`, and nullable `nextCursor`. Pass `nextCursor` as `cursor` to continue. # List Browserbase certificates Source: https://docs.automate.ax/reference/integrations/browserbase/actions/list-certificates List uploaded TLS certificates available to sessions. `browserbase.listCertificates` lists uploaded TLS certificates available to sessions. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("List Browserbase certificates", () => { onInvocation() browserbase.listCertificates() }) ``` ## Inputs This action takes no inputs. ## Output Returns certificate IDs, project IDs, and timestamps. Certificate contents are not included. # List Browserbase downloads Source: https://docs.automate.ax/reference/integrations/browserbase/actions/list-downloads List files downloaded by one browser session. `browserbase.listDownloads` lists files downloaded by one browser session. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("List Browserbase downloads", () => { onInvocation() browserbase.listDownloads({ sessionId: "session-id", limit: 20 }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `sessionId` | `string` | Yes | — | Session ID. | | `filename` / `mimeType` | `string` | No | None | Exact filters. | | `minSize` / `maxSize` | `number` | No | None | Byte-size bounds. | | `createdAfter` / `createdBefore` | ISO date-time | No | None | Creation-time bounds. | | `limit` | `number` | No | `20` | 1 through 100. | | `offset` | `number` | No | `0` | Results to skip. | ## Output Returns matching download metadata with `total`, `limit`, and `offset`. `minSize` cannot exceed `maxSize`. # List Browserbase function builds Source: https://docs.automate.ax/reference/integrations/browserbase/actions/list-function-builds List Browserbase Function build jobs. `browserbase.listFunctionBuilds` lists Browserbase Function build jobs. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("List Browserbase function builds", () => { onInvocation() browserbase.listFunctionBuilds({ status: "FAILED", limit: 20 }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `status` | `'PENDING' \| 'RUNNING' \| 'COMPLETED' \| 'FAILED'` | No | All | Build status. | | `limit` | `number` | No | `20` | 1 through 100. | | `offset` | `number` | No | `0` | Results to skip. | ## Output Returns `data` and total builds. Inspect failed builds with `getFunctionBuild` and `getFunctionBuildLogs`. # List Browserbase function versions Source: https://docs.automate.ax/reference/integrations/browserbase/actions/list-function-versions List immutable versions of one Browserbase Function. `browserbase.listFunctionVersions` lists immutable versions of one Browserbase Function. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("List Browserbase function versions", () => { onInvocation() browserbase.listFunctionVersions({ functionId: "00000000-0000-4000-8000-000000000001", limit: 20, }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `functionId` | UUID | Yes | — | Function ID. | | `limit` | `number` | No | `20` | 1 through 100. | | `offset` | `number` | No | `0` | Results to skip. | ## Output Returns `results` and total versions. Each version identifies its build and stored session and user-parameter schemas. # List Browserbase functions Source: https://docs.automate.ax/reference/integrations/browserbase/actions/list-functions List deployed Browserbase Functions. `browserbase.listFunctions` lists deployed Browserbase Functions. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("List Browserbase functions", () => { onInvocation() browserbase.listFunctions({ limit: 20, offset: 0 }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `limit` | `number` | No | `20` | 1 through 100. | | `offset` | `number` | No | `0` | Results to skip. | ## Output Returns `data` and total matching functions. Functions are created through Browserbase's build workflow; this action reads deployed functions. # List Browserbase projects Source: https://docs.automate.ax/reference/integrations/browserbase/actions/list-projects List projects available to the connected API key. `browserbase.listProjects` lists projects available to the connected API key. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("List Browserbase projects", () => { onInvocation() browserbase.listProjects() }) ``` ## Inputs This action takes no inputs. ## Output Returns project IDs, names, concurrency, default timeouts, ownership, and timestamps. This read-only action is also the credential health-check route. # List Browserbase session logs Source: https://docs.automate.ax/reference/integrations/browserbase/actions/list-session-logs Read captured Chrome DevTools Protocol traffic for a session. `browserbase.listSessionLogs` reads captured Chrome DevTools Protocol traffic for a session. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("List Browserbase session logs", () => { onInvocation() browserbase.listSessionLogs({ sessionId: "session-id" }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `sessionId` | `string` | Yes | — | Session ID. | ## Output Returns timestamped CDP methods with optional request and response bodies. The session must have logging enabled; large logs can contain page data. # List Browserbase session recording downloads Source: https://docs.automate.ax/reference/integrations/browserbase/actions/list-session-recording-downloads Poll MP4 assembly state and retrieve completed page URLs. `browserbase.listSessionRecordingDownloads` polls MP4 assembly state and retrieves completed page URLs. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation( "List Browserbase session recording downloads", () => { onInvocation() browserbase.listSessionRecordingDownloads({ sessionId: "session-id" }) }, ) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `sessionId` | `string` | Yes | — | Recorded session ID. | ## Output Returns per-page status, completion time, and a short-lived URL when available. Signed URLs are short-lived and may be absent for BYOS projects. # List Browserbase sessions Source: https://docs.automate.ax/reference/integrations/browserbase/actions/list-sessions List sessions by lifecycle status or user-metadata query. `browserbase.listSessions` lists sessions by lifecycle status or user-metadata query. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("List Browserbase sessions", () => { onInvocation() browserbase.listSessions({ status: "RUNNING" }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `status` | `'PENDING' \| 'RUNNING' \| 'ERROR' \| 'TIMED_OUT' \| 'COMPLETED'` | No | All | Lifecycle filter. | | `q` | `string` | No | None | Browserbase user-metadata query. | ## Output Returns matching session records with lifecycle, region, usage, and metadata. Use Browserbase metadata query syntax in `q`. # List Browserbase function version invocations Source: https://docs.automate.ax/reference/integrations/browserbase/actions/list-version-invocations List invocations for one immutable Function version. `browserbase.listFunctionVersionInvocations` lists invocations for one immutable Function version. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation( "List Browserbase function version invocations", () => { onInvocation() browserbase.listFunctionVersionInvocations({ versionId: "00000000-0000-4000-8000-000000000001", status: "COMPLETED", }) }, ) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `versionId` | UUID | Yes | — | Function version ID. | | `status` | `'PENDING' \| 'RUNNING' \| 'COMPLETED' \| 'FAILED'` | No | All | Invocation status. | | `limit` | `number` | No | `20` | 1 through 100. | | `offset` | `number` | No | `0` | Results to skip. | ## Output Returns `results` and total invocations. Filter by status when reconciling a version's completed or failed work. # Request Browserbase session recording downloads Source: https://docs.automate.ax/reference/integrations/browserbase/actions/request-session-recording-downloads Start asynchronous MP4 assembly for every recorded page. `browserbase.requestSessionRecordingDownloads` starts asynchronous MP4 assembly for every recorded page. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation( "Request Browserbase session recording downloads", () => { onInvocation() browserbase.requestSessionRecordingDownloads({ sessionId: "session-id" }) }, ) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `sessionId` | `string` | Yes | — | Completed, recorded session ID. | ## Output Returns one `PENDING`, `COMPLETED`, or `FAILED` item per page. The session must be complete and recorded. Repeating the request can re-enqueue pages, so this action is not replay-safe. # Run Browserbase agent Source: https://docs.automate.ax/reference/integrations/browserbase/actions/run-agent Start an autonomous browser task. `browserbase.runAgent` starts an autonomous browser task. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Run Browserbase agent", () => { onInvocation() browserbase.runAgent({ agentId: "agent-id", task: "Summarize the release notes", }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `task` | `string` | Yes | — | Task for the agent. | | `agentId` | `string` | No | No reusable agent | Reusable agent definition. | | `browserSettings` | `object` | No | Provider defaults | Context, proxies, and verified-browser settings. | | `resultSchema` | `Record` | No | Agent default | Per-run JSON Schema. | | `variables` | `Record` | No | None | Named task variables. | ## Output Returns the initial run record with status and identifiers. Runs consume Browserbase resources and are not replay-safe. # Search the web with Browserbase Source: https://docs.automate.ax/reference/integrations/browserbase/actions/search-web Run a Browserbase web search and receive structured results. `browserbase.searchWeb` runs a Browserbase web search and receives structured results. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Search the web with Browserbase", () => { onInvocation() browserbase.searchWeb({ query: "Automate.ax", numResults: 10 }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `query` | `string` | Yes | — | Search query, 1 through 200 characters. | | `numResults` | `number` | No | `10` | Result count, 1 through 25. | ## Output Returns the executed query, request ID, and result URLs, titles, and optional metadata. Searches may consume plan quota and are not replay-safe. # Stop Browserbase agent run Source: https://docs.automate.ax/reference/integrations/browserbase/actions/stop-agent-run Request a graceful stop for an in-progress agent run. `browserbase.stopAgentRun` requests a graceful stop for an in-progress agent run. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Stop Browserbase agent run", () => { onInvocation() browserbase.stopAgentRun({ runId: "run-id" }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `runId` | `string` | Yes | — | In-progress run ID. | ## Output Returns Browserbase's accepted run state. Stopping a run is not replay-safe; poll `getAgentRun` for the terminal state. # Update Browserbase agent Source: https://docs.automate.ax/reference/integrations/browserbase/actions/update-agent Change a reusable browser agent's defaults. `browserbase.updateAgent` changes a reusable browser agent's defaults. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Update Browserbase agent", () => { onInvocation() browserbase.updateAgent({ agentId: "agent-id", systemPrompt: "Use official sources.", }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `agentId` | `string` | Yes | — | Browserbase agent ID. | | `name` | `string` | No | Unchanged | New name. | | `systemPrompt` | `string` | No | Unchanged | New prompt. | | `resultSchema` | `Record` | No | Unchanged | New JSON Schema. | ## Output Returns the updated agent. Provide at least one field to update. Updates are not replay-safe. # Upload Browserbase certificate Source: https://docs.automate.ax/reference/integrations/browserbase/actions/upload-certificate Upload a trusted TLS certificate for session proxy settings. `browserbase.uploadCertificate` uploads a trusted TLS certificate for session proxy settings. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Upload Browserbase certificate", () => { onInvocation() browserbase.uploadCertificate({ file: new Blob(["-----BEGIN CERTIFICATE-----\n..."]), filename: "root.pem", }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `file` | `Blob` | Yes | — | Certificate bytes. | | `filename` | `string` | Yes | — | Certificate filename, up to 255 characters. | ## Output Returns the certificate ID, project, and timestamps. Use the returned UUID under `proxySettings.caCertificates`. Uploads are not replay-safe. # Upload Browserbase extension Source: https://docs.automate.ax/reference/integrations/browserbase/actions/upload-extension Upload a Chrome extension archive for later sessions. `browserbase.uploadExtension` uploads a Chrome extension archive for later sessions. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Upload Browserbase extension", () => { onInvocation() browserbase.uploadExtension({ file: new Blob(["extension archive bytes"]), filename: "extension.zip", }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `file` | `Blob` | Yes | — | Chrome extension archive. | | `filename` | `string` | Yes | — | Archive filename, up to 255 characters. | ## Output Returns the extension ID, filename, project, and timestamps. Pass the returned ID when creating a session. Uploads are not replay-safe. # Upload Browserbase session file Source: https://docs.automate.ax/reference/integrations/browserbase/actions/upload-session-file Upload a file for a browser file input in a running session. `browserbase.uploadSessionFile` uploads a file for a browser file input in a running session. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects a named Browserbase binding. ## Example ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { browserbase } from "automate.ax/browserbase" export default automation("Upload Browserbase session file", () => { onInvocation() browserbase.uploadSessionFile({ file: new Blob(["hello"], { type: "text/plain" }), filename: "hello.txt", sessionId: "session-id", }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `sessionId` | `string` | Yes | — | Running session ID. | | `file` | `Blob` | Yes | — | File bytes. | | `filename` | `string` | Yes | — | Filename, up to 255 characters. | ## Output Returns Browserbase's upload confirmation message. Uploads mutate session state and are not replay-safe. # Browserbase Source: https://docs.automate.ax/reference/integrations/browserbase/index Run cloud browsers, browser agents, and serverless browser functions with Browserbase. Use Browserbase to run cloud browser sessions, agents, and functions; search or fetch the web; inspect recordings and logs; and manage projects, contexts, extensions, certificates, and downloads. Connect Browserbase with an API key and project ID from the Browserbase dashboard. ## Exports ```ts theme={null} import { browserbase, browserbaseAccount, getBrowserbaseClient, } from "automate.ax/browserbase" ``` * `browserbase` contains the packaged Browserbase actions. * `browserbaseAccount("name")` selects a named Browserbase connection. * `getBrowserbaseClient` creates the authenticated Browserbase client for a custom account-backed action. ## Actions * [Create Browserbase session](/reference/integrations/browserbase/actions/create-session) * [List Browserbase sessions](/reference/integrations/browserbase/actions/list-sessions) * [Get Browserbase session](/reference/integrations/browserbase/actions/get-session) * [End Browserbase session](/reference/integrations/browserbase/actions/end-session) * [Get Browserbase session live URLs](/reference/integrations/browserbase/actions/get-session-live-urls) * [List Browserbase session logs](/reference/integrations/browserbase/actions/list-session-logs) * [Request Browserbase session recording downloads](/reference/integrations/browserbase/actions/request-session-recording-downloads) * [List Browserbase session recording downloads](/reference/integrations/browserbase/actions/list-session-recording-downloads) * [Get Browserbase session replay](/reference/integrations/browserbase/actions/get-session-replay) * [Get Browserbase session replay page](/reference/integrations/browserbase/actions/get-session-replay-page) * [Upload Browserbase session file](/reference/integrations/browserbase/actions/upload-session-file) * [List Browserbase projects](/reference/integrations/browserbase/actions/list-projects) * [Get Browserbase project](/reference/integrations/browserbase/actions/get-project) * [Get Browserbase project usage](/reference/integrations/browserbase/actions/get-project-usage) * [Create Browserbase context](/reference/integrations/browserbase/actions/create-context) * [Get Browserbase context](/reference/integrations/browserbase/actions/get-context) * [Delete Browserbase context](/reference/integrations/browserbase/actions/delete-context) * [Upload Browserbase extension](/reference/integrations/browserbase/actions/upload-extension) * [Get Browserbase extension](/reference/integrations/browserbase/actions/get-extension) * [Delete Browserbase extension](/reference/integrations/browserbase/actions/delete-extension) * [Upload Browserbase certificate](/reference/integrations/browserbase/actions/upload-certificate) * [List Browserbase certificates](/reference/integrations/browserbase/actions/list-certificates) * [Get Browserbase certificate](/reference/integrations/browserbase/actions/get-certificate) * [Delete Browserbase certificate](/reference/integrations/browserbase/actions/delete-certificate) * [Create Browserbase agent](/reference/integrations/browserbase/actions/create-agent) * [List Browserbase agents](/reference/integrations/browserbase/actions/list-agents) * [Get Browserbase agent](/reference/integrations/browserbase/actions/get-agent) * [Update Browserbase agent](/reference/integrations/browserbase/actions/update-agent) * [Delete Browserbase agent](/reference/integrations/browserbase/actions/delete-agent) * [Run Browserbase agent](/reference/integrations/browserbase/actions/run-agent) * [List Browserbase agent runs](/reference/integrations/browserbase/actions/list-agent-runs) * [Get Browserbase agent run](/reference/integrations/browserbase/actions/get-agent-run) * [List Browserbase agent run messages](/reference/integrations/browserbase/actions/list-agent-run-messages) * [Stop Browserbase agent run](/reference/integrations/browserbase/actions/stop-agent-run) * [Search the web with Browserbase](/reference/integrations/browserbase/actions/search-web) * [Fetch page with Browserbase](/reference/integrations/browserbase/actions/fetch-page) * [List Browserbase downloads](/reference/integrations/browserbase/actions/list-downloads) * [Get Browserbase download](/reference/integrations/browserbase/actions/get-download) * [Download Browserbase file](/reference/integrations/browserbase/actions/download-file) * [Delete Browserbase download](/reference/integrations/browserbase/actions/delete-download) * [List Browserbase functions](/reference/integrations/browserbase/actions/list-functions) * [Get Browserbase function](/reference/integrations/browserbase/actions/get-function) * [Invoke Browserbase function](/reference/integrations/browserbase/actions/invoke-function) * [List Browserbase function versions](/reference/integrations/browserbase/actions/list-function-versions) * [Get Browserbase function version](/reference/integrations/browserbase/actions/get-function-version) * [List Browserbase function builds](/reference/integrations/browserbase/actions/list-function-builds) * [Get Browserbase function build](/reference/integrations/browserbase/actions/get-function-build) * [Get Browserbase function build logs](/reference/integrations/browserbase/actions/get-function-build-logs) * [Get Browserbase invocation](/reference/integrations/browserbase/actions/get-invocation) * [Get Browserbase invocation logs](/reference/integrations/browserbase/actions/get-invocation-logs) * [List Browserbase function version invocations](/reference/integrations/browserbase/actions/list-version-invocations) # Add booking attendee Source: https://docs.automate.ax/reference/integrations/calcom/actions/add-booking-attendee Adds one attendee to an existing booking. `calcom.addBookingAttendee` adds one attendee to an existing booking. ```ts automations/add-booking-attendee.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Add booking attendee", () => { markSignificant( calcom.addBookingAttendee({ bookingUid: "booking-uid", name: "Grace Hopper", email: "grace@example.com", timeZone: "America/New_York", }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `bookingUid` | `string` | Yes | — | | `name` | `string` | Yes | The name of the attendee. | | `timeZone` | `string` | Yes | The time zone of the attendee. | | `phoneNumber` | `string` | No | The phone number of the attendee in international format. | | `language` | `string enum` | No | The preferred language of the attendee. Used for booking confirmation. Default: `"en"`. | | `email` | `string (email)` | Yes | The email of the attendee. | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `name` | `string` | Yes | — | | `email` | `string` | Yes | — | | `displayEmail` | `string` | Yes | Clean email for display purposes | | `timeZone` | `string` | Yes | — | | `language` | `string enum` | No | — | | `absent` | `boolean` | Yes | — | | `phoneNumber` | `string` | No | — | | `id` | `number` | Yes | — | | `bookingId` | `number` | Yes | — | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Add booking guests Source: https://docs.automate.ax/reference/integrations/calcom/actions/add-booking-guests Adds guest email addresses to an existing booking. `calcom.addBookingGuests` adds guest email addresses to an existing booking. ```ts automations/add-booking-guests.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Add booking guests", () => { markSignificant( calcom.addBookingGuests({ bookingUid: "booking-uid", guests: [{ email: "guest@example.com" }], }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `bookingUid` | `string` | Yes | — | | `guests` | `object[]` | Yes | Array of guests to add to the booking. Maximum 100 guests per request. Minimum items: 1. | ## Output The action removes the outer Cal.com status envelope. Its result is one of these data variants: | Variant | Result | | - | - | | Regular booking | One booking object. | | Recurring booking | One recurring booking object or an array of them. | | Seated booking | One seated booking object. | | Recurring seated booking | One recurring seated booking object or an array of them. | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Cancel booking Source: https://docs.automate.ax/reference/integrations/calcom/actions/cancel-booking Cancels a booking, recurrence, or seated attendee. `calcom.cancelBooking` cancels a booking, recurrence, or seated attendee. ```ts automations/cancel-booking.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Cancel booking", () => { markSignificant( calcom.cancelBooking({ bookingUid: "booking-uid", cancellationReason: "Customer request", }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `bookingUid` | `string` | Yes | — | | `cancellationReason` | `string` | No | — | | `cancelSubsequentBookings` | `boolean` | No | For recurring non-seated booking only - if true, cancel booking with the bookingUid of the individual recurrence and all recurrences that come after it. | For a seated booking, pass the required `seatUid` with an optional `cancellationReason`. Regular bookings accept `cancellationReason` and `cancelSubsequentBookings`. ## Output The action removes the outer Cal.com status envelope. Its result is one of these data variants: | Variant | Result | | - | - | | Regular booking | One booking object. | | Recurring booking | One recurring booking object or an array of them. | | Seated booking | One seated booking object. | | Recurring seated booking | One recurring seated booking object or an array of them. | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Clear booking limits Source: https://docs.automate.ax/reference/integrations/calcom/actions/clear-booking-limits Removes every booking limit from the connected Cal.com profile. `calcom.clearBookingLimits` removes every booking limit from the connected Cal.com profile. ```ts automations/clear-booking-limits.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Clear booking limits", () => { markSignificant(calcom.clearBookingLimits({})) }) ``` ## Input and output This action takes no input and returns an empty object after Cal.com removes every booking limit from the connected profile. Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Confirm booking Source: https://docs.automate.ax/reference/integrations/calcom/actions/confirm-booking Confirms a pending Cal.com booking. `calcom.confirmBooking` confirms a pending Cal.com booking. ```ts automations/confirm-booking.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Confirm booking", () => { markSignificant(calcom.confirmBooking({ bookingUid: "booking-uid" })) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `bookingUid` | `string` | Yes | — | ## Output The action removes the outer Cal.com status envelope. Its result is one of these data variants: | Variant | Result | | - | - | | Regular booking | One booking object. | | Recurring booking | One recurring booking object or an array of them. | | Seated booking | One seated booking object. | | Recurring seated booking | One recurring seated booking object or an array of them. | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Create booking Source: https://docs.automate.ax/reference/integrations/calcom/actions/create-booking Creates a regular, recurring, seated, or instant Cal.com booking. `calcom.createBooking` creates a regular, recurring, seated, or instant Cal.com booking. ```ts automations/create-booking.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Create booking", () => { markSignificant( calcom.createBooking({ eventTypeId: 23, start: "2026-09-10T17:00:00.000Z", attendee: { name: "Ada Lovelace", email: "ada@example.com", timeZone: "Europe/London", }, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `start` | `string (date-time)` | Yes | The start time of the booking in ISO 8601 format in UTC timezone. | | `attendee` | `JSON value` | Yes | The attendee's details. | | `bookingFieldsResponses` | `object` | No | Booking field responses consisting of an object with booking field slug as keys and user response as values for custom booking fields added by you. | | `eventTypeId` | `number` | No | The ID of the event type that is booked. Required unless eventTypeSlug and username are provided as an alternative to identifying the event type. | | `eventTypeSlug` | `string` | No | The slug of the event type. Required along with username / teamSlug and optionally organizationSlug if eventTypeId is not provided. | | `username` | `string` | No | The username of the event owner. Required along with eventTypeSlug and optionally organizationSlug if eventTypeId is not provided. | | `teamSlug` | `string` | No | Team slug for team that owns event type for which slots are fetched. Required along with eventTypeSlug and optionally organizationSlug if the team is part of organization | | `organizationSlug` | `string` | No | The organization slug. Optional, only used when booking with eventTypeSlug + username or eventTypeSlug + teamSlug. | | `guests` | `string[]` | No | An optional list of guest emails attending the event. | | `meetingUrl` | `string (uri)` | No | Deprecated - use 'location' instead. Meeting URL just for this booking. Displayed in email and calendar event. If not provided then cal video link will be generated. | | `location` | `object` | No | One of the event type locations. If instead of passing one of the location objects as required by schema you are still passing a string please use an object. | | `metadata` | `object` | No | You can store any additional data you want here. Metadata must have at most 50 keys, each key up to 40 characters, and string values up to 500 characters. | | `lengthInMinutes` | `number` | No | If it is an event type that has multiple possible lengths that attendee can pick from, you can pass the desired booking length here. If not provided then event type default length will be used for the booking. Minimum: 1. | | `routing` | `JSON value` | No | Routing information from routing forms that determined the booking assignment. Both responseId and teamMemberIds are required if provided. | | `emailVerificationCode` | `string` | No | Email verification code required when event type has email verification enabled. | | `allowConflicts` | `boolean` | No | When true and the authenticated user is a host of the event type, availability conflict checks are bypassed. If the user is not a host or is unauthenticated, this parameter is silently ignored. | | `allowBookingOutOfBounds` | `boolean` | No | When true and the authenticated user is a host of the event type, booking time out-of-bounds checks are bypassed allowing bookings outside the normally permitted scheduling window. If the user is not a host or is unauthenticated, this parameter is silently ignored. Only supported on the 2026-02-25 API version. | | `skipBookingLimits` | `boolean` | No | When true and the authenticated user is a host of the event type, booking limit checks (event type, team, and per-host limits such as bookings per day/week/month/year, as well as duration limits) are bypassed, allowing the booking to be created even when a host has reached their limit. If the user is not a host or is unauthenticated, this parameter is silently ignored. Only supported on the 2026-02-25 API version. | Regular bookings use the fields above. Instant bookings add required `instant: true`. Recurring bookings can add `recurrenceCount`. In every variant, identify the event by `eventTypeId` or by `eventTypeSlug` with the applicable username, team, or organization slug. ## Output The action removes the outer Cal.com status envelope. Its result is one of these data variants: | Variant | Result | | - | - | | Regular booking | One booking object with `id`, `uid`, `title`, `status`, `start`, `end`, organizer, attendees, guests, location, and meeting URL fields. | | Recurring booking | An array of recurring booking objects. | | Seated booking | One seated booking object; seated-only fields such as `seatUid` are present only on this branch. | | Recurring seated booking | An array of recurring seated booking objects. | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Create event type Source: https://docs.automate.ax/reference/integrations/calcom/actions/create-event-type Creates a personal Cal.com event type. `calcom.createEventType` creates a personal Cal.com event type. ```ts automations/create-event-type.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Create event type", () => { markSignificant( calcom.createEventType({ title: "Intro call", slug: "intro-call", lengthInMinutes: 30, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `lengthInMinutes` | `number` | Yes | Minimum: 1. | | `lengthInMinutesOptions` | `number[]` | No | If you want that user can choose between different lengths of the event you can specify them here. Must include the provided `lengthInMinutes`. Minimum items: 1. | | `title` | `string` | Yes | — | | `slug` | `string` | Yes | — | | `description` | `string` | No | — | | `bookingFields` | `object[]` | No | Custom fields that can be added to the booking form when the event is booked by someone. By default booking form has name and email field. | | `slotInterval` | `number` | No | Slot interval in minutes. It defaults to the event length. | | `minimumBookingNotice` | `number` | No | Minimum number of minutes before the event that a booking can be made. Minimum: 0. | | `beforeEventBuffer` | `number` | No | Extra time automatically blocked on your calendar before a meeting starts. This gives you time to prepare, review notes, or transition from your previous activity. | | `afterEventBuffer` | `number` | No | Extra time automatically blocked on your calendar after a meeting ends. This gives you time to wrap up, add notes, or decompress before your next commitment. | | `scheduleId` | `number` | No | If you want that this event has different schedule than user's default one you can specify it here. | | `bookingLimitsCount` | `object` | No | Limit how many times this event can be booked | | `bookerActiveBookingsLimit` | `object` | No | Limit the number of active bookings a booker can make for this event type. | | `onlyShowFirstAvailableSlot` | `boolean` | No | This will limit your availability for this event type to one slot per day, scheduled at the earliest available time. | | `bookingLimitsDuration` | `object` | No | Limit total amount of time that this event can be booked | | `bookingWindow` | `object` | No | Limit how far in the future this event can be booked | | `offsetStart` | `number` | No | Offset time slots shown to bookers by the specified number of minutes. Minimum: 0. | | `bookerLayouts` | `JSON value` | No | Should booker have week, month or column view. Specify default layout and enabled layouts user can pick. | | `confirmationPolicy` | `object` | No | Specify how the booking needs to be manually confirmed before it is pushed to the integrations and a confirmation mail is sent. | | `recurrence` | `object` | No | Create a recurring event type. | | `requiresBookerEmailVerification` | `boolean` | No | — | | `skipAttendeeEmailDeliverabilityCheck` | `boolean` | No | When true, skips the MX deliverability check for attendee emails on booking. Format validation and watchlist still apply. Requires the editor to belong to an organization, including a platform organization. | | `emailSettings` | `JSON value` | No | Email settings for this event type. Personal event types require an accepted organization membership; team event types require an organization team. This does not include emails sent by custom email workflows. | | `hideCalendarNotes` | `boolean` | No | — | | `lockTimeZoneToggleOnBookingPage` | `boolean` | No | — | | `color` | `object` | No | — | | `seats` | `object` | No | Create an event type with multiple seats. | | `customName` | `string` | No | Customizable event name with valid variables: \{Link title}, \{Event type title} (legacy), \{Organiser}, \{Scheduler}, \{Location}, \{Organiser first name}, \{Scheduler first name}, \{Scheduler last name}, \{Event duration}, \{LOCATION}, \{HOST/ATTENDEE}, \{HOST}, \{ATTENDEE}, \{USER} | | `destinationCalendar` | `object` | No | — | | `useDestinationCalendarEmail` | `boolean` | No | — | | `hideCalendarEventDetails` | `boolean` | No | — | | `successRedirectUrl` | `string (uri)` | No | A valid URL where the booker will redirect to, once the booking is completed successfully | | `hideOrganizerEmail` | `boolean` | No | Boolean to Hide organizer's email address from the booking screen, email notifications, and calendar events | | `calVideoSettings` | `JSON value` | No | Cal video settings for the event type. Platform customers can't manage this property because currently we have no way of determining if managed user is a host or an attendee. | | `hidden` | `boolean` | No | — | | `bookingRequiresAuthentication` | `boolean` | No | Whether booking this event type through the API requires authentication. When true, only the event-type owner or an organization or team administrator or owner can book it. Default: `false`. | | `disableCancelling` | `JSON value` | No | Settings for disabling cancelling of this event type. | | `disableRescheduling` | `JSON value` | No | Settings for disabling rescheduling of this event type. Can be always disabled or disabled when less than X minutes before the meeting. | | `interfaceLanguage` | `string enum` | No | Set preferred language for the booking interface. Use empty string for visitor's browser language (default). | | `allowReschedulingPastBookings` | `boolean` | No | Enabling this option allows for past events to be rescheduled. Default: `false`. | | `allowReschedulingCancelledBookings` | `boolean` | No | When enabled, users will be able to create a new booking when trying to reschedule a cancelled booking. Default: `false`. | | `showOptimizedSlots` | `boolean` | No | Arrange time slots to optimize availability. Default: `false`. | | `privateNoteEnabled` | `boolean` | No | When enabled, a private note calendar event is created alongside the booking with the resolved template as its description. Only visible to the host. Default: `false`. | | `privateNoteMode` | `JSON value` | No | How private notes are delivered: as an additional host event or by sending separate host and guest invites. | | `privateNoteTemplate` | `string` | No | Template for the private note content. Supports variables like \{Attendee name}, \{Link title}, \{Event type title} (legacy), \{Location}, \{Host name}, \{Event duration}, and custom booking field names. | | `locations` | `object[]` | No | Locations where the event will take place. If not provided, cal video link will be used as the location. Note: Setting a location to a conferencing app does not install the app - the app must already be installed. Via API, only Google Meet (google-meet), Microsoft Teams (office365-video), and Zoom (zoom) can be installed. Cal Video (cal-video) is installed by default. All other conferencing apps must be connected via the Cal.com web app and are not available for Platform plan customers. You can only set an event type location to an app that has already been installed or connected. | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `number` | Yes | — | | `lengthInMinutes` | `number` | Yes | — | | `lengthInMinutesOptions` | `number[]` | No | If you want that user can choose between different lengths of the event you can specify them here. Must include the provided `lengthInMinutes`. | | `title` | `string` | Yes | — | | `slug` | `string` | Yes | — | | `description` | `string` | Yes | — | | `locations` | `object[]` | Yes | — | | `bookingFields` | `object[]` | Yes | — | | `disableGuests` | `boolean` | Yes | — | | `slotInterval` | `number \| null` | No | — | | `minimumBookingNotice` | `number` | No | — | | `beforeEventBuffer` | `number` | No | — | | `afterEventBuffer` | `number` | No | — | | `recurrence` | `object \| null` | Yes | — | | `metadata` | `object` | Yes | — | | `price` | `number` | Yes | — | | `currency` | `string` | Yes | — | | `lockTimeZoneToggleOnBookingPage` | `boolean` | Yes | — | | `seatsPerTimeSlot` | `number \| null` | No | — | | `forwardParamsSuccessRedirect` | `boolean \| null` | Yes | — | | `successRedirectUrl` | `string \| null` | Yes | — | | `isInstantEvent` | `boolean` | Yes | — | | `seatsShowAvailabilityCount` | `boolean \| null` | No | — | | `scheduleId` | `number \| null` | Yes | — | | `bookingLimitsCount` | `object` | No | — | | `bookerActiveBookingsLimit` | `object` | No | — | | `onlyShowFirstAvailableSlot` | `boolean` | No | — | | `bookingLimitsDuration` | `object` | No | — | | `bookingWindow` | `object[] \| object` | No | Configured booking windows, or `{ disabled: boolean }` when the setting is disabled. | | `bookerLayouts` | `object` | No | — | | `confirmationPolicy` | `object` | No | — | | `bookingProposalCount` | `number \| null` | No | — | | `requiresBookerEmailVerification` | `boolean` | No | — | | `skipAttendeeEmailDeliverabilityCheck` | `boolean` | No | When true, skips the MX deliverability check for attendee emails. Format validation and watchlist still apply. Available only to organizations, including platform organizations. | | `emailSettings` | `JSON value` | No | Email settings for this event type. Personal event types require an accepted organization membership; team event types require an organization team. This does not include emails sent by custom email workflows. | | `hideCalendarNotes` | `boolean` | No | — | | `color` | `object` | No | — | | `seats` | `object` | No | — | | `offsetStart` | `number` | No | — | | `customName` | `string` | No | — | | `destinationCalendar` | `object` | No | — | | `useDestinationCalendarEmail` | `boolean` | No | — | | `hideCalendarEventDetails` | `boolean` | No | — | | `hideOrganizerEmail` | `boolean` | No | Boolean to Hide organizer's email address from the booking screen, email notifications, and calendar events | | `calVideoSettings` | `JSON value` | No | Cal video settings for the event type | | `hidden` | `boolean` | Yes | — | | `bookingRequiresAuthentication` | `boolean` | Yes | Whether booking this event type through the API requires authentication. When true, only the event-type owner or an organization or team administrator or owner can book it. | | `disableCancelling` | `JSON value` | No | Settings for disabling cancelling of this event type. | | `disableRescheduling` | `JSON value` | No | Settings for disabling rescheduling of this event type. Can be always disabled or disabled when less than X minutes before the meeting. | | `interfaceLanguage` | `string \| null` | No | — | | `allowReschedulingPastBookings` | `boolean` | No | Enabling this option allows for past events to be rescheduled. | | `allowReschedulingCancelledBookings` | `boolean \| null` | No | — | | `showOptimizedSlots` | `boolean \| null` | No | — | | `privateNoteEnabled` | `boolean` | No | When enabled, a private note calendar event is created alongside the booking with the resolved template as its description. Only visible to the host. | | `privateNoteMode` | `JSON value` | No | — | | `privateNoteTemplate` | `string \| null` | No | — | | `ownerId` | `number` | Yes | — | | `users` | `object[]` | Yes | — | | `bookingUrl` | `string (uri)` | Yes | Full URL to the booking page for this event type | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Create out of office entry Source: https://docs.automate.ax/reference/integrations/calcom/actions/create-out-of-office-entry Creates an out-of-office entry for the connected user. `calcom.createOutOfOfficeEntry` creates an out-of-office entry for the connected user. ```ts automations/create-out-of-office-entry.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Create out of office entry", () => { markSignificant( calcom.createOutOfOfficeEntry({ start: "2026-09-10T00:00:00.000Z", end: "2026-09-12T00:00:00.000Z", reason: "travel", notes: "Conference", }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `start` | `string (date-time)` | Yes | The start date and time of the out of office period in ISO 8601 format in UTC timezone. | | `end` | `string (date-time)` | Yes | The end date and time of the out of office period in ISO 8601 format in UTC timezone. | | `notes` | `string` | No | Optional notes for the out of office entry. | | `toUserId` | `number` | No | The ID of the user covering for the out of office period, if applicable. | | `reason` | `"unspecified" \| "vacation" \| "travel" \| "sick" \| "public_holiday"` | No | the reason for the out of office entry, if applicable | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `userId` | `number` | Yes | The ID of the user. | | `toUserId` | `number` | No | The ID of the user covering for the out of office period, if applicable. | | `id` | `number` | Yes | The ID of the ooo entry. | | `uuid` | `string` | Yes | The UUID of the ooo entry. | | `start` | `string (date-time)` | Yes | The start date and time of the out of office period in ISO 8601 format in UTC timezone. | | `end` | `string (date-time)` | Yes | The end date and time of the out of office period in ISO 8601 format in UTC timezone. | | `notes` | `string` | No | Optional notes for the out of office entry. | | `reason` | `"unspecified" \| "vacation" \| "travel" \| "sick" \| "public_holiday"` | No | the reason for the out of office entry, if applicable | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Create private link Source: https://docs.automate.ax/reference/integrations/calcom/actions/create-private-link Creates a private scheduling link for an event type. `calcom.createPrivateLink` creates a private scheduling link for an event type. ```ts automations/create-private-link.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Create private link", () => { markSignificant( calcom.createPrivateLink({ eventTypeId: 23, maxUsageCount: 10 }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `eventTypeId` | `integer` | Yes | Event type that owns the link. | | `expiresAt` | `string (date-time)` | No | Expiration for a time-based link. | | `maxUsageCount` | `number` | No | Usage cap. Defaults to `1`; pass `-1` for no count cap. | ## Output Returns one of two link variants. Both include required `linkId: string`, `eventTypeId: number`, `isExpired: boolean`, and `bookingUrl: string`. A time-based link also has required `expiresAt: string`; a usage-based link instead has required `maxUsageCount: number` and `usageCount: number`. Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Create schedule Source: https://docs.automate.ax/reference/integrations/calcom/actions/create-schedule Creates a Cal.com availability schedule. `calcom.createSchedule` creates a Cal.com availability schedule. ```ts automations/create-schedule.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Create schedule", () => { markSignificant( calcom.createSchedule({ name: "Work hours", timeZone: "America/Los_Angeles", isDefault: false, }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `name` | `string` | Yes | Schedule name. | | `timeZone` | `string` | Yes | IANA time zone. | | `isDefault` | `boolean` | Yes | Whether this becomes the default schedule. | | `availability` | `object[]` | No | Weekly availability blocks. | | `availability[].days` | `string[]` | Yes | Weekdays for the block. | | `availability[].startTime` | `string` | Yes | Start in `HH:MM` format. | | `availability[].endTime` | `string` | Yes | End in `HH:MM` format. | | `overrides` | `object[]` | No | Date-specific availability blocks. | | `overrides[].date` | `string` | Yes | Override date. | | `overrides[].startTime` | `string` | Yes | Start in `HH:MM` format. | | `overrides[].endTime` | `string` | Yes | End in `HH:MM` format. | ## Output Returns the created schedule with required `id`, `ownerId`, `name`, `timeZone`, `availability`, `isDefault`, and `overrides` fields. Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Create team Source: https://docs.automate.ax/reference/integrations/calcom/actions/create-team Creates a Cal.com team. `calcom.createTeam` creates a Cal.com team. ```ts automations/create-team.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Create team", () => { markSignificant(calcom.createTeam({ name: "Platform Engineering" })) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `name` | `string` | Yes | Name of the team. Maximum 155 characters. Cannot contain links or URLs. | | `slug` | `string` | No | Team slug in kebab-case - if not provided will be generated automatically based on name. | | `logoUrl` | `string` | No | URL of the teams logo image | | `calVideoLogo` | `string` | No | — | | `appLogo` | `string` | No | — | | `appIconLogo` | `string` | No | — | | `bio` | `string` | No | — | | `hideBranding` | `boolean` | No | Default: `false`. | | `isPrivate` | `boolean` | No | — | | `hideBookATeamMember` | `boolean` | No | — | | `metadata` | `object` | No | You can store any additional data you want here. Metadata must have at most 50 keys, each key up to 40 characters. Values can be strings (up to 500 characters), numbers, or booleans. | | `theme` | `string` | No | — | | `brandColor` | `string` | No | — | | `darkBrandColor` | `string` | No | — | | `bannerUrl` | `string` | No | URL of the teams banner image which is shown on booker | | `timeFormat` | `number` | No | — | | `timeZone` | `string` | No | Time zone used for the team's default Monday-to-Friday schedule from 9 AM to 5 PM. Defaults to `"Europe/London"`. | | `weekStart` | `string` | No | Default: `"Sunday"`. | | `autoAcceptCreator` | `boolean` | No | If you are a platform customer, don't pass 'false', because then team creator won't be able to create team event types. Default: `true`. | ## Output The action removes the outer Cal.com status envelope. The result is either: | Variant | Result | | - | - | | Created team | The team object, including `id`, `name`, and organization settings. | | Pending team | `message`, `paymentLink`, and `pendingTeam` when the plan requires completing payment before creation. | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Create team event type Source: https://docs.automate.ax/reference/integrations/calcom/actions/create-team-event-type Creates a team-owned Cal.com event type. `calcom.createTeamEventType` creates a team-owned Cal.com event type. ```ts automations/create-team-event-type.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Create team event type", () => { markSignificant( calcom.createTeamEventType({ teamId: 17, title: "Support rotation", slug: "support-rotation", lengthInMinutes: 30, schedulingType: "roundRobin", }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `teamId` | `integer` | Yes | Must be greater than 0. | | `lengthInMinutes` | `number` | Yes | Minimum: 1. | | `lengthInMinutesOptions` | `number[]` | No | If you want that user can choose between different lengths of the event you can specify them here. Must include the provided `lengthInMinutes`. Minimum items: 1. | | `title` | `string` | Yes | — | | `slug` | `string` | Yes | — | | `description` | `string` | No | — | | `bookingFields` | `object[]` | No | Custom fields that can be added to the booking form when the event is booked by someone. By default booking form has name and email field. | | `slotInterval` | `number` | No | Slot interval in minutes. It defaults to the event length. | | `minimumBookingNotice` | `number` | No | Minimum number of minutes before the event that a booking can be made. Minimum: 0. | | `beforeEventBuffer` | `number` | No | Extra time automatically blocked on your calendar before a meeting starts. This gives you time to prepare, review notes, or transition from your previous activity. | | `afterEventBuffer` | `number` | No | Extra time automatically blocked on your calendar after a meeting ends. This gives you time to wrap up, add notes, or decompress before your next commitment. | | `scheduleId` | `number` | No | If you want that this event has different schedule than user's default one you can specify it here. | | `bookingLimitsCount` | `object` | No | Limit how many times this event can be booked | | `bookerActiveBookingsLimit` | `object` | No | Limit the number of active bookings a booker can make for this event type. | | `onlyShowFirstAvailableSlot` | `boolean` | No | This will limit your availability for this event type to one slot per day, scheduled at the earliest available time. | | `bookingLimitsDuration` | `object` | No | Limit total amount of time that this event can be booked | | `bookingWindow` | `object` | No | Limit how far in the future this event can be booked | | `offsetStart` | `number` | No | Offset time slots shown to bookers by the specified number of minutes. Minimum: 0. | | `bookerLayouts` | `JSON value` | No | Should booker have week, month or column view. Specify default layout and enabled layouts user can pick. | | `confirmationPolicy` | `object` | No | Specify how the booking needs to be manually confirmed before it is pushed to the integrations and a confirmation mail is sent. | | `recurrence` | `object` | No | Create a recurring event type. | | `requiresBookerEmailVerification` | `boolean` | No | — | | `skipAttendeeEmailDeliverabilityCheck` | `boolean` | No | When true, skips the MX deliverability check for attendee emails on booking. Format validation and watchlist still apply. Requires the editor to belong to an organization, including a platform organization. | | `emailSettings` | `JSON value` | No | Email settings for this event type. Personal event types require an accepted organization membership; team event types require an organization team. This does not include emails sent by custom email workflows. | | `hideCalendarNotes` | `boolean` | No | — | | `lockTimeZoneToggleOnBookingPage` | `boolean` | No | — | | `color` | `object` | No | — | | `seats` | `object` | No | Create an event type with multiple seats. | | `customName` | `string` | No | Customizable event name with valid variables: \{Link title}, \{Event type title} (legacy), \{Organiser}, \{Scheduler}, \{Location}, \{Organiser first name}, \{Scheduler first name}, \{Scheduler last name}, \{Event duration}, \{LOCATION}, \{HOST/ATTENDEE}, \{HOST}, \{ATTENDEE}, \{USER} | | `destinationCalendar` | `object` | No | — | | `useDestinationCalendarEmail` | `boolean` | No | — | | `hideCalendarEventDetails` | `boolean` | No | — | | `successRedirectUrl` | `string (uri)` | No | A valid URL where the booker will redirect to, once the booking is completed successfully | | `hideOrganizerEmail` | `boolean` | No | Boolean to Hide organizer's email address from the booking screen, email notifications, and calendar events | | `calVideoSettings` | `JSON value` | No | Cal video settings for the event type. Platform customers can't manage this property because currently we have no way of determining if managed user is a host or an attendee. | | `hidden` | `boolean` | No | — | | `bookingRequiresAuthentication` | `boolean` | No | Whether booking this event type through the API requires authentication. When true, only the event-type owner or an organization or team administrator or owner can book it. Default: `false`. | | `disableCancelling` | `JSON value` | No | Settings for disabling cancelling of this event type. | | `disableRescheduling` | `JSON value` | No | Settings for disabling rescheduling of this event type. Can be always disabled or disabled when less than X minutes before the meeting. | | `interfaceLanguage` | `string enum` | No | Set preferred language for the booking interface. Use empty string for visitor's browser language (default). | | `allowReschedulingPastBookings` | `boolean` | No | Enabling this option allows for past events to be rescheduled. Default: `false`. | | `allowReschedulingCancelledBookings` | `boolean` | No | When enabled, users will be able to create a new booking when trying to reschedule a cancelled booking. Default: `false`. | | `showOptimizedSlots` | `boolean` | No | Arrange time slots to optimize availability. Default: `false`. | | `privateNoteEnabled` | `boolean` | No | When enabled, a private note calendar event is created alongside the booking with the resolved template as its description. Only visible to the host. Default: `false`. | | `privateNoteMode` | `JSON value` | No | How private notes are delivered: as an additional host event or by sending separate host and guest invites. | | `privateNoteTemplate` | `string` | No | Template for the private note content. Supports variables like \{Attendee name}, \{Link title}, \{Event type title} (legacy), \{Location}, \{Host name}, \{Event duration}, and custom booking field names. | | `schedulingType` | `"collective" \| "roundRobin" \| "managed"` | Yes | The scheduling type for the team event - collective, roundRobin or managed. | | `hosts` | `object[]` | No | Hosts contain specific team members you want to assign to this event type. To assign every current and future team member use `assignAllTeamMembers: true` and omit this field. As an exception, round robin event types accept `hosts` together with `assignAllTeamMembers: true` to mark specific team members as fixed hosts (entries with `mandatory: true`); non-mandatory entries are silently ignored in that combination because they would be added to the round robin pool by `assignAllTeamMembers` anyway. For platform customers the hosts can include userIds only of managed users. | | `assignAllTeamMembers` | `boolean` | No | If true, all current and future team members will be assigned to this event type. Mutually exclusive with `hosts` for collective and managed event types. For round robin event types, `hosts` may be provided alongside `assignAllTeamMembers: true` solely to designate fixed hosts via `mandatory: true` entries. | | `locations` | `object[]` | No | Locations where the event will take place. If not provided, cal video link will be used as the location. Note: Setting a location to a conferencing app does not install the app - the app must already be installed. Via API, only Google Meet (google-meet), Microsoft Teams (office365-video), and Zoom (zoom) can be installed. Cal Video (cal-video) is installed by default. All other conferencing apps must be connected via the Cal.com web app and are not available for Platform plan customers. You can only set an event type location to an app that has already been installed or connected. | | `rescheduleWithSameRoundRobinHost` | `boolean` | No | Rescheduled events will be assigned to the same host as initially scheduled. | | `allowRRHostChoiceOnReschedule` | `boolean` | No | Let the person rescheduling choose between keeping the original host and letting round robin pick from the whole team. Requires rescheduleWithSameRoundRobinHost to be enabled. | ## Output The action removes the outer Cal.com status envelope. Cal.com returns either one team event type object or an array of team event type objects. Each object includes its ID, team, hosts, scheduling type, booking URL, and event configuration. Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Decline booking Source: https://docs.automate.ax/reference/integrations/calcom/actions/decline-booking Declines a pending Cal.com booking. `calcom.declineBooking` declines a pending Cal.com booking. ```ts automations/decline-booking.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Decline booking", () => { markSignificant( calcom.declineBooking({ bookingUid: "booking-uid", reason: "Outside supported hours", }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `bookingUid` | `string` | Yes | — | | `reason` | `string` | No | Reason for declining a booking that requires a confirmation | ## Output The action removes the outer Cal.com status envelope. Its result is one of these data variants: | Variant | Result | | - | - | | Regular booking | One booking object. | | Recurring booking | One recurring booking object or an array of them. | | Seated booking | One seated booking object. | | Recurring seated booking | One recurring seated booking object or an array of them. | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Delete event type Source: https://docs.automate.ax/reference/integrations/calcom/actions/delete-event-type Deletes one personal Cal.com event type. `calcom.deleteEventType` deletes one personal Cal.com event type. ```ts automations/delete-event-type.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Delete event type", () => { markSignificant(calcom.deleteEventType({ eventTypeId: 23 })) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `eventTypeId` | `integer` | Yes | Must be greater than 0. | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `number` | Yes | — | | `lengthInMinutes` | `number` | Yes | — | | `title` | `string` | Yes | — | | `slug` | `string` | Yes | — | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Delete out of office entry Source: https://docs.automate.ax/reference/integrations/calcom/actions/delete-out-of-office-entry Deletes one out-of-office entry for the connected user. `calcom.deleteOutOfOfficeEntry` deletes one out-of-office entry for the connected user. ```ts automations/delete-out-of-office-entry.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Delete out of office entry", () => { markSignificant(calcom.deleteOutOfOfficeEntry({ oooId: 11 })) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `oooId` | `integer` | Yes | Must be greater than 0. | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `userId` | `number` | Yes | The ID of the user. | | `toUserId` | `number` | No | The ID of the user covering for the out of office period, if applicable. | | `id` | `number` | Yes | The ID of the ooo entry. | | `uuid` | `string` | Yes | The UUID of the ooo entry. | | `start` | `string (date-time)` | Yes | The start date and time of the out of office period in ISO 8601 format in UTC timezone. | | `end` | `string (date-time)` | Yes | The end date and time of the out of office period in ISO 8601 format in UTC timezone. | | `notes` | `string` | No | Optional notes for the out of office entry. | | `reason` | `"unspecified" \| "vacation" \| "travel" \| "sick" \| "public_holiday"` | No | the reason for the out of office entry, if applicable | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Delete private link Source: https://docs.automate.ax/reference/integrations/calcom/actions/delete-private-link Deletes a private scheduling link. `calcom.deletePrivateLink` deletes a private scheduling link. ```ts automations/delete-private-link.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Delete private link", () => { markSignificant( calcom.deletePrivateLink({ eventTypeId: 23, linkId: "abc123def456" }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `eventTypeId` | `integer` | Yes | Must be greater than 0. | | `linkId` | `string` | Yes | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `linkId` | `string` | No | — | | `message` | `string` | No | — | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Delete schedule Source: https://docs.automate.ax/reference/integrations/calcom/actions/delete-schedule Deletes one Cal.com availability schedule. `calcom.deleteSchedule` deletes one Cal.com availability schedule. ```ts automations/delete-schedule.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Delete schedule", () => { markSignificant(calcom.deleteSchedule({ scheduleId: 17 })) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `scheduleId` | `integer` | Yes | Schedule to delete. | ## Output Returns Cal.com's `{ status: "success" | "error" }` response. Cal.com rejects deletion of the active default schedule. Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Delete slot reservation Source: https://docs.automate.ax/reference/integrations/calcom/actions/delete-slot-reservation Deletes one Cal.com slot reservation. `calcom.deleteSlotReservation` deletes one Cal.com slot reservation. ```ts automations/delete-slot-reservation.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Delete slot reservation", () => { markSignificant(calcom.deleteSlotReservation({ uid: "reservation-uid" })) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `uid` | `string` | Yes | Reservation to release. | ## Output Returns an empty object after Cal.com releases the hold. Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Delete team Source: https://docs.automate.ax/reference/integrations/calcom/actions/delete-team Deletes one Cal.com team. `calcom.deleteTeam` deletes one Cal.com team. ```ts automations/delete-team.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Delete team", () => { markSignificant(calcom.deleteTeam({ teamId: 17 })) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `teamId` | `integer` | Yes | Must be greater than 0. | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `number` | Yes | — | | `parentId` | `number` | No | — | | `name` | `string` | Yes | — | | `slug` | `string` | No | — | | `logoUrl` | `string \| null` | No | Team logo. Cal.com may return an absolute URL or a provider-relative path such as `/api/avatar/...`. | | `calVideoLogo` | `string (uri)` | No | — | | `appLogo` | `string (uri)` | No | — | | `appIconLogo` | `string (uri)` | No | — | | `bio` | `string` | No | — | | `hideBranding` | `boolean` | No | — | | `isOrganization` | `boolean` | Yes | — | | `isPrivate` | `boolean` | No | — | | `hideBookATeamMember` | `boolean` | No | Default: `false`. | | `metadata` | `object` | No | — | | `theme` | `string` | No | — | | `brandColor` | `string` | No | — | | `darkBrandColor` | `string` | No | — | | `bannerUrl` | `string (uri)` | No | — | | `timeFormat` | `number` | No | — | | `timeZone` | `string` | No | Default: `"Europe/London"`. | | `weekStart` | `string` | No | Default: `"Sunday"`. | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Delete team event type Source: https://docs.automate.ax/reference/integrations/calcom/actions/delete-team-event-type Deletes one team-owned Cal.com event type. `calcom.deleteTeamEventType` deletes one team-owned Cal.com event type. ```ts automations/delete-team-event-type.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Delete team event type", () => { markSignificant(calcom.deleteTeamEventType({ teamId: 17, eventTypeId: 23 })) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `teamId` | `integer` | Yes | Must be greater than 0. | | `eventTypeId` | `integer` | Yes | Must be greater than 0. | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `number` | Yes | — | | `title` | `string` | Yes | — | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Get booking Source: https://docs.automate.ax/reference/integrations/calcom/actions/get-booking Retrieves one Cal.com booking by UID. `calcom.getBooking` retrieves one Cal.com booking by UID. ```ts automations/get-booking.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Get booking", () => { markSignificant(calcom.getBooking({ bookingUid: "booking-uid" })) }) ``` ## Input Pass the non-empty booking `bookingUid`. ## Output The action removes the outer Cal.com status envelope. Its result is one of these data variants: | Variant | Result | | - | - | | Regular booking | One booking object. | | Recurring booking | One recurring booking object or an array of them. | | Seated booking | One seated booking object. | | Recurring seated booking | One recurring seated booking object or an array of them. | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Get booking attendee Source: https://docs.automate.ax/reference/integrations/calcom/actions/get-booking-attendee Retrieves one booking attendee by ID. `calcom.getBookingAttendee` retrieves one booking attendee by ID. ```ts automations/get-booking-attendee.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Get booking attendee", () => { markSignificant( calcom.getBookingAttendee({ bookingUid: "booking-uid", attendeeId: 5 }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `attendeeId` | `integer` | Yes | Must be greater than 0. | | `bookingUid` | `string` | Yes | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `name` | `string` | Yes | — | | `email` | `string` | Yes | — | | `displayEmail` | `string` | Yes | Clean email for display purposes | | `timeZone` | `string` | Yes | — | | `language` | `string enum` | No | — | | `absent` | `boolean` | Yes | — | | `phoneNumber` | `string` | No | — | | `id` | `number` | Yes | — | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Get booking calendar links Source: https://docs.automate.ax/reference/integrations/calcom/actions/get-booking-calendar-links Retrieves add-to-calendar links for one booking. `calcom.getBookingCalendarLinks` retrieves add-to-calendar links for one booking. ```ts automations/get-booking-calendar-links.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Get booking calendar links", () => { markSignificant(calcom.getBookingCalendarLinks({ bookingUid: "booking-uid" })) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `bookingUid` | `string` | Yes | Booking to create links for. | ## Output Returns an array of calendar links. | Field | Type | Required | Description | | - | - | - | - | | `label` | `string` | Yes | Calendar provider label. | | `link` | `string` | Yes | Add-to-calendar or ICS URL. | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Get booking conferencing sessions Source: https://docs.automate.ax/reference/integrations/calcom/actions/get-booking-conferencing-sessions Retrieves Cal Video meeting sessions for one booking. `calcom.getBookingConferencingSessions` retrieves Cal Video meeting sessions for one booking. ```ts automations/get-booking-conferencing-sessions.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Get booking conferencing sessions", () => { markSignificant( calcom.getBookingConferencingSessions({ bookingUid: "booking-uid" }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `bookingUid` | `string` | Yes | — | ## Output Returns an array. Each item has these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `string` | Yes | — | | `room` | `string` | Yes | — | | `startTime` | `number` | Yes | — | | `duration` | `number` | Yes | — | | `ongoing` | `boolean` | Yes | — | | `maxParticipants` | `number` | Yes | — | | `participants` | `object[]` | Yes | — | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Get booking limits Source: https://docs.automate.ax/reference/integrations/calcom/actions/get-booking-limits Retrieves the connected user's booking frequency and duration limits. `calcom.getBookingLimits` retrieves the connected user's booking frequency and duration limits. ```ts automations/get-booking-limits.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Get booking limits", () => { markSignificant(calcom.getBookingLimits({})) }) ``` ## Input This action takes no input. ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `perDay` | `number \| null` | Yes | — | | `perWeek` | `number \| null` | Yes | — | | `perMonth` | `number \| null` | Yes | — | | `perYear` | `number \| null` | Yes | — | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Get booking recordings Source: https://docs.automate.ax/reference/integrations/calcom/actions/get-booking-recordings Retrieves Cal Video recordings for one booking. `calcom.getBookingRecordings` retrieves Cal Video recordings for one booking. ```ts automations/get-booking-recordings.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Get booking recordings", () => { markSignificant(calcom.getBookingRecordings({ bookingUid: "booking-uid" })) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `bookingUid` | `string` | Yes | — | ## Output Returns an array. Each item has these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `string` | Yes | — | | `roomName` | `string` | Yes | — | | `startTs` | `number` | Yes | — | | `status` | `string` | Yes | — | | `maxParticipants` | `number` | No | — | | `duration` | `number` | Yes | — | | `shareToken` | `string` | Yes | — | | `downloadLink` | `string (uri) \| null` | No | — | | `error` | `string \| null` | No | — | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Get booking references Source: https://docs.automate.ax/reference/integrations/calcom/actions/get-booking-references Retrieves provider references attached to one booking. `calcom.getBookingReferences` retrieves provider references attached to one booking. ```ts automations/get-booking-references.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Get booking references", () => { markSignificant( calcom.getBookingReferences({ bookingUid: "booking-uid", type: "google_calendar", }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `bookingUid` | `string` | Yes | — | | `type` | `"google_calendar" \| "office365_calendar" \| "daily_video" \| "google_video" \| "office365_video" \| "zoom_video"` | No | — | ## Output Returns an array. Each item has these fields: | Field | Type | Required | Description | | - | - | - | - | | `type` | `string` | Yes | The type of the booking reference | | `eventUid` | `string` | Yes | The event uid of the booking | | `destinationCalendarId` | `string \| null` | Yes | — | | `id` | `number` | Yes | The id of the booking reference | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Get booking routing trace Source: https://docs.automate.ax/reference/integrations/calcom/actions/get-booking-routing-trace Retrieves the routing decision trace for one booking. `calcom.getBookingRoutingTrace` retrieves the routing decision trace for one booking. ```ts automations/get-booking-routing-trace.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Get booking routing trace", () => { markSignificant(calcom.getBookingRoutingTrace({ bookingUid: "booking-uid" })) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `bookingUid` | `string` | Yes | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `steps` | `object[]` | Yes | — | | `groups` | `object[]` | Yes | — | | `formSubmission` | `object \| null` | No | — | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Get booking transcripts Source: https://docs.automate.ax/reference/integrations/calcom/actions/get-booking-transcripts Retrieves Cal Video transcript download links for one booking. `calcom.getBookingTranscripts` retrieves Cal Video transcript download links for one booking. ```ts automations/get-booking-transcripts.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Get booking transcripts", () => { markSignificant(calcom.getBookingTranscripts({ bookingUid: "booking-uid" })) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `bookingUid` | `string` | Yes | Booking whose transcripts to list. | ## Output Returns a `string[]` of transcript download links. Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Get calendar busy times Source: https://docs.automate.ax/reference/integrations/calcom/actions/get-calendar-busy-times Retrieves busy intervals from selected connected calendars. `calcom.getCalendarBusyTimes` retrieves busy intervals from selected connected calendars. ```ts automations/get-calendar-busy-times.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Get calendar busy times", () => { markSignificant( calcom.getCalendarBusyTimes({ calendarsToLoad: [{ credentialId: 4, externalId: "primary" }], dateFrom: "2026-09-10T00:00:00.000Z", dateTo: "2026-09-11T00:00:00.000Z", timeZone: "UTC", }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `calendarsToLoad` | `object[]` | Yes | Minimum items: 1. | | `dateFrom` | `string (date-time)` | Yes | — | | `dateTo` | `string (date-time)` | Yes | — | | `timeZone` | `string` | No | — | ## Output Returns an array. Each item has these fields: | Field | Type | Required | Description | | - | - | - | - | | `start` | `string (date-time)` | Yes | — | | `end` | `string (date-time)` | Yes | — | | `source` | `string \| null` | No | — | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Get default schedule Source: https://docs.automate.ax/reference/integrations/calcom/actions/get-default-schedule Retrieves the connected user's default Cal.com schedule. `calcom.getDefaultSchedule` retrieves the connected user's default Cal.com schedule. ```ts automations/get-default-schedule.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Get default schedule", () => { markSignificant(calcom.getDefaultSchedule({})) }) ``` ## Input This action takes no input. ## Output Returns the default schedule object, including its ID, name, time zone, availability, overrides, and default status. Returns `null` when the connected user has no default schedule. Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Get event type Source: https://docs.automate.ax/reference/integrations/calcom/actions/get-event-type Retrieves one personal Cal.com event type. `calcom.getEventType` retrieves one personal Cal.com event type. ```ts automations/get-event-type.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Get event type", () => { markSignificant(calcom.getEventType({ eventTypeId: 23 })) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `eventTypeId` | `integer` | Yes | Must be greater than 0. | ## Output The action removes the outer Cal.com status envelope. The result is either a personal event type or a team event type. Team results add team ownership, hosts, and assignment configuration; do not assume those fields after retrieving a personal event type. Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Get event type history Source: https://docs.automate.ax/reference/integrations/calcom/actions/get-event-type-history Retrieves the change history for one Cal.com event type. `calcom.getEventTypeHistory` retrieves the change history for one Cal.com event type. ```ts automations/get-event-type-history.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Get event type history", () => { markSignificant(calcom.getEventTypeHistory({ eventTypeId: 23, limit: 25 })) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `eventTypeId` | `integer` | Yes | Must be greater than 0. | | `cursor` | `string` | No | — | | `limit` | `integer` | No | Default: `25`. Minimum: 1. Maximum: 50. | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `eventTypeId` | `number` | Yes | The ID of the event type whose history is being returned. | | `auditLogs` | `object[]` | Yes | List of audit log entries for the event type, ordered by most recent first. | | `pagination` | `object` | Yes | Cursor pagination metadata. | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Get event type scheduling config Source: https://docs.automate.ax/reference/integrations/calcom/actions/get-event-type-scheduling-config Retrieves effective scheduling configuration for an event type. `calcom.getEventTypeSchedulingConfig` retrieves effective scheduling configuration for an event type. ```ts automations/get-event-type-scheduling-config.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Get event type scheduling config", () => { markSignificant(calcom.getEventTypeSchedulingConfig({ eventTypeId: 23 })) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `eventTypeId` | `integer` | Yes | Must be greater than 0. | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `eventTypeId` | `number` | Yes | Event type ID | | `schedulingType` | `"roundRobin" \| "collective" \| "managed"` | Yes | The scheduling type of this event type. Determines which fields are populated. | | `hosts` | `object[]` | Yes | Array of hosts assigned to this event type | | `assignAllTeamMembers` | `boolean` | Yes | Whether all team members are automatically assigned as hosts | | `hostGroups` | `object[]` | No | Host groups for organizing round-robin hosts. Only present for roundRobin scheduling type. | | `rescheduleWithSameRoundRobinHost` | `boolean` | No | Whether rescheduled events keep the same round-robin host. Only present for roundRobin scheduling type. | | `allowRRHostChoiceOnReschedule` | `boolean` | No | Whether the person rescheduling may choose between the original host and the whole team. Only present for roundRobin scheduling type. | | `isRRWeightsEnabled` | `boolean` | No | Whether round-robin weights are enabled for host distribution. Only present for roundRobin scheduling type. | | `maxLeadThreshold` | `number \| null` | No | — | | `includeNoShowInRRCalculation` | `boolean` | No | Whether no-show bookings are included in round-robin calculations. Only present for roundRobin scheduling type. | | `crmRecordOwnerFallbackWindowHours` | `number \| null` | No | — | | `crmRecordOwnerFallbackWindowSkipWeekends` | `boolean` | No | Whether to exclude weekends from the CRM record owner fallback window calculation. Only present for roundRobin scheduling type. | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Get profile Source: https://docs.automate.ax/reference/integrations/calcom/actions/get-profile Retrieves the connected Cal.com profile. `calcom.getProfile` retrieves the connected Cal.com profile. ```ts automations/get-profile.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Get profile", () => { markSignificant(calcom.getProfile({})) }) ``` ## Input This action takes no input. ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `number` | Yes | — | | `username` | `string` | Yes | — | | `email` | `string (email)` | Yes | — | | `name` | `string \| null` | Yes | — | | `avatarUrl` | `string \| null` | Yes | — | | `bio` | `string \| null` | Yes | — | | `timeFormat` | `number` | Yes | — | | `defaultScheduleId` | `number \| null` | Yes | — | | `weekStart` | `string` | Yes | — | | `timeZone` | `string` | Yes | — | | `locale` | `string \| null` | Yes | — | | `organizationId` | `number \| null` | Yes | — | | `organization` | `object` | No | — | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Get schedule Source: https://docs.automate.ax/reference/integrations/calcom/actions/get-schedule Retrieves one Cal.com availability schedule. `calcom.getSchedule` retrieves one Cal.com availability schedule. ```ts automations/get-schedule.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Get schedule", () => { markSignificant(calcom.getSchedule({ scheduleId: 17 })) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `scheduleId` | `integer` | Yes | Must be greater than 0. | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `number` | Yes | — | | `ownerId` | `number` | Yes | — | | `name` | `string` | Yes | — | | `timeZone` | `string` | Yes | — | | `availability` | `object[]` | Yes | — | | `isDefault` | `boolean` | Yes | — | | `overrides` | `object[]` | Yes | — | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Get slot reservation Source: https://docs.automate.ax/reference/integrations/calcom/actions/get-slot-reservation Retrieves one Cal.com slot reservation. `calcom.getSlotReservation` retrieves one Cal.com slot reservation. ```ts automations/get-slot-reservation.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Get slot reservation", () => { markSignificant(calcom.getSlotReservation({ uid: "reservation-uid" })) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `uid` | `string` | Yes | — | ## Output Returns the active reservation, or `null` when Cal.com has no active hold for that UID. | Field | Type | Required | Description | | - | - | - | - | | `eventTypeId` | `integer` | Yes | Event type that owns the slot. | | `slotStart` | `string` | Yes | Reserved slot start. | | `slotEnd` | `string` | Yes | Reserved slot end. | | `slotDuration` | `number` | Yes | Slot duration in minutes. | | `reservationUid` | `string` | Yes | Reservation identifier. | | `reservationUntil` | `string` | Yes | Time when Cal.com releases the hold. | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Get team Source: https://docs.automate.ax/reference/integrations/calcom/actions/get-team Retrieves one Cal.com team. `calcom.getTeam` retrieves one Cal.com team. ```ts automations/get-team.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Get team", () => { markSignificant(calcom.getTeam({ teamId: 17 })) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `teamId` | `integer` | Yes | Must be greater than 0. | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `number` | Yes | — | | `parentId` | `number` | No | — | | `name` | `string` | Yes | — | | `slug` | `string` | No | — | | `logoUrl` | `string \| null` | No | Team logo. Cal.com may return an absolute URL or a provider-relative path such as `/api/avatar/...`. | | `calVideoLogo` | `string (uri)` | No | — | | `appLogo` | `string (uri)` | No | — | | `appIconLogo` | `string (uri)` | No | — | | `bio` | `string` | No | — | | `hideBranding` | `boolean` | No | — | | `isOrganization` | `boolean` | Yes | — | | `isPrivate` | `boolean` | No | — | | `hideBookATeamMember` | `boolean` | No | Default: `false`. | | `metadata` | `object` | No | — | | `theme` | `string` | No | — | | `brandColor` | `string` | No | — | | `darkBrandColor` | `string` | No | — | | `bannerUrl` | `string (uri)` | No | — | | `timeFormat` | `number` | No | — | | `timeZone` | `string` | No | Default: `"Europe/London"`. | | `weekStart` | `string` | No | Default: `"Sunday"`. | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Get team event type Source: https://docs.automate.ax/reference/integrations/calcom/actions/get-team-event-type Retrieves one team-owned Cal.com event type. `calcom.getTeamEventType` retrieves one team-owned Cal.com event type. ```ts automations/get-team-event-type.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Get team event type", () => { markSignificant(calcom.getTeamEventType({ teamId: 17, eventTypeId: 23 })) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `teamId` | `integer` | Yes | Must be greater than 0. | | `eventTypeId` | `integer` | Yes | Must be greater than 0. | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `number` | Yes | — | | `lengthInMinutes` | `number` | Yes | — | | `lengthInMinutesOptions` | `number[]` | No | If you want that user can choose between different lengths of the event you can specify them here. Must include the provided `lengthInMinutes`. | | `title` | `string` | Yes | — | | `slug` | `string` | Yes | — | | `description` | `string` | Yes | — | | `locations` | `object[]` | Yes | — | | `bookingFields` | `object[]` | Yes | — | | `disableGuests` | `boolean` | Yes | — | | `slotInterval` | `number \| null` | No | — | | `minimumBookingNotice` | `number` | No | — | | `beforeEventBuffer` | `number` | No | — | | `afterEventBuffer` | `number` | No | — | | `recurrence` | `object \| null` | Yes | — | | `metadata` | `object` | Yes | — | | `price` | `number` | Yes | — | | `currency` | `string` | Yes | — | | `lockTimeZoneToggleOnBookingPage` | `boolean` | Yes | — | | `seatsPerTimeSlot` | `number \| null` | No | — | | `forwardParamsSuccessRedirect` | `boolean \| null` | Yes | — | | `successRedirectUrl` | `string \| null` | Yes | — | | `isInstantEvent` | `boolean` | Yes | — | | `seatsShowAvailabilityCount` | `boolean \| null` | No | — | | `scheduleId` | `number \| null` | Yes | — | | `bookingLimitsCount` | `object` | No | — | | `bookerActiveBookingsLimit` | `object` | No | — | | `onlyShowFirstAvailableSlot` | `boolean` | No | — | | `bookingLimitsDuration` | `object` | No | — | | `bookingWindow` | `object[] \| object` | No | Configured booking windows, or `{ disabled: boolean }` when the setting is disabled. | | `bookerLayouts` | `object` | No | — | | `confirmationPolicy` | `object` | No | — | | `bookingProposalCount` | `number \| null` | No | — | | `requiresBookerEmailVerification` | `boolean` | No | — | | `skipAttendeeEmailDeliverabilityCheck` | `boolean` | No | When true, skips the MX deliverability check for attendee emails. Format validation and watchlist still apply. Available only to organizations, including platform organizations. | | `emailSettings` | `JSON value` | No | Email settings for this event type. Personal event types require an accepted organization membership; team event types require an organization team. This does not include emails sent by custom email workflows. | | `hideCalendarNotes` | `boolean` | No | — | | `color` | `object` | No | — | | `seats` | `object` | No | — | | `offsetStart` | `number` | No | — | | `customName` | `string` | No | — | | `destinationCalendar` | `object` | No | — | | `useDestinationCalendarEmail` | `boolean` | No | — | | `hideCalendarEventDetails` | `boolean` | No | — | | `hideOrganizerEmail` | `boolean` | No | Boolean to Hide organizer's email address from the booking screen, email notifications, and calendar events | | `calVideoSettings` | `JSON value` | No | Cal video settings for the event type | | `hidden` | `boolean` | Yes | — | | `bookingRequiresAuthentication` | `boolean` | Yes | Whether booking this event type through the API requires authentication. When true, only the event-type owner or an organization or team administrator or owner can book it. | | `disableCancelling` | `JSON value` | No | Settings for disabling cancelling of this event type. | | `disableRescheduling` | `JSON value` | No | Settings for disabling rescheduling of this event type. Can be always disabled or disabled when less than X minutes before the meeting. | | `interfaceLanguage` | `string \| null` | No | — | | `allowReschedulingPastBookings` | `boolean` | No | Enabling this option allows for past events to be rescheduled. | | `allowReschedulingCancelledBookings` | `boolean \| null` | No | — | | `showOptimizedSlots` | `boolean \| null` | No | — | | `privateNoteEnabled` | `boolean` | No | When enabled, a private note calendar event is created alongside the booking with the resolved template as its description. Only visible to the host. | | `privateNoteMode` | `JSON value` | No | — | | `privateNoteTemplate` | `string \| null` | No | — | | `teamId` | `number` | Yes | — | | `bookingUrl` | `string (uri) \| null` | Yes | — | | `ownerId` | `number \| null` | No | — | | `parentEventTypeId` | `number \| null` | No | — | | `hosts` | `object[]` | Yes | — | | `assignAllTeamMembers` | `boolean` | No | — | | `schedulingType` | `"roundRobin" \| "collective" \| "managed" \| null` | Yes | — | | `team` | `object` | Yes | — | | `rescheduleWithSameRoundRobinHost` | `boolean` | No | Rescheduled events will be assigned to the same host as initially scheduled. | | `allowRRHostChoiceOnReschedule` | `boolean` | No | Let the person rescheduling choose between keeping the original host and letting round robin pick from the whole team. | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # List available slots Source: https://docs.automate.ax/reference/integrations/calcom/actions/list-available-slots Lists available slots for a personal, team, or dynamic Cal.com event. `calcom.listAvailableSlots` lists available slots for a personal, team, or dynamic Cal.com event. ```ts automations/list-available-slots.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("List available slots", () => { markSignificant( calcom.listAvailableSlots({ eventTypeId: 23, start: "2026-09-10", end: "2026-09-11", timeZone: "UTC", }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `bookingUidToReschedule` | `string` | No | — | | `duration` | `integer` | No | Must be greater than 0. | | `end` | `string (date) \| string (date-time)` | Yes | — | | `eventTypeId` | `integer` | No | Must be greater than 0. | | `eventTypeSlug` | `string` | No | — | | `format` | `"range" \| "time"` | No | — | | `organizationSlug` | `string` | No | — | | `start` | `string (date) \| string (date-time)` | Yes | — | | `teamSlug` | `string` | No | — | | `timeZone` | `string` | No | — | | `username` | `string` | No | — | | `usernames` | `string[]` | No | Minimum items: 2. | ## Output Returns a record keyed by date. Each value is an array of slot objects. | Field | Type | Required | Description | | - | - | - | - | | `start` | `string` | Yes | Slot start. | | `end` | `string` | No | Slot end when `format` is `"range"`. | | `bookingUid` | `string` | No | Booking identifier for a partially seated slot. | | `seatsBooked` | `integer` | No | Seats already booked for a seated event. | | `seatsRemaining` | `integer` | No | Seats still available for a seated event. | | `seatsTotal` | `integer` | No | Total seats for a seated event. | Identify an event with `eventTypeId`, or use the slug and owner fields for a personal, team, organization, or dynamic event. The action sends multiple `usernames` as a comma-separated Cal.com filter. Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # List booking attendees Source: https://docs.automate.ax/reference/integrations/calcom/actions/list-booking-attendees Lists attendees for one booking. `calcom.listBookingAttendees` lists attendees for one booking. ```ts automations/list-booking-attendees.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("List booking attendees", () => { markSignificant(calcom.listBookingAttendees({ bookingUid: "booking-uid" })) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `bookingUid` | `string` | Yes | — | ## Output Returns an array. Each item has these fields: | Field | Type | Required | Description | | - | - | - | - | | `name` | `string` | Yes | — | | `email` | `string` | Yes | — | | `displayEmail` | `string` | Yes | Clean email for display purposes | | `timeZone` | `string` | Yes | — | | `language` | `string enum` | No | — | | `absent` | `boolean` | Yes | — | | `phoneNumber` | `string` | No | — | | `id` | `number` | Yes | — | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # List bookings Source: https://docs.automate.ax/reference/integrations/calcom/actions/list-bookings Lists bookings visible to the connected Cal.com account. `calcom.listBookings` lists bookings visible to the connected Cal.com account. ```ts automations/list-bookings.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("List bookings", () => { markSignificant( calcom.listBookings({ status: "upcoming", limit: 50, sortStart: "asc" }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `afterCreatedAt` | `string (date-time)` | No | — | | `afterStart` | `string (date-time)` | No | — | | `afterUpdatedAt` | `string (date-time)` | No | — | | `attendeeEmail` | `string (email)` | No | — | | `attendeeName` | `string` | No | — | | `beforeCreatedAt` | `string (date-time)` | No | — | | `beforeEnd` | `string (date-time)` | No | — | | `beforeUpdatedAt` | `string (date-time)` | No | — | | `bookingUid` | `string` | No | — | | `cursor` | `string` | No | — | | `eventTypeId` | `integer` | No | Must be greater than 0. | | `eventTypeIds` | `integer[]` | No | Minimum items: 1. | | `limit` | `integer` | No | Default: `50`. Minimum: 1. Maximum: 100. | | `sortCreated` | `"asc" \| "desc"` | No | — | | `sortEnd` | `"asc" \| "desc"` | No | — | | `sortStart` | `"asc" \| "desc"` | No | — | | `sortUpdatedAt` | `"asc" \| "desc"` | No | — | | `status` | `"upcoming" \| "recurring" \| "past" \| "cancelled" \| "unconfirmed"` | No | — | | `teamId` | `integer` | No | Must be greater than 0. | | `teamIds` | `integer[]` | No | Minimum items: 1. | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `items` | `JSON value[]` | Yes | — | | `pagination` | `JSON value` | Yes | — | The action sends `eventTypeIds` and `teamIds` as comma-separated Cal.com filters. It returns `items` with cursor `pagination`; `limit` defaults to 50 and is capped at 100. Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # List calendars Source: https://docs.automate.ax/reference/integrations/calcom/actions/list-calendars Lists calendars connected to the current Cal.com account. `calcom.listCalendars` lists calendars connected to the current Cal.com account. ```ts automations/list-calendars.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("List calendars", () => { markSignificant(calcom.listCalendars({})) }) ``` ## Input This action takes no input. ## Output | Field | Type | Required | Description | | - | - | - | - | | `connectedCalendars` | `object[]` | Yes | Connected calendar integrations. | | `connectedCalendars[].integration` | `object` | Yes | Integration identity and provider metadata. | | `connectedCalendars[].credentialId` | `number` | Yes | Credential identifier. | | `connectedCalendars[].delegationCredentialId` | `string \| null` | No | Delegated credential identifier. | | `connectedCalendars[].primary` | `object` | No | Primary calendar for the connection. | | `connectedCalendars[].calendars` | `object[]` | No | Calendars available through the connection. | | `destinationCalendar` | `object` | Yes | Default destination calendar. | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # List event types Source: https://docs.automate.ax/reference/integrations/calcom/actions/list-event-types Lists personal Cal.com event types. `calcom.listEventTypes` lists personal Cal.com event types. ```ts automations/list-event-types.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("List event types", () => { markSignificant( calcom.listEventTypes({ username: "ada", eventSlug: "intro", sortCreatedAt: "desc", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `eventSlug` | `string` | No | Event slug; requires `username`. | | `orgId` | `integer` | No | Organization ID. | | `orgSlug` | `string` | No | Organization slug. | | `sortCreatedAt` | `"asc" \| "desc"` | No | Creation order. | | `username` | `string` | No | Personal event owner. | | `usernames` | `string[]` | No | Dynamic event owners; requires at least two. | ## Output Returns an array of matching personal or dynamic event types. Each typed item includes its required identity (`id`, `title`, `slug`, `ownerId`, and `bookingUrl`), duration, locations, booking fields, availability and booking limits, calendar behavior, owner users, and every supported event-type setting. Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # List out of office entries Source: https://docs.automate.ax/reference/integrations/calcom/actions/list-out-of-office-entries Lists the connected user's out-of-office entries. `calcom.listOutOfOfficeEntries` lists the connected user's out-of-office entries. ```ts automations/list-out-of-office-entries.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("List out of office entries", () => { markSignificant( calcom.listOutOfOfficeEntries({ skip: 0, take: 250, sortStart: "asc" }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `skip` | `integer` | No | Default: `0`. Minimum: 0. | | `sortEnd` | `"asc" \| "desc"` | No | — | | `sortStart` | `"asc" \| "desc"` | No | — | | `take` | `integer` | No | Default: `250`. Must be greater than 0. Maximum: 250. | ## Output Returns an array. Each item has these fields: | Field | Type | Required | Description | | - | - | - | - | | `userId` | `number` | Yes | The ID of the user. | | `toUserId` | `number` | No | The ID of the user covering for the out of office period, if applicable. | | `id` | `number` | Yes | The ID of the ooo entry. | | `uuid` | `string` | Yes | The UUID of the ooo entry. | | `start` | `string (date-time)` | Yes | The start date and time of the out of office period in ISO 8601 format in UTC timezone. | | `end` | `string (date-time)` | Yes | The end date and time of the out of office period in ISO 8601 format in UTC timezone. | | `notes` | `string` | No | Optional notes for the out of office entry. | | `reason` | `"unspecified" \| "vacation" \| "travel" \| "sick" \| "public_holiday"` | No | the reason for the out of office entry, if applicable | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # List private links Source: https://docs.automate.ax/reference/integrations/calcom/actions/list-private-links Lists private scheduling links for an event type. `calcom.listPrivateLinks` lists private scheduling links for an event type. ```ts automations/list-private-links.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("List private links", () => { markSignificant(calcom.listPrivateLinks({ eventTypeId: 23 })) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `eventTypeId` | `integer` | Yes | Must be greater than 0. | ## Output Returns an array containing time-based and usage-based links. Both variants include: | Field | Type | Required | Description | | - | - | - | - | | `linkId` | `string` | Yes | Private link identifier. | | `eventTypeId` | `number` | Yes | Event type that owns the link. | | `isExpired` | `boolean` | Yes | Whether the link has expired. | | `bookingUrl` | `string (uri)` | Yes | Full private booking URL. | A time-based link also has required `expiresAt: string`. A usage-based link instead has required `maxUsageCount: number` and `usageCount: number`. Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # List schedules Source: https://docs.automate.ax/reference/integrations/calcom/actions/list-schedules Lists the connected user's Cal.com schedules. `calcom.listSchedules` lists the connected user's Cal.com schedules. ```ts automations/list-schedules.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("List schedules", () => { markSignificant(calcom.listSchedules({})) }) ``` ## Input This action takes no input. ## Output Returns an array. Each item has these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `number` | Yes | — | | `ownerId` | `number` | Yes | — | | `name` | `string` | Yes | — | | `timeZone` | `string` | Yes | — | | `availability` | `object[]` | Yes | — | | `isDefault` | `boolean` | Yes | — | | `overrides` | `object[]` | Yes | — | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # List team bookings Source: https://docs.automate.ax/reference/integrations/calcom/actions/list-team-bookings Lists bookings owned by one Cal.com team. `calcom.listTeamBookings` lists bookings owned by one Cal.com team. ```ts automations/list-team-bookings.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("List team bookings", () => { markSignificant( calcom.listTeamBookings({ teamId: 17, status: ["upcoming"], take: 100, skip: 0, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `teamId` | `integer` | Yes | Must be greater than 0. | | `afterCreatedAt` | `string (date-time)` | No | — | | `afterStart` | `string (date-time)` | No | — | | `afterUpdatedAt` | `string (date-time)` | No | — | | `attendeeEmail` | `string (email)` | No | — | | `attendeeName` | `string` | No | — | | `beforeCreatedAt` | `string (date-time)` | No | — | | `beforeEnd` | `string (date-time)` | No | — | | `beforeUpdatedAt` | `string (date-time)` | No | — | | `bookingUid` | `string` | No | — | | `eventTypeId` | `integer` | No | Must be greater than 0. | | `eventTypeIds` | `integer[]` | No | Minimum items: 1. | | `skip` | `integer` | No | Default: `0`. Minimum: 0. | | `sortCreated` | `"asc" \| "desc"` | No | — | | `sortEnd` | `"asc" \| "desc"` | No | — | | `sortStart` | `"asc" \| "desc"` | No | — | | `sortUpdatedAt` | `"asc" \| "desc"` | No | — | | `status` | `("cancelled" \| "past" \| "recurring" \| "unconfirmed" \| "upcoming")[]` | No | Minimum items: 1. | | `take` | `integer` | No | Default: `100`. Minimum: 1. Maximum: 250. | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `items` | `JSON value[]` | Yes | — | | `pagination` | `JSON value` | Yes | — | Cal.com receives `status` and `eventTypeIds` arrays as comma-separated filters. The action returns `items` with offset `pagination`; `take` defaults to 100 and is capped at 250. Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # List team event types Source: https://docs.automate.ax/reference/integrations/calcom/actions/list-team-event-types Lists team-owned Cal.com event types. `calcom.listTeamEventTypes` lists team-owned Cal.com event types. ```ts automations/list-team-event-types.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("List team event types", () => { markSignificant( calcom.listTeamEventTypes({ teamId: 17, eventSlug: "support", hostsLimit: 10, sortCreatedAt: "asc", }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `teamId` | `integer` | Yes | Must be greater than 0. | | `eventSlug` | `string` | No | — | | `hostsLimit` | `integer` | No | Must be greater than 0. | | `sortCreatedAt` | `"asc" \| "desc"` | No | — | ## Output Returns an array. Each item has these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `number` | Yes | — | | `lengthInMinutes` | `number` | Yes | — | | `lengthInMinutesOptions` | `number[]` | No | If you want that user can choose between different lengths of the event you can specify them here. Must include the provided `lengthInMinutes`. | | `title` | `string` | Yes | — | | `slug` | `string` | Yes | — | | `description` | `string` | Yes | — | | `locations` | `object[]` | Yes | — | | `bookingFields` | `object[]` | Yes | — | | `disableGuests` | `boolean` | Yes | — | | `slotInterval` | `number \| null` | No | — | | `minimumBookingNotice` | `number` | No | — | | `beforeEventBuffer` | `number` | No | — | | `afterEventBuffer` | `number` | No | — | | `recurrence` | `object \| null` | Yes | — | | `metadata` | `object` | Yes | — | | `price` | `number` | Yes | — | | `currency` | `string` | Yes | — | | `lockTimeZoneToggleOnBookingPage` | `boolean` | Yes | — | | `seatsPerTimeSlot` | `number \| null` | No | — | | `forwardParamsSuccessRedirect` | `boolean \| null` | Yes | — | | `successRedirectUrl` | `string \| null` | Yes | — | | `isInstantEvent` | `boolean` | Yes | — | | `seatsShowAvailabilityCount` | `boolean \| null` | No | — | | `scheduleId` | `number \| null` | Yes | — | | `bookingLimitsCount` | `object` | No | — | | `bookerActiveBookingsLimit` | `object` | No | — | | `onlyShowFirstAvailableSlot` | `boolean` | No | — | | `bookingLimitsDuration` | `object` | No | — | | `bookingWindow` | `object[] \| object` | No | Configured booking windows, or `{ disabled: boolean }` when the setting is disabled. | | `bookerLayouts` | `object` | No | — | | `confirmationPolicy` | `object` | No | — | | `bookingProposalCount` | `number \| null` | No | — | | `requiresBookerEmailVerification` | `boolean` | No | — | | `skipAttendeeEmailDeliverabilityCheck` | `boolean` | No | When true, skips the MX deliverability check for attendee emails. Format validation and watchlist still apply. Available only to organizations, including platform organizations. | | `emailSettings` | `JSON value` | No | Email settings for this event type. Personal event types require an accepted organization membership; team event types require an organization team. This does not include emails sent by custom email workflows. | | `hideCalendarNotes` | `boolean` | No | — | | `color` | `object` | No | — | | `seats` | `object` | No | — | | `offsetStart` | `number` | No | — | | `customName` | `string` | No | — | | `destinationCalendar` | `object` | No | — | | `useDestinationCalendarEmail` | `boolean` | No | — | | `hideCalendarEventDetails` | `boolean` | No | — | | `hideOrganizerEmail` | `boolean` | No | Boolean to Hide organizer's email address from the booking screen, email notifications, and calendar events | | `calVideoSettings` | `JSON value` | No | Cal video settings for the event type | | `hidden` | `boolean` | Yes | — | | `bookingRequiresAuthentication` | `boolean` | Yes | Whether booking this event type through the API requires authentication. When true, only the event-type owner or an organization or team administrator or owner can book it. | | `disableCancelling` | `JSON value` | No | Settings for disabling cancelling of this event type. | | `disableRescheduling` | `JSON value` | No | Settings for disabling rescheduling of this event type. Can be always disabled or disabled when less than X minutes before the meeting. | | `interfaceLanguage` | `string \| null` | No | — | | `allowReschedulingPastBookings` | `boolean` | No | Enabling this option allows for past events to be rescheduled. | | `allowReschedulingCancelledBookings` | `boolean \| null` | No | — | | `showOptimizedSlots` | `boolean \| null` | No | — | | `privateNoteEnabled` | `boolean` | No | When enabled, a private note calendar event is created alongside the booking with the resolved template as its description. Only visible to the host. | | `privateNoteMode` | `JSON value` | No | — | | `privateNoteTemplate` | `string \| null` | No | — | | `teamId` | `number` | Yes | — | | `bookingUrl` | `string (uri) \| null` | Yes | — | | `ownerId` | `number \| null` | No | — | | `parentEventTypeId` | `number \| null` | No | — | | `hosts` | `object[]` | Yes | — | | `assignAllTeamMembers` | `boolean` | No | — | | `schedulingType` | `"roundRobin" \| "collective" \| "managed" \| null` | Yes | — | | `team` | `object` | Yes | — | | `rescheduleWithSameRoundRobinHost` | `boolean` | No | Rescheduled events will be assigned to the same host as initially scheduled. | | `allowRRHostChoiceOnReschedule` | `boolean` | No | Let the person rescheduling choose between keeping the original host and letting round robin pick from the whole team. | Omit `hostsLimit` to return every host for each event type. Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # List team schedules Source: https://docs.automate.ax/reference/integrations/calcom/actions/list-team-schedules Lists availability schedules for one Cal.com team. `calcom.listTeamSchedules` lists availability schedules for one Cal.com team. ```ts automations/list-team-schedules.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("List team schedules", () => { markSignificant(calcom.listTeamSchedules({ teamId: 17, skip: 0, take: 250 })) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `teamId` | `integer` | Yes | Must be greater than 0. | | `skip` | `integer` | No | Default: `0`. Minimum: 0. | | `take` | `integer` | No | Default: `250`. Must be greater than 0. Maximum: 250. | ## Output Returns an array. Each item has these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `number` | Yes | — | | `ownerId` | `number` | Yes | — | | `name` | `string` | Yes | — | | `timeZone` | `string` | Yes | — | | `availability` | `object[]` | Yes | — | | `isDefault` | `boolean` | Yes | — | | `overrides` | `object[]` | Yes | — | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # List teams Source: https://docs.automate.ax/reference/integrations/calcom/actions/list-teams Lists Cal.com teams visible to the connected user. `calcom.listTeams` lists Cal.com teams visible to the connected user. ```ts automations/list-teams.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("List teams", () => { markSignificant(calcom.listTeams({})) }) ``` ## Input This action takes no input. ## Output Returns an array of teams visible to the connected account. | Field | Type | Required | Description | | - | - | - | - | | `id` | `number` | Yes | Team ID. | | `name` | `string` | Yes | Team name. | | `isOrganization` | `boolean` | Yes | Whether the team is an organization. | | `parentId` | `number` | No | Parent organization ID. | | `slug` | `string` | No | Team booking slug. | | `logoUrl` | `string \| null` | No | Team logo. Cal.com may return an absolute URL or a provider-relative path such as `/api/avatar/...`. | | `bio` | `string` | No | Team biography. | | `isPrivate` | `boolean` | No | Whether the team is private. | | `hideBranding` | `boolean` | No | Whether Cal.com branding is hidden. | | `metadata` | `object` | No | Team metadata. | | `timeFormat` | `number` | No | Team time format. | | `timeZone` | `string` | No | Team time zone. | | `weekStart` | `string` | No | First day of the team week. | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Mark booking absence Source: https://docs.automate.ax/reference/integrations/calcom/actions/mark-booking-absence Marks a host or attendee present or absent. `calcom.markBookingAbsence` marks a host or attendee present or absent. ```ts automations/mark-booking-absence.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Mark booking absence", () => { markSignificant( calcom.markBookingAbsence({ bookingUid: "booking-uid", host: false, attendees: [{ email: "guest@example.com", absent: true }], }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `bookingUid` | `string` | Yes | — | | `host` | `boolean` | No | Whether the host was absent | | `attendees` | `object[]` | No | Minimum items: 1. | ## Output The action removes the outer Cal.com status envelope. It returns either one ordinary booking object or one recurring booking object. Only the recurring branch has `recurringBookingUid`. Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Reassign booking Source: https://docs.automate.ax/reference/integrations/calcom/actions/reassign-booking Reassigns a round-robin booking to an automatically selected host. `calcom.reassignBooking` reassigns a round-robin booking to an automatically selected host. ```ts automations/reassign-booking.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Reassign booking", () => { markSignificant(calcom.reassignBooking({ bookingUid: "booking-uid" })) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `bookingUid` | `string` | Yes | — | ## Output Returns these fields: | Field | Type | Required | Description | | - | - | - | - | | `bookingUid` | `string` | Yes | Reassigned booking identifier. | | `reassignedTo` | `object` | Yes | Newly assigned host. | | `reassignedTo.id` | `integer` | Yes | Host user ID. | | `reassignedTo.name` | `string` | Yes | Host name. | | `reassignedTo.email` | `string` | Yes | Host account email. | | `reassignedTo.displayEmail` | `string` | Yes | Host email displayed for bookings. | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Reassign booking to host Source: https://docs.automate.ax/reference/integrations/calcom/actions/reassign-booking-to-host Reassigns a round-robin booking to a selected host. `calcom.reassignBookingToHost` reassigns a round-robin booking to a selected host. ```ts automations/reassign-booking-to-host.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Reassign booking to host", () => { markSignificant( calcom.reassignBookingToHost({ bookingUid: "booking-uid", userId: 41, reason: "Territory owner", }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `bookingUid` | `string` | Yes | — | | `userId` | `integer` | Yes | Must be greater than 0. | | `reason` | `string` | No | Reason for reassigning the booking | ## Output Returns these fields: | Field | Type | Required | Description | | - | - | - | - | | `bookingUid` | `string` | Yes | Reassigned booking identifier. | | `reassignedTo` | `object` | Yes | Newly assigned host. | | `reassignedTo.id` | `integer` | Yes | Host user ID. | | `reassignedTo.name` | `string` | Yes | Host name. | | `reassignedTo.email` | `string` | Yes | Host account email. | | `reassignedTo.displayEmail` | `string` | Yes | Host email displayed for bookings. | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Request booking reschedule Source: https://docs.automate.ax/reference/integrations/calcom/actions/request-booking-reschedule Requests that an attendee choose a new time. `calcom.requestBookingReschedule` requests that an attendee choose a new time. ```ts automations/request-booking-reschedule.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Request booking reschedule", () => { markSignificant( calcom.requestBookingReschedule({ bookingUid: "booking-uid", rescheduleReason: "Please choose another time", }), ) }) ``` ## Input and output Pass the booking `bookingUid` and an optional `rescheduleReason`. The action returns Cal.com's `{ status }` response. Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Reschedule booking Source: https://docs.automate.ax/reference/integrations/calcom/actions/reschedule-booking Reschedules an existing booking or one seat in a seated booking. `calcom.rescheduleBooking` reschedules an existing booking or one seat in a seated booking. ```ts automations/reschedule-booking.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Reschedule booking", () => { markSignificant( calcom.rescheduleBooking({ bookingUid: "booking-uid", start: "2026-09-11T17:00:00.000Z", }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `bookingUid` | `string` | Yes | — | | `start` | `string (date-time)` | Yes | Start time in ISO 8601 format for the new booking | | `rescheduledBy` | `string` | No | Email of the person who is rescheduling the booking - only needed when rescheduling a booking that requires a confirmation. If event type owner email is provided then rescheduled booking will be automatically confirmed. If attendee email or no email is passed then the event type owner will have to confirm the rescheduled booking. | | `reschedulingReason` | `string` | No | Reason for rescheduling the booking | | `emailVerificationCode` | `string` | No | Email verification code required when event type has email verification enabled. | | `rescheduleWithSameHost` | `boolean` | No | Only for round robin event types that let the person rescheduling choose the host. True keeps the original host, false lets round robin pick from the whole team. Ignored for every other event type. | | `allowConflicts` | `boolean` | No | When true and the authenticated user is a host of the event type, availability conflict checks are bypassed. If the user is not a host or is unauthenticated, this parameter is silently ignored. | | `allowBookingOutOfBounds` | `boolean` | No | When true and the authenticated user is a host of the event type, booking time out-of-bounds checks are bypassed allowing bookings outside the normally permitted scheduling window. If the user is not a host or is unauthenticated, this parameter is silently ignored. Only supported on the 2026-02-25 API version. | | `skipBookingLimits` | `boolean` | No | When true and the authenticated user is a host of the event type, booking limit checks (event type, team, and per-host limits such as bookings per day/week/month/year, as well as duration limits) are bypassed, allowing the booking to be created even when a host has reached their limit. If the user is not a host or is unauthenticated, this parameter is silently ignored. Only supported on the 2026-02-25 API version. | For a seated booking, `start` and `seatUid` are required. Regular bookings require `start` and can use `rescheduleWithSameHost` and `reschedulingReason`. Both variants accept the bounds, conflict, verification, actor, and limit-bypass fields listed above. ## Output The action removes the outer Cal.com status envelope. Its result is one of these data variants: | Variant | Result | | - | - | | Regular booking | One booking object. | | Recurring booking | One recurring booking object. | | Seated booking | One seated booking object. | | Recurring seated booking | One recurring seated booking object. | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Reserve slot Source: https://docs.automate.ax/reference/integrations/calcom/actions/reserve-slot Reserves an available Cal.com slot. `calcom.reserveSlot` reserves an available Cal.com slot. ```ts automations/reserve-slot.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Reserve slot", () => { markSignificant( calcom.reserveSlot({ eventTypeId: 23, slotStart: "2026-09-10T17:00:00.000Z", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `eventTypeId` | `number` | Yes | Event type whose slot to reserve. | | `slotStart` | `string (date-time)` | Yes | Slot start in UTC. | | `slotDuration` | `number` | No | Slot length in minutes. | | `reservationDuration` | `number` | No | Hold duration in minutes; defaults to `5`. | ## Output | Field | Type | Required | Description | | - | - | - | - | | `eventTypeId` | `number` | Yes | Event type that owns the slot. | | `slotStart` | `string (date-time)` | Yes | Reserved slot start. | | `slotEnd` | `string (date-time)` | Yes | Reserved slot end. | | `slotDuration` | `number` | Yes | Slot length in minutes. | | `reservationUid` | `string` | Yes | Reservation identifier. | | `reservationDuration` | `number` | Yes | Hold duration in minutes. | | `reservationUntil` | `string (date-time)` | Yes | Time when Cal.com releases the hold. | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Update booking limits Source: https://docs.automate.ax/reference/integrations/calcom/actions/update-booking-limits Replaces the connected user's booking frequency and duration limits. `calcom.updateBookingLimits` replaces the connected user's booking frequency and duration limits. ```ts automations/update-booking-limits.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Update booking limits", () => { markSignificant(calcom.updateBookingLimits({ perDay: 4, perWeek: 12 })) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `perDay` | `number \| null` | No | — | | `perWeek` | `number \| null` | No | — | | `perMonth` | `number \| null` | No | — | | `perYear` | `number \| null` | No | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `perDay` | `number \| null` | Yes | — | | `perWeek` | `number \| null` | Yes | — | | `perMonth` | `number \| null` | Yes | — | | `perYear` | `number \| null` | Yes | — | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Update booking location Source: https://docs.automate.ax/reference/integrations/calcom/actions/update-booking-location Updates a booking location and its connected calendar event. `calcom.updateBookingLocation` updates a booking location and its connected calendar event. ```ts automations/update-booking-location.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Update booking location", () => { markSignificant( calcom.updateBookingLocation({ bookingUid: "booking-uid", location: { type: "link", link: "https://meet.example.com/room" }, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `bookingUid` | `string` | Yes | — | | `location` | `object` | No | One of the event type locations. If instead of passing one of the location objects as required by schema you are still passing a string please use an object. | ## Output The action removes the outer Cal.com status envelope. Its result is one of these data variants: | Variant | Result | | - | - | | Regular booking | One booking object. | | Recurring booking | One recurring booking object or an array of them. | | Seated booking | One seated booking object. | | Recurring seated booking | One recurring seated booking object or an array of them. | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Update event type Source: https://docs.automate.ax/reference/integrations/calcom/actions/update-event-type Updates one personal Cal.com event type. `calcom.updateEventType` updates one personal Cal.com event type. ```ts automations/update-event-type.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Update event type", () => { markSignificant( calcom.updateEventType({ eventTypeId: 23, title: "Intro call", lengthInMinutes: 45, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `eventTypeId` | `integer` | Yes | Must be greater than 0. | | `lengthInMinutes` | `number` | No | — | | `lengthInMinutesOptions` | `number[]` | No | If you want that user can choose between different lengths of the event you can specify them here. Must include the provided `lengthInMinutes`. | | `title` | `string` | No | — | | `slug` | `string` | No | — | | `description` | `string` | No | — | | `bookingFields` | `object[]` | No | Complete set of booking form fields. This array replaces all existing booking fields. To modify existing fields, first fetch the current event type, then include all desired fields in this array. Sending only one field will remove all other custom fields, keeping only default fields plus the provided one. | | `slotInterval` | `number` | No | Slot interval in minutes. It defaults to the event length. | | `minimumBookingNotice` | `number` | No | Minimum number of minutes before the event that a booking can be made. | | `beforeEventBuffer` | `number` | No | Extra time automatically blocked on your calendar before a meeting starts. This gives you time to prepare, review notes, or transition from your previous activity. | | `afterEventBuffer` | `number` | No | Extra time automatically blocked on your calendar after a meeting ends. This gives you time to wrap up, add notes, or decompress before your next commitment. | | `scheduleId` | `number` | No | If you want that this event has different schedule than user's default one you can specify it here. | | `bookingLimitsCount` | `object` | No | Limit how many times this event can be booked | | `bookerActiveBookingsLimit` | `object` | No | Limit the number of active bookings a booker can make for this event type. | | `onlyShowFirstAvailableSlot` | `boolean` | No | This will limit your availability for this event type to one slot per day, scheduled at the earliest available time. | | `bookingLimitsDuration` | `object` | No | Limit total amount of time that this event can be booked | | `bookingWindow` | `object` | No | Limit how far in the future this event can be booked | | `offsetStart` | `number` | No | Offset time slots shown to bookers by the specified number of minutes. | | `bookerLayouts` | `JSON value` | No | Should booker have week, month or column view. Specify default layout and enabled layouts user can pick. | | `confirmationPolicy` | `object` | No | Specify how the booking needs to be manually confirmed before it is pushed to the integrations and a confirmation mail is sent. | | `bookingProposalCount` | `number \| null` | No | — | | `recurrence` | `object` | No | Create a recurring event type. | | `requiresBookerEmailVerification` | `boolean` | No | — | | `skipAttendeeEmailDeliverabilityCheck` | `boolean` | No | When true, skips the MX deliverability check for attendee emails on booking. Format validation and watchlist still apply. Requires the editor to belong to an organization, including a platform organization. | | `emailSettings` | `JSON value` | No | Email settings for this event type. Personal event types require an accepted organization membership; team event types require an organization team. This does not include emails sent by custom email workflows. | | `hideCalendarNotes` | `boolean` | No | — | | `lockTimeZoneToggleOnBookingPage` | `boolean` | No | — | | `color` | `object` | No | — | | `seats` | `object` | No | Create an event type with multiple seats. | | `customName` | `string` | No | Customizable event name with valid variables: \{Link title}, \{Event type title} (legacy), \{Organiser}, \{Scheduler}, \{Location}, \{Organiser first name}, \{Scheduler first name}, \{Scheduler last name}, \{Event duration}, \{LOCATION}, \{HOST/ATTENDEE}, \{HOST}, \{ATTENDEE}, \{USER} | | `destinationCalendar` | `object` | No | — | | `useDestinationCalendarEmail` | `boolean` | No | — | | `hideCalendarEventDetails` | `boolean` | No | — | | `successRedirectUrl` | `string` | No | A valid URL where the booker will redirect to, once the booking is completed successfully | | `hideOrganizerEmail` | `boolean` | No | Boolean to Hide organizer's email address from the booking screen, email notifications, and calendar events | | `calVideoSettings` | `JSON value` | No | Cal video settings for the event type | | `hidden` | `boolean` | No | — | | `bookingRequiresAuthentication` | `boolean` | No | Whether booking this event type through the API requires authentication. When true, only the event-type owner or an organization or team administrator or owner can book it. Default: `false`. | | `disableCancelling` | `JSON value` | No | Settings for disabling cancelling of this event type. | | `disableRescheduling` | `JSON value` | No | Settings for disabling rescheduling of this event type. Can be always disabled or disabled when less than X minutes before the meeting. | | `interfaceLanguage` | `string enum` | No | Set preferred language for the booking interface. Use empty string for visitor's browser language (default). | | `allowReschedulingPastBookings` | `boolean` | No | Enabling this option allows for past events to be rescheduled. Default: `false`. | | `allowReschedulingCancelledBookings` | `boolean` | No | When enabled, users will be able to create a new booking when trying to reschedule a cancelled booking. Default: `false`. | | `showOptimizedSlots` | `boolean` | No | Arrange time slots to optimize availability. Default: `false`. | | `privateNoteEnabled` | `boolean` | No | When enabled, a private note calendar event is created alongside the booking with the resolved template as its description. Only visible to the host. Default: `false`. | | `privateNoteMode` | `JSON value` | No | How private notes are delivered: as an additional host event or by sending separate host and guest invites. | | `privateNoteTemplate` | `string` | No | Template for the private note content. Supports variables like \{Attendee name}, \{Link title}, \{Event type title} (legacy), \{Location}, \{Host name}, \{Event duration}, and custom booking field names. | | `locations` | `object[]` | No | Locations where the event will take place. If not provided, cal video link will be used as the location. Note: Setting a location to a conferencing app does not install the app - the app must already be installed. Via API, only Google Meet (google-meet), Microsoft Teams (office365-video), and Zoom (zoom) can be installed. Cal Video (cal-video) is installed by default. All other conferencing apps must be connected via the Cal.com web app and are not available for Platform plan customers. You can only set an event type location to an app that has already been installed or connected. | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `number` | Yes | — | | `lengthInMinutes` | `number` | Yes | — | | `lengthInMinutesOptions` | `number[]` | No | If you want that user can choose between different lengths of the event you can specify them here. Must include the provided `lengthInMinutes`. | | `title` | `string` | Yes | — | | `slug` | `string` | Yes | — | | `description` | `string` | Yes | — | | `locations` | `object[]` | Yes | — | | `bookingFields` | `object[]` | Yes | — | | `disableGuests` | `boolean` | Yes | — | | `slotInterval` | `number \| null` | No | — | | `minimumBookingNotice` | `number` | No | — | | `beforeEventBuffer` | `number` | No | — | | `afterEventBuffer` | `number` | No | — | | `recurrence` | `object \| null` | Yes | — | | `metadata` | `object` | Yes | — | | `price` | `number` | Yes | — | | `currency` | `string` | Yes | — | | `lockTimeZoneToggleOnBookingPage` | `boolean` | Yes | — | | `seatsPerTimeSlot` | `number \| null` | No | — | | `forwardParamsSuccessRedirect` | `boolean \| null` | Yes | — | | `successRedirectUrl` | `string \| null` | Yes | — | | `isInstantEvent` | `boolean` | Yes | — | | `seatsShowAvailabilityCount` | `boolean \| null` | No | — | | `scheduleId` | `number \| null` | Yes | — | | `bookingLimitsCount` | `object` | No | — | | `bookerActiveBookingsLimit` | `object` | No | — | | `onlyShowFirstAvailableSlot` | `boolean` | No | — | | `bookingLimitsDuration` | `object` | No | — | | `bookingWindow` | `object[] \| object` | No | Configured booking windows, or `{ disabled: boolean }` when the setting is disabled. | | `bookerLayouts` | `object` | No | — | | `confirmationPolicy` | `object` | No | — | | `bookingProposalCount` | `number \| null` | No | — | | `requiresBookerEmailVerification` | `boolean` | No | — | | `skipAttendeeEmailDeliverabilityCheck` | `boolean` | No | When true, skips the MX deliverability check for attendee emails. Format validation and watchlist still apply. Available only to organizations, including platform organizations. | | `emailSettings` | `JSON value` | No | Email settings for this event type. Personal event types require an accepted organization membership; team event types require an organization team. This does not include emails sent by custom email workflows. | | `hideCalendarNotes` | `boolean` | No | — | | `color` | `object` | No | — | | `seats` | `object` | No | — | | `offsetStart` | `number` | No | — | | `customName` | `string` | No | — | | `destinationCalendar` | `object` | No | — | | `useDestinationCalendarEmail` | `boolean` | No | — | | `hideCalendarEventDetails` | `boolean` | No | — | | `hideOrganizerEmail` | `boolean` | No | Boolean to Hide organizer's email address from the booking screen, email notifications, and calendar events | | `calVideoSettings` | `JSON value` | No | Cal video settings for the event type | | `hidden` | `boolean` | Yes | — | | `bookingRequiresAuthentication` | `boolean` | Yes | Whether booking this event type through the API requires authentication. When true, only the event-type owner or an organization or team administrator or owner can book it. | | `disableCancelling` | `JSON value` | No | Settings for disabling cancelling of this event type. | | `disableRescheduling` | `JSON value` | No | Settings for disabling rescheduling of this event type. Can be always disabled or disabled when less than X minutes before the meeting. | | `interfaceLanguage` | `string \| null` | No | — | | `allowReschedulingPastBookings` | `boolean` | No | Enabling this option allows for past events to be rescheduled. | | `allowReschedulingCancelledBookings` | `boolean \| null` | No | — | | `showOptimizedSlots` | `boolean \| null` | No | — | | `privateNoteEnabled` | `boolean` | No | When enabled, a private note calendar event is created alongside the booking with the resolved template as its description. Only visible to the host. | | `privateNoteMode` | `JSON value` | No | — | | `privateNoteTemplate` | `string \| null` | No | — | | `ownerId` | `number` | Yes | — | | `users` | `object[]` | Yes | — | | `bookingUrl` | `string (uri)` | Yes | Full URL to the booking page for this event type | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Update out of office entry Source: https://docs.automate.ax/reference/integrations/calcom/actions/update-out-of-office-entry Updates one out-of-office entry for the connected user. `calcom.updateOutOfOfficeEntry` updates one out-of-office entry for the connected user. ```ts automations/update-out-of-office-entry.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Update out of office entry", () => { markSignificant( calcom.updateOutOfOfficeEntry({ oooId: 11, notes: "Conference" }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `oooId` | `integer` | Yes | Must be greater than 0. | | `start` | `string (date-time)` | No | The start date and time of the out of office period in ISO 8601 format in UTC timezone. | | `end` | `string (date-time)` | No | The end date and time of the out of office period in ISO 8601 format in UTC timezone. | | `notes` | `string` | No | Optional notes for the out of office entry. | | `toUserId` | `number` | No | The ID of the user covering for the out of office period, if applicable. | | `reason` | `"unspecified" \| "vacation" \| "travel" \| "sick" \| "public_holiday"` | No | the reason for the out of office entry, if applicable | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `userId` | `number` | Yes | The ID of the user. | | `toUserId` | `number` | No | The ID of the user covering for the out of office period, if applicable. | | `id` | `number` | Yes | The ID of the ooo entry. | | `uuid` | `string` | Yes | The UUID of the ooo entry. | | `start` | `string (date-time)` | Yes | The start date and time of the out of office period in ISO 8601 format in UTC timezone. | | `end` | `string (date-time)` | Yes | The end date and time of the out of office period in ISO 8601 format in UTC timezone. | | `notes` | `string` | No | Optional notes for the out of office entry. | | `reason` | `"unspecified" \| "vacation" \| "travel" \| "sick" \| "public_holiday"` | No | the reason for the out of office entry, if applicable | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Update private link Source: https://docs.automate.ax/reference/integrations/calcom/actions/update-private-link Updates a private scheduling link. `calcom.updatePrivateLink` updates a private scheduling link. ```ts automations/update-private-link.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Update private link", () => { markSignificant( calcom.updatePrivateLink({ eventTypeId: 23, linkId: "abc123def456", maxUsageCount: 20, }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `eventTypeId` | `integer` | Yes | Event type that owns the link. | | `linkId` | `string` | Yes | Link ID from create or list. | | `expiresAt` | `string (date-time)` | No | New expiration for a time-based link. | | `maxUsageCount` | `number` | No | New usage cap; pass `-1` for no count cap. | ## Output Returns one of two link variants. Both include required `linkId: string`, `eventTypeId: number`, `isExpired: boolean`, and `bookingUrl: string`. A time-based link also has required `expiresAt: string`; a usage-based link instead has required `maxUsageCount: number` and `usageCount: number`. Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Update profile Source: https://docs.automate.ax/reference/integrations/calcom/actions/update-profile Updates the connected Cal.com profile. `calcom.updateProfile` updates the connected Cal.com profile. ```ts automations/update-profile.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Update profile", () => { markSignificant( calcom.updateProfile({ name: "Ada Lovelace", timeZone: "Europe/London" }), ) }) ``` ## Input All fields are optional. | Field | Type | Description | | - | - | - | | `email` | `string` | Account email. | | `name` | `string` | Display name. | | `timeFormat` | `12 \| 24` | Clock format. | | `defaultScheduleId` | `number` | Default schedule. | | `weekStart` | `string` | First weekday. | | `timeZone` | `string` | IANA time zone. | | `locale` | `string` | Supported Cal.com locale. | | `avatarUrl` | `string (uri)` | Avatar URL. | | `bio` | `string` | Profile biography. | | `metadata` | `object` | Up to 50 provider-defined metadata entries. | ## Output Returns the updated profile with required `id`, `username`, `email`, `name`, `avatarUrl`, `bio`, `timeFormat`, `defaultScheduleId`, `weekStart`, `timeZone`, `locale`, and `organizationId`; `organization` is optional. Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Update schedule Source: https://docs.automate.ax/reference/integrations/calcom/actions/update-schedule Updates one Cal.com availability schedule. `calcom.updateSchedule` updates one Cal.com availability schedule. ```ts automations/update-schedule.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Update schedule", () => { markSignificant( calcom.updateSchedule({ scheduleId: 17, name: "Client hours", isDefault: true, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `scheduleId` | `integer` | Yes | Must be greater than 0. | | `name` | `string` | No | — | | `timeZone` | `string` | No | — | | `availability` | `object[]` | No | — | | `isDefault` | `boolean` | No | — | | `overrides` | `object[]` | No | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `number` | Yes | — | | `ownerId` | `number` | Yes | — | | `name` | `string` | Yes | — | | `timeZone` | `string` | Yes | — | | `availability` | `object[]` | Yes | — | | `isDefault` | `boolean` | Yes | — | | `overrides` | `object[]` | Yes | — | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Update slot reservation Source: https://docs.automate.ax/reference/integrations/calcom/actions/update-slot-reservation Updates one Cal.com slot reservation. `calcom.updateSlotReservation` updates one Cal.com slot reservation. ```ts automations/update-slot-reservation.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Update slot reservation", () => { markSignificant( calcom.updateSlotReservation({ uid: "reservation-uid", eventTypeId: 23, slotStart: "2026-09-10T17:30:00.000Z", }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `uid` | `string` | Yes | — | | `eventTypeId` | `number` | Yes | The ID of the event type for which slot should be reserved. | | `slotStart` | `string (date-time)` | Yes | ISO 8601 date string in UTC representing the available slot. | | `slotDuration` | `number` | No | By default slot duration is equal to event type length, but if you want to reserve a slot for an event type that has a variable length you can specify it here as a number in minutes. If you don't have this set explicitly that event type can have one of many lengths you can omit this. | | `reservationDuration` | `number` | No | Reservation length in minutes for authenticated API key, access token, or OAuth requests. No one else can book the event type at `start` during this period. Defaults to 5 minutes. | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `eventTypeId` | `number` | Yes | The ID of the event type for which slot was reserved. | | `slotStart` | `string (date-time)` | Yes | ISO 8601 date string in UTC representing the available slot. | | `slotEnd` | `string (date-time)` | Yes | ISO 8601 date string in UTC representing the slot end. | | `slotDuration` | `number` | Yes | By default slot duration is equal to event type length, but if you want to reserve a slot for an event type that has a variable length you can specify it here. If you don't have this set explicitly that event type can have one of many lengths you can omit this. | | `reservationUid` | `string` | Yes | The unique identifier of the reservation. Use it to update, get or delete the reservation. | | `reservationDuration` | `number` | Yes | Reservation length in minutes. No one else can book the event type at `start` during this period. | | `reservationUntil` | `string (date-time)` | Yes | ISO 8601 date string in UTC representing when the reservation expires. | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Update team Source: https://docs.automate.ax/reference/integrations/calcom/actions/update-team Updates one Cal.com team. `calcom.updateTeam` updates one Cal.com team. ```ts automations/update-team.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Update team", () => { markSignificant( calcom.updateTeam({ teamId: 17, name: "Platform Engineering" }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `teamId` | `integer` | Yes | Must be greater than 0. | | `name` | `string` | No | Name of the team. Maximum 155 characters. Cannot contain links or URLs. | | `slug` | `string` | No | Team slug | | `logoUrl` | `string` | No | URL of the teams logo image | | `calVideoLogo` | `string` | No | — | | `appLogo` | `string` | No | — | | `appIconLogo` | `string` | No | — | | `bio` | `string` | No | — | | `hideBranding` | `boolean` | No | — | | `isPrivate` | `boolean` | No | — | | `hideBookATeamMember` | `boolean` | No | — | | `metadata` | `object` | No | You can store any additional data you want here. Metadata must have at most 50 keys, each key up to 40 characters. Values can be strings (up to 500 characters), numbers, or booleans. | | `theme` | `string` | No | — | | `brandColor` | `string` | No | — | | `darkBrandColor` | `string` | No | — | | `bannerUrl` | `string` | No | URL of the teams banner image which is shown on booker | | `timeFormat` | `number` | No | — | | `timeZone` | `string` | No | Time zone used for the team's default Monday-to-Friday schedule from 9 AM to 5 PM. Defaults to `"Europe/London"`. | | `weekStart` | `string` | No | — | | `bookingLimits` | `string` | No | — | | `includeManagedEventsInLimits` | `boolean` | No | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `number` | Yes | — | | `parentId` | `number` | No | — | | `name` | `string` | Yes | — | | `slug` | `string` | No | — | | `logoUrl` | `string \| null` | No | Team logo. Cal.com may return an absolute URL or a provider-relative path such as `/api/avatar/...`. | | `calVideoLogo` | `string (uri)` | No | — | | `appLogo` | `string (uri)` | No | — | | `appIconLogo` | `string (uri)` | No | — | | `bio` | `string` | No | — | | `hideBranding` | `boolean` | No | — | | `isOrganization` | `boolean` | Yes | — | | `isPrivate` | `boolean` | No | — | | `hideBookATeamMember` | `boolean` | No | Default: `false`. | | `metadata` | `object` | No | — | | `theme` | `string` | No | — | | `brandColor` | `string` | No | — | | `darkBrandColor` | `string` | No | — | | `bannerUrl` | `string (uri)` | No | — | | `timeFormat` | `number` | No | — | | `timeZone` | `string` | No | Default: `"Europe/London"`. | | `weekStart` | `string` | No | Default: `"Sunday"`. | Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Update team event type Source: https://docs.automate.ax/reference/integrations/calcom/actions/update-team-event-type Updates one team-owned Cal.com event type. `calcom.updateTeamEventType` updates one team-owned Cal.com event type. ```ts automations/update-team-event-type.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Update team event type", () => { markSignificant( calcom.updateTeamEventType({ teamId: 17, eventTypeId: 23, title: "Priority support", }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `teamId` | `integer` | Yes | Must be greater than 0. | | `eventTypeId` | `integer` | Yes | Must be greater than 0. | | `lengthInMinutes` | `number` | No | — | | `lengthInMinutesOptions` | `number[]` | No | If you want that user can choose between different lengths of the event you can specify them here. Must include the provided `lengthInMinutes`. | | `title` | `string` | No | — | | `slug` | `string` | No | — | | `description` | `string` | No | — | | `bookingFields` | `object[]` | No | Complete set of booking form fields. This array replaces all existing booking fields. To modify existing fields, first fetch the current event type, then include all desired fields in this array. Sending only one field will remove all other custom fields, keeping only default fields plus the provided one. | | `slotInterval` | `number` | No | Slot interval in minutes. It defaults to the event length. | | `minimumBookingNotice` | `number` | No | Minimum number of minutes before the event that a booking can be made. | | `beforeEventBuffer` | `number` | No | Extra time automatically blocked on your calendar before a meeting starts. This gives you time to prepare, review notes, or transition from your previous activity. | | `afterEventBuffer` | `number` | No | Extra time automatically blocked on your calendar after a meeting ends. This gives you time to wrap up, add notes, or decompress before your next commitment. | | `scheduleId` | `number` | No | If you want that this event has different schedule than user's default one you can specify it here. | | `bookingLimitsCount` | `object` | No | Limit how many times this event can be booked | | `bookerActiveBookingsLimit` | `object` | No | Limit the number of active bookings a booker can make for this event type. | | `onlyShowFirstAvailableSlot` | `boolean` | No | This will limit your availability for this event type to one slot per day, scheduled at the earliest available time. | | `bookingLimitsDuration` | `object` | No | Limit total amount of time that this event can be booked | | `bookingWindow` | `object` | No | Limit how far in the future this event can be booked | | `offsetStart` | `number` | No | Offset time slots shown to bookers by the specified number of minutes. | | `bookerLayouts` | `JSON value` | No | Should booker have week, month or column view. Specify default layout and enabled layouts user can pick. | | `confirmationPolicy` | `object` | No | Specify how the booking needs to be manually confirmed before it is pushed to the integrations and a confirmation mail is sent. | | `bookingProposalCount` | `number \| null` | No | — | | `recurrence` | `object` | No | Create a recurring event type. | | `requiresBookerEmailVerification` | `boolean` | No | — | | `skipAttendeeEmailDeliverabilityCheck` | `boolean` | No | When true, skips the MX deliverability check for attendee emails on booking. Format validation and watchlist still apply. Requires the editor to belong to an organization, including a platform organization. | | `emailSettings` | `JSON value` | No | Email settings for this event type. Personal event types require an accepted organization membership; team event types require an organization team. This does not include emails sent by custom email workflows. | | `hideCalendarNotes` | `boolean` | No | — | | `lockTimeZoneToggleOnBookingPage` | `boolean` | No | — | | `color` | `object` | No | — | | `seats` | `object` | No | Create an event type with multiple seats. | | `customName` | `string` | No | Customizable event name with valid variables: \{Link title}, \{Event type title} (legacy), \{Organiser}, \{Scheduler}, \{Location}, \{Organiser first name}, \{Scheduler first name}, \{Scheduler last name}, \{Event duration}, \{LOCATION}, \{HOST/ATTENDEE}, \{HOST}, \{ATTENDEE}, \{USER} | | `destinationCalendar` | `object` | No | — | | `useDestinationCalendarEmail` | `boolean` | No | — | | `hideCalendarEventDetails` | `boolean` | No | — | | `successRedirectUrl` | `string` | No | A valid URL where the booker will redirect to, once the booking is completed successfully | | `hideOrganizerEmail` | `boolean` | No | Boolean to Hide organizer's email address from the booking screen, email notifications, and calendar events | | `calVideoSettings` | `JSON value` | No | Cal video settings for the event type | | `hidden` | `boolean` | No | — | | `bookingRequiresAuthentication` | `boolean` | No | Whether booking this event type through the API requires authentication. When true, only the event-type owner or an organization or team administrator or owner can book it. Default: `false`. | | `disableCancelling` | `JSON value` | No | Settings for disabling cancelling of this event type. | | `disableRescheduling` | `JSON value` | No | Settings for disabling rescheduling of this event type. Can be always disabled or disabled when less than X minutes before the meeting. | | `interfaceLanguage` | `string enum` | No | Set preferred language for the booking interface. Use empty string for visitor's browser language (default). | | `allowReschedulingPastBookings` | `boolean` | No | Enabling this option allows for past events to be rescheduled. Default: `false`. | | `allowReschedulingCancelledBookings` | `boolean` | No | When enabled, users will be able to create a new booking when trying to reschedule a cancelled booking. Default: `false`. | | `showOptimizedSlots` | `boolean` | No | Arrange time slots to optimize availability. Default: `false`. | | `privateNoteEnabled` | `boolean` | No | When enabled, a private note calendar event is created alongside the booking with the resolved template as its description. Only visible to the host. Default: `false`. | | `privateNoteMode` | `JSON value` | No | How private notes are delivered: as an additional host event or by sending separate host and guest invites. | | `privateNoteTemplate` | `string` | No | Template for the private note content. Supports variables like \{Attendee name}, \{Link title}, \{Event type title} (legacy), \{Location}, \{Host name}, \{Event duration}, and custom booking field names. | | `schedulingType` | `"collective" \| "roundRobin"` | No | The scheduling type for the team event - collective or roundRobin. ❗If you change scheduling type you must also provide `hosts` or `assignAllTeamMembers` in the request body, otherwise the event type will have no hosts - this is required because in case of collective event type all hosts are mandatory but in case of round robin some or non can be mandatory so we can't predict how you want the hosts to be setup which is why you must provide that information. If you want to convert round robin or collective into managed or managed into round robin or collective then you will have to create a new team event type and delete old one. | | `hosts` | `object[]` | No | Hosts contain specific team members you want to assign to this event type. To assign every current and future team member use `assignAllTeamMembers: true` and omit this field. As an exception, round robin event types accept `hosts` together with `assignAllTeamMembers: true` to mark specific team members as fixed hosts (entries with `mandatory: true`); non-mandatory entries are silently ignored in that combination because they would be added to the round robin pool by `assignAllTeamMembers` anyway. For platform customers the hosts can include userIds only of managed users. | | `assignAllTeamMembers` | `boolean` | No | If true, all current and future team members will be assigned to this event type. Mutually exclusive with `hosts` for collective and managed event types. For round robin event types, `hosts` may be provided alongside `assignAllTeamMembers: true` solely to designate fixed hosts via `mandatory: true` entries. | | `locations` | `object[]` | No | Locations where the event will take place. If not provided, cal video link will be used as the location. Note: Setting a location to a conferencing app does not install the app - the app must already be installed. Via API, only Google Meet (google-meet), Microsoft Teams (office365-video), and Zoom (zoom) can be installed. Cal Video (cal-video) is installed by default. All other conferencing apps must be connected via the Cal.com web app and are not available for Platform plan customers. You can only set an event type location to an app that has already been installed or connected. | | `rescheduleWithSameRoundRobinHost` | `boolean` | No | Rescheduled events will be assigned to the same host as initially scheduled. | | `allowRRHostChoiceOnReschedule` | `boolean` | No | Let the person rescheduling choose between keeping the original host and letting round robin pick from the whole team. Requires rescheduleWithSameRoundRobinHost to be enabled. | ## Output The action removes the outer Cal.com status envelope. Cal.com returns either one updated team event type object or an array of updated team event type objects. Each object includes its ID, team, hosts, scheduling type, booking URL, and event configuration. Cal.com enforces account role, plan, and availability requirements. Provider rejections surface as structured action failures with the HTTP status and any `Retry-After` delay. # Cal.com Source: https://docs.automate.ax/reference/integrations/calcom/index Manage Cal.com scheduling and react to verified booking, meeting, routing, and availability events. Automate.ax connects to Cal.com with an API key. Use typed actions for bookings, event types, schedules, out-of-office entries, slots, calendars, and team scheduling. Managed webhooks start automations from every useful Cal.com event. ```ts automations/inspect-new-calcom-bookings.automation.ts theme={null} import { automation } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("Inspect new Cal.com bookings", () => { const created = calcom.onBookingCreated({ scope: { eventTypeId: 23, teamId: 17, type: "team" }, }) calcom.getBooking({ bookingUid: created.payload.uid }) }) ``` ## Connect Create an API key in [Cal.com developer settings](https://app.cal.com/settings/developer/api-keys). It authorizes the account's available API surface. Cal.com limits API callers to 120 requests per minute by default. Automate.ax preserves provider `Retry-After` information on rate-limit failures. Managed triggers use a personal webhook when `scope` is omitted. Booking triggers and `onEvent` also accept `{ type: "team", teamId, eventTypeId }` for one team-owned Collective or Round Robin event type. Delegation credential triggers require `{ type: "organization", organizationId }`; `onEvent` also accepts that scope for all organization events. Team webhooks require a Cal.com Teams plan or higher and an API key owned by a team admin or owner. Organization webhooks require an organization admin with webhook permissions. Cal.com marks organization webhooks as an Essentials feature for platform customers. Every managed webhook uses payload version `2026-07-27` and an encrypted signing secret. The two Cal Video no-show triggers use a five-minute evaluation window. ## Exports ```ts theme={null} import { calcom, calcomAccount, getCalcomApi } from "automate.ax/calcom" ``` * `calcom` contains the packaged actions and triggers. * `calcomAccount("name")` selects a named Cal.com connection. * `getCalcomApi` creates the authenticated API v2 helper for a custom account-backed action. ## Actions * [Add booking attendee](/reference/integrations/calcom/actions/add-booking-attendee) * [Add booking guests](/reference/integrations/calcom/actions/add-booking-guests) * [Cancel booking](/reference/integrations/calcom/actions/cancel-booking) * [Clear booking limits](/reference/integrations/calcom/actions/clear-booking-limits) * [Confirm booking](/reference/integrations/calcom/actions/confirm-booking) * [Create booking](/reference/integrations/calcom/actions/create-booking) * [Create event type](/reference/integrations/calcom/actions/create-event-type) * [Create out of office entry](/reference/integrations/calcom/actions/create-out-of-office-entry) * [Create private link](/reference/integrations/calcom/actions/create-private-link) * [Create schedule](/reference/integrations/calcom/actions/create-schedule) * [Create team](/reference/integrations/calcom/actions/create-team) * [Create team event type](/reference/integrations/calcom/actions/create-team-event-type) * [Decline booking](/reference/integrations/calcom/actions/decline-booking) * [Delete event type](/reference/integrations/calcom/actions/delete-event-type) * [Delete out of office entry](/reference/integrations/calcom/actions/delete-out-of-office-entry) * [Delete private link](/reference/integrations/calcom/actions/delete-private-link) * [Delete schedule](/reference/integrations/calcom/actions/delete-schedule) * [Delete slot reservation](/reference/integrations/calcom/actions/delete-slot-reservation) * [Delete team](/reference/integrations/calcom/actions/delete-team) * [Delete team event type](/reference/integrations/calcom/actions/delete-team-event-type) * [Get booking](/reference/integrations/calcom/actions/get-booking) * [Get booking attendee](/reference/integrations/calcom/actions/get-booking-attendee) * [Get booking calendar links](/reference/integrations/calcom/actions/get-booking-calendar-links) * [Get booking conferencing sessions](/reference/integrations/calcom/actions/get-booking-conferencing-sessions) * [Get booking limits](/reference/integrations/calcom/actions/get-booking-limits) * [Get booking recordings](/reference/integrations/calcom/actions/get-booking-recordings) * [Get booking references](/reference/integrations/calcom/actions/get-booking-references) * [Get booking routing trace](/reference/integrations/calcom/actions/get-booking-routing-trace) * [Get booking transcripts](/reference/integrations/calcom/actions/get-booking-transcripts) * [Get calendar busy times](/reference/integrations/calcom/actions/get-calendar-busy-times) * [Get default schedule](/reference/integrations/calcom/actions/get-default-schedule) * [Get event type](/reference/integrations/calcom/actions/get-event-type) * [Get event type history](/reference/integrations/calcom/actions/get-event-type-history) * [Get event type scheduling config](/reference/integrations/calcom/actions/get-event-type-scheduling-config) * [Get profile](/reference/integrations/calcom/actions/get-profile) * [Get schedule](/reference/integrations/calcom/actions/get-schedule) * [Get slot reservation](/reference/integrations/calcom/actions/get-slot-reservation) * [Get team](/reference/integrations/calcom/actions/get-team) * [Get team event type](/reference/integrations/calcom/actions/get-team-event-type) * [List available slots](/reference/integrations/calcom/actions/list-available-slots) * [List booking attendees](/reference/integrations/calcom/actions/list-booking-attendees) * [List bookings](/reference/integrations/calcom/actions/list-bookings) * [List calendars](/reference/integrations/calcom/actions/list-calendars) * [List event types](/reference/integrations/calcom/actions/list-event-types) * [List out of office entries](/reference/integrations/calcom/actions/list-out-of-office-entries) * [List private links](/reference/integrations/calcom/actions/list-private-links) * [List schedules](/reference/integrations/calcom/actions/list-schedules) * [List team bookings](/reference/integrations/calcom/actions/list-team-bookings) * [List team event types](/reference/integrations/calcom/actions/list-team-event-types) * [List teams](/reference/integrations/calcom/actions/list-teams) * [List team schedules](/reference/integrations/calcom/actions/list-team-schedules) * [Mark booking absence](/reference/integrations/calcom/actions/mark-booking-absence) * [Reassign booking](/reference/integrations/calcom/actions/reassign-booking) * [Reassign booking to host](/reference/integrations/calcom/actions/reassign-booking-to-host) * [Request booking reschedule](/reference/integrations/calcom/actions/request-booking-reschedule) * [Reserve slot](/reference/integrations/calcom/actions/reserve-slot) * [Reschedule booking](/reference/integrations/calcom/actions/reschedule-booking) * [Update booking limits](/reference/integrations/calcom/actions/update-booking-limits) * [Update booking location](/reference/integrations/calcom/actions/update-booking-location) * [Update event type](/reference/integrations/calcom/actions/update-event-type) * [Update out of office entry](/reference/integrations/calcom/actions/update-out-of-office-entry) * [Update private link](/reference/integrations/calcom/actions/update-private-link) * [Update profile](/reference/integrations/calcom/actions/update-profile) * [Update schedule](/reference/integrations/calcom/actions/update-schedule) * [Update slot reservation](/reference/integrations/calcom/actions/update-slot-reservation) * [Update team](/reference/integrations/calcom/actions/update-team) * [Update team event type](/reference/integrations/calcom/actions/update-team-event-type) ## Triggers * [On after guests cal video no show](/reference/integrations/calcom/triggers/on-after-guests-cal-video-no-show) * [On after hosts cal video no show](/reference/integrations/calcom/triggers/on-after-hosts-cal-video-no-show) * [On booking cancelled](/reference/integrations/calcom/triggers/on-booking-cancelled) * [On booking created](/reference/integrations/calcom/triggers/on-booking-created) * [On booking location updated](/reference/integrations/calcom/triggers/on-booking-location-updated) * [On booking no show updated](/reference/integrations/calcom/triggers/on-booking-no-show-updated) * [On booking paid](/reference/integrations/calcom/triggers/on-booking-paid) * [On booking payment initiated](/reference/integrations/calcom/triggers/on-booking-payment-initiated) * [On booking reassigned](/reference/integrations/calcom/triggers/on-booking-reassigned) * [On booking rejected](/reference/integrations/calcom/triggers/on-booking-rejected) * [On booking requested](/reference/integrations/calcom/triggers/on-booking-requested) * [On booking rescheduled](/reference/integrations/calcom/triggers/on-booking-rescheduled) * [On calendar entry rejected](/reference/integrations/calcom/triggers/on-calendar-entry-rejected) * [On delegation credential error](/reference/integrations/calcom/triggers/on-delegation-credential-error) * [On delegation credential rotation required](/reference/integrations/calcom/triggers/on-delegation-credential-rotation-required) * [On delegation credential secret rotated](/reference/integrations/calcom/triggers/on-delegation-credential-secret-rotated) * [On delegation credential secret rotation failed](/reference/integrations/calcom/triggers/on-delegation-credential-secret-rotation-failed) * [On event](/reference/integrations/calcom/triggers/on-event) * [On form submitted](/reference/integrations/calcom/triggers/on-form-submitted) * [On form submitted without event](/reference/integrations/calcom/triggers/on-form-submitted-without-event) * [On instant meeting accepted](/reference/integrations/calcom/triggers/on-instant-meeting-accepted) * [On instant meeting created](/reference/integrations/calcom/triggers/on-instant-meeting-created) * [On meeting ended](/reference/integrations/calcom/triggers/on-meeting-ended) * [On meeting started](/reference/integrations/calcom/triggers/on-meeting-started) * [On out of office created](/reference/integrations/calcom/triggers/on-out-of-office-created) * [On recording ready](/reference/integrations/calcom/triggers/on-recording-ready) * [On recording transcription generated](/reference/integrations/calcom/triggers/on-recording-transcription-generated) * [On routing form fallback hit](/reference/integrations/calcom/triggers/on-routing-form-fallback-hit) * [On wrong assignment reported](/reference/integrations/calcom/triggers/on-wrong-assignment-reported) # On after guests cal video no show Source: https://docs.automate.ax/reference/integrations/calcom/triggers/on-after-guests-cal-video-no-show Subscribes after no guest joins a Cal Video meeting. `calcom.onAfterGuestsCalVideoNoShow` subscribes after no guest joins a Cal Video meeting. ```ts automations/on-after-guests-cal-video-no-show.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("On after guests cal video no show", () => { const event = calcom.onAfterGuestsCalVideoNoShow() markSignificant(event) }) ``` ## Event | Field | Type | Required | | - | - | - | | `createdAt` | `string (date-time)` | Yes | | `payload` | `object` | Yes | | `payload.attendees` | `object[]` | Yes | | `payload.attendees[].email` | `string (email)` | Yes | | `payload.attendees[].id` | `integer` | No | | `payload.attendees[].language` | `object` | Yes | | `payload.attendees[].language.locale` | `string` | Yes | | `payload.attendees[].name` | `string` | Yes | | `payload.attendees[].phoneNumber` | `string \| null` | No | | `payload.attendees[].timeZone` | `string` | Yes | | `payload.attendees[].username` | `string \| null` | No | | `payload.attendees[].utcOffset` | `number` | No | | `payload.bookingId` | `integer` | Yes | | `payload.bookingUid` | `string` | Yes | | `payload.endTime` | `string` | Yes | | `payload.message` | `string` | Yes | | `payload.participants` | `JSON value[]` | Yes | | `payload.startTime` | `string` | Yes | | `payload.title` | `string` | Yes | | `payload.webhook` | `object` | Yes | | `payload.webhook.id` | `number \| string` | Yes | | `payload.webhook.subscriberUrl` | `string (uri)` | Yes | | `payload.webhook.time` | `number` | Yes | | `payload.webhook.timeUnit` | `string` | Yes | | `triggerEvent` | `"AFTER_GUESTS_CAL_VIDEO_NO_SHOW"` | Yes | Additional provider fields are preserved. Automate.ax creates and maintains the Cal.com webhook, verifies `x-cal-signature-256`, and deduplicates provider retries. Use `calcom.onEvent` when one automation should receive every supported Cal.com event. # On after hosts cal video no show Source: https://docs.automate.ax/reference/integrations/calcom/triggers/on-after-hosts-cal-video-no-show Subscribes after no host joins a Cal Video meeting. `calcom.onAfterHostsCalVideoNoShow` subscribes after no host joins a Cal Video meeting. ```ts automations/on-after-hosts-cal-video-no-show.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("On after hosts cal video no show", () => { const event = calcom.onAfterHostsCalVideoNoShow() markSignificant(event) }) ``` ## Event | Field | Type | Required | | - | - | - | | `createdAt` | `string (date-time)` | Yes | | `payload` | `object` | Yes | | `payload.attendees` | `object[]` | Yes | | `payload.attendees[].email` | `string (email)` | Yes | | `payload.attendees[].id` | `integer` | No | | `payload.attendees[].language` | `object` | Yes | | `payload.attendees[].language.locale` | `string` | Yes | | `payload.attendees[].name` | `string` | Yes | | `payload.attendees[].phoneNumber` | `string \| null` | No | | `payload.attendees[].timeZone` | `string` | Yes | | `payload.attendees[].username` | `string \| null` | No | | `payload.attendees[].utcOffset` | `number` | No | | `payload.bookingId` | `integer` | Yes | | `payload.bookingUid` | `string` | Yes | | `payload.endTime` | `string` | Yes | | `payload.message` | `string` | Yes | | `payload.participants` | `JSON value[]` | Yes | | `payload.startTime` | `string` | Yes | | `payload.title` | `string` | Yes | | `payload.webhook` | `object` | Yes | | `payload.webhook.id` | `number \| string` | Yes | | `payload.webhook.subscriberUrl` | `string (uri)` | Yes | | `payload.webhook.time` | `number` | Yes | | `payload.webhook.timeUnit` | `string` | Yes | | `payload.hostEmail` | `string (email)` | Yes | | `payload.noShowHost` | `boolean` | Yes | | `triggerEvent` | `"AFTER_HOSTS_CAL_VIDEO_NO_SHOW"` | Yes | Additional provider fields are preserved. Automate.ax creates and maintains the Cal.com webhook, verifies `x-cal-signature-256`, and deduplicates provider retries. Use `calcom.onEvent` when one automation should receive every supported Cal.com event. # On booking cancelled Source: https://docs.automate.ax/reference/integrations/calcom/triggers/on-booking-cancelled Subscribes when a booking is cancelled. `calcom.onBookingCancelled` subscribes when a booking is cancelled. ```ts automations/on-booking-cancelled.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("On booking cancelled", () => { const event = calcom.onBookingCancelled({ scope: { eventTypeId: 23, teamId: 17, type: "team" }, }) markSignificant(event) }) ``` ## Scope Omit `scope` for personal bookings. To watch one team-owned Collective or Round Robin event type, pass `{ type: "team", teamId, eventTypeId }`. Team scope requires a Cal.com Teams plan or higher and an API key owned by a team admin or owner. ## Event | Field | Type | Required | | - | - | - | | `createdAt` | `string (date-time)` | Yes | | `payload` | `object` | Yes | | `payload.additionalNotes` | `string` | No | | `payload.attendees` | `object[]` | Yes | | `payload.attendees[].email` | `string (email)` | Yes | | `payload.attendees[].id` | `integer` | No | | `payload.attendees[].language` | `object` | Yes | | `payload.attendees[].language.locale` | `string` | Yes | | `payload.attendees[].name` | `string` | Yes | | `payload.attendees[].phoneNumber` | `string \| null` | No | | `payload.attendees[].timeZone` | `string` | Yes | | `payload.attendees[].username` | `string \| null` | No | | `payload.attendees[].utcOffset` | `number` | No | | `payload.bookingId` | `integer` | Yes | | `payload.customInputs` | `object \| null` | No | | `payload.description` | `string` | Yes | | `payload.endTime` | `string` | Yes | | `payload.eventDescription` | `string \| null` | No | | `payload.eventTitle` | `string` | No | | `payload.eventTypeId` | `integer \| null` | No | | `payload.location` | `JSON value` | No | | `payload.metadata` | `object` | No | | `payload.organizer` | `object` | Yes | | `payload.organizer.email` | `string (email)` | Yes | | `payload.organizer.id` | `integer` | No | | `payload.organizer.language` | `object` | Yes | | `payload.organizer.language.locale` | `string` | Yes | | `payload.organizer.name` | `string` | Yes | | `payload.organizer.phoneNumber` | `string \| null` | No | | `payload.organizer.timeZone` | `string` | Yes | | `payload.organizer.username` | `string \| null` | No | | `payload.organizer.utcOffset` | `number` | No | | `payload.responses` | `object \| null` | No | | `payload.startTime` | `string` | Yes | | `payload.status` | `string` | Yes | | `payload.title` | `string` | Yes | | `payload.type` | `string` | Yes | | `payload.uid` | `string` | Yes | | `payload.attendeeIcsContent` | `string` | No | | `payload.organizerIcsContent` | `string` | No | | `payload.cancelledBy` | `string` | No | | `payload.cancellationReason` | `string` | No | | `payload.requestReschedule` | `boolean` | Yes | | `triggerEvent` | `"BOOKING_CANCELLED"` | Yes | Additional provider fields are preserved. For webhook version `2026-07-27`, `attendeeIcsContent` and `organizerIcsContent` contain pre-generated calendar invites for attendee and organizer emails. Either field may be absent because of calendar or privacy settings. Automate.ax creates and maintains the Cal.com webhook, verifies `x-cal-signature-256`, and deduplicates provider retries. Use `calcom.onEvent` when one automation should receive every supported Cal.com event. # On booking created Source: https://docs.automate.ax/reference/integrations/calcom/triggers/on-booking-created Subscribes when a booking is created. `calcom.onBookingCreated` subscribes when a booking is created. ```ts automations/on-booking-created.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("On booking created", () => { const event = calcom.onBookingCreated({ scope: { eventTypeId: 23, teamId: 17, type: "team" }, }) markSignificant(event) }) ``` ## Scope Omit `scope` for personal bookings. To watch one team-owned Collective or Round Robin event type, pass `{ type: "team", teamId, eventTypeId }`. Team scope requires a Cal.com Teams plan or higher and an API key owned by a team admin or owner. ## Event | Field | Type | Required | | - | - | - | | `createdAt` | `string (date-time)` | Yes | | `payload` | `object` | Yes | | `payload.additionalNotes` | `string` | No | | `payload.attendees` | `object[]` | Yes | | `payload.attendees[].email` | `string (email)` | Yes | | `payload.attendees[].id` | `integer` | No | | `payload.attendees[].language` | `object` | Yes | | `payload.attendees[].language.locale` | `string` | Yes | | `payload.attendees[].name` | `string` | Yes | | `payload.attendees[].phoneNumber` | `string \| null` | No | | `payload.attendees[].timeZone` | `string` | Yes | | `payload.attendees[].username` | `string \| null` | No | | `payload.attendees[].utcOffset` | `number` | No | | `payload.bookingId` | `integer` | Yes | | `payload.customInputs` | `object \| null` | No | | `payload.description` | `string` | Yes | | `payload.endTime` | `string` | Yes | | `payload.eventDescription` | `string \| null` | No | | `payload.eventTitle` | `string` | No | | `payload.eventTypeId` | `integer \| null` | No | | `payload.location` | `JSON value` | No | | `payload.metadata` | `object` | No | | `payload.organizer` | `object` | Yes | | `payload.organizer.email` | `string (email)` | Yes | | `payload.organizer.id` | `integer` | No | | `payload.organizer.language` | `object` | Yes | | `payload.organizer.language.locale` | `string` | Yes | | `payload.organizer.name` | `string` | Yes | | `payload.organizer.phoneNumber` | `string \| null` | No | | `payload.organizer.timeZone` | `string` | Yes | | `payload.organizer.username` | `string \| null` | No | | `payload.organizer.utcOffset` | `number` | No | | `payload.responses` | `object \| null` | No | | `payload.startTime` | `string` | Yes | | `payload.status` | `string` | Yes | | `payload.title` | `string` | Yes | | `payload.type` | `string` | Yes | | `payload.uid` | `string` | Yes | | `payload.attendeeIcsContent` | `string` | No | | `payload.organizerIcsContent` | `string` | No | | `triggerEvent` | `"BOOKING_CREATED"` | Yes | Additional provider fields are preserved. For webhook version `2026-07-27`, `attendeeIcsContent` and `organizerIcsContent` contain pre-generated calendar invites for attendee and organizer emails. Either field may be absent because of calendar or privacy settings. Automate.ax creates and maintains the Cal.com webhook, verifies `x-cal-signature-256`, and deduplicates provider retries. Use `calcom.onEvent` when one automation should receive every supported Cal.com event. # On booking location updated Source: https://docs.automate.ax/reference/integrations/calcom/triggers/on-booking-location-updated Subscribes when a booking location changes. `calcom.onBookingLocationUpdated` subscribes when a booking location changes. ```ts automations/on-booking-location-updated.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("On booking location updated", () => { const event = calcom.onBookingLocationUpdated() markSignificant(event) }) ``` ## Scope Omit `scope` for personal bookings. To watch one team-owned Collective or Round Robin event type, pass `{ type: "team", teamId, eventTypeId }`. Team scope requires a Cal.com Teams plan or higher and an API key owned by a team admin or owner. ## Event | Field | Type | Required | | - | - | - | | `createdAt` | `string (date-time)` | Yes | | `payload` | `object` | Yes | | `payload.additionalNotes` | `string` | No | | `payload.attendees` | `object[]` | Yes | | `payload.attendees[].email` | `string (email)` | Yes | | `payload.attendees[].id` | `integer` | No | | `payload.attendees[].language` | `object` | Yes | | `payload.attendees[].language.locale` | `string` | Yes | | `payload.attendees[].name` | `string` | Yes | | `payload.attendees[].phoneNumber` | `string \| null` | No | | `payload.attendees[].timeZone` | `string` | Yes | | `payload.attendees[].username` | `string \| null` | No | | `payload.attendees[].utcOffset` | `number` | No | | `payload.bookingId` | `integer` | Yes | | `payload.customInputs` | `object \| null` | No | | `payload.description` | `string` | Yes | | `payload.endTime` | `string` | Yes | | `payload.eventDescription` | `string \| null` | No | | `payload.eventTitle` | `string` | No | | `payload.eventTypeId` | `integer \| null` | No | | `payload.location` | `JSON value` | No | | `payload.metadata` | `object` | No | | `payload.organizer` | `object` | Yes | | `payload.organizer.email` | `string (email)` | Yes | | `payload.organizer.id` | `integer` | No | | `payload.organizer.language` | `object` | Yes | | `payload.organizer.language.locale` | `string` | Yes | | `payload.organizer.name` | `string` | Yes | | `payload.organizer.phoneNumber` | `string \| null` | No | | `payload.organizer.timeZone` | `string` | Yes | | `payload.organizer.username` | `string \| null` | No | | `payload.organizer.utcOffset` | `number` | No | | `payload.responses` | `object \| null` | No | | `payload.startTime` | `string` | Yes | | `payload.status` | `string` | Yes | | `payload.title` | `string` | Yes | | `payload.type` | `string` | Yes | | `payload.uid` | `string` | Yes | | `payload.previousLocation` | `JSON value` | No | | `triggerEvent` | `"BOOKING_LOCATION_UPDATED"` | Yes | Additional provider fields are preserved. Automate.ax creates and maintains the Cal.com webhook, verifies `x-cal-signature-256`, and deduplicates provider retries. Use `calcom.onEvent` when one automation should receive every supported Cal.com event. # On booking no show updated Source: https://docs.automate.ax/reference/integrations/calcom/triggers/on-booking-no-show-updated Subscribes when a booking participant's no-show state changes. `calcom.onBookingNoShowUpdated` subscribes when a booking participant's no-show state changes. ```ts automations/on-booking-no-show-updated.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("On booking no show updated", () => { const event = calcom.onBookingNoShowUpdated() markSignificant(event) }) ``` ## Scope Omit `scope` for personal bookings. To watch one team-owned Collective or Round Robin event type, pass `{ type: "team", teamId, eventTypeId }`. Team scope requires a Cal.com Teams plan or higher and an API key owned by a team admin or owner. ## Event | Field | Type | Required | | - | - | - | | `createdAt` | `string (date-time)` | Yes | | `payload` | `object` | Yes | | `payload.attendees` | `object[]` | Yes | | `payload.attendees[].email` | `string (email)` | Yes | | `payload.attendees[].noShow` | `boolean` | Yes | | `payload.bookingId` | `integer` | No | | `payload.bookingUid` | `string` | Yes | | `payload.message` | `string` | Yes | | `triggerEvent` | `"BOOKING_NO_SHOW_UPDATED"` | Yes | Additional provider fields are preserved. Automate.ax creates and maintains the Cal.com webhook, verifies `x-cal-signature-256`, and deduplicates provider retries. Use `calcom.onEvent` when one automation should receive every supported Cal.com event. # On booking paid Source: https://docs.automate.ax/reference/integrations/calcom/triggers/on-booking-paid Subscribes when a booking is paid. `calcom.onBookingPaid` subscribes when a booking is paid. ```ts automations/on-booking-paid.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("On booking paid", () => { const event = calcom.onBookingPaid() markSignificant(event) }) ``` ## Scope Omit `scope` for personal bookings. To watch one team-owned Collective or Round Robin event type, pass `{ type: "team", teamId, eventTypeId }`. Team scope requires a Cal.com Teams plan or higher and an API key owned by a team admin or owner. ## Event | Field | Type | Required | | - | - | - | | `createdAt` | `string (date-time)` | Yes | | `payload` | `object` | Yes | | `payload.additionalNotes` | `string` | No | | `payload.attendees` | `object[]` | Yes | | `payload.attendees[].email` | `string (email)` | Yes | | `payload.attendees[].id` | `integer` | No | | `payload.attendees[].language` | `object` | Yes | | `payload.attendees[].language.locale` | `string` | Yes | | `payload.attendees[].name` | `string` | Yes | | `payload.attendees[].phoneNumber` | `string \| null` | No | | `payload.attendees[].timeZone` | `string` | Yes | | `payload.attendees[].username` | `string \| null` | No | | `payload.attendees[].utcOffset` | `number` | No | | `payload.bookingId` | `integer` | Yes | | `payload.customInputs` | `object \| null` | No | | `payload.description` | `string` | Yes | | `payload.endTime` | `string` | Yes | | `payload.eventDescription` | `string \| null` | No | | `payload.eventTitle` | `string` | No | | `payload.eventTypeId` | `integer \| null` | No | | `payload.location` | `JSON value` | No | | `payload.metadata` | `object` | No | | `payload.organizer` | `object` | Yes | | `payload.organizer.email` | `string (email)` | Yes | | `payload.organizer.id` | `integer` | No | | `payload.organizer.language` | `object` | Yes | | `payload.organizer.language.locale` | `string` | Yes | | `payload.organizer.name` | `string` | Yes | | `payload.organizer.phoneNumber` | `string \| null` | No | | `payload.organizer.timeZone` | `string` | Yes | | `payload.organizer.username` | `string \| null` | No | | `payload.organizer.utcOffset` | `number` | No | | `payload.responses` | `object \| null` | No | | `payload.startTime` | `string` | Yes | | `payload.status` | `string` | Yes | | `payload.title` | `string` | Yes | | `payload.type` | `string` | Yes | | `payload.uid` | `string` | Yes | | `payload.attendeeIcsContent` | `string` | No | | `payload.organizerIcsContent` | `string` | No | | `payload.paymentData` | `object` | No | | `payload.paymentId` | `integer` | No | | `triggerEvent` | `"BOOKING_PAID"` | Yes | Additional provider fields are preserved. For webhook version `2026-07-27`, `attendeeIcsContent` and `organizerIcsContent` contain pre-generated calendar invites for attendee and organizer emails. Either field may be absent because of calendar or privacy settings. Automate.ax creates and maintains the Cal.com webhook, verifies `x-cal-signature-256`, and deduplicates provider retries. Use `calcom.onEvent` when one automation should receive every supported Cal.com event. # On booking payment initiated Source: https://docs.automate.ax/reference/integrations/calcom/triggers/on-booking-payment-initiated Subscribes when booking payment begins. `calcom.onBookingPaymentInitiated` subscribes when booking payment begins. ```ts automations/on-booking-payment-initiated.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("On booking payment initiated", () => { const event = calcom.onBookingPaymentInitiated() markSignificant(event) }) ``` ## Scope Omit `scope` for personal bookings. To watch one team-owned Collective or Round Robin event type, pass `{ type: "team", teamId, eventTypeId }`. Team scope requires a Cal.com Teams plan or higher and an API key owned by a team admin or owner. ## Event | Field | Type | Required | | - | - | - | | `createdAt` | `string (date-time)` | Yes | | `payload` | `object` | Yes | | `payload.additionalNotes` | `string` | No | | `payload.attendees` | `object[]` | Yes | | `payload.attendees[].email` | `string (email)` | Yes | | `payload.attendees[].id` | `integer` | No | | `payload.attendees[].language` | `object` | Yes | | `payload.attendees[].language.locale` | `string` | Yes | | `payload.attendees[].name` | `string` | Yes | | `payload.attendees[].phoneNumber` | `string \| null` | No | | `payload.attendees[].timeZone` | `string` | Yes | | `payload.attendees[].username` | `string \| null` | No | | `payload.attendees[].utcOffset` | `number` | No | | `payload.bookingId` | `integer` | Yes | | `payload.customInputs` | `object \| null` | No | | `payload.description` | `string` | Yes | | `payload.endTime` | `string` | Yes | | `payload.eventDescription` | `string \| null` | No | | `payload.eventTitle` | `string` | No | | `payload.eventTypeId` | `integer \| null` | No | | `payload.location` | `JSON value` | No | | `payload.metadata` | `object` | No | | `payload.organizer` | `object` | Yes | | `payload.organizer.email` | `string (email)` | Yes | | `payload.organizer.id` | `integer` | No | | `payload.organizer.language` | `object` | Yes | | `payload.organizer.language.locale` | `string` | Yes | | `payload.organizer.name` | `string` | Yes | | `payload.organizer.phoneNumber` | `string \| null` | No | | `payload.organizer.timeZone` | `string` | Yes | | `payload.organizer.username` | `string \| null` | No | | `payload.organizer.utcOffset` | `number` | No | | `payload.responses` | `object \| null` | No | | `payload.startTime` | `string` | Yes | | `payload.status` | `string` | Yes | | `payload.title` | `string` | Yes | | `payload.type` | `string` | Yes | | `payload.uid` | `string` | Yes | | `payload.paymentData` | `object` | No | | `payload.paymentId` | `integer` | No | | `triggerEvent` | `"BOOKING_PAYMENT_INITIATED"` | Yes | Additional provider fields are preserved. Automate.ax creates and maintains the Cal.com webhook, verifies `x-cal-signature-256`, and deduplicates provider retries. Use `calcom.onEvent` when one automation should receive every supported Cal.com event. # On booking reassigned Source: https://docs.automate.ax/reference/integrations/calcom/triggers/on-booking-reassigned Subscribes when a round-robin booking is reassigned. `calcom.onBookingReassigned` subscribes when a round-robin booking is reassigned. ```ts automations/on-booking-reassigned.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("On booking reassigned", () => { const event = calcom.onBookingReassigned() markSignificant(event) }) ``` ## Scope Omit `scope` for personal bookings. To watch one team-owned Collective or Round Robin event type, pass `{ type: "team", teamId, eventTypeId }`. Team scope requires a Cal.com Teams plan or higher and an API key owned by a team admin or owner. ## Event | Field | Type | Required | | - | - | - | | `createdAt` | `string (date-time)` | Yes | | `payload` | `object` | Yes | | `payload.additionalNotes` | `string` | No | | `payload.attendees` | `object[]` | Yes | | `payload.attendees[].email` | `string (email)` | Yes | | `payload.attendees[].id` | `integer` | No | | `payload.attendees[].language` | `object` | Yes | | `payload.attendees[].language.locale` | `string` | Yes | | `payload.attendees[].name` | `string` | Yes | | `payload.attendees[].phoneNumber` | `string \| null` | No | | `payload.attendees[].timeZone` | `string` | Yes | | `payload.attendees[].username` | `string \| null` | No | | `payload.attendees[].utcOffset` | `number` | No | | `payload.bookingId` | `integer` | Yes | | `payload.customInputs` | `object \| null` | No | | `payload.description` | `string` | Yes | | `payload.endTime` | `string` | Yes | | `payload.eventDescription` | `string \| null` | No | | `payload.eventTitle` | `string` | No | | `payload.eventTypeId` | `integer \| null` | No | | `payload.location` | `JSON value` | No | | `payload.metadata` | `object` | No | | `payload.organizer` | `object` | Yes | | `payload.organizer.email` | `string (email)` | Yes | | `payload.organizer.id` | `integer` | No | | `payload.organizer.language` | `object` | Yes | | `payload.organizer.language.locale` | `string` | Yes | | `payload.organizer.name` | `string` | Yes | | `payload.organizer.phoneNumber` | `string \| null` | No | | `payload.organizer.timeZone` | `string` | Yes | | `payload.organizer.username` | `string \| null` | No | | `payload.organizer.utcOffset` | `number` | No | | `payload.responses` | `object \| null` | No | | `payload.startTime` | `string` | Yes | | `payload.status` | `string` | Yes | | `payload.title` | `string` | Yes | | `payload.type` | `string` | Yes | | `payload.uid` | `string` | Yes | | `payload.attendeeIcsContent` | `string` | No | | `payload.organizerIcsContent` | `string` | No | | `payload.addedHostUserIds` | `integer[]` | Yes | | `payload.removedHostUserIds` | `integer[]` | Yes | | `triggerEvent` | `"BOOKING_REASSIGNED"` | Yes | Additional provider fields are preserved. For webhook version `2026-07-27`, `attendeeIcsContent` and `organizerIcsContent` contain pre-generated calendar invites for attendee and organizer emails. Either field may be absent because of calendar or privacy settings. Automate.ax creates and maintains the Cal.com webhook, verifies `x-cal-signature-256`, and deduplicates provider retries. Use `calcom.onEvent` when one automation should receive every supported Cal.com event. # On booking rejected Source: https://docs.automate.ax/reference/integrations/calcom/triggers/on-booking-rejected Subscribes when a requested booking is rejected. `calcom.onBookingRejected` subscribes when a requested booking is rejected. ```ts automations/on-booking-rejected.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("On booking rejected", () => { const event = calcom.onBookingRejected() markSignificant(event) }) ``` ## Scope Omit `scope` for personal bookings. To watch one team-owned Collective or Round Robin event type, pass `{ type: "team", teamId, eventTypeId }`. Team scope requires a Cal.com Teams plan or higher and an API key owned by a team admin or owner. ## Event | Field | Type | Required | | - | - | - | | `createdAt` | `string (date-time)` | Yes | | `payload` | `object` | Yes | | `payload.additionalNotes` | `string` | No | | `payload.attendees` | `object[]` | Yes | | `payload.attendees[].email` | `string (email)` | Yes | | `payload.attendees[].id` | `integer` | No | | `payload.attendees[].language` | `object` | Yes | | `payload.attendees[].language.locale` | `string` | Yes | | `payload.attendees[].name` | `string` | Yes | | `payload.attendees[].phoneNumber` | `string \| null` | No | | `payload.attendees[].timeZone` | `string` | Yes | | `payload.attendees[].username` | `string \| null` | No | | `payload.attendees[].utcOffset` | `number` | No | | `payload.bookingId` | `integer` | Yes | | `payload.customInputs` | `object \| null` | No | | `payload.description` | `string` | Yes | | `payload.endTime` | `string` | Yes | | `payload.eventDescription` | `string \| null` | No | | `payload.eventTitle` | `string` | No | | `payload.eventTypeId` | `integer \| null` | No | | `payload.location` | `JSON value` | No | | `payload.metadata` | `object` | No | | `payload.organizer` | `object` | Yes | | `payload.organizer.email` | `string (email)` | Yes | | `payload.organizer.id` | `integer` | No | | `payload.organizer.language` | `object` | Yes | | `payload.organizer.language.locale` | `string` | Yes | | `payload.organizer.name` | `string` | Yes | | `payload.organizer.phoneNumber` | `string \| null` | No | | `payload.organizer.timeZone` | `string` | Yes | | `payload.organizer.username` | `string \| null` | No | | `payload.organizer.utcOffset` | `number` | No | | `payload.responses` | `object \| null` | No | | `payload.startTime` | `string` | Yes | | `payload.status` | `string` | Yes | | `payload.title` | `string` | Yes | | `payload.type` | `string` | Yes | | `payload.uid` | `string` | Yes | | `payload.rejectionReason` | `string` | No | | `triggerEvent` | `"BOOKING_REJECTED"` | Yes | Additional provider fields are preserved. Automate.ax creates and maintains the Cal.com webhook, verifies `x-cal-signature-256`, and deduplicates provider retries. Use `calcom.onEvent` when one automation should receive every supported Cal.com event. # On booking requested Source: https://docs.automate.ax/reference/integrations/calcom/triggers/on-booking-requested Subscribes when a booking awaits host approval. `calcom.onBookingRequested` subscribes when a booking awaits host approval. ```ts automations/on-booking-requested.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("On booking requested", () => { const event = calcom.onBookingRequested() markSignificant(event) }) ``` ## Scope Omit `scope` for personal bookings. To watch one team-owned Collective or Round Robin event type, pass `{ type: "team", teamId, eventTypeId }`. Team scope requires a Cal.com Teams plan or higher and an API key owned by a team admin or owner. ## Event | Field | Type | Required | | - | - | - | | `createdAt` | `string (date-time)` | Yes | | `payload` | `object` | Yes | | `payload.additionalNotes` | `string` | No | | `payload.attendees` | `object[]` | Yes | | `payload.attendees[].email` | `string (email)` | Yes | | `payload.attendees[].id` | `integer` | No | | `payload.attendees[].language` | `object` | Yes | | `payload.attendees[].language.locale` | `string` | Yes | | `payload.attendees[].name` | `string` | Yes | | `payload.attendees[].phoneNumber` | `string \| null` | No | | `payload.attendees[].timeZone` | `string` | Yes | | `payload.attendees[].username` | `string \| null` | No | | `payload.attendees[].utcOffset` | `number` | No | | `payload.bookingId` | `integer` | Yes | | `payload.customInputs` | `object \| null` | No | | `payload.description` | `string` | Yes | | `payload.endTime` | `string` | Yes | | `payload.eventDescription` | `string \| null` | No | | `payload.eventTitle` | `string` | No | | `payload.eventTypeId` | `integer \| null` | No | | `payload.location` | `JSON value` | No | | `payload.metadata` | `object` | No | | `payload.organizer` | `object` | Yes | | `payload.organizer.email` | `string (email)` | Yes | | `payload.organizer.id` | `integer` | No | | `payload.organizer.language` | `object` | Yes | | `payload.organizer.language.locale` | `string` | Yes | | `payload.organizer.name` | `string` | Yes | | `payload.organizer.phoneNumber` | `string \| null` | No | | `payload.organizer.timeZone` | `string` | Yes | | `payload.organizer.username` | `string \| null` | No | | `payload.organizer.utcOffset` | `number` | No | | `payload.responses` | `object \| null` | No | | `payload.startTime` | `string` | Yes | | `payload.status` | `string` | Yes | | `payload.title` | `string` | Yes | | `payload.type` | `string` | Yes | | `payload.uid` | `string` | Yes | | `payload.requiresConfirmation` | `boolean` | Yes | | `triggerEvent` | `"BOOKING_REQUESTED"` | Yes | Additional provider fields are preserved. Automate.ax creates and maintains the Cal.com webhook, verifies `x-cal-signature-256`, and deduplicates provider retries. Use `calcom.onEvent` when one automation should receive every supported Cal.com event. # On booking rescheduled Source: https://docs.automate.ax/reference/integrations/calcom/triggers/on-booking-rescheduled Subscribes when a booking is rescheduled. `calcom.onBookingRescheduled` subscribes when a booking is rescheduled. ```ts automations/on-booking-rescheduled.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("On booking rescheduled", () => { const event = calcom.onBookingRescheduled({ scope: { eventTypeId: 23, teamId: 17, type: "team" }, }) markSignificant(event) }) ``` ## Scope Omit `scope` for personal bookings. To watch one team-owned Collective or Round Robin event type, pass `{ type: "team", teamId, eventTypeId }`. Team scope requires a Cal.com Teams plan or higher and an API key owned by a team admin or owner. ## Event | Field | Type | Required | | - | - | - | | `createdAt` | `string (date-time)` | Yes | | `payload` | `object` | Yes | | `payload.additionalNotes` | `string` | No | | `payload.attendees` | `object[]` | Yes | | `payload.attendees[].email` | `string (email)` | Yes | | `payload.attendees[].id` | `integer` | No | | `payload.attendees[].language` | `object` | Yes | | `payload.attendees[].language.locale` | `string` | Yes | | `payload.attendees[].name` | `string` | Yes | | `payload.attendees[].phoneNumber` | `string \| null` | No | | `payload.attendees[].timeZone` | `string` | Yes | | `payload.attendees[].username` | `string \| null` | No | | `payload.attendees[].utcOffset` | `number` | No | | `payload.bookingId` | `integer` | Yes | | `payload.customInputs` | `object \| null` | No | | `payload.description` | `string` | Yes | | `payload.endTime` | `string` | Yes | | `payload.eventDescription` | `string \| null` | No | | `payload.eventTitle` | `string` | No | | `payload.eventTypeId` | `integer \| null` | No | | `payload.location` | `JSON value` | No | | `payload.metadata` | `object` | No | | `payload.organizer` | `object` | Yes | | `payload.organizer.email` | `string (email)` | Yes | | `payload.organizer.id` | `integer` | No | | `payload.organizer.language` | `object` | Yes | | `payload.organizer.language.locale` | `string` | Yes | | `payload.organizer.name` | `string` | Yes | | `payload.organizer.phoneNumber` | `string \| null` | No | | `payload.organizer.timeZone` | `string` | Yes | | `payload.organizer.username` | `string \| null` | No | | `payload.organizer.utcOffset` | `number` | No | | `payload.responses` | `object \| null` | No | | `payload.startTime` | `string` | Yes | | `payload.status` | `string` | Yes | | `payload.title` | `string` | Yes | | `payload.type` | `string` | Yes | | `payload.uid` | `string` | Yes | | `payload.attendeeIcsContent` | `string` | No | | `payload.organizerIcsContent` | `string` | No | | `payload.rescheduleId` | `integer` | No | | `payload.rescheduleEndTime` | `string` | No | | `payload.rescheduleStartTime` | `string` | No | | `payload.rescheduleUid` | `string` | No | | `payload.rescheduledBy` | `string` | No | | `triggerEvent` | `"BOOKING_RESCHEDULED"` | Yes | Additional provider fields are preserved. For webhook version `2026-07-27`, `attendeeIcsContent` and `organizerIcsContent` contain pre-generated calendar invites for attendee and organizer emails. Either field may be absent because of calendar or privacy settings. Automate.ax creates and maintains the Cal.com webhook, verifies `x-cal-signature-256`, and deduplicates provider retries. Use `calcom.onEvent` when one automation should receive every supported Cal.com event. # On calendar entry rejected Source: https://docs.automate.ax/reference/integrations/calcom/triggers/on-calendar-entry-rejected Subscribes when Cal.com rejects a connected-calendar entry. `calcom.onCalendarEntryRejected` subscribes when Cal.com rejects a connected-calendar entry. ```ts automations/on-calendar-entry-rejected.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("On calendar entry rejected", () => { const event = calcom.onCalendarEntryRejected() markSignificant(event) }) ``` ## Event | Field | Type | Required | | - | - | - | | `createdAt` | `string (date-time)` | Yes | | `payload` | `Record` | Yes | | `triggerEvent` | `"CALENDAR_ENTRY_REJECTED"` | Yes | Additional provider fields are preserved. Automate.ax creates and maintains the Cal.com webhook, verifies `x-cal-signature-256`, and deduplicates provider retries. Use `calcom.onEvent` when one automation should receive every supported Cal.com event. # On delegation credential error Source: https://docs.automate.ax/reference/integrations/calcom/triggers/on-delegation-credential-error Subscribes when a delegation credential fails. `calcom.onDelegationCredentialError` subscribes when a delegation credential fails. ```ts automations/on-delegation-credential-error.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("On delegation credential error", () => { const event = calcom.onDelegationCredentialError({ scope: { organizationId: 7, type: "organization" }, }) markSignificant(event) }) ``` ## Scope Pass `{ type: "organization", organizationId }`. The connected API key must belong to an organization admin with permission to create, update, and delete organization webhooks. Cal.com also applies the organization's plan requirements. ## Event | Field | Type | Required | | - | - | - | | `createdAt` | `string (date-time)` | Yes | | `payload` | `object` | Yes | | `payload.credential` | `object` | Yes | | `payload.credential.appId` | `string` | Yes | | `payload.credential.delegationCredentialId` | `string` | Yes | | `payload.credential.id` | `integer` | Yes | | `payload.credential.type` | `string` | Yes | | `payload.error` | `object` | Yes | | `payload.error.message` | `string` | Yes | | `payload.error.type` | `string` | Yes | | `payload.user` | `object` | Yes | | `payload.user.email` | `string (email)` | Yes | | `payload.user.id` | `integer` | Yes | | `payload.user.organizationId` | `integer` | Yes | | `triggerEvent` | `"DELEGATION_CREDENTIAL_ERROR"` | Yes | Additional provider fields are preserved. Automate.ax creates and maintains the Cal.com webhook, verifies `x-cal-signature-256`, and deduplicates provider retries. Use `calcom.onEvent` when one automation should receive every supported Cal.com event. # On delegation credential rotation required Source: https://docs.automate.ax/reference/integrations/calcom/triggers/on-delegation-credential-rotation-required Subscribes when a delegation credential needs rotation. `calcom.onDelegationCredentialRotationRequired` subscribes when a delegation credential needs rotation. ```ts automations/on-delegation-credential-rotation-required.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("On delegation credential rotation required", () => { const event = calcom.onDelegationCredentialRotationRequired({ scope: { organizationId: 7, type: "organization" }, }) markSignificant(event) }) ``` ## Scope Pass `{ type: "organization", organizationId }`. The connected API key must belong to an organization admin with permission to create, update, and delete organization webhooks. Cal.com also applies the organization's plan requirements. ## Event | Field | Type | Required | | - | - | - | | `createdAt` | `string (date-time)` | Yes | | `payload` | `object` | Yes | | `payload.delegationCredential` | `object` | Yes | | `payload.delegationCredential.domain` | `string` | Yes | | `payload.delegationCredential.id` | `string` | Yes | | `payload.delegationCredential.organizationId` | `integer` | Yes | | `payload.delegationCredential.secretExpiresAt` | `string (date-time)` | Yes | | `payload.delegationCredential.workspacePlatform` | `string` | Yes | | `triggerEvent` | `"DELEGATION_CREDENTIAL_ROTATION_REQUIRED"` | Yes | Additional provider fields are preserved. Automate.ax creates and maintains the Cal.com webhook, verifies `x-cal-signature-256`, and deduplicates provider retries. Use `calcom.onEvent` when one automation should receive every supported Cal.com event. # On delegation credential secret rotated Source: https://docs.automate.ax/reference/integrations/calcom/triggers/on-delegation-credential-secret-rotated Subscribes when a delegation credential secret rotates. `calcom.onDelegationCredentialSecretRotated` subscribes when a delegation credential secret rotates. ```ts automations/on-delegation-credential-secret-rotated.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("On delegation credential secret rotated", () => { const event = calcom.onDelegationCredentialSecretRotated({ scope: { organizationId: 7, type: "organization" }, }) markSignificant(event) }) ``` ## Scope Pass `{ type: "organization", organizationId }`. The connected API key must belong to an organization admin with permission to create, update, and delete organization webhooks. Cal.com also applies the organization's plan requirements. ## Event | Field | Type | Required | | - | - | - | | `createdAt` | `string (date-time)` | Yes | | `payload` | `object` | Yes | | `payload.delegationCredential` | `object` | Yes | | `payload.delegationCredential.domain` | `string` | Yes | | `payload.delegationCredential.id` | `string` | Yes | | `payload.delegationCredential.organizationId` | `integer` | Yes | | `payload.delegationCredential.secretExpiresAt` | `string (date-time)` | Yes | | `payload.delegationCredential.workspacePlatform` | `string` | Yes | | `triggerEvent` | `"DELEGATION_CREDENTIAL_SECRET_ROTATED"` | Yes | Additional provider fields are preserved. Automate.ax creates and maintains the Cal.com webhook, verifies `x-cal-signature-256`, and deduplicates provider retries. Use `calcom.onEvent` when one automation should receive every supported Cal.com event. # On delegation credential secret rotation failed Source: https://docs.automate.ax/reference/integrations/calcom/triggers/on-delegation-credential-secret-rotation-failed Subscribes when a delegation credential secret cannot rotate. `calcom.onDelegationCredentialSecretRotationFailed` subscribes when a delegation credential secret cannot rotate. ```ts automations/on-delegation-credential-secret-rotation-failed.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation( "On delegation credential secret rotation failed", () => { const event = calcom.onDelegationCredentialSecretRotationFailed({ scope: { organizationId: 7, type: "organization" }, }) markSignificant(event) }, ) ``` ## Scope Pass `{ type: "organization", organizationId }`. The connected API key must belong to an organization admin with permission to create, update, and delete organization webhooks. Cal.com also applies the organization's plan requirements. ## Event | Field | Type | Required | | - | - | - | | `createdAt` | `string (date-time)` | Yes | | `payload` | `object` | Yes | | `payload.delegationCredential` | `object` | Yes | | `payload.delegationCredential.domain` | `string` | Yes | | `payload.delegationCredential.id` | `string` | Yes | | `payload.delegationCredential.organizationId` | `integer` | Yes | | `payload.delegationCredential.secretExpiresAt` | `string (date-time)` | Yes | | `payload.delegationCredential.workspacePlatform` | `string` | Yes | | `payload.error` | `object` | Yes | | `payload.error.code` | `"SECRET_MINT_FAILED" \| "SECRET_PROMOTION_FAILED"` | Yes | | `payload.error.message` | `string` | Yes | | `triggerEvent` | `"DELEGATION_CREDENTIAL_SECRET_ROTATION_FAILED"` | Yes | Additional provider fields are preserved. Automate.ax creates and maintains the Cal.com webhook, verifies `x-cal-signature-256`, and deduplicates provider retries. Use `calcom.onEvent` when one automation should receive every supported Cal.com event. # On event Source: https://docs.automate.ax/reference/integrations/calcom/triggers/on-event Subscribes to every event delivered by the managed Cal.com webhook. `calcom.onEvent` subscribes to every event delivered by the selected managed Cal.com webhook scope. ```ts automations/on-event.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("On event", () => { const event = calcom.onEvent() markSignificant(event) }) ``` ## Scope Omit `scope` for the connected user's personal webhook. Personal and team scopes exclude the four organization-only delegation credential events. Use a team scope for one team-owned Collective or Round Robin event type: ```ts theme={null} calcom.onEvent({ scope: { eventTypeId: 23, teamId: 17, type: "team" }, }) ``` Use an organization scope for organization-wide events, including delegation credentials: ```ts theme={null} calcom.onEvent({ scope: { organizationId: 7, type: "organization" }, }) ``` Team scope requires a Cal.com Teams plan or higher and an API key owned by a team admin or owner. Organization scope requires an organization admin with webhook permissions; Cal.com marks organization webhooks as an Essentials feature for platform customers. ## Event The signal is a discriminated union. Narrow `triggerEvent` before reading variant fields. Most variants use `createdAt` and a nested `payload`; meeting start and end variants expose booking fields at the event root. | triggerEvent | Semantic trigger | Reference | | - | - | - | | `AFTER_GUESTS_CAL_VIDEO_NO_SHOW` | `calcom.onAfterGuestsCalVideoNoShow` | [after guests cal video no show](/reference/integrations/calcom/triggers/on-after-guests-cal-video-no-show) | | `AFTER_HOSTS_CAL_VIDEO_NO_SHOW` | `calcom.onAfterHostsCalVideoNoShow` | [after hosts cal video no show](/reference/integrations/calcom/triggers/on-after-hosts-cal-video-no-show) | | `BOOKING_CANCELLED` | `calcom.onBookingCancelled` | [booking cancelled](/reference/integrations/calcom/triggers/on-booking-cancelled) | | `BOOKING_CREATED` | `calcom.onBookingCreated` | [booking created](/reference/integrations/calcom/triggers/on-booking-created) | | `BOOKING_LOCATION_UPDATED` | `calcom.onBookingLocationUpdated` | [booking location updated](/reference/integrations/calcom/triggers/on-booking-location-updated) | | `BOOKING_NO_SHOW_UPDATED` | `calcom.onBookingNoShowUpdated` | [booking no show updated](/reference/integrations/calcom/triggers/on-booking-no-show-updated) | | `BOOKING_PAID` | `calcom.onBookingPaid` | [booking paid](/reference/integrations/calcom/triggers/on-booking-paid) | | `BOOKING_PAYMENT_INITIATED` | `calcom.onBookingPaymentInitiated` | [booking payment initiated](/reference/integrations/calcom/triggers/on-booking-payment-initiated) | | `BOOKING_REASSIGNED` | `calcom.onBookingReassigned` | [booking reassigned](/reference/integrations/calcom/triggers/on-booking-reassigned) | | `BOOKING_REJECTED` | `calcom.onBookingRejected` | [booking rejected](/reference/integrations/calcom/triggers/on-booking-rejected) | | `BOOKING_REQUESTED` | `calcom.onBookingRequested` | [booking requested](/reference/integrations/calcom/triggers/on-booking-requested) | | `BOOKING_RESCHEDULED` | `calcom.onBookingRescheduled` | [booking rescheduled](/reference/integrations/calcom/triggers/on-booking-rescheduled) | | `CALENDAR_ENTRY_REJECTED` | `calcom.onCalendarEntryRejected` | [calendar entry rejected](/reference/integrations/calcom/triggers/on-calendar-entry-rejected) | | `DELEGATION_CREDENTIAL_ERROR` | `calcom.onDelegationCredentialError` | [delegation credential error](/reference/integrations/calcom/triggers/on-delegation-credential-error) | | `DELEGATION_CREDENTIAL_ROTATION_REQUIRED` | `calcom.onDelegationCredentialRotationRequired` | [delegation credential rotation required](/reference/integrations/calcom/triggers/on-delegation-credential-rotation-required) | | `DELEGATION_CREDENTIAL_SECRET_ROTATED` | `calcom.onDelegationCredentialSecretRotated` | [delegation credential secret rotated](/reference/integrations/calcom/triggers/on-delegation-credential-secret-rotated) | | `DELEGATION_CREDENTIAL_SECRET_ROTATION_FAILED` | `calcom.onDelegationCredentialSecretRotationFailed` | [delegation credential secret rotation failed](/reference/integrations/calcom/triggers/on-delegation-credential-secret-rotation-failed) | | `FORM_SUBMITTED` | `calcom.onFormSubmitted` | [form submitted](/reference/integrations/calcom/triggers/on-form-submitted) | | `FORM_SUBMITTED_NO_EVENT` | `calcom.onFormSubmittedWithoutEvent` | [form submitted without event](/reference/integrations/calcom/triggers/on-form-submitted-without-event) | | `INSTANT_MEETING` | `calcom.onInstantMeetingCreated` | [instant meeting created](/reference/integrations/calcom/triggers/on-instant-meeting-created) | | `INSTANT_MEETING_ACCEPTED` | `calcom.onInstantMeetingAccepted` | [instant meeting accepted](/reference/integrations/calcom/triggers/on-instant-meeting-accepted) | | `MEETING_ENDED` | `calcom.onMeetingEnded` | [meeting ended](/reference/integrations/calcom/triggers/on-meeting-ended) | | `MEETING_STARTED` | `calcom.onMeetingStarted` | [meeting started](/reference/integrations/calcom/triggers/on-meeting-started) | | `OOO_CREATED` | `calcom.onOutOfOfficeCreated` | [out of office created](/reference/integrations/calcom/triggers/on-out-of-office-created) | | `RECORDING_READY` | `calcom.onRecordingReady` | [recording ready](/reference/integrations/calcom/triggers/on-recording-ready) | | `RECORDING_TRANSCRIPTION_GENERATED` | `calcom.onRecordingTranscriptionGenerated` | [recording transcription generated](/reference/integrations/calcom/triggers/on-recording-transcription-generated) | | `ROUTING_FORM_FALLBACK_HIT` | `calcom.onRoutingFormFallbackHit` | [routing form fallback hit](/reference/integrations/calcom/triggers/on-routing-form-fallback-hit) | | `WRONG_ASSIGNMENT_REPORT` | `calcom.onWrongAssignmentReported` | [wrong assignment reported](/reference/integrations/calcom/triggers/on-wrong-assignment-reported) | Automate.ax creates and maintains the scoped Cal.com webhook, verifies `x-cal-signature-256`, and deduplicates provider retries. Use `calcom.onEvent` when one automation should receive every event supported by its selected scope. # On form submitted Source: https://docs.automate.ax/reference/integrations/calcom/triggers/on-form-submitted Subscribes when a routing form schedules an event. `calcom.onFormSubmitted` subscribes when a routing form schedules an event. ```ts automations/on-form-submitted.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("On form submitted", () => { const event = calcom.onFormSubmitted() markSignificant(event) }) ``` ## Event | Field | Type | Required | | - | - | - | | `createdAt` | `string (date-time)` | Yes | | `payload` | `object` | Yes | | `payload.formId` | `string` | Yes | | `payload.formName` | `string` | Yes | | `payload.responses` | `Record` | Yes | | `payload.teamId` | `integer \| null` | No | | `triggerEvent` | `"FORM_SUBMITTED"` | Yes | Additional provider fields are preserved. Automate.ax creates and maintains the Cal.com webhook, verifies `x-cal-signature-256`, and deduplicates provider retries. Use `calcom.onEvent` when one automation should receive every supported Cal.com event. # On form submitted without event Source: https://docs.automate.ax/reference/integrations/calcom/triggers/on-form-submitted-without-event Subscribes when a form-only routing flow is submitted. `calcom.onFormSubmittedWithoutEvent` subscribes when a form-only routing flow is submitted. ```ts automations/on-form-submitted-without-event.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("On form submitted without event", () => { const event = calcom.onFormSubmittedWithoutEvent() markSignificant(event) }) ``` ## Event | Field | Type | Required | | - | - | - | | `createdAt` | `string (date-time)` | Yes | | `payload` | `object` | Yes | | `payload.formId` | `string` | Yes | | `payload.formName` | `string` | Yes | | `payload.responses` | `Record` | Yes | | `payload.teamId` | `integer \| null` | No | | `payload.redirect` | `Record` | No | | `payload.responseId` | `integer` | No | | `triggerEvent` | `"FORM_SUBMITTED_NO_EVENT"` | Yes | Additional provider fields are preserved. Automate.ax creates and maintains the Cal.com webhook, verifies `x-cal-signature-256`, and deduplicates provider retries. Use `calcom.onEvent` when one automation should receive every supported Cal.com event. # On instant meeting accepted Source: https://docs.automate.ax/reference/integrations/calcom/triggers/on-instant-meeting-accepted Subscribes when a host accepts an instant meeting. `calcom.onInstantMeetingAccepted` subscribes when a host accepts an instant meeting. ```ts automations/on-instant-meeting-accepted.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("On instant meeting accepted", () => { const event = calcom.onInstantMeetingAccepted() markSignificant(event) }) ``` ## Event | Field | Type | Required | | - | - | - | | `createdAt` | `string (date-time)` | Yes | | `payload` | `object` | Yes | | `payload.attendees` | `object[]` | Yes | | `payload.attendees[].email` | `string (email)` | Yes | | `payload.attendees[].id` | `integer` | No | | `payload.attendees[].language` | `object` | Yes | | `payload.attendees[].language.locale` | `string` | Yes | | `payload.attendees[].name` | `string` | Yes | | `payload.attendees[].phoneNumber` | `string \| null` | No | | `payload.attendees[].timeZone` | `string` | Yes | | `payload.attendees[].username` | `string \| null` | No | | `payload.attendees[].utcOffset` | `number` | No | | `payload.bookingId` | `integer` | Yes | | `payload.bookingUid` | `string` | Yes | | `payload.endTime` | `string` | Yes | | `payload.eventTypeId` | `integer` | Yes | | `payload.organizer` | `object` | Yes | | `payload.organizer.email` | `string (email)` | Yes | | `payload.organizer.id` | `integer` | No | | `payload.organizer.language` | `object` | Yes | | `payload.organizer.language.locale` | `string` | Yes | | `payload.organizer.name` | `string` | Yes | | `payload.organizer.phoneNumber` | `string \| null` | No | | `payload.organizer.timeZone` | `string` | Yes | | `payload.organizer.username` | `string \| null` | No | | `payload.organizer.utcOffset` | `number` | No | | `payload.startTime` | `string` | Yes | | `payload.status` | `string` | Yes | | `payload.title` | `string` | Yes | | `triggerEvent` | `"INSTANT_MEETING_ACCEPTED"` | Yes | Additional provider fields are preserved. Automate.ax creates and maintains the Cal.com webhook, verifies `x-cal-signature-256`, and deduplicates provider retries. Use `calcom.onEvent` when one automation should receive every supported Cal.com event. # On instant meeting created Source: https://docs.automate.ax/reference/integrations/calcom/triggers/on-instant-meeting-created Subscribes when an instant meeting is created. `calcom.onInstantMeetingCreated` subscribes when an instant meeting is created. ```ts automations/on-instant-meeting-created.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("On instant meeting created", () => { const event = calcom.onInstantMeetingCreated() markSignificant(event) }) ``` ## Event | Field | Type | Required | | - | - | - | | `createdAt` | `string (date-time)` | Yes | | `payload` | `object` | Yes | | `payload.connectAndJoinUrl` | `string (uri)` | Yes | | `payload.customInputs` | `Record` | Yes | | `payload.eventTypeId` | `integer` | Yes | | `payload.eventTypeTitle` | `string` | Yes | | `payload.responses` | `Record` | Yes | | `payload.uid` | `string` | Yes | | `triggerEvent` | `"INSTANT_MEETING"` | Yes | Additional provider fields are preserved. Automate.ax creates and maintains the Cal.com webhook, verifies `x-cal-signature-256`, and deduplicates provider retries. Use `calcom.onEvent` when one automation should receive every supported Cal.com event. # On meeting ended Source: https://docs.automate.ax/reference/integrations/calcom/triggers/on-meeting-ended Subscribes at a meeting's scheduled end time. `calcom.onMeetingEnded` subscribes at a meeting's scheduled end time. Cal.com sends this delayed event as a flat booking object; booking fields such as `uid` are at the event root. ```ts automations/on-meeting-ended.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("On meeting ended", () => { const event = calcom.onMeetingEnded() markSignificant(event) }) ``` ## Event | Field | Type | Required | | - | - | - | | `attendees` | `object[]` | Yes | | `attendees[].email` | `string (email)` | Yes | | `attendees[].id` | `integer` | No | | `attendees[].language` | `object` | Yes | | `attendees[].language.locale` | `string` | Yes | | `attendees[].name` | `string` | Yes | | `attendees[].phoneNumber` | `string \| null` | No | | `attendees[].timeZone` | `string` | Yes | | `attendees[].username` | `string \| null` | No | | `attendees[].utcOffset` | `number` | No | | `createdAt` | `string (date-time)` | Yes | | `endTime` | `string` | Yes | | `id` | `integer` | Yes | | `startTime` | `string` | Yes | | `title` | `string` | Yes | | `uid` | `string` | Yes | | `triggerEvent` | `"MEETING_ENDED"` | Yes | Additional provider fields are preserved. Automate.ax creates and maintains the Cal.com webhook, verifies `x-cal-signature-256`, and deduplicates provider retries. Use `calcom.onEvent` when one automation should receive every supported Cal.com event. # On meeting started Source: https://docs.automate.ax/reference/integrations/calcom/triggers/on-meeting-started Subscribes at a meeting's scheduled start time. `calcom.onMeetingStarted` subscribes at a meeting's scheduled start time. Cal.com sends this delayed event as a flat booking object; booking fields such as `uid` are at the event root. ```ts automations/on-meeting-started.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("On meeting started", () => { const event = calcom.onMeetingStarted() markSignificant(event) }) ``` ## Event | Field | Type | Required | | - | - | - | | `attendees` | `object[]` | Yes | | `attendees[].email` | `string (email)` | Yes | | `attendees[].id` | `integer` | No | | `attendees[].language` | `object` | Yes | | `attendees[].language.locale` | `string` | Yes | | `attendees[].name` | `string` | Yes | | `attendees[].phoneNumber` | `string \| null` | No | | `attendees[].timeZone` | `string` | Yes | | `attendees[].username` | `string \| null` | No | | `attendees[].utcOffset` | `number` | No | | `createdAt` | `string (date-time)` | Yes | | `endTime` | `string` | Yes | | `id` | `integer` | Yes | | `startTime` | `string` | Yes | | `title` | `string` | Yes | | `uid` | `string` | Yes | | `triggerEvent` | `"MEETING_STARTED"` | Yes | Additional provider fields are preserved. Automate.ax creates and maintains the Cal.com webhook, verifies `x-cal-signature-256`, and deduplicates provider retries. Use `calcom.onEvent` when one automation should receive every supported Cal.com event. # On out of office created Source: https://docs.automate.ax/reference/integrations/calcom/triggers/on-out-of-office-created Subscribes when a user creates an out-of-office entry. `calcom.onOutOfOfficeCreated` subscribes when a user creates an out-of-office entry. ```ts automations/on-out-of-office-created.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("On out of office created", () => { const event = calcom.onOutOfOfficeCreated() markSignificant(event) }) ``` ## Event | Field | Type | Required | | - | - | - | | `createdAt` | `string (date-time)` | Yes | | `payload` | `object` | Yes | | `payload.oooEntry` | `object` | Yes | | `payload.oooEntry.createdAt` | `string (date-time)` | Yes | | `payload.oooEntry.end` | `string` | Yes | | `payload.oooEntry.id` | `integer` | Yes | | `payload.oooEntry.notes` | `string \| null` | Yes | | `payload.oooEntry.reason` | `object` | Yes | | `payload.oooEntry.reason.emoji` | `string` | No | | `payload.oooEntry.reason.reason` | `string` | No | | `payload.oooEntry.reasonId` | `integer` | Yes | | `payload.oooEntry.start` | `string` | Yes | | `payload.oooEntry.toUser` | `object \| null` | Yes | | `payload.oooEntry.toUser.email` | `string (email)` | No | | `payload.oooEntry.toUser.id` | `integer` | Yes | | `payload.oooEntry.toUser.name` | `string \| null` | No | | `payload.oooEntry.toUser.timeZone` | `string` | No | | `payload.oooEntry.toUser.username` | `string \| null` | No | | `payload.oooEntry.updatedAt` | `string (date-time)` | Yes | | `payload.oooEntry.user` | `object` | Yes | | `payload.oooEntry.user.email` | `string (email)` | Yes | | `payload.oooEntry.user.id` | `integer` | Yes | | `payload.oooEntry.user.language` | `object` | Yes | | `payload.oooEntry.user.language.locale` | `string` | Yes | | `payload.oooEntry.user.name` | `string \| null` | Yes | | `payload.oooEntry.user.phoneNumber` | `string \| null` | No | | `payload.oooEntry.user.timeZone` | `string` | Yes | | `payload.oooEntry.user.username` | `string \| null` | Yes | | `payload.oooEntry.user.utcOffset` | `number` | No | | `payload.oooEntry.uuid` | `string` | Yes | | `triggerEvent` | `"OOO_CREATED"` | Yes | Additional provider fields are preserved. Automate.ax creates and maintains the Cal.com webhook, verifies `x-cal-signature-256`, and deduplicates provider retries. Use `calcom.onEvent` when one automation should receive every supported Cal.com event. # On recording ready Source: https://docs.automate.ax/reference/integrations/calcom/triggers/on-recording-ready Subscribes when a Cal Video recording is ready. `calcom.onRecordingReady` subscribes when a Cal Video recording is ready. ```ts automations/on-recording-ready.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("On recording ready", () => { const event = calcom.onRecordingReady() markSignificant(event) }) ``` ## Event | Field | Type | Required | | - | - | - | | `createdAt` | `string (date-time)` | Yes | | `payload` | `object` | Yes | | `payload.attendees` | `object[]` | Yes | | `payload.attendees[].email` | `string (email)` | Yes | | `payload.attendees[].id` | `integer` | No | | `payload.attendees[].language` | `object` | Yes | | `payload.attendees[].language.locale` | `string` | Yes | | `payload.attendees[].name` | `string` | Yes | | `payload.attendees[].phoneNumber` | `string \| null` | No | | `payload.attendees[].timeZone` | `string` | Yes | | `payload.attendees[].username` | `string \| null` | No | | `payload.attendees[].utcOffset` | `number` | No | | `payload.endTime` | `string` | Yes | | `payload.organizer` | `object` | Yes | | `payload.organizer.email` | `string (email)` | Yes | | `payload.organizer.id` | `integer` | No | | `payload.organizer.language` | `object` | Yes | | `payload.organizer.language.locale` | `string` | Yes | | `payload.organizer.name` | `string` | Yes | | `payload.organizer.phoneNumber` | `string \| null` | No | | `payload.organizer.timeZone` | `string` | Yes | | `payload.organizer.username` | `string \| null` | No | | `payload.organizer.utcOffset` | `number` | No | | `payload.startTime` | `string` | Yes | | `payload.title` | `string` | Yes | | `payload.uid` | `string` | Yes | | `payload.downloadLink` | `string (uri)` | Yes | | `triggerEvent` | `"RECORDING_READY"` | Yes | Additional provider fields are preserved. Automate.ax creates and maintains the Cal.com webhook, verifies `x-cal-signature-256`, and deduplicates provider retries. Use `calcom.onEvent` when one automation should receive every supported Cal.com event. # On recording transcription generated Source: https://docs.automate.ax/reference/integrations/calcom/triggers/on-recording-transcription-generated Subscribes when a Cal Video transcript is generated. `calcom.onRecordingTranscriptionGenerated` subscribes when a Cal Video transcript is generated. ```ts automations/on-recording-transcription-generated.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("On recording transcription generated", () => { const event = calcom.onRecordingTranscriptionGenerated() markSignificant(event) }) ``` ## Event | Field | Type | Required | | - | - | - | | `createdAt` | `string (date-time)` | Yes | | `payload` | `object` | Yes | | `payload.attendees` | `object[]` | Yes | | `payload.attendees[].email` | `string (email)` | Yes | | `payload.attendees[].id` | `integer` | No | | `payload.attendees[].language` | `object` | Yes | | `payload.attendees[].language.locale` | `string` | Yes | | `payload.attendees[].name` | `string` | Yes | | `payload.attendees[].phoneNumber` | `string \| null` | No | | `payload.attendees[].timeZone` | `string` | Yes | | `payload.attendees[].username` | `string \| null` | No | | `payload.attendees[].utcOffset` | `number` | No | | `payload.endTime` | `string` | Yes | | `payload.organizer` | `object` | Yes | | `payload.organizer.email` | `string (email)` | Yes | | `payload.organizer.id` | `integer` | No | | `payload.organizer.language` | `object` | Yes | | `payload.organizer.language.locale` | `string` | Yes | | `payload.organizer.name` | `string` | Yes | | `payload.organizer.phoneNumber` | `string \| null` | No | | `payload.organizer.timeZone` | `string` | Yes | | `payload.organizer.username` | `string \| null` | No | | `payload.organizer.utcOffset` | `number` | No | | `payload.startTime` | `string` | Yes | | `payload.title` | `string` | Yes | | `payload.uid` | `string` | Yes | | `payload.downloadLinks` | `object` | No | | `payload.downloadLinks.recording` | `string (uri)` | No | | `payload.downloadLinks.transcription` | `object[]` | No | | `payload.downloadLinks.transcription[].format` | `string` | Yes | | `payload.downloadLinks.transcription[].link` | `string (uri)` | Yes | | `triggerEvent` | `"RECORDING_TRANSCRIPTION_GENERATED"` | Yes | Additional provider fields are preserved. Automate.ax creates and maintains the Cal.com webhook, verifies `x-cal-signature-256`, and deduplicates provider retries. Use `calcom.onEvent` when one automation should receive every supported Cal.com event. # On routing form fallback hit Source: https://docs.automate.ax/reference/integrations/calcom/triggers/on-routing-form-fallback-hit Subscribes when a routing form uses its fallback route. `calcom.onRoutingFormFallbackHit` subscribes when a routing form uses its fallback route. ```ts automations/on-routing-form-fallback-hit.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("On routing form fallback hit", () => { const event = calcom.onRoutingFormFallbackHit() markSignificant(event) }) ``` ## Event | Field | Type | Required | | - | - | - | | `createdAt` | `string (date-time)` | Yes | | `payload` | `object` | Yes | | `payload.formId` | `string` | Yes | | `payload.formName` | `string` | Yes | | `payload.responses` | `Record` | Yes | | `payload.teamId` | `integer \| null` | No | | `triggerEvent` | `"ROUTING_FORM_FALLBACK_HIT"` | Yes | Additional provider fields are preserved. Automate.ax creates and maintains the Cal.com webhook, verifies `x-cal-signature-256`, and deduplicates provider retries. Use `calcom.onEvent` when one automation should receive every supported Cal.com event. # On wrong assignment reported Source: https://docs.automate.ax/reference/integrations/calcom/triggers/on-wrong-assignment-reported Subscribes when a routing assignment is reported as wrong. `calcom.onWrongAssignmentReported` subscribes when a routing assignment is reported as wrong. ```ts automations/on-wrong-assignment-reported.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { calcom } from "automate.ax/calcom" export default automation("On wrong assignment reported", () => { const event = calcom.onWrongAssignmentReported() markSignificant(event) }) ``` ## Event | Field | Type | Required | | - | - | - | | `createdAt` | `string (date-time)` | Yes | | `payload` | `object` | Yes | | `payload.booking` | `object` | Yes | | `payload.booking.endTime` | `string` | Yes | | `payload.booking.id` | `integer` | Yes | | `payload.booking.startTime` | `string` | Yes | | `payload.booking.status` | `string` | Yes | | `payload.booking.title` | `string` | Yes | | `payload.booking.uid` | `string` | Yes | | `payload.report` | `object` | Yes | | `payload.report.additionalNotes` | `string \| null` | Yes | | `payload.report.correctAssignee` | `string \| null` | Yes | | `payload.report.firstAssignmentReason` | `string \| null` | Yes | | `payload.report.guest` | `string \| null` | Yes | | `payload.report.host` | `object` | Yes | | `payload.report.host.email` | `string (email) \| null` | Yes | | `payload.report.host.name` | `string \| null` | Yes | | `payload.report.reportedBy` | `object` | Yes | | `payload.report.reportedBy.email` | `string (email)` | Yes | | `payload.report.reportedBy.id` | `integer` | Yes | | `payload.report.reportedBy.name` | `string \| null` | Yes | | `payload.report.routingReason` | `string \| null` | No | | `triggerEvent` | `"WRONG_ASSIGNMENT_REPORT"` | Yes | Additional provider fields are preserved. Automate.ax creates and maintains the Cal.com webhook, verifies `x-cal-signature-256`, and deduplicates provider retries. Use `calcom.onEvent` when one automation should receive every supported Cal.com event. # Cancel scheduled event Source: https://docs.automate.ax/reference/integrations/calendly/actions/cancel-scheduled-event Cancel a Calendly meeting for all invitees. `calendly.cancelScheduledEvent` accepts an event UUID and optional reason, then cancels the complete scheduled event. ```ts automations/cancel-calendly-event.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("Cancel Calendly event", () => { onDashboardRun({ title: "Cancel Calendly event" }) calendly.cancelScheduledEvent({ eventId: "event-id", reason: "Host unavailable", }) }) ``` The result records who canceled, the canceler type, reason, and timestamp. This differs from an invitee using their personal `cancelUrl`. The mutation is not replay-safe. # Create event invitee Source: https://docs.automate.ax/reference/integrations/calendly/actions/create-event-invitee Book an invitee directly into a Calendly event type. `calendly.createEventInvitee` books a selected start time. Calendly requires Standard or above and applies stricter rate limits to this endpoint. ```ts automations/book-calendly-invitee.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("Book Calendly invitee", () => { onDashboardRun({ title: "Book a Calendly invitee" }) const invitee = calendly.createEventInvitee({ eventType: "https://api.calendly.com/event_types/event-type-id", startTime: "2027-01-06T18:00:00Z", invitee: { name: "Grace Hopper", email: "grace@example.com", timezone: "America/Los_Angeles", }, }) sendEmail({ to: invitee.email, subject: "Meeting booked", text: invitee.rescheduleUrl, }) }) ``` `eventType`, `startTime`, and invitee `email` and `timezone` are required. Supply either `name` or `firstName`; you can add `lastName` and `textReminderNumber`. Optional fields include the event type's matching `location`, required `questionsAndAnswers`, tracking values, and up to 10 `eventGuests`. This mutation is not replay-safe; retry only after confirming Calendly did not create the invitee. # Create event type Source: https://docs.automate.ax/reference/integrations/calendly/actions/create-event-type Create a one-on-one Calendly event type for a user. `calendly.createEventType` creates a reusable one-on-one event type owned by a Calendly user. ```ts automations/create-calendly-event-type.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("Create Calendly event type", () => { onDashboardRun({ title: "Create event type" }) const eventType = calendly.createEventType({ name: "Customer onboarding", owner: "https://api.calendly.com/users/user-id", duration: 45, locations: [{ kind: "zoom_conference" }], }) sendEmail({ subject: "Event type created", text: eventType.schedulingUrl }) }) ``` `name` and the owner's complete `owner` URI are required. You can also set its active state, description, duration, duration options, locale, color, and locations. Supply at most four unique `durationOptions`; when you also set `duration`, include it among those options. Creation is not replay-safe. # Create invitee no-show Source: https://docs.automate.ax/reference/integrations/calendly/actions/create-invitee-no-show Mark a Calendly invitee as a no-show. `calendly.createInviteeNoShow` accepts the complete invitee URI and returns the created no-show record. ```ts automations/mark-calendly-no-show.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("Mark Calendly no-show", () => { onDashboardRun({ title: "Mark Calendly no-show" }) calendly.createInviteeNoShow({ invitee: "https://api.calendly.com/scheduled_events/event-id/invitees/invitee-id", }) }) ``` The result includes the no-show URI, invitee URI, and creation time. The mutation is not replay-safe. # Create one-off event type Source: https://docs.automate.ax/reference/integrations/calendly/actions/create-one-off-event-type Create a temporary Calendly event type with a bounded schedule. `calendly.createOneOffEventType` creates a temporary booking page for a host and a bounded date range, future-day window, or explicit set of spots. ```ts automations/create-calendly-one-off-event.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("Create one-off Calendly event", () => { onDashboardRun({ title: "Create one-off event" }) const eventType = calendly.createOneOffEventType({ name: "Launch review", host: "https://api.calendly.com/users/user-id", duration: 30, dateSetting: { type: "days_in_future", days: 7, onlyWeekdays: true }, location: { kind: "zoom_conference" }, }) sendEmail({ subject: "Book the launch review", text: eventType.schedulingUrl, }) }) ``` `name`, `host`, `duration`, and `dateSetting` are required. A date-range end must be in the future and less than 365 days after its start. Optional inputs include co-hosts, timezone, and a location. Creation is not replay-safe. # Create single-use scheduling link Source: https://docs.automate.ax/reference/integrations/calendly/actions/create-single-use-scheduling-link Create a one-time Calendly booking URL for an event type. `calendly.createSingleUseSchedulingLink` creates a URL that can book exactly one event. Unused links expire after 90 days. ```ts automations/create-calendly-link.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("Create Calendly scheduling link", () => { onDashboardRun({ title: "Create scheduling link" }) const link = calendly.createSingleUseSchedulingLink({ owner: "https://api.calendly.com/event_types/event-type-id", }) sendEmail({ to: "invitee@example.com", subject: "Choose a meeting time", text: link.bookingUrl, }) }) ``` `ownerType` defaults to `EventType` and `maxEventCount` defaults to `1`; those are the only values Calendly currently supports. Link creation is not replay-safe. # Delete invitee no-show Source: https://docs.automate.ax/reference/integrations/calendly/actions/delete-invitee-no-show Remove a Calendly invitee no-show mark. `calendly.deleteInviteeNoShow` accepts a no-show UUID and returns no value after Calendly removes the mark. ```ts automations/delete-calendly-no-show.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("Clear Calendly no-show", () => { onDashboardRun({ title: "Clear Calendly no-show" }) calendly.deleteInviteeNoShow({ noShowId: "no-show-id" }) }) ``` This mutation is not replay-safe. A successful removal emits the no-show-deleted webhook event when subscribed. # Get current user Source: https://docs.automate.ax/reference/integrations/calendly/actions/get-current-user Get the Calendly user represented by the connected account. `calendly.getCurrentUser` takes no input and returns the connected user's profile, current organization URI, scheduling URL, timezone, locale, and timestamps. ```ts automations/get-calendly-user.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("Get Calendly user", () => { onDashboardRun({ title: "Get Calendly user" }) const user = calendly.getCurrentUser() sendEmail({ subject: `Calendly: ${user.name}`, text: user.schedulingUrl }) }) ``` Use `currentOrganization` and `uri` as inputs to organization- and user-scoped actions or triggers. # Get event invitee Source: https://docs.automate.ax/reference/integrations/calendly/actions/get-event-invitee Get one invitee for a Calendly scheduled event. `calendly.getEventInvitee` accepts separate event and invitee UUIDs. ```ts automations/get-calendly-invitee.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("Get Calendly invitee", () => { onDashboardRun({ title: "Get Calendly invitee" }) const invitee = calendly.getEventInvitee({ eventId: "event-id", inviteeId: "invitee-id", }) sendEmail({ to: invitee.email, subject: "Manage your meeting", text: invitee.rescheduleUrl, }) }) ``` Use `rescheduleUrl` for rescheduling; Calendly does not provide an API reschedule mutation. `oldInvitee` and `newInvitee` link rescheduled records. # Get event type Source: https://docs.automate.ax/reference/integrations/calendly/actions/get-event-type Get one Calendly event type by UUID. `calendly.getEventType` returns scheduling configuration, duration, questions, locations, profile, visibility, pooling, and lifecycle fields. ```ts automations/get-calendly-event-type.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("Get Calendly event type", () => { onDashboardRun({ title: "Get Calendly event type" }) const eventType = calendly.getEventType({ eventTypeId: "event-type-id" }) sendEmail({ subject: eventType.name ?? "Event type", text: eventType.schedulingUrl, }) }) ``` Deleted event types remain retrievable when their scheduled events still reference them. # Get invitee no-show Source: https://docs.automate.ax/reference/integrations/calendly/actions/get-invitee-no-show Get one Calendly invitee no-show record. `calendly.getInviteeNoShow` accepts the final UUID segment of a no-show URI. ```ts automations/get-calendly-no-show.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("Get Calendly no-show", () => { onDashboardRun({ title: "Get Calendly no-show" }) const noShow = calendly.getInviteeNoShow({ noShowId: "no-show-id" }) sendEmail({ subject: "Calendly no-show", text: `${noShow.invitee}\n${noShow.createdAt}`, }) }) ``` The result identifies the affected invitee and when the mark was created. # Get organization Source: https://docs.automate.ax/reference/integrations/calendly/actions/get-organization Get a Calendly organization, plan, and lifecycle stage. `calendly.getOrganization` accepts the UUID from an organization URI and returns its URI, kind, optional name, plan, stage, and timestamps. ```ts automations/get-calendly-organization.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("Get Calendly organization", () => { onDashboardRun({ title: "Get Calendly organization" }) const organization = calendly.getOrganization({ organizationId: "organization-id", }) sendEmail({ subject: organization.name ?? "Calendly organization", text: `${organization.plan}: ${organization.stage}`, }) }) ``` This action requires `organizations:read` and the connected user's organization access. # Get organization membership Source: https://docs.automate.ax/reference/integrations/calendly/actions/get-organization-membership Get one Calendly organization membership by UUID. `calendly.getOrganizationMembership` returns a member's role, user profile, organization URI, and membership timestamps. ```ts automations/get-calendly-membership.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("Get Calendly membership", () => { onDashboardRun({ title: "Get Calendly membership" }) const membership = calendly.getOrganizationMembership({ membershipId: "membership-id", }) sendEmail({ subject: membership.user.name, text: membership.role }) }) ``` Pass only the final UUID segment, not the complete membership URI. # Get routing form Source: https://docs.automate.ax/reference/integrations/calendly/actions/get-routing-form Get one Calendly routing form by UUID. `calendly.getRoutingForm` requires Calendly Teams or above and returns the form's questions, status, organization, and timestamps. ```ts automations/get-calendly-routing-form.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("Get Calendly routing form", () => { onDashboardRun({ title: "Get routing form" }) const form = calendly.getRoutingForm({ routingFormId: "routing-form-id" }) sendEmail({ subject: form.name, text: JSON.stringify(form.questions) }) }) ``` Pass only the final UUID segment, not the complete routing form URI. # Get routing form submission Source: https://docs.automate.ax/reference/integrations/calendly/actions/get-routing-form-submission Get one Calendly routing form submission by UUID. `calendly.getRoutingFormSubmission` requires Calendly Teams or above. ```ts automations/get-calendly-routing-submission.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("Get Calendly routing submission", () => { onDashboardRun({ title: "Get routing submission" }) const submission = calendly.getRoutingFormSubmission({ submissionId: "submission-id", }) sendEmail({ subject: `Routing result: ${submission.result.type}`, text: JSON.stringify(submission.questionsAndAnswers), }) }) ``` The result includes the routing form URI, answers, UTM and Salesforce tracking, optional invitee submitter, and typed routing result. # Get scheduled event Source: https://docs.automate.ax/reference/integrations/calendly/actions/get-scheduled-event Get one Calendly scheduled event by UUID. `calendly.getScheduledEvent` accepts the final UUID segment of a scheduled event URI. ```ts automations/get-calendly-event.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("Get Calendly event", () => { onDashboardRun({ title: "Get Calendly event" }) const event = calendly.getScheduledEvent({ eventId: "event-id" }) sendEmail({ subject: event.name ?? "Calendly event", text: `${event.startTime}\n${event.location.joinUrl ?? event.location.location ?? ""}`, }) }) ``` The result includes status, times, event type URI, location, hosts, guests, invitee counts, notes, and cancellation metadata. # Get user Source: https://docs.automate.ax/reference/integrations/calendly/actions/get-user Get one Calendly user by UUID. `calendly.getUser` accepts `userId`, the final segment of a Calendly user URI, and returns the full user profile. ```ts automations/get-calendly-user-by-id.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("Get a Calendly user", () => { onDashboardRun({ title: "Get a Calendly user" }) const user = calendly.getUser({ userId: "user-id" }) sendEmail({ subject: user.name, text: `${user.email}\n${user.schedulingUrl}`, }) }) ``` The connection needs `users:read` and access to the requested user. # Get user availability schedule Source: https://docs.automate.ax/reference/integrations/calendly/actions/get-user-availability-schedule Get one Calendly availability schedule and its rules. `calendly.getUserAvailabilitySchedule` accepts the UUID from an availability schedule URI. ```ts automations/get-calendly-schedule.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("Get Calendly schedule", () => { onDashboardRun({ title: "Get Calendly schedule" }) const schedule = calendly.getUserAvailabilitySchedule({ availabilityScheduleId: "schedule-id", }) sendEmail({ subject: schedule.name, text: JSON.stringify(schedule.rules) }) }) ``` The result includes the owner URI, timezone, default flag, and intervals for each weekly or date-specific rule. # List event invitees Source: https://docs.automate.ax/reference/integrations/calendly/actions/list-event-invitees List invitees for one Calendly scheduled event. `calendly.listEventInvitees` accepts an event UUID and returns paginated invitees. ```ts automations/list-calendly-invitees.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("List Calendly invitees", () => { onDashboardRun({ title: "List Calendly invitees" }) const page = calendly.listEventInvitees({ eventId: "event-id", status: "active", }) sendEmail({ subject: "Active invitees", text: JSON.stringify(page.items) }) }) ``` Filter by `email` or `status`; sorting defaults to `created_at:asc`. Invitees contain questions, tracking, payment and no-show state, plus cancellation and rescheduling URLs. # List event type availability schedules Source: https://docs.automate.ax/reference/integrations/calendly/actions/list-event-type-availability-schedules Inspect the host availability schedule used by a Calendly event type. `calendly.listEventTypeAvailabilitySchedules` returns the host schedule and rules currently assigned to an event type. ```ts automations/list-calendly-event-availability.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("Inspect Calendly event availability", () => { onDashboardRun({ title: "Inspect event availability" }) const schedules = calendly.listEventTypeAvailabilitySchedules({ eventType: "https://api.calendly.com/event_types/event-type-id", }) sendEmail({ subject: "Event availability", text: JSON.stringify(schedules.items), }) }) ``` Pass the complete event type URI. Results include the availability source, timezone, user, schedule URI, and weekly or date-specific rules. # List event type available times Source: https://docs.automate.ax/reference/integrations/calendly/actions/list-event-type-available-times List bookable Calendly times for an event type. `calendly.listEventTypeAvailableTimes` accepts an event type URI and an RFC 3339 UTC window of at most 31 days. ```ts automations/list-calendly-availability.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("List Calendly availability", () => { onDashboardRun({ title: "List Calendly availability" }) const times = calendly.listEventTypeAvailableTimes({ eventType: "https://api.calendly.com/event_types/event-type-id", startTime: "2027-01-04T09:00:00Z", endTime: "2027-01-11T09:00:00Z", }) sendEmail({ subject: "Available times", text: JSON.stringify(times.items) }) }) ``` Each item contains `startTime`, `status`, `inviteesRemaining`, and a booking URL. Calendly accepts only future windows; the action rejects reversed or overlong ranges before calling the provider. # List event type hosts Source: https://docs.automate.ax/reference/integrations/calendly/actions/list-event-type-hosts List the Calendly hosts assigned to an event type. `calendly.listEventTypeHosts` accepts the complete `eventType` URI and returns paginated membership records with event type and member details. ```ts automations/list-calendly-hosts.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("List Calendly event hosts", () => { onDashboardRun({ title: "List Calendly hosts" }) const page = calendly.listEventTypeHosts({ eventType: "https://api.calendly.com/event_types/event-type-id", }) sendEmail({ subject: "Event hosts", text: JSON.stringify(page.items) }) }) ``` Use `count` and `pageToken` for pagination. # List event types Source: https://docs.automate.ax/reference/integrations/calendly/actions/list-event-types List Calendly event types for a user or organization. `calendly.listEventTypes` requires `user` or `organization` and returns paginated event type configurations. ```ts automations/list-calendly-event-types.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("List active Calendly event types", () => { onDashboardRun({ title: "List active event types" }) const page = calendly.listEventTypes({ active: true, user: "https://api.calendly.com/users/user-id", }) sendEmail({ subject: "Active event types", text: JSON.stringify(page.items) }) }) ``` Optional filters include `active`, `adminManaged`, and `userAvailabilitySchedule`. Sorting defaults to `name:asc`; pagination uses `count` and `pageToken`. # List organization memberships Source: https://docs.automate.ax/reference/integrations/calendly/actions/list-organization-memberships List Calendly organization members by organization, user, email, or role. `calendly.listOrganizationMemberships` returns paginated membership records. ```ts automations/list-calendly-admins.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("List Calendly admins", () => { onDashboardRun({ title: "List Calendly admins" }) const page = calendly.listOrganizationMemberships({ organization: "https://api.calendly.com/organizations/organization-id", role: "admin", }) sendEmail({ subject: "Calendly admins", text: JSON.stringify(page.items) }) }) ``` Filters are optional; `count` defaults to 20 and `pageToken` continues from `pageInfo.nextPageToken`. Roles are `owner`, `admin`, or `user`. # List routing form submissions Source: https://docs.automate.ax/reference/integrations/calendly/actions/list-routing-form-submissions List submissions for a Calendly routing form. `calendly.listRoutingFormSubmissions` requires Calendly Teams or above and the complete routing form URI in `form`. ```ts automations/list-calendly-routing-submissions.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("List Calendly routing submissions", () => { onDashboardRun({ title: "List routing submissions" }) const page = calendly.listRoutingFormSubmissions({ form: "https://api.calendly.com/routing_forms/form-id", sort: "created_at:desc", }) sendEmail({ subject: "Routing submissions", text: JSON.stringify(page.items), }) }) ``` Results include answers, tracking, submitter, and a typed result: an event type URI, external URL, or custom message. Use `count` and `pageToken` for pagination. # List routing forms Source: https://docs.automate.ax/reference/integrations/calendly/actions/list-routing-forms List Calendly routing forms for an organization. `calendly.listRoutingForms` requires Calendly Teams or above and a complete organization URI. ```ts automations/list-calendly-routing-forms.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("List Calendly routing forms", () => { onDashboardRun({ title: "List routing forms" }) const page = calendly.listRoutingForms({ organization: "https://api.calendly.com/organizations/organization-id", sort: "created_at:desc", }) sendEmail({ subject: "Routing forms", text: JSON.stringify(page.items) }) }) ``` Each form includes its status and typed questions. Use `count` and `pageToken` for pagination. # List scheduled events Source: https://docs.automate.ax/reference/integrations/calendly/actions/list-scheduled-events List Calendly meetings for a user, organization, or group. `calendly.listScheduledEvents` requires at least one of `user`, `organization`, or `group` and returns paginated meetings. ```ts automations/list-calendly-events.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("List upcoming Calendly events", () => { onDashboardRun({ title: "List Calendly events" }) const page = calendly.listScheduledEvents({ user: "https://api.calendly.com/users/user-id", minStartTime: "2027-01-01T00:00:00Z", status: "active", sort: "start_time:asc", }) sendEmail({ subject: "Upcoming events", text: JSON.stringify(page.items) }) }) ``` Optional filters include `inviteeEmail`, `minStartTime`, `maxStartTime`, and `status`. Results include location and join URL, memberships, guests, invitee counts, and cancellation details. Continue with `pageToken` from `pageInfo.nextPageToken`. # List user availability schedules Source: https://docs.automate.ax/reference/integrations/calendly/actions/list-user-availability-schedules List a Calendly user's availability schedules. `calendly.listUserAvailabilitySchedules` accepts a complete user URI and returns schedule names, timezones, default state, and weekly or date-specific rules. ```ts automations/list-calendly-schedules.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("List Calendly schedules", () => { onDashboardRun({ title: "List Calendly schedules" }) const schedules = calendly.listUserAvailabilitySchedules({ user: "https://api.calendly.com/users/user-id", }) sendEmail({ subject: "Availability schedules", text: JSON.stringify(schedules.items), }) }) ``` This endpoint is not cursor-paginated. # List user busy times Source: https://docs.automate.ax/reference/integrations/calendly/actions/list-user-busy-times List a Calendly user's internal and external busy times. `calendly.listUserBusyTimes` accepts a user URI and an RFC 3339 UTC window of at most seven days. ```ts automations/list-calendly-busy-times.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("List Calendly busy times", () => { onDashboardRun({ title: "List Calendly busy times" }) const busy = calendly.listUserBusyTimes({ user: "https://api.calendly.com/users/user-id", startTime: "2027-01-04T09:00:00Z", endTime: "2027-01-11T09:00:00Z", }) sendEmail({ subject: "Busy times", text: JSON.stringify(busy.items) }) }) ``` Items identify `calendly`, `external`, or `reserved` blocks and include buffer times or a scheduled event URI when applicable. The action rejects reversed or overlong ranges before calling Calendly. # List user meeting locations Source: https://docs.automate.ax/reference/integrations/calendly/actions/list-user-meeting-locations List the meeting location types connected to a Calendly user. `calendly.listUserMeetingLocations` returns the meeting location types a user can assign to event types. ```ts automations/list-calendly-meeting-locations.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("List Calendly meeting locations", () => { onDashboardRun({ title: "List meeting locations" }) const locations = calendly.listUserMeetingLocations({ user: "https://api.calendly.com/users/user-id", }) sendEmail({ subject: "Connected locations", text: JSON.stringify(locations.items), }) }) ``` Pass the complete user URI. Each result identifies the location kind and whether the provider connection is available. This endpoint is not cursor-paginated. # Update event type Source: https://docs.automate.ax/reference/integrations/calendly/actions/update-event-type Update a Calendly event type's scheduling configuration. `calendly.updateEventType` changes a one-on-one event type without replacing unspecified settings. ```ts automations/update-calendly-event-type.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("Update Calendly event type", () => { onDashboardRun({ title: "Update event type" }) const eventType = calendly.updateEventType({ eventTypeId: "event-type-id", duration: 45, name: "Extended customer onboarding", }) sendEmail({ subject: "Event type updated", text: eventType.schedulingUrl }) }) ``` `eventTypeId` is the final identifier segment of the event type URI. You can update its active state, name, description, duration, duration options, locale, color, and locations. Supply at most four unique `durationOptions`; when you also set `duration`, include it among those options. # Update event type availability schedule Source: https://docs.automate.ax/reference/integrations/calendly/actions/update-event-type-availability-schedule Replace a Calendly event type's host availability rules. `calendly.updateEventTypeAvailabilitySchedule` replaces the host availability rules used by an event type. ```ts automations/update-calendly-event-availability.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("Update Calendly event availability", () => { onDashboardRun({ title: "Update event availability" }) const schedule = calendly.updateEventTypeAvailabilitySchedule({ eventType: "https://api.calendly.com/event_types/event-type-id", availabilityRule: { timezone: "America/Los_Angeles", rules: [ { type: "wday", wday: "monday", intervals: [{ from: "09:00", to: "17:00" }], }, ], }, }) sendEmail({ subject: "Availability updated", text: schedule.eventType }) }) ``` Pass the complete event type URI and an `availabilityRule` with a timezone. `availabilitySetting` defaults to Calendly's `host` setting. The supplied rules replace the current rules. # Authorization and webhooks Source: https://docs.automate.ax/reference/integrations/calendly/authorization-and-webhooks Understand Calendly OAuth scopes, plan limits, identifiers, pagination, rate limits, and signed webhook delivery. ## Connect Calendly Calendly uses OAuth with PKCE. Automate.ax requests `users:read` when you connect, then requests the scopes required by the actions and triggers in your deployment. Access tokens expire after two hours. Calendly rotates refresh tokens after every use; Automate.ax stores the replacement atomically. Actions declare one of these scopes: `users:read`, `organizations:read`, `event_types:read`, `event_types:write`, `availability:read`, `availability:write`, `locations:read`, `scheduled_events:read`, `scheduled_events:write`, `routing_forms:read`, or `scheduling_links:write`. Triggers also require `webhooks:write` and the read scope for their event family. A write scope includes its corresponding read access. Calendly still applies the connected user's role and plan. Direct invitee booking requires Standard or above. Routing forms and their submissions require Teams or above. Organization-scoped resources and webhooks can require an organization owner or admin. ## Resource identifiers Calendly returns canonical resource URLs such as `https://api.calendly.com/users/AAAAAAAAAAAAAAAA`. Pass the complete URL to fields named `user`, `organization`, `eventType`, `form`, or `invitee`. Pass only `AAAAAAAAAAAAAAAA` to fields ending in `Id`. List actions return `{ items, pageInfo }`. Pass `pageInfo.nextPageToken` as `pageToken` to fetch the next page. `count` defaults to 20 and accepts 1–100. ## Rate limits Calendly permits 500 requests per user per minute on paid plans and 50 on free plans. Direct invitee creation has lower plan-specific limits. Automate.ax retries `429` responses after Calendly's `X-RateLimit-Reset` delay. Other client errors fail the action without retry, while server failures remain eligible for retry. ## Signed lifecycle webhooks Every trigger needs `organizationUri` and a provider `scope`: * `organization` watches the organization and needs no additional URI. * `user` also needs `userUri`. * `group` also needs `groupUri`. Routing form submissions and the broad scheduling-event trigger support only organization scope. Semantic event type, invitee, and no-show triggers can use organization, user, or group scope. Automate.ax combines compatible triggers into one Calendly webhook, reconciles its exact callback URL and event set, and deletes it after the final subscription or account connection is removed. It verifies `Calendly-Webhook-Signature` as HMAC-SHA256 over the exact timestamp and body, rejects deliveries more than three minutes old, and deduplicates provider retries. Calendly retries failed webhook deliveries for up to 24 hours with progressively longer delays and may turn off a persistently failing subscription. Calendly does not expose a reschedule mutation. Invitee results contain `rescheduleUrl`; send that URL to the invitee when they need to choose another time. See Calendly's [OAuth scopes](https://developer.calendly.com/docs/authentication/scopes), [API conventions](https://developer.calendly.com/api-docs/overview/api/api-conventions), [rate limits](https://developer.calendly.com/api-docs/overview/rate-limits), and [webhook signatures](https://developer.calendly.com/api-docs/overview/webhooks/webhook-signatures). # Calendly Source: https://docs.automate.ax/reference/integrations/calendly/index Read availability and scheduling data, book and cancel meetings, and start automations from signed Calendly lifecycle events. Automate.ax connects to Calendly with OAuth. Use its 32 actions to inspect and manage users, organizations, event types, availability, meetings, invitees, no-shows, routing forms, and one-time scheduling links. Nine signed triggers cover scheduling lifecycle events. ```ts automations/handle-calendly-booking.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("Handle Calendly bookings", () => { const booking = calendly.onInviteeCreated({ organizationUri: "https://api.calendly.com/organizations/organization-id", scope: "organization", }) sendEmail({ subject: `New Calendly booking: ${booking.payload.name}`, text: `${booking.payload.email} booked ${booking.payload.scheduledEvent.name}.`, }) }) ``` Calendly identifies resources with complete API URLs. List or get the resource first, then pass its `uri` to actions and trigger options that ask for a URL. UUID inputs accept only the final identifier segment. See [Authorization and webhooks](/reference/integrations/calendly/authorization-and-webhooks) for OAuth scopes, provider plan limits, rate limits, pagination, and webhook behavior. ## Exports ```ts theme={null} import { calendly, calendlyAccount, getCalendlyApi } from "automate.ax/calendly" ``` * `calendly` contains the packaged Calendly actions and triggers. * `calendlyAccount("name")` selects a named Calendly connection. * `getCalendlyApi` creates the authenticated REST helper for a custom account-backed action. ## Actions * [Get current user](/reference/integrations/calendly/actions/get-current-user) * [Get user](/reference/integrations/calendly/actions/get-user) * [Get organization](/reference/integrations/calendly/actions/get-organization) * [Get organization membership](/reference/integrations/calendly/actions/get-organization-membership) * [List organization memberships](/reference/integrations/calendly/actions/list-organization-memberships) * [List event types](/reference/integrations/calendly/actions/list-event-types) * [Create event type](/reference/integrations/calendly/actions/create-event-type) * [Create one-off event type](/reference/integrations/calendly/actions/create-one-off-event-type) * [Update event type](/reference/integrations/calendly/actions/update-event-type) * [Get event type](/reference/integrations/calendly/actions/get-event-type) * [List event type hosts](/reference/integrations/calendly/actions/list-event-type-hosts) * [List event type available times](/reference/integrations/calendly/actions/list-event-type-available-times) * [List event type availability schedules](/reference/integrations/calendly/actions/list-event-type-availability-schedules) * [Update event type availability schedule](/reference/integrations/calendly/actions/update-event-type-availability-schedule) * [List user availability schedules](/reference/integrations/calendly/actions/list-user-availability-schedules) * [Get user availability schedule](/reference/integrations/calendly/actions/get-user-availability-schedule) * [List user busy times](/reference/integrations/calendly/actions/list-user-busy-times) * [List user meeting locations](/reference/integrations/calendly/actions/list-user-meeting-locations) * [List scheduled events](/reference/integrations/calendly/actions/list-scheduled-events) * [Get scheduled event](/reference/integrations/calendly/actions/get-scheduled-event) * [List event invitees](/reference/integrations/calendly/actions/list-event-invitees) * [Get event invitee](/reference/integrations/calendly/actions/get-event-invitee) * [Create event invitee](/reference/integrations/calendly/actions/create-event-invitee) * [Cancel scheduled event](/reference/integrations/calendly/actions/cancel-scheduled-event) * [Create invitee no-show](/reference/integrations/calendly/actions/create-invitee-no-show) * [Get invitee no-show](/reference/integrations/calendly/actions/get-invitee-no-show) * [Delete invitee no-show](/reference/integrations/calendly/actions/delete-invitee-no-show) * [List routing forms](/reference/integrations/calendly/actions/list-routing-forms) * [Get routing form](/reference/integrations/calendly/actions/get-routing-form) * [List routing form submissions](/reference/integrations/calendly/actions/list-routing-form-submissions) * [Get routing form submission](/reference/integrations/calendly/actions/get-routing-form-submission) * [Create single-use scheduling link](/reference/integrations/calendly/actions/create-single-use-scheduling-link) ## Triggers * [On any scheduling event](/reference/integrations/calendly/triggers/on-scheduling-event) * [On event type created](/reference/integrations/calendly/triggers/on-event-type-created) * [On event type updated](/reference/integrations/calendly/triggers/on-event-type-updated) * [On event type deleted](/reference/integrations/calendly/triggers/on-event-type-deleted) * [On invitee created](/reference/integrations/calendly/triggers/on-invitee-created) * [On invitee canceled](/reference/integrations/calendly/triggers/on-invitee-canceled) * [On invitee no-show created](/reference/integrations/calendly/triggers/on-invitee-no-show-created) * [On invitee no-show deleted](/reference/integrations/calendly/triggers/on-invitee-no-show-deleted) * [On routing form submission created](/reference/integrations/calendly/triggers/on-routing-form-submission-created) # On event type created Source: https://docs.automate.ax/reference/integrations/calendly/triggers/on-event-type-created Run an automation when Calendly creates an event type. `calendly.onEventTypeCreated` returns the new event type configuration. ```ts automations/calendly-event-type-created.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("Review new Calendly event types", () => { const event = calendly.onEventTypeCreated({ organizationUri: "https://api.calendly.com/organizations/organization-id", scope: "organization", }) sendEmail({ subject: `New event type: ${event.payload.name}`, text: event.payload.schedulingUrl, }) }) ``` The payload includes the event type URI, name, duration, locations, booking method, visibility, profile, and current lifecycle state. # On event type deleted Source: https://docs.automate.ax/reference/integrations/calendly/triggers/on-event-type-deleted Run an automation when Calendly deletes an event type. `calendly.onEventTypeDeleted` preserves the deleted event type's identity and configuration. ```ts automations/calendly-event-type-deleted.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("Record deleted Calendly event types", () => { const event = calendly.onEventTypeDeleted({ organizationUri: "https://api.calendly.com/organizations/organization-id", scope: "organization", }) sendEmail({ subject: `Deleted: ${event.payload.name}`, text: event.payload.uri, }) }) ``` `payload.deletedAt` identifies when Calendly deleted the event type. # On event type updated Source: https://docs.automate.ax/reference/integrations/calendly/triggers/on-event-type-updated Run an automation when Calendly updates an event type. `calendly.onEventTypeUpdated` returns the event type after Calendly applies the change. ```ts automations/calendly-event-type-updated.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("Track Calendly event type changes", () => { const event = calendly.onEventTypeUpdated({ organizationUri: "https://api.calendly.com/organizations/organization-id", scope: "organization", }) sendEmail({ subject: `Updated: ${event.payload.name}`, text: JSON.stringify(event.payload), }) }) ``` Use `payload.uri` as the stable event type identifier. # On invitee canceled Source: https://docs.automate.ax/reference/integrations/calendly/triggers/on-invitee-canceled Run an automation when a Calendly invitee cancels. `calendly.onInviteeCanceled` fires when one invitee cancels their participation. ```ts automations/calendly-invitee-canceled.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("Track Calendly cancellations", () => { const event = calendly.onInviteeCanceled({ organizationUri: "https://api.calendly.com/organizations/organization-id", scope: "organization", }) sendEmail({ subject: `Canceled: ${event.payload.name}`, text: event.payload.cancellation?.reason ?? "No reason supplied", }) }) ``` For a reschedule, `oldInvitee` and `newInvitee` link the two invitee resources and `rescheduled` is `true`. # On invitee created Source: https://docs.automate.ax/reference/integrations/calendly/triggers/on-invitee-created Run an automation when an invitee books a Calendly meeting. `calendly.onInviteeCreated` starts from a new booking. ```ts automations/calendly-invitee-created.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("Welcome Calendly invitees", () => { const event = calendly.onInviteeCreated({ organizationUri: "https://api.calendly.com/organizations/organization-id", scope: "organization", }) sendEmail({ to: event.payload.email, subject: `Booked: ${event.payload.scheduledEvent.name}`, text: `Starts ${event.payload.scheduledEvent.startTime}`, }) }) ``` The payload includes invitee answers, tracking, cancellation and rescheduling URLs, and the complete scheduled event. # On invitee no-show created Source: https://docs.automate.ax/reference/integrations/calendly/triggers/on-invitee-no-show-created Run an automation when Calendly marks an invitee as a no-show. `calendly.onInviteeNoShowCreated` returns the affected invitee and scheduled event. ```ts automations/calendly-no-show-created.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("Follow up on Calendly no-shows", () => { const event = calendly.onInviteeNoShowCreated({ organizationUri: "https://api.calendly.com/organizations/organization-id", scope: "organization", }) sendEmail({ to: event.payload.email, subject: "We missed you", text: event.payload.rescheduleUrl, }) }) ``` `payload.noShow` contains the no-show URI and creation timestamp. # On invitee no-show deleted Source: https://docs.automate.ax/reference/integrations/calendly/triggers/on-invitee-no-show-deleted Run an automation when Calendly removes an invitee no-show mark. `calendly.onInviteeNoShowDeleted` reports that a no-show mark was removed. ```ts automations/calendly-no-show-deleted.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("Clear Calendly no-show follow-up", () => { const event = calendly.onInviteeNoShowDeleted({ organizationUri: "https://api.calendly.com/organizations/organization-id", scope: "organization", }) sendEmail({ subject: `No-show cleared: ${event.payload.name}`, text: event.payload.uri, }) }) ``` The payload contains the invitee state and complete scheduled event at delivery time. # On routing form submission created Source: https://docs.automate.ax/reference/integrations/calendly/triggers/on-routing-form-submission-created Run an automation when someone submits a Calendly routing form. `calendly.onRoutingFormSubmissionCreated` requires organization scope and Calendly Teams or above. ```ts automations/calendly-routing-submission.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("Review Calendly routing", () => { const event = calendly.onRoutingFormSubmissionCreated({ organizationUri: "https://api.calendly.com/organizations/organization-id", scope: "organization", }) sendEmail({ subject: "New routing form submission", text: JSON.stringify(event.payload.questionsAndAnswers), }) }) ``` The payload includes answers, UTM and Salesforce tracking, the submitter when a meeting was booked, and a typed result for an event type, external URL, or custom message. # On any scheduling event Source: https://docs.automate.ax/reference/integrations/calendly/triggers/on-scheduling-event Run an automation for any supported Calendly scheduling lifecycle event. `calendly.onSchedulingEvent` receives event type, invitee, no-show, and routing form submission events for an organization. ```ts automations/calendly-scheduling-events.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { calendly } from "automate.ax/calendly" export default automation("Audit Calendly events", () => { const event = calendly.onSchedulingEvent({ organizationUri: "https://api.calendly.com/organizations/organization-id", scope: "organization", }) sendEmail({ subject: `Calendly: ${event.event}`, text: JSON.stringify(event.payload), }) }) ``` The signal is a discriminated union keyed by `event` and supports only organization scope. Use a semantic trigger when one event family or a user or group scope is enough. # Get workspace agent run Source: https://docs.automate.ax/reference/integrations/chatgpt/actions/get-workspace-agent-run Check the current state of a ChatGPT Workspace Agent run. `chatgpt.getWorkspaceAgentRun` gets the latest status for a run started by `chatgpt.triggerWorkspaceAgent`. ```ts automations/get-chatgpt-agent-run.automation.ts theme={null} import { automation, onSchedule, sendEmail, t } from "automate.ax" import { chatgpt } from "automate.ax/chatgpt" export default automation("Check ChatGPT agent", () => { onSchedule({ schedule: "*/5 * * * *" }) const run = chatgpt.getWorkspaceAgentRun({ apiTriggerId: "agtch_engineering_123", runId: "apirun_123", }) sendEmail({ subject: t`ChatGPT agent ${run.status}`, text: run.conversationUrl, }) }) ``` Pass the same `apiTriggerId` used to start the run and its returned `runId`. Optional second argument `{ account }` defaults to the project binding. The result includes the published agent and trigger IDs, ChatGPT conversation URL, creation time, current status, and nullable failure details. `status` is `queued`, `in_progress`, `suspended`, `completed`, or `failed`. Only `completed` and `failed` are terminal. A suspended run is waiting for an external action or tool. Failed runs report `dispatch_failed` or `run_failed` in `error.code`. # Run workspace agent Source: https://docs.automate.ax/reference/integrations/chatgpt/actions/run-workspace-agent Run a ChatGPT Workspace Agent and continue after it finishes. `chatgpt.runWorkspaceAgent` triggers a published ChatGPT Workspace Agent, checks its status after durable delays, and emits the terminal run metadata. ```ts automations/run-chatgpt-agent.automation.ts theme={null} import { automation, onHttpRequest, sendEmail, t } from "automate.ax" import { chatgpt } from "automate.ax/chatgpt" import { z } from "zod" export default automation("Run ChatGPT agent", () => { const request = onHttpRequest({ body: z.object({ message: z.string() }), scope: "automation", }) const run = chatgpt.runWorkspaceAgent({ apiTriggerId: "agtch_engineering_123", conversationKey: request.headers["x-thread-id"], idempotencyKey: request.headers["x-event-id"], input: request.body.message, }) sendEmail({ subject: t`ChatGPT agent ${run.status}`, text: run.conversationUrl, }) }) ``` The trigger fields match `chatgpt.triggerWorkspaceAgent`. Reuse `conversationKey` for related events that should continue the same ChatGPT conversation. Reuse an `idempotencyKey` only when retrying the same event; it makes trigger submission replay-safe. Optional second argument `{ account }` defaults to the project binding and is reused for every status check. Because checks arrive as independent roots, this account selection must be a literal binding name or a `chatgptAccount()` reference, not a signal. `pollInterval` accepts a compact duration or milliseconds and defaults to `"30s"`. `maxPolls` accepts `1` through `120` and defaults to `60`, giving the default wait roughly 30 minutes to finish. Automate.ax checks immediately, then runs each remaining check as a new action after a durable delay. It does not keep an action invocation open between checks. The result matches `chatgpt.getWorkspaceAgentRun`: agent, API trigger, and run IDs; creation time; terminal `status`; nullable failure details; and `conversationUrl`. `completed` and `failed` are terminal. Failed runs report `dispatch_failed` or `run_failed` in `error.code`. The signal fails if the run remains `queued`, `in_progress`, or `suspended` for the complete polling budget. ChatGPT does not currently expose the agent's response through the Workspace Agents API. Downstream automation receives run metadata and the ChatGPT conversation URL, not the response content. > [!WARNING] > > `chatgpt.runWorkspaceAgent` uses hidden delay triggers and introduces > additional context roots. Anchor literal submissions to their initiating > signal with `withPrerequisites`. The example is already anchored because its > input comes from the HTTP request. # Trigger workspace agent Source: https://docs.automate.ax/reference/integrations/chatgpt/actions/trigger-workspace-agent Start a published ChatGPT Workspace Agent run from an automation. `chatgpt.triggerWorkspaceAgent` queues a published ChatGPT Workspace Agent through its API channel. ```ts automations/trigger-chatgpt-agent.automation.ts theme={null} import { automation, onHttpRequest, sendEmail, t } from "automate.ax" import { chatgpt } from "automate.ax/chatgpt" export default automation("Start ChatGPT agent", () => { const request = onHttpRequest({ scope: "automation" }) const run = chatgpt.triggerWorkspaceAgent({ apiTriggerId: "agtch_engineering_123", conversationKey: request.headers["x-thread-id"], idempotencyKey: request.headers["x-event-id"], input: "Review the latest engineering request and implement it.", }) sendEmail({ subject: t`ChatGPT agent queued as ${run.runId}`, text: run.conversationUrl, }) }) ``` `apiTriggerId` is the stable `agtch_` identifier shown for the agent's published API channel. `input` is the message sent to the agent. Optional `conversationKey` continues the same agent conversation across related events. Optional `idempotencyKey` prevents a retry of the same event from adding a second trigger. Optional second argument `{ account }` defaults to the project binding. The action returns the `apirun_` run ID and ChatGPT conversation URL after ChatGPT accepts the run. Use `chatgpt.runWorkspaceAgent` for durable completion or `chatgpt.getWorkspaceAgentRun` to manage status checks yourself. ChatGPT does not currently expose the agent's response through this API. Connect ChatGPT with a Workspace Agent access token created in **ChatGPT workspace settings > Access tokens** with the **Workspace Agents** scope. A workspace administrator must first enable Workspace agents and personal access tokens. # ChatGPT Source: https://docs.automate.ax/reference/integrations/chatgpt/index Run ChatGPT workspace agents and continue after they finish. ## Exports ```ts theme={null} import { chatgpt, chatgptAccount } from "automate.ax/chatgpt" ``` * `chatgpt` contains the packaged ChatGPT actions. * `chatgptAccount("name")` selects a named ChatGPT connection. ## Setup Ask a ChatGPT workspace administrator to enable Workspace agents and personal access tokens. Create an access token with the **Workspace Agents** scope, then connect it in Automate.ax. See [Workspace Agent authentication](https://developers.openai.com/workspace-agents/authentication) for the current ChatGPT requirements. Publish the agent to an API trigger channel and copy its `agtch_` identifier into your automation. ## Actions * [Get workspace agent run](/reference/integrations/chatgpt/actions/get-workspace-agent-run) * [Run workspace agent](/reference/integrations/chatgpt/actions/run-workspace-agent) * [Trigger workspace agent](/reference/integrations/chatgpt/actions/trigger-workspace-agent) ChatGPT's Workspace Agents API returns run status and a conversation URL. It does not expose the agent's response to downstream automation. # Create comment reply Source: https://docs.automate.ax/reference/integrations/clickup/actions/create-comment-reply Creates a threaded reply to a ClickUp comment. `clickUp.createCommentReply` creates a threaded reply to a ClickUp comment. ```ts automations/clickup-create-comment-reply.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Create comment reply", () => { onDashboardRun({ title: "Create comment reply" }) clickUp.createCommentReply({ commentId: "comment-id", commentText: "Following up.", notifyAll: false, }) }) ``` ## Inputs `commentId`, non-empty `commentText`, and optional `assignee`, `groupAssignee`, `notifyAll`. Every action accepts an optional static `account` binding. ## Output Returns no value after ClickUp accepts the reply. # Create folder Source: https://docs.automate.ax/reference/integrations/clickup/actions/create-folder Creates a Folder or subfolder in a ClickUp Space. `clickUp.createFolder` creates a Folder or subfolder in a ClickUp Space. ```ts automations/clickup-create-folder.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Create folder", () => { onDashboardRun({ title: "Create folder" }) clickUp.createFolder({ spaceId: "space-id", name: "Launch", parentFolderId: "parent-folder-id", }) }) ``` ## Inputs `spaceId` and non-empty `name`. `parentFolderId` creates a subfolder when provided. Every action accepts an optional static `account` binding. ## Output Returns the created `ClickUpFolder`. # Create Folder List Source: https://docs.automate.ax/reference/integrations/clickup/actions/create-folder-list Creates a List inside a ClickUp Folder. `clickUp.createFolderList` creates a List inside a ClickUp Folder. ```ts automations/clickup-create-folder-list.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Create Folder List", () => { onDashboardRun({ title: "Create Folder List" }) clickUp.createFolderList({ folderId: "folder-id", name: "Backlog" }) }) ``` ## Inputs `folderId` and non-empty `name`; optional content, Markdown content, assignee, due date, priority, and status. Every action accepts an optional static `account` binding. ## Output Returns the created `ClickUpList`. # Create folderless List Source: https://docs.automate.ax/reference/integrations/clickup/actions/create-folderless-list Creates a List directly inside a ClickUp Space. `clickUp.createFolderlessList` creates a List directly inside a ClickUp Space. ```ts automations/clickup-create-folderless-list.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Create folderless List", () => { onDashboardRun({ title: "Create folderless List" }) clickUp.createFolderlessList({ spaceId: "space-id", name: "Inbox" }) }) ``` ## Inputs `spaceId` and non-empty `name`; optional content, Markdown content, assignee, due date, priority, and status. Every action accepts an optional static `account` binding. ## Output Returns the created `ClickUpList`. # Create Goal Source: https://docs.automate.ax/reference/integrations/clickup/actions/create-goal Creates a Goal in a ClickUp Workspace. `clickUp.createGoal` creates a Goal in a ClickUp Workspace. ```ts automations/clickup-create-goal.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Create Goal", () => { onDashboardRun({ title: "Create Goal" }) clickUp.createGoal({ workspaceId: "workspace-id", name: "Launch", dueDate: 1800000000000, description: "Ship the first production release", multipleOwners: false, owners: [42], color: "#7B68EE", }) }) ``` ## Inputs `workspaceId`, non-empty `name`, description, color, millisecond `dueDate`, owner IDs, and multiple-owner mode. ClickUp requires every field, including empty `owners`. Every action accepts an optional static `account` binding. ## Output Returns the created `ClickUpGoal`. # Create Goal Target Source: https://docs.automate.ax/reference/integrations/clickup/actions/create-goal-target Creates a measurable Target on a ClickUp Goal. `clickUp.createGoalTarget` creates a measurable Target on a ClickUp Goal. ```ts automations/clickup-create-goal-target.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Create Goal Target", () => { onDashboardRun({ title: "Create Goal Target" }) clickUp.createGoalTarget({ goalId: "goal-id", name: "Ship 10 features", type: "number", stepsEnd: 10, unit: "features", }) }) ``` ## Inputs `goalId`, `name`, `type` (`automatic`, `boolean`, `currency`, `number`, or `percentage`), integer `stepsEnd`, and `unit`; optional integer start. Owner, task, and List ID arrays default to empty. Use `automatic` with task or List IDs. Every action accepts an optional static `account` binding. ## Output Returns the created `ClickUpKeyResult`. # Create Space Source: https://docs.automate.ax/reference/integrations/clickup/actions/create-space Creates a Space in a ClickUp Workspace. `clickUp.createSpace` creates a Space in a ClickUp Workspace. ```ts automations/clickup-create-space.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Create Space", () => { onDashboardRun({ title: "Create Space" }) clickUp.createSpace({ workspaceId: "workspace-id", name: "Product" }) }) ``` ## Inputs `workspaceId` and non-empty `name`; optional multiple-assignee behavior and Space feature settings. Every action accepts an optional static `account` binding. ## Output Returns the created `ClickUpSpace`. # Create subtask Source: https://docs.automate.ax/reference/integrations/clickup/actions/create-subtask Creates a subtask in the parent task's List. `clickUp.createSubtask` creates a subtask in the parent task's List. ```ts automations/clickup-create-subtask.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Create subtask", () => { onDashboardRun({ title: "Create subtask" }) clickUp.createSubtask({ listId: "list-id", parentTaskId: "task-id", name: "Review copy", }) }) ``` ## Inputs `listId`, `parentTaskId`, and non-empty `name`; accepts the same optional fields as task creation. Every action accepts an optional static `account` binding. ## Output Returns the created `ClickUpTask`. # Create task Source: https://docs.automate.ax/reference/integrations/clickup/actions/create-task Creates a task in a ClickUp List. `clickUp.createTask` creates a task in a ClickUp List. ```ts automations/clickup-create-task.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Create task", () => { onDashboardRun({ title: "Create task" }) clickUp.createTask({ listId: "list-id", name: "Publish release", priority: 2, }) }) ``` ## Inputs `listId` and non-empty `name`; optional description or Markdown, dates, status, priority, assignees, tags, estimates, Custom Fields, and notification settings. Every action accepts an optional static `account` binding. ## Output Returns the created `ClickUpTask`. # Create task comment Source: https://docs.automate.ax/reference/integrations/clickup/actions/create-task-comment Creates a plain-text comment on a ClickUp task. `clickUp.createTaskComment` creates a plain-text comment on a ClickUp task. ```ts automations/clickup-create-task-comment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Create task comment", () => { onDashboardRun({ title: "Create task comment" }) clickUp.createTaskComment({ taskId: "task-id", commentText: "Ready for review.", notifyAll: false, }) }) ``` ## Inputs `taskId`, non-empty `commentText`, and optional assignee, group assignee, and `notifyAll`. Every action accepts an optional static `account` binding. ## Output Returns the created comment identifiers and timestamp. # Create time entry Source: https://docs.automate.ax/reference/integrations/clickup/actions/create-time-entry Creates a completed time entry in a ClickUp Workspace. `clickUp.createTimeEntry` creates a completed time entry in a ClickUp Workspace. ```ts automations/clickup-create-time-entry.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Create time entry", () => { onDashboardRun({ title: "Create time entry" }) clickUp.createTimeEntry({ workspaceId: "workspace-id", taskId: "task-id", start: 1800000000000, duration: 3600000, }) }) ``` ## Inputs `workspaceId`, millisecond `start`, and integer `duration`; optional end, task, description, assignee, billable state, and tags. Each tag requires `name`, `tagFg`, and `tagBg`. Every action accepts an optional static `account` binding. ## Output Returns ClickUp's creation result with the submitted timing, assignment, task, billable state, description, and tags. ClickUp does not return the new time-entry ID from this endpoint. # Delete comment Source: https://docs.automate.ax/reference/integrations/clickup/actions/delete-comment Deletes a ClickUp comment. `clickUp.deleteComment` deletes a ClickUp comment. ```ts automations/clickup-delete-comment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Delete comment", () => { onDashboardRun({ title: "Delete comment" }) clickUp.deleteComment({ commentId: "comment-id" }) }) ``` ## Inputs `commentId`. Every action accepts an optional static `account` binding. ## Output Returns no value after ClickUp accepts the deletion. # Delete folder Source: https://docs.automate.ax/reference/integrations/clickup/actions/delete-folder Deletes a ClickUp Folder. `clickUp.deleteFolder` deletes a ClickUp Folder. ```ts automations/clickup-delete-folder.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Delete folder", () => { onDashboardRun({ title: "Delete folder" }) clickUp.deleteFolder({ folderId: "folder-id" }) }) ``` ## Inputs `folderId`. Every action accepts an optional static `account` binding. ## Output Returns no value after ClickUp accepts the deletion. # Delete Goal Source: https://docs.automate.ax/reference/integrations/clickup/actions/delete-goal Deletes a ClickUp Goal. `clickUp.deleteGoal` deletes a ClickUp Goal. ```ts automations/clickup-delete-goal.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Delete Goal", () => { onDashboardRun({ title: "Delete Goal" }) clickUp.deleteGoal({ goalId: "goal-id" }) }) ``` ## Inputs `goalId`. Every action accepts an optional static `account` binding. ## Output Returns no value after ClickUp accepts the deletion. # Delete Goal Target Source: https://docs.automate.ax/reference/integrations/clickup/actions/delete-goal-target Deletes a Target from a ClickUp Goal. `clickUp.deleteGoalTarget` deletes a Target from a ClickUp Goal. ```ts automations/clickup-delete-goal-target.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Delete Goal Target", () => { onDashboardRun({ title: "Delete Goal Target" }) clickUp.deleteGoalTarget({ targetId: "target-id" }) }) ``` ## Inputs `targetId`. Every action accepts an optional static `account` binding. ## Output Returns no value after ClickUp accepts the deletion. # Delete List Source: https://docs.automate.ax/reference/integrations/clickup/actions/delete-list Deletes a ClickUp List. `clickUp.deleteList` deletes a ClickUp List. ```ts automations/clickup-delete-list.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Delete List", () => { onDashboardRun({ title: "Delete List" }) clickUp.deleteList({ listId: "list-id" }) }) ``` ## Inputs `listId`. Every action accepts an optional static `account` binding. ## Output Returns no value after ClickUp accepts the deletion. # Delete Space Source: https://docs.automate.ax/reference/integrations/clickup/actions/delete-space Deletes a ClickUp Space. `clickUp.deleteSpace` deletes a ClickUp Space. ```ts automations/clickup-delete-space.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Delete Space", () => { onDashboardRun({ title: "Delete Space" }) clickUp.deleteSpace({ spaceId: "space-id" }) }) ``` ## Inputs `spaceId`. Every action accepts an optional static `account` binding. ## Output Returns no value after ClickUp accepts the deletion. # Delete task Source: https://docs.automate.ax/reference/integrations/clickup/actions/delete-task Deletes a ClickUp task. `clickUp.deleteTask` deletes a ClickUp task. ```ts automations/clickup-delete-task.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Delete task", () => { onDashboardRun({ title: "Delete task" }) clickUp.deleteTask({ taskId: "task-id" }) }) ``` ## Inputs `taskId`. Every action accepts an optional static `account` binding. ## Output Returns no value after ClickUp accepts the deletion. # Delete time entry Source: https://docs.automate.ax/reference/integrations/clickup/actions/delete-time-entry Deletes a time entry from a ClickUp Workspace. `clickUp.deleteTimeEntry` deletes a time entry from a ClickUp Workspace. ```ts automations/clickup-delete-time-entry.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Delete time entry", () => { onDashboardRun({ title: "Delete time entry" }) clickUp.deleteTimeEntry({ workspaceId: "workspace-id", entryId: "entry-id" }) }) ``` ## Inputs `workspaceId` and `entryId`. Every action accepts an optional static `account` binding. ## Output Returns the deleted `ClickUpTimeEntry`. # Get current user Source: https://docs.automate.ax/reference/integrations/clickup/actions/get-current-user Gets the user represented by the connected ClickUp account. `clickUp.getCurrentUser` gets the user represented by the connected ClickUp account. ```ts automations/clickup-get-current-user.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Get current user", () => { onDashboardRun({ title: "Get current user" }) clickUp.getCurrentUser() }) ``` ## Inputs No provider fields. Pass an optional `{ account }` argument to select a named binding. Every action accepts an optional static `account` binding. ## Output Returns the connected `ClickUpUser`. # Get Folder Source: https://docs.automate.ax/reference/integrations/clickup/actions/get-folder Gets a ClickUp Folder and its Lists. `clickUp.getFolder` gets a ClickUp Folder and its Lists. ```ts automations/clickup-get-folder.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Get Folder", () => { onDashboardRun({ title: "Get Folder" }) clickUp.getFolder({ folderId: "folder-id", includeSubfolders: true }) }) ``` ## Inputs `folderId`; `includeSubfolders` defaults to `false`. Every action accepts an optional static `account` binding. ## Output Returns a `ClickUpFolder` with its Lists. # Get Goal Source: https://docs.automate.ax/reference/integrations/clickup/actions/get-goal Gets one ClickUp Goal and its Targets. `clickUp.getGoal` gets one ClickUp Goal and its Targets. ```ts automations/clickup-get-goal.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Get Goal", () => { onDashboardRun({ title: "Get Goal" }) clickUp.getGoal({ goalId: "goal-id" }) }) ``` ## Inputs `goalId`. Every action accepts an optional static `account` binding. ## Output Returns a `ClickUpGoal` including `keyResults`. # Get List Source: https://docs.automate.ax/reference/integrations/clickup/actions/get-list Gets one ClickUp List. `clickUp.getList` gets one ClickUp List. ```ts automations/clickup-get-list.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Get List", () => { onDashboardRun({ title: "Get List" }) clickUp.getList({ listId: "list-id" }) }) ``` ## Inputs `listId`. Every action accepts an optional static `account` binding. ## Output Returns a `ClickUpList`. # Get running time entry Source: https://docs.automate.ax/reference/integrations/clickup/actions/get-running-time-entry Gets the timer currently running for the connected user. `clickUp.getRunningTimeEntry` gets the timer currently running for the connected user. ```ts automations/clickup-get-running-time-entry.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Get running time entry", () => { onDashboardRun({ title: "Get running time entry" }) clickUp.getRunningTimeEntry({ workspaceId: "workspace-id" }) }) ``` ## Inputs `workspaceId`. Every action accepts an optional static `account` binding. ## Output Returns the running `ClickUpTimeEntry`, or `null` when no timer is active. # Get Space Source: https://docs.automate.ax/reference/integrations/clickup/actions/get-space Gets one ClickUp Space. `clickUp.getSpace` gets one ClickUp Space. ```ts automations/clickup-get-space.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Get Space", () => { onDashboardRun({ title: "Get Space" }) clickUp.getSpace({ spaceId: "space-id" }) }) ``` ## Inputs `spaceId`. Every action accepts an optional static `account` binding. ## Output Returns a `ClickUpSpace`. # Get task Source: https://docs.automate.ax/reference/integrations/clickup/actions/get-task Gets one ClickUp task. `clickUp.getTask` gets one ClickUp task. ```ts automations/clickup-get-task.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Get task", () => { onDashboardRun({ title: "Get task" }) clickUp.getTask({ taskId: "task-id", includeSubtasks: true }) }) ``` ## Inputs `taskId`; optional `includeSubtasks` and `includeMarkdownDescription` default to `false`. Every action accepts an optional static `account` binding. ## Output Returns a `ClickUpTask`. # Get time entry Source: https://docs.automate.ax/reference/integrations/clickup/actions/get-time-entry Gets one time entry from a ClickUp Workspace. `clickUp.getTimeEntry` gets one time entry from a ClickUp Workspace. ```ts automations/clickup-get-time-entry.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Get time entry", () => { onDashboardRun({ title: "Get time entry" }) clickUp.getTimeEntry({ workspaceId: "workspace-id", entryId: "entry-id" }) }) ``` ## Inputs `workspaceId` and `entryId`. Every action accepts an optional static `account` binding. ## Output Returns the matching `ClickUpTimeEntry`. `taskLocation` always preserves the available Space, Folder, and List IDs, while ClickUp may omit their display names. # Get Workspace Source: https://docs.automate.ax/reference/integrations/clickup/actions/get-workspace Gets one Workspace authorized for the connected account. `clickUp.getWorkspace` gets one Workspace authorized for the connected account. ```ts automations/clickup-get-workspace.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Get Workspace", () => { onDashboardRun({ title: "Get Workspace" }) clickUp.getWorkspace({ workspaceId: "workspace-id" }) }) ``` ## Inputs `workspaceId`. The Workspace must be included in the connected account's authorization. Every action accepts an optional static `account` binding. ## Output Returns a `ClickUpWorkspace`; throws when that Workspace is not authorized. # List comment replies Source: https://docs.automate.ax/reference/integrations/clickup/actions/list-comment-replies Lists threaded replies without repeating the parent comment. `clickUp.listCommentReplies` lists threaded replies without repeating the parent comment. ```ts automations/clickup-list-comment-replies.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("List comment replies", () => { onDashboardRun({ title: "List comment replies" }) clickUp.listCommentReplies({ commentId: "comment-id" }) }) ``` ## Inputs `commentId`. Every action accepts an optional static `account` binding. ## Output Returns `{ comments }` containing `ClickUpComment` values. # List Folder Custom Fields Source: https://docs.automate.ax/reference/integrations/clickup/actions/list-folder-custom-fields Lists Custom Fields available at Folder scope. `clickUp.listFolderCustomFields` lists Custom Fields available at Folder scope. ```ts automations/clickup-list-folder-custom-fields.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("List Folder Custom Fields", () => { onDashboardRun({ title: "List Folder Custom Fields" }) clickUp.listFolderCustomFields({ folderId: "folder-id", includeAppliedObjects: true, }) }) ``` ## Inputs `folderId`; `includeAppliedObjects` defaults to `true`. Every action accepts an optional static `account` binding. ## Output Returns `{ fields }` containing `ClickUpCustomField` values. # List Lists in a Folder Source: https://docs.automate.ax/reference/integrations/clickup/actions/list-folder-lists Returns Lists in a ClickUp Folder. `clickUp.listFolderLists` returns Lists in a ClickUp Folder. ```ts automations/clickup-list-folder-lists.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("List Lists in a Folder", () => { onDashboardRun({ title: "List Lists in a Folder" }) clickUp.listFolderLists({ folderId: "folder-id" }) }) ``` ## Inputs `folderId`; `archived` defaults to `false`. Every action accepts an optional static `account` binding. ## Output Returns `{ lists }` containing `ClickUpList` values. # List folderless Lists Source: https://docs.automate.ax/reference/integrations/clickup/actions/list-folderless-lists Returns Lists directly inside a ClickUp Space. `clickUp.listFolderlessLists` returns Lists directly inside a ClickUp Space. ```ts automations/clickup-list-folderless-lists.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("List folderless Lists", () => { onDashboardRun({ title: "List folderless Lists" }) clickUp.listFolderlessLists({ spaceId: "space-id" }) }) ``` ## Inputs `spaceId`; `archived` defaults to `false`. Every action accepts an optional static `account` binding. ## Output Returns `{ lists }` containing `ClickUpList` values. # List Folders Source: https://docs.automate.ax/reference/integrations/clickup/actions/list-folders Lists Folders in a ClickUp Space, including subfolders. `clickUp.listFolders` lists Folders in a ClickUp Space, including subfolders. ```ts automations/clickup-list-folders.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("List Folders", () => { onDashboardRun({ title: "List Folders" }) clickUp.listFolders({ spaceId: "space-id" }) }) ``` ## Inputs `spaceId`; `archived` defaults to `false`. Every action accepts an optional static `account` binding. ## Output Returns `{ folders }` containing `ClickUpFolder` values. # List Goals Source: https://docs.automate.ax/reference/integrations/clickup/actions/list-goals Lists Goals available in a ClickUp Workspace. `clickUp.listGoals` lists Goals available in a ClickUp Workspace. ```ts automations/clickup-list-goals.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("List Goals", () => { onDashboardRun({ title: "List Goals" }) clickUp.listGoals({ workspaceId: "workspace-id", includeCompleted: false }) }) ``` ## Inputs `workspaceId`; `includeCompleted` defaults to `false`. Every action accepts an optional static `account` binding. ## Output Returns `{ goals }` containing `ClickUpGoal` values. # List Custom Fields for a List Source: https://docs.automate.ax/reference/integrations/clickup/actions/list-list-custom-fields Lists Custom Fields available to tasks in a List. `clickUp.listListCustomFields` lists Custom Fields available to tasks in a List. ```ts automations/clickup-list-list-custom-fields.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("List Custom Fields for a List", () => { onDashboardRun({ title: "List Custom Fields for a List" }) clickUp.listListCustomFields({ listId: "list-id", includeAppliedObjects: true, }) }) ``` ## Inputs `listId`; `includeAppliedObjects` defaults to `true`. Every action accepts an optional static `account` binding. ## Output Returns `{ fields }` containing `ClickUpCustomField` values. # List members of a List Source: https://docs.automate.ax/reference/integrations/clickup/actions/list-list-members Lists members with access to a ClickUp List. `clickUp.listListMembers` lists members with access to a ClickUp List. ```ts automations/clickup-list-list-members.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("List members of a List", () => { onDashboardRun({ title: "List members of a List" }) clickUp.listListMembers({ listId: "list-id" }) }) ``` ## Inputs `listId`. Every action accepts an optional static `account` binding. ## Output Returns `{ members }` containing `ClickUpUser` values. # List Space Custom Fields Source: https://docs.automate.ax/reference/integrations/clickup/actions/list-space-custom-fields Lists Custom Fields available at Space scope. `clickUp.listSpaceCustomFields` lists Custom Fields available at Space scope. ```ts automations/clickup-list-space-custom-fields.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("List Space Custom Fields", () => { onDashboardRun({ title: "List Space Custom Fields" }) clickUp.listSpaceCustomFields({ spaceId: "space-id", includeAppliedObjects: true, }) }) ``` ## Inputs `spaceId`; `includeAppliedObjects` defaults to `true`. Every action accepts an optional static `account` binding. ## Output Returns `{ fields }` containing `ClickUpCustomField` values. # List Spaces Source: https://docs.automate.ax/reference/integrations/clickup/actions/list-spaces Lists Spaces in a ClickUp Workspace. `clickUp.listSpaces` lists Spaces in a ClickUp Workspace. ```ts automations/clickup-list-spaces.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("List Spaces", () => { onDashboardRun({ title: "List Spaces" }) clickUp.listSpaces({ workspaceId: "workspace-id" }) }) ``` ## Inputs `workspaceId`; `archived` defaults to `false`. Every action accepts an optional static `account` binding. ## Output Returns `{ spaces }` containing `ClickUpSpace` values. # List task comments Source: https://docs.automate.ax/reference/integrations/clickup/actions/list-task-comments Lists task comments newest-first with ClickUp's paired cursor. `clickUp.listTaskComments` lists task comments newest-first with ClickUp's paired cursor. ```ts automations/clickup-list-task-comments.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("List task comments", () => { onDashboardRun({ title: "List task comments" }) clickUp.listTaskComments({ taskId: "task-id", start: "1800000000000", startId: "comment-id", }) }) ``` ## Inputs `taskId`. For another page, pass both `start` and `startId` from the previous `pageInfo`; neither cursor may be used alone. Every action accepts an optional static `account` binding. ## Output Returns `{ comments, pageInfo }`; `pageInfo` contains the paired cursor for the next page. # List task members Source: https://docs.automate.ax/reference/integrations/clickup/actions/list-task-members Lists members with access to a ClickUp task. `clickUp.listTaskMembers` lists members with access to a ClickUp task. ```ts automations/clickup-list-task-members.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("List task members", () => { onDashboardRun({ title: "List task members" }) clickUp.listTaskMembers({ taskId: "task-id" }) }) ``` ## Inputs `taskId`. Every action accepts an optional static `account` binding. ## Output Returns `{ members }` containing `ClickUpUser` values. # List tasks Source: https://docs.automate.ax/reference/integrations/clickup/actions/list-tasks Lists tasks in a ClickUp List with zero-based pagination. `clickUp.listTasks` lists tasks in a ClickUp List with zero-based pagination. ```ts automations/clickup-list-tasks.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("List tasks", () => { onDashboardRun({ title: "List tasks" }) clickUp.listTasks({ listId: "list-id", page: 0, includeClosed: false }) }) ``` ## Inputs `listId`; optional page, order, archive, status, assignee, tag, date, parent, and subtask filters. `page` starts at `0`. Every action accepts an optional static `account` binding. ## Output Returns `{ tasks, lastPage? }` with up to 100 tasks. # List time entries Source: https://docs.automate.ax/reference/integrations/clickup/actions/list-time-entries Lists time entries in a Workspace and optional date or location range. `clickUp.listTimeEntries` lists time entries in a Workspace and optional date or location range. ```ts automations/clickup-list-time-entries.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("List time entries", () => { onDashboardRun({ title: "List time entries" }) clickUp.listTimeEntries({ workspaceId: "workspace-id", startDate: 1790000000000, endDate: 1800000000000, }) }) ``` ## Inputs `workspaceId`; optional millisecond dates, assignee, and one of task, List, Folder, or Space. At most one location filter is allowed. Every action accepts an optional static `account` binding. ## Output Returns `{ entries }` containing `ClickUpTimeEntry` values. # List Workspace Custom Fields Source: https://docs.automate.ax/reference/integrations/clickup/actions/list-workspace-custom-fields Lists Custom Fields created at Workspace scope. `clickUp.listWorkspaceCustomFields` lists Custom Fields created at Workspace scope. ```ts automations/clickup-list-workspace-custom-fields.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("List Workspace Custom Fields", () => { onDashboardRun({ title: "List Workspace Custom Fields" }) clickUp.listWorkspaceCustomFields({ workspaceId: "workspace-id", includeAppliedObjects: true, }) }) ``` ## Inputs `workspaceId`; `includeAppliedObjects` defaults to `true`. Every action accepts an optional static `account` binding. ## Output Returns `{ fields }` containing `ClickUpCustomField` values. # List Workspace tasks Source: https://docs.automate.ax/reference/integrations/clickup/actions/list-workspace-tasks Lists filtered tasks across a ClickUp Workspace. `clickUp.listWorkspaceTasks` lists filtered tasks across a ClickUp Workspace. ```ts automations/clickup-list-workspace-tasks.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("List Workspace tasks", () => { onDashboardRun({ title: "List Workspace tasks" }) clickUp.listWorkspaceTasks({ workspaceId: "workspace-id", page: 0, spaceIds: ["space-id"], }) }) ``` ## Inputs `workspaceId`; optional page, status, assignee, tag, date, location, parent, subtask, and custom-item filters. `page` starts at `0`. Every action accepts an optional static `account` binding. ## Output Returns `{ tasks, lastPage? }` with up to 100 tasks. # List Workspace users Source: https://docs.automate.ax/reference/integrations/clickup/actions/list-workspace-users Lists users included in an authorized Workspace. `clickUp.listWorkspaceUsers` lists users included in an authorized Workspace. ```ts automations/clickup-list-workspace-users.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("List Workspace users", () => { onDashboardRun({ title: "List Workspace users" }) clickUp.listWorkspaceUsers({ workspaceId: "workspace-id" }) }) ``` ## Inputs `workspaceId`. The Workspace must be authorized for the connected account. Every action accepts an optional static `account` binding. ## Output Returns `{ users }` containing `ClickUpUser` values. # List Workspaces Source: https://docs.automate.ax/reference/integrations/clickup/actions/list-workspaces Lists Workspaces authorized for the connected account. `clickUp.listWorkspaces` lists Workspaces authorized for the connected account. ```ts automations/clickup-list-workspaces.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("List Workspaces", () => { onDashboardRun({ title: "List Workspaces" }) clickUp.listWorkspaces() }) ``` ## Inputs No provider fields. Pass an optional `{ account }` argument to select a named binding. Every action accepts an optional static `account` binding. ## Output Returns `{ workspaces }` containing authorized `ClickUpWorkspace` values. # Remove task Custom Field Source: https://docs.automate.ax/reference/integrations/clickup/actions/remove-task-custom-field Removes one Custom Field value from a task without deleting the field option. `clickUp.removeTaskCustomField` removes one Custom Field value from a task without deleting the field option. ```ts automations/clickup-remove-task-custom-field.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Remove task Custom Field", () => { onDashboardRun({ title: "Remove task Custom Field" }) clickUp.removeTaskCustomField({ taskId: "task-id", fieldId: "field-id" }) }) ``` ## Inputs `taskId` and `fieldId`. Every action accepts an optional static `account` binding. ## Output Returns no value after ClickUp removes the task value. # Set task Custom Field Source: https://docs.automate.ax/reference/integrations/clickup/actions/set-task-custom-field Sets one applicable Custom Field value on a ClickUp task. `clickUp.setTaskCustomField` sets one applicable Custom Field value on a ClickUp task. ```ts automations/clickup-set-task-custom-field.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Set task Custom Field", () => { onDashboardRun({ title: "Set task Custom Field" }) clickUp.setTaskCustomField({ taskId: "task-id", fieldId: "field-id", value: "Approved", }) }) ``` ## Inputs `taskId`, `fieldId`, and JSON-compatible `value`. The value shape must match the field's ClickUp type. Every action accepts an optional static `account` binding. ## Output Returns no value after ClickUp accepts the value. # Start time entry Source: https://docs.automate.ax/reference/integrations/clickup/actions/start-time-entry Starts a timer for the connected ClickUp user. `clickUp.startTimeEntry` starts a timer for the connected ClickUp user. ```ts automations/clickup-start-time-entry.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Start time entry", () => { onDashboardRun({ title: "Start time entry" }) clickUp.startTimeEntry({ workspaceId: "workspace-id", taskId: "task-id", description: "Implementation", }) }) ``` ## Inputs `workspaceId`; optional task, description, billable state, and tag names. Every action accepts an optional static `account` binding. ## Output Returns the running `ClickUpTimeEntry`. An empty provider location is normalized to an absent `taskLocation`. # Stop time entry Source: https://docs.automate.ax/reference/integrations/clickup/actions/stop-time-entry Stops the timer currently running for the connected ClickUp user. `clickUp.stopTimeEntry` stops the timer currently running for the connected ClickUp user. ```ts automations/clickup-stop-time-entry.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Stop time entry", () => { onDashboardRun({ title: "Stop time entry" }) clickUp.stopTimeEntry({ workspaceId: "workspace-id" }) }) ``` ## Inputs `workspaceId`. Every action accepts an optional static `account` binding. ## Output Returns the stopped `ClickUpTimeEntry`. # Update comment Source: https://docs.automate.ax/reference/integrations/clickup/actions/update-comment Replaces a ClickUp comment and its assignment state. `clickUp.updateComment` replaces a ClickUp comment and its assignment state. ```ts automations/clickup-update-comment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Update comment", () => { onDashboardRun({ title: "Update comment" }) clickUp.updateComment({ commentId: "comment-id", commentText: "Updated", assignee: 42, resolved: false, }) }) ``` ## Inputs `commentId`, `commentText`, numeric `assignee`, and `resolved`; optional numeric `groupAssignee`. Every action accepts an optional static `account` binding. ## Output Returns no value after ClickUp accepts the update. # Update Folder Source: https://docs.automate.ax/reference/integrations/clickup/actions/update-folder Renames a ClickUp Folder. `clickUp.updateFolder` renames a ClickUp Folder. ```ts automations/clickup-update-folder.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Update Folder", () => { onDashboardRun({ title: "Update Folder" }) clickUp.updateFolder({ folderId: "folder-id", name: "Launch plan" }) }) ``` ## Inputs `folderId` and non-empty `name`. Every action accepts an optional static `account` binding. ## Output Returns the updated `ClickUpFolder`. # Update Goal Source: https://docs.automate.ax/reference/integrations/clickup/actions/update-goal Updates ClickUp Goal details and owners. `clickUp.updateGoal` updates ClickUp Goal details and owners. ```ts automations/clickup-update-goal.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Update Goal", () => { onDashboardRun({ title: "Update Goal" }) clickUp.updateGoal({ goalId: "goal-id", name: "Launch v2", dueDate: 1800000000000, description: "Ship the revised production release", addOwners: [42], removeOwners: [], color: "#7B68EE", }) }) ``` ## Inputs `goalId`, name, description, color, millisecond due date, and owner IDs to add and remove. ClickUp's update endpoint requires the complete update body, including empty owner arrays. Every action accepts an optional static `account` binding. ## Output Returns the updated `ClickUpGoal`. # Update Goal Target Source: https://docs.automate.ax/reference/integrations/clickup/actions/update-goal-target Updates Target progress and records a note. `clickUp.updateGoalTarget` updates Target progress and records a note. ```ts automations/clickup-update-goal-target.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Update Goal Target", () => { onDashboardRun({ title: "Update Goal Target" }) clickUp.updateGoalTarget({ targetId: "target-id", stepsCurrent: 6, note: "Six shipped", }) }) ``` ## Inputs `targetId`, integer `stepsCurrent`, and `note`. Every action accepts an optional static `account` binding. ## Output Returns the updated `ClickUpKeyResult`. # Update List Source: https://docs.automate.ax/reference/integrations/clickup/actions/update-list Updates a ClickUp List. `clickUp.updateList` updates a ClickUp List. ```ts automations/clickup-update-list.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Update List", () => { onDashboardRun({ title: "Update List" }) clickUp.updateList({ listId: "list-id", name: "Ready" }) }) ``` ## Inputs `listId` and non-empty `name`; optional content, Markdown content, assignee, due date, priority, status, or `unsetStatus`. Every action accepts an optional static `account` binding. ## Output Returns the updated `ClickUpList`. # Update Space Source: https://docs.automate.ax/reference/integrations/clickup/actions/update-space Updates a ClickUp Space. `clickUp.updateSpace` updates a ClickUp Space. ```ts automations/clickup-update-space.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Update Space", () => { onDashboardRun({ title: "Update Space" }) clickUp.updateSpace({ spaceId: "space-id", name: "Product Engineering", color: "#7B68EE", private: false, multipleAssignees: true, features: {}, }) }) ``` ## Inputs `spaceId`, name, color, privacy, assignee behavior, and feature settings. ClickUp requires a complete Space update body. Omitted feature settings use ClickUp's enabled defaults. Every action accepts an optional static `account` binding. `adminCanManage` changes whether admins can manage a private Space. ClickUp supports this field only on Enterprise plans, so omit it on other plans. ## Output Returns the updated `ClickUpSpace`. # Update task Source: https://docs.automate.ax/reference/integrations/clickup/actions/update-task Updates task fields, assignees, dates, status, or priority. `clickUp.updateTask` updates task fields, assignees, dates, status, or priority. ```ts automations/clickup-update-task.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Update task", () => { onDashboardRun({ title: "Update task" }) clickUp.updateTask({ taskId: "task-id", status: "in progress", priority: 2 }) }) ``` ## Inputs `taskId` and at least one task field. Assignee, group-assignee, and watcher changes use `{ add, rem }`; priority is `1` through `4` or `null`. You can also move a subtask by passing another `parent` task ID. Every action accepts an optional static `account` binding. ## Output Returns the updated `ClickUpTask`. # Update time entry Source: https://docs.automate.ax/reference/integrations/clickup/actions/update-time-entry Updates a completed ClickUp time entry. `clickUp.updateTimeEntry` updates a completed ClickUp time entry. ```ts automations/clickup-update-time-entry.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("Update time entry", () => { onDashboardRun({ title: "Update time entry" }) clickUp.updateTimeEntry({ workspaceId: "workspace-id", entryId: "entry-id", description: "Implementation and review", tags: [], }) }) ``` ## Inputs `workspaceId`, `entryId`, and `tags`, plus any changed time-entry fields. Each tag requires `name`, `tagFg`, and `tagBg`. Provide `start` and `end` together. `tagAction` accepts `add`, `remove`, or `replace`. Every action accepts an optional static `account` binding. ## Output Returns no value after ClickUp accepts the update. # Authorization and webhooks Source: https://docs.automate.ax/reference/integrations/clickup/authorization-and-webhooks Connect ClickUp with OAuth or a personal token and understand Workspace access, rate limits, pagination, and signed webhooks. ## Connect ClickUp Choose OAuth for shared projects. ClickUp asks you to select the Workspaces the Automate.ax app may access. ClickUp currently issues non-expiring OAuth access tokens and does not publish granular OAuth scopes or a refresh-token flow. Use a personal API token for development or a connection owned by one ClickUp user. Create it in ClickUp under **Settings → Apps**, then paste the complete `pk_...` token into Automate.ax. Automate.ax sends personal tokens directly and OAuth access tokens with ClickUp's required `Bearer` prefix. Both methods act with the connected user's ClickUp permissions. ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { clickUp, clickUpAccount } from "automate.ax/clickup" const operations = clickUpAccount("operations") export default automation("List ClickUp spaces", () => { onDashboardRun({ title: "List ClickUp spaces" }) clickUp.listSpaces({ account: operations, workspaceId: "workspace-id" }) }) ``` ## Workspace IDs and hierarchy ClickUp's API still calls a Workspace a `team` in request paths and some responses. Automate.ax consistently exposes `workspaceId`. Use `clickUp.listWorkspaces()` to find authorized IDs, then traverse Spaces, Folders, and Lists. ## Pagination and timestamps Task pages are zero-based and contain at most 100 tasks. Pass the next numeric `page` until ClickUp reports `lastPage`. Task comments use a paired cursor: pass both `start` and `startId` from `pageInfo`; passing only one is rejected. ClickUp date and duration fields use Unix milliseconds represented as numbers or digit strings unless an action states otherwise. ## Rate limits ClickUp limits requests per access token and Workspace plan. Current published limits are 100 requests per minute for Free Forever, Unlimited, and Business; 1,000 for Business Plus; and 10,000 for Enterprise. A rejected request exposes the provider status and `rateLimitReset` Unix timestamp through `ClickUpApiError`. ## Signed Workspace webhooks Every ClickUp trigger requires a `workspaceId`. Automate.ax combines triggers for the same connected user and Workspace into one provider webhook, updates the provider event set when deployments change, and deletes the webhook after the last subscription is removed. ClickUp returns a unique signing secret for each webhook. Automate.ax encrypts it and verifies `X-Signature` as a hexadecimal HMAC-SHA256 over the exact request body before parsing or ingesting an event. Provider retries deduplicate by `webhookId` and history-item ID; payloads without a history item use a stable body digest. Webhooks belong to the ClickUp user who created them. Replacing the connected account can therefore replace the provider webhook. ClickUp may disable a webhook after repeated delivery failures; reconciliation verifies the remote endpoint, Workspace, and subscribed events before retaining persisted state. # ClickUp Source: https://docs.automate.ax/reference/integrations/clickup/index Manage ClickUp Workspaces, hierarchy, tasks, comments, Custom Fields, time, and Goals, or react to signed Workspace events. ## Exports ```ts theme={null} import { clickUp, clickUpAccount, getClickUpApi } from "automate.ax/clickup" ``` * `clickUp` contains 58 packaged actions and 29 Workspace triggers. * `clickUpAccount("name")` selects a named ClickUp connection. * `getClickUpApi` creates the authenticated API v2 helper for a custom account-backed action. Read [Connect ClickUp and receive signed Workspace events](/reference/integrations/clickup/authorization-and-webhooks) for OAuth, personal tokens, Workspace access, provider rate limits, pagination, and webhook behavior. ## Triggers * [On Workspace event](/reference/integrations/clickup/triggers/on-workspace-event) * [On Folder created](/reference/integrations/clickup/triggers/on-folder-created) * [On Folder deleted](/reference/integrations/clickup/triggers/on-folder-deleted) * [On Folder updated](/reference/integrations/clickup/triggers/on-folder-updated) * [On Goal created](/reference/integrations/clickup/triggers/on-goal-created) * [On Goal deleted](/reference/integrations/clickup/triggers/on-goal-deleted) * [On Goal updated](/reference/integrations/clickup/triggers/on-goal-updated) * [On List created](/reference/integrations/clickup/triggers/on-list-created) * [On List deleted](/reference/integrations/clickup/triggers/on-list-deleted) * [On List updated](/reference/integrations/clickup/triggers/on-list-updated) * [On Space created](/reference/integrations/clickup/triggers/on-space-created) * [On Space deleted](/reference/integrations/clickup/triggers/on-space-deleted) * [On Space updated](/reference/integrations/clickup/triggers/on-space-updated) * [On Target created](/reference/integrations/clickup/triggers/on-target-created) * [On Target deleted](/reference/integrations/clickup/triggers/on-target-deleted) * [On Target updated](/reference/integrations/clickup/triggers/on-target-updated) * [On task assignee updated](/reference/integrations/clickup/triggers/on-task-assignee-updated) * [On task comment posted](/reference/integrations/clickup/triggers/on-task-comment-posted) * [On task comment updated](/reference/integrations/clickup/triggers/on-task-comment-updated) * [On task created](/reference/integrations/clickup/triggers/on-task-created) * [On task deleted](/reference/integrations/clickup/triggers/on-task-deleted) * [On task due date updated](/reference/integrations/clickup/triggers/on-task-due-date-updated) * [On task moved](/reference/integrations/clickup/triggers/on-task-moved) * [On task priority updated](/reference/integrations/clickup/triggers/on-task-priority-updated) * [On task status updated](/reference/integrations/clickup/triggers/on-task-status-updated) * [On task tag updated](/reference/integrations/clickup/triggers/on-task-tag-updated) * [On task time estimate updated](/reference/integrations/clickup/triggers/on-task-time-estimate-updated) * [On task time tracked updated](/reference/integrations/clickup/triggers/on-task-time-tracked-updated) * [On task updated](/reference/integrations/clickup/triggers/on-task-updated) ## Actions * [Create comment reply](/reference/integrations/clickup/actions/create-comment-reply) * [Create folder](/reference/integrations/clickup/actions/create-folder) * [Create Folder List](/reference/integrations/clickup/actions/create-folder-list) * [Create folderless List](/reference/integrations/clickup/actions/create-folderless-list) * [Create Goal](/reference/integrations/clickup/actions/create-goal) * [Create Goal Target](/reference/integrations/clickup/actions/create-goal-target) * [Create Space](/reference/integrations/clickup/actions/create-space) * [Create subtask](/reference/integrations/clickup/actions/create-subtask) * [Create task](/reference/integrations/clickup/actions/create-task) * [Create task comment](/reference/integrations/clickup/actions/create-task-comment) * [Create time entry](/reference/integrations/clickup/actions/create-time-entry) * [Delete comment](/reference/integrations/clickup/actions/delete-comment) * [Delete folder](/reference/integrations/clickup/actions/delete-folder) * [Delete Goal](/reference/integrations/clickup/actions/delete-goal) * [Delete Goal Target](/reference/integrations/clickup/actions/delete-goal-target) * [Delete List](/reference/integrations/clickup/actions/delete-list) * [Delete Space](/reference/integrations/clickup/actions/delete-space) * [Delete task](/reference/integrations/clickup/actions/delete-task) * [Delete time entry](/reference/integrations/clickup/actions/delete-time-entry) * [Get current user](/reference/integrations/clickup/actions/get-current-user) * [Get Folder](/reference/integrations/clickup/actions/get-folder) * [Get Goal](/reference/integrations/clickup/actions/get-goal) * [Get List](/reference/integrations/clickup/actions/get-list) * [Get running time entry](/reference/integrations/clickup/actions/get-running-time-entry) * [Get Space](/reference/integrations/clickup/actions/get-space) * [Get task](/reference/integrations/clickup/actions/get-task) * [Get time entry](/reference/integrations/clickup/actions/get-time-entry) * [Get Workspace](/reference/integrations/clickup/actions/get-workspace) * [List comment replies](/reference/integrations/clickup/actions/list-comment-replies) * [List Folder Custom Fields](/reference/integrations/clickup/actions/list-folder-custom-fields) * [List Lists in a Folder](/reference/integrations/clickup/actions/list-folder-lists) * [List folderless Lists](/reference/integrations/clickup/actions/list-folderless-lists) * [List Folders](/reference/integrations/clickup/actions/list-folders) * [List Goals](/reference/integrations/clickup/actions/list-goals) * [List Custom Fields for a List](/reference/integrations/clickup/actions/list-list-custom-fields) * [List members of a List](/reference/integrations/clickup/actions/list-list-members) * [List Space Custom Fields](/reference/integrations/clickup/actions/list-space-custom-fields) * [List Spaces](/reference/integrations/clickup/actions/list-spaces) * [List task comments](/reference/integrations/clickup/actions/list-task-comments) * [List task members](/reference/integrations/clickup/actions/list-task-members) * [List tasks](/reference/integrations/clickup/actions/list-tasks) * [List time entries](/reference/integrations/clickup/actions/list-time-entries) * [List Workspace Custom Fields](/reference/integrations/clickup/actions/list-workspace-custom-fields) * [List Workspace tasks](/reference/integrations/clickup/actions/list-workspace-tasks) * [List Workspace users](/reference/integrations/clickup/actions/list-workspace-users) * [List Workspaces](/reference/integrations/clickup/actions/list-workspaces) * [Remove task Custom Field](/reference/integrations/clickup/actions/remove-task-custom-field) * [Set task Custom Field](/reference/integrations/clickup/actions/set-task-custom-field) * [Start time entry](/reference/integrations/clickup/actions/start-time-entry) * [Stop time entry](/reference/integrations/clickup/actions/stop-time-entry) * [Update comment](/reference/integrations/clickup/actions/update-comment) * [Update Folder](/reference/integrations/clickup/actions/update-folder) * [Update Goal](/reference/integrations/clickup/actions/update-goal) * [Update Goal Target](/reference/integrations/clickup/actions/update-goal-target) * [Update List](/reference/integrations/clickup/actions/update-list) * [Update Space](/reference/integrations/clickup/actions/update-space) * [Update task](/reference/integrations/clickup/actions/update-task) * [Update time entry](/reference/integrations/clickup/actions/update-time-entry) # On Folder created Source: https://docs.automate.ax/reference/integrations/clickup/triggers/on-folder-created Run an automation when a Folder is created. `clickUp.onFolderCreated` starts an automation when a Folder is created. ```ts automations/clickup-on-folder-created.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("On Folder created", () => { const event = clickUp.onFolderCreated({ workspaceId: "workspace-id" }) sendEmail({ subject: "On Folder created", text: event.event }) }) ``` Provide the ClickUp `workspaceId`. Optional static `account` defaults to the project's ClickUp binding. Automate.ax maintains one signed Workspace webhook and updates its provider event set as triggers change. ## Trigger data Returns a `Signal`. `event` is `folderCreated`; the payload includes `webhookId`, `historyItems`, and applicable `taskId`, `listId`, `folderId`, `spaceId`, `goalId`, or `keyResultId`. Each history item includes its stable ID, date, type, optional field, before and after values, and user. # On Folder deleted Source: https://docs.automate.ax/reference/integrations/clickup/triggers/on-folder-deleted Run an automation when a Folder is deleted. `clickUp.onFolderDeleted` starts an automation when a Folder is deleted. ```ts automations/clickup-on-folder-deleted.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("On Folder deleted", () => { const event = clickUp.onFolderDeleted({ workspaceId: "workspace-id" }) sendEmail({ subject: "On Folder deleted", text: event.event }) }) ``` Provide the ClickUp `workspaceId`. Optional static `account` defaults to the project's ClickUp binding. Automate.ax maintains one signed Workspace webhook and updates its provider event set as triggers change. ## Trigger data Returns a `Signal`. `event` is `folderDeleted`; the payload includes `webhookId`, `historyItems`, and applicable `taskId`, `listId`, `folderId`, `spaceId`, `goalId`, or `keyResultId`. Each history item includes its stable ID, date, type, optional field, before and after values, and user. # On Folder updated Source: https://docs.automate.ax/reference/integrations/clickup/triggers/on-folder-updated Run an automation when a Folder is updated. `clickUp.onFolderUpdated` starts an automation when a Folder is updated. ```ts automations/clickup-on-folder-updated.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("On Folder updated", () => { const event = clickUp.onFolderUpdated({ workspaceId: "workspace-id" }) sendEmail({ subject: "On Folder updated", text: event.event }) }) ``` Provide the ClickUp `workspaceId`. Optional static `account` defaults to the project's ClickUp binding. Automate.ax maintains one signed Workspace webhook and updates its provider event set as triggers change. ## Trigger data Returns a `Signal`. `event` is `folderUpdated`; the payload includes `webhookId`, `historyItems`, and applicable `taskId`, `listId`, `folderId`, `spaceId`, `goalId`, or `keyResultId`. Each history item includes its stable ID, date, type, optional field, before and after values, and user. # On Goal created Source: https://docs.automate.ax/reference/integrations/clickup/triggers/on-goal-created Run an automation when a Goal is created. `clickUp.onGoalCreated` starts an automation when a Goal is created. ```ts automations/clickup-on-goal-created.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("On Goal created", () => { const event = clickUp.onGoalCreated({ workspaceId: "workspace-id" }) sendEmail({ subject: "On Goal created", text: event.event }) }) ``` Provide the ClickUp `workspaceId`. Optional static `account` defaults to the project's ClickUp binding. Automate.ax maintains one signed Workspace webhook and updates its provider event set as triggers change. ## Trigger data Returns a `Signal`. `event` is `goalCreated`; the payload includes `webhookId`, `historyItems`, and applicable `taskId`, `listId`, `folderId`, `spaceId`, `goalId`, or `keyResultId`. Each history item includes its stable ID, date, type, optional field, before and after values, and user. # On Goal deleted Source: https://docs.automate.ax/reference/integrations/clickup/triggers/on-goal-deleted Run an automation when a Goal is deleted. `clickUp.onGoalDeleted` starts an automation when a Goal is deleted. ```ts automations/clickup-on-goal-deleted.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("On Goal deleted", () => { const event = clickUp.onGoalDeleted({ workspaceId: "workspace-id" }) sendEmail({ subject: "On Goal deleted", text: event.event }) }) ``` Provide the ClickUp `workspaceId`. Optional static `account` defaults to the project's ClickUp binding. Automate.ax maintains one signed Workspace webhook and updates its provider event set as triggers change. ## Trigger data Returns a `Signal`. `event` is `goalDeleted`; the payload includes `webhookId`, `historyItems`, and applicable `taskId`, `listId`, `folderId`, `spaceId`, `goalId`, or `keyResultId`. Each history item includes its stable ID, date, type, optional field, before and after values, and user. # On Goal updated Source: https://docs.automate.ax/reference/integrations/clickup/triggers/on-goal-updated Run an automation when a Goal is updated. `clickUp.onGoalUpdated` starts an automation when a Goal is updated. ```ts automations/clickup-on-goal-updated.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("On Goal updated", () => { const event = clickUp.onGoalUpdated({ workspaceId: "workspace-id" }) sendEmail({ subject: "On Goal updated", text: event.event }) }) ``` Provide the ClickUp `workspaceId`. Optional static `account` defaults to the project's ClickUp binding. Automate.ax maintains one signed Workspace webhook and updates its provider event set as triggers change. ## Trigger data Returns a `Signal`. `event` is `goalUpdated`; the payload includes `webhookId`, `historyItems`, and applicable `taskId`, `listId`, `folderId`, `spaceId`, `goalId`, or `keyResultId`. Each history item includes its stable ID, date, type, optional field, before and after values, and user. # On List created Source: https://docs.automate.ax/reference/integrations/clickup/triggers/on-list-created Run an automation when a List is created. `clickUp.onListCreated` starts an automation when a List is created. ```ts automations/clickup-on-list-created.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("On List created", () => { const event = clickUp.onListCreated({ workspaceId: "workspace-id" }) sendEmail({ subject: "On List created", text: event.event }) }) ``` Provide the ClickUp `workspaceId`. Optional static `account` defaults to the project's ClickUp binding. Automate.ax maintains one signed Workspace webhook and updates its provider event set as triggers change. ## Trigger data Returns a `Signal`. `event` is `listCreated`; the payload includes `webhookId`, `historyItems`, and applicable `taskId`, `listId`, `folderId`, `spaceId`, `goalId`, or `keyResultId`. Each history item includes its stable ID, date, type, optional field, before and after values, and user. # On List deleted Source: https://docs.automate.ax/reference/integrations/clickup/triggers/on-list-deleted Run an automation when a List is deleted. `clickUp.onListDeleted` starts an automation when a List is deleted. ```ts automations/clickup-on-list-deleted.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("On List deleted", () => { const event = clickUp.onListDeleted({ workspaceId: "workspace-id" }) sendEmail({ subject: "On List deleted", text: event.event }) }) ``` Provide the ClickUp `workspaceId`. Optional static `account` defaults to the project's ClickUp binding. Automate.ax maintains one signed Workspace webhook and updates its provider event set as triggers change. ## Trigger data Returns a `Signal`. `event` is `listDeleted`; the payload includes `webhookId`, `historyItems`, and applicable `taskId`, `listId`, `folderId`, `spaceId`, `goalId`, or `keyResultId`. Each history item includes its stable ID, date, type, optional field, before and after values, and user. # On List updated Source: https://docs.automate.ax/reference/integrations/clickup/triggers/on-list-updated Run an automation when a List is updated. `clickUp.onListUpdated` starts an automation when a List is updated. ```ts automations/clickup-on-list-updated.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("On List updated", () => { const event = clickUp.onListUpdated({ workspaceId: "workspace-id" }) sendEmail({ subject: "On List updated", text: event.event }) }) ``` Provide the ClickUp `workspaceId`. Optional static `account` defaults to the project's ClickUp binding. Automate.ax maintains one signed Workspace webhook and updates its provider event set as triggers change. ## Trigger data Returns a `Signal`. `event` is `listUpdated`; the payload includes `webhookId`, `historyItems`, and applicable `taskId`, `listId`, `folderId`, `spaceId`, `goalId`, or `keyResultId`. Each history item includes its stable ID, date, type, optional field, before and after values, and user. # On Space created Source: https://docs.automate.ax/reference/integrations/clickup/triggers/on-space-created Run an automation when a Space is created. `clickUp.onSpaceCreated` starts an automation when a Space is created. ```ts automations/clickup-on-space-created.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("On Space created", () => { const event = clickUp.onSpaceCreated({ workspaceId: "workspace-id" }) sendEmail({ subject: "On Space created", text: event.event }) }) ``` Provide the ClickUp `workspaceId`. Optional static `account` defaults to the project's ClickUp binding. Automate.ax maintains one signed Workspace webhook and updates its provider event set as triggers change. ## Trigger data Returns a `Signal`. `event` is `spaceCreated`; the payload includes `webhookId`, `historyItems`, and applicable `taskId`, `listId`, `folderId`, `spaceId`, `goalId`, or `keyResultId`. Each history item includes its stable ID, date, type, optional field, before and after values, and user. # On Space deleted Source: https://docs.automate.ax/reference/integrations/clickup/triggers/on-space-deleted Run an automation when a Space is deleted. `clickUp.onSpaceDeleted` starts an automation when a Space is deleted. ```ts automations/clickup-on-space-deleted.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("On Space deleted", () => { const event = clickUp.onSpaceDeleted({ workspaceId: "workspace-id" }) sendEmail({ subject: "On Space deleted", text: event.event }) }) ``` Provide the ClickUp `workspaceId`. Optional static `account` defaults to the project's ClickUp binding. Automate.ax maintains one signed Workspace webhook and updates its provider event set as triggers change. ## Trigger data Returns a `Signal`. `event` is `spaceDeleted`; the payload includes `webhookId`, `historyItems`, and applicable `taskId`, `listId`, `folderId`, `spaceId`, `goalId`, or `keyResultId`. Each history item includes its stable ID, date, type, optional field, before and after values, and user. # On Space updated Source: https://docs.automate.ax/reference/integrations/clickup/triggers/on-space-updated Run an automation when a Space is updated. `clickUp.onSpaceUpdated` starts an automation when a Space is updated. ```ts automations/clickup-on-space-updated.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("On Space updated", () => { const event = clickUp.onSpaceUpdated({ workspaceId: "workspace-id" }) sendEmail({ subject: "On Space updated", text: event.event }) }) ``` Provide the ClickUp `workspaceId`. Optional static `account` defaults to the project's ClickUp binding. Automate.ax maintains one signed Workspace webhook and updates its provider event set as triggers change. ## Trigger data Returns a `Signal`. `event` is `spaceUpdated`; the payload includes `webhookId`, `historyItems`, and applicable `taskId`, `listId`, `folderId`, `spaceId`, `goalId`, or `keyResultId`. Each history item includes its stable ID, date, type, optional field, before and after values, and user. # On Target created Source: https://docs.automate.ax/reference/integrations/clickup/triggers/on-target-created Run an automation when a Goal Target is created. `clickUp.onTargetCreated` starts an automation when a Goal Target is created. ```ts automations/clickup-on-target-created.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("On Target created", () => { const event = clickUp.onTargetCreated({ workspaceId: "workspace-id" }) sendEmail({ subject: "On Target created", text: event.event }) }) ``` Provide the ClickUp `workspaceId`. Optional static `account` defaults to the project's ClickUp binding. Automate.ax maintains one signed Workspace webhook and updates its provider event set as triggers change. ## Trigger data Returns a `Signal`. `event` is `keyResultCreated`; the payload includes `webhookId`, `historyItems`, and applicable `taskId`, `listId`, `folderId`, `spaceId`, `goalId`, or `keyResultId`. Each history item includes its stable ID, date, type, optional field, before and after values, and user. # On Target deleted Source: https://docs.automate.ax/reference/integrations/clickup/triggers/on-target-deleted Run an automation when a Goal Target is deleted. `clickUp.onTargetDeleted` starts an automation when a Goal Target is deleted. ```ts automations/clickup-on-target-deleted.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("On Target deleted", () => { const event = clickUp.onTargetDeleted({ workspaceId: "workspace-id" }) sendEmail({ subject: "On Target deleted", text: event.event }) }) ``` Provide the ClickUp `workspaceId`. Optional static `account` defaults to the project's ClickUp binding. Automate.ax maintains one signed Workspace webhook and updates its provider event set as triggers change. ## Trigger data Returns a `Signal`. `event` is `keyResultDeleted`; the payload includes `webhookId`, `historyItems`, and applicable `taskId`, `listId`, `folderId`, `spaceId`, `goalId`, or `keyResultId`. Each history item includes its stable ID, date, type, optional field, before and after values, and user. # On Target updated Source: https://docs.automate.ax/reference/integrations/clickup/triggers/on-target-updated Run an automation when a Goal Target is updated. `clickUp.onTargetUpdated` starts an automation when a Goal Target is updated. ```ts automations/clickup-on-target-updated.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("On Target updated", () => { const event = clickUp.onTargetUpdated({ workspaceId: "workspace-id" }) sendEmail({ subject: "On Target updated", text: event.event }) }) ``` Provide the ClickUp `workspaceId`. Optional static `account` defaults to the project's ClickUp binding. Automate.ax maintains one signed Workspace webhook and updates its provider event set as triggers change. ## Trigger data Returns a `Signal`. `event` is `keyResultUpdated`; the payload includes `webhookId`, `historyItems`, and applicable `taskId`, `listId`, `folderId`, `spaceId`, `goalId`, or `keyResultId`. Each history item includes its stable ID, date, type, optional field, before and after values, and user. # On task assignee updated Source: https://docs.automate.ax/reference/integrations/clickup/triggers/on-task-assignee-updated Run an automation when a task's assignees change. `clickUp.onTaskAssigneeUpdated` starts an automation when a task's assignees change. ```ts automations/clickup-on-task-assignee-updated.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("On task assignee updated", () => { const event = clickUp.onTaskAssigneeUpdated({ workspaceId: "workspace-id" }) sendEmail({ subject: "On task assignee updated", text: event.event }) }) ``` Provide the ClickUp `workspaceId`. Optional static `account` defaults to the project's ClickUp binding. Automate.ax maintains one signed Workspace webhook and updates its provider event set as triggers change. ## Trigger data Returns a `Signal`. `event` is `taskAssigneeUpdated`; the payload includes `webhookId`, `historyItems`, and applicable `taskId`, `listId`, `folderId`, `spaceId`, `goalId`, or `keyResultId`. Each history item includes its stable ID, date, type, optional field, before and after values, and user. # On task comment posted Source: https://docs.automate.ax/reference/integrations/clickup/triggers/on-task-comment-posted Run an automation when a task comment is posted. `clickUp.onTaskCommentPosted` starts an automation when a task comment is posted. ```ts automations/clickup-on-task-comment-posted.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("On task comment posted", () => { const event = clickUp.onTaskCommentPosted({ workspaceId: "workspace-id" }) sendEmail({ subject: "On task comment posted", text: event.event }) }) ``` Provide the ClickUp `workspaceId`. Optional static `account` defaults to the project's ClickUp binding. Automate.ax maintains one signed Workspace webhook and updates its provider event set as triggers change. ## Trigger data Returns a `Signal`. `event` is `taskCommentPosted`; the payload includes `webhookId`, `historyItems`, and applicable `taskId`, `listId`, `folderId`, `spaceId`, `goalId`, or `keyResultId`. Each history item includes its stable ID, date, type, optional field, before and after values, and user. # On task comment updated Source: https://docs.automate.ax/reference/integrations/clickup/triggers/on-task-comment-updated Run an automation when a task comment is updated. `clickUp.onTaskCommentUpdated` starts an automation when a task comment is updated. ```ts automations/clickup-on-task-comment-updated.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("On task comment updated", () => { const event = clickUp.onTaskCommentUpdated({ workspaceId: "workspace-id" }) sendEmail({ subject: "On task comment updated", text: event.event }) }) ``` Provide the ClickUp `workspaceId`. Optional static `account` defaults to the project's ClickUp binding. Automate.ax maintains one signed Workspace webhook and updates its provider event set as triggers change. ## Trigger data Returns a `Signal`. `event` is `taskCommentUpdated`; the payload includes `webhookId`, `historyItems`, and applicable `taskId`, `listId`, `folderId`, `spaceId`, `goalId`, or `keyResultId`. Each history item includes its stable ID, date, type, optional field, before and after values, and user. # On task created Source: https://docs.automate.ax/reference/integrations/clickup/triggers/on-task-created Run an automation when a task or subtask is created. `clickUp.onTaskCreated` starts an automation when a task or subtask is created. ```ts automations/clickup-on-task-created.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("On task created", () => { const event = clickUp.onTaskCreated({ workspaceId: "workspace-id" }) sendEmail({ subject: "On task created", text: event.event }) }) ``` Provide the ClickUp `workspaceId`. Optional static `account` defaults to the project's ClickUp binding. Automate.ax maintains one signed Workspace webhook and updates its provider event set as triggers change. ## Trigger data Returns a `Signal`. `event` is `taskCreated`; the payload includes `webhookId`, `historyItems`, and applicable `taskId`, `listId`, `folderId`, `spaceId`, `goalId`, or `keyResultId`. Each history item includes its stable ID, date, type, optional field, before and after values, and user. # On task deleted Source: https://docs.automate.ax/reference/integrations/clickup/triggers/on-task-deleted Run an automation when a task is deleted. `clickUp.onTaskDeleted` starts an automation when a task is deleted. ```ts automations/clickup-on-task-deleted.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("On task deleted", () => { const event = clickUp.onTaskDeleted({ workspaceId: "workspace-id" }) sendEmail({ subject: "On task deleted", text: event.event }) }) ``` Provide the ClickUp `workspaceId`. Optional static `account` defaults to the project's ClickUp binding. Automate.ax maintains one signed Workspace webhook and updates its provider event set as triggers change. ## Trigger data Returns a `Signal`. `event` is `taskDeleted`; the payload includes `webhookId`, `historyItems`, and applicable `taskId`, `listId`, `folderId`, `spaceId`, `goalId`, or `keyResultId`. Each history item includes its stable ID, date, type, optional field, before and after values, and user. # On task due date updated Source: https://docs.automate.ax/reference/integrations/clickup/triggers/on-task-due-date-updated Run an automation when a task's due date changes. `clickUp.onTaskDueDateUpdated` starts an automation when a task's due date changes. ```ts automations/clickup-on-task-due-date-updated.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("On task due date updated", () => { const event = clickUp.onTaskDueDateUpdated({ workspaceId: "workspace-id" }) sendEmail({ subject: "On task due date updated", text: event.event }) }) ``` Provide the ClickUp `workspaceId`. Optional static `account` defaults to the project's ClickUp binding. Automate.ax maintains one signed Workspace webhook and updates its provider event set as triggers change. ## Trigger data Returns a `Signal`. `event` is `taskDueDateUpdated`; the payload includes `webhookId`, `historyItems`, and applicable `taskId`, `listId`, `folderId`, `spaceId`, `goalId`, or `keyResultId`. Each history item includes its stable ID, date, type, optional field, before and after values, and user. # On task moved Source: https://docs.automate.ax/reference/integrations/clickup/triggers/on-task-moved Run an automation when a task moves between locations. `clickUp.onTaskMoved` starts an automation when a task moves between locations. ```ts automations/clickup-on-task-moved.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("On task moved", () => { const event = clickUp.onTaskMoved({ workspaceId: "workspace-id" }) sendEmail({ subject: "On task moved", text: event.event }) }) ``` Provide the ClickUp `workspaceId`. Optional static `account` defaults to the project's ClickUp binding. Automate.ax maintains one signed Workspace webhook and updates its provider event set as triggers change. ## Trigger data Returns a `Signal`. `event` is `taskMoved`; the payload includes `webhookId`, `historyItems`, and applicable `taskId`, `listId`, `folderId`, `spaceId`, `goalId`, or `keyResultId`. Each history item includes its stable ID, date, type, optional field, before and after values, and user. # On task priority updated Source: https://docs.automate.ax/reference/integrations/clickup/triggers/on-task-priority-updated Run an automation when a task's priority changes. `clickUp.onTaskPriorityUpdated` starts an automation when a task's priority changes. ```ts automations/clickup-on-task-priority-updated.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("On task priority updated", () => { const event = clickUp.onTaskPriorityUpdated({ workspaceId: "workspace-id" }) sendEmail({ subject: "On task priority updated", text: event.event }) }) ``` Provide the ClickUp `workspaceId`. Optional static `account` defaults to the project's ClickUp binding. Automate.ax maintains one signed Workspace webhook and updates its provider event set as triggers change. ## Trigger data Returns a `Signal`. `event` is `taskPriorityUpdated`; the payload includes `webhookId`, `historyItems`, and applicable `taskId`, `listId`, `folderId`, `spaceId`, `goalId`, or `keyResultId`. Each history item includes its stable ID, date, type, optional field, before and after values, and user. # On task status updated Source: https://docs.automate.ax/reference/integrations/clickup/triggers/on-task-status-updated Run an automation when a task's status changes. `clickUp.onTaskStatusUpdated` starts an automation when a task's status changes. ```ts automations/clickup-on-task-status-updated.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("On task status updated", () => { const event = clickUp.onTaskStatusUpdated({ workspaceId: "workspace-id" }) sendEmail({ subject: "On task status updated", text: event.event }) }) ``` Provide the ClickUp `workspaceId`. Optional static `account` defaults to the project's ClickUp binding. Automate.ax maintains one signed Workspace webhook and updates its provider event set as triggers change. ## Trigger data Returns a `Signal`. `event` is `taskStatusUpdated`; the payload includes `webhookId`, `historyItems`, and applicable `taskId`, `listId`, `folderId`, `spaceId`, `goalId`, or `keyResultId`. Each history item includes its stable ID, date, type, optional field, before and after values, and user. # On task tag updated Source: https://docs.automate.ax/reference/integrations/clickup/triggers/on-task-tag-updated Run an automation when a task's tags change. `clickUp.onTaskTagUpdated` starts an automation when a task's tags change. ```ts automations/clickup-on-task-tag-updated.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("On task tag updated", () => { const event = clickUp.onTaskTagUpdated({ workspaceId: "workspace-id" }) sendEmail({ subject: "On task tag updated", text: event.event }) }) ``` Provide the ClickUp `workspaceId`. Optional static `account` defaults to the project's ClickUp binding. Automate.ax maintains one signed Workspace webhook and updates its provider event set as triggers change. ## Trigger data Returns a `Signal`. `event` is `taskTagUpdated`; the payload includes `webhookId`, `historyItems`, and applicable `taskId`, `listId`, `folderId`, `spaceId`, `goalId`, or `keyResultId`. Each history item includes its stable ID, date, type, optional field, before and after values, and user. # On task time estimate updated Source: https://docs.automate.ax/reference/integrations/clickup/triggers/on-task-time-estimate-updated Run an automation when a task's estimate changes. `clickUp.onTaskTimeEstimateUpdated` starts an automation when a task's estimate changes. ```ts automations/clickup-on-task-time-estimate-updated.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("On task time estimate updated", () => { const event = clickUp.onTaskTimeEstimateUpdated({ workspaceId: "workspace-id", }) sendEmail({ subject: "On task time estimate updated", text: event.event }) }) ``` Provide the ClickUp `workspaceId`. Optional static `account` defaults to the project's ClickUp binding. Automate.ax maintains one signed Workspace webhook and updates its provider event set as triggers change. ## Trigger data Returns a `Signal`. `event` is `taskTimeEstimateUpdated`; the payload includes `webhookId`, `historyItems`, and applicable `taskId`, `listId`, `folderId`, `spaceId`, `goalId`, or `keyResultId`. Each history item includes its stable ID, date, type, optional field, before and after values, and user. # On task time tracked updated Source: https://docs.automate.ax/reference/integrations/clickup/triggers/on-task-time-tracked-updated Run an automation when tracked time on a task changes. `clickUp.onTaskTimeTrackedUpdated` starts an automation when tracked time on a task changes. ```ts automations/clickup-on-task-time-tracked-updated.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("On task time tracked updated", () => { const event = clickUp.onTaskTimeTrackedUpdated({ workspaceId: "workspace-id", }) sendEmail({ subject: "On task time tracked updated", text: event.event }) }) ``` Provide the ClickUp `workspaceId`. Optional static `account` defaults to the project's ClickUp binding. Automate.ax maintains one signed Workspace webhook and updates its provider event set as triggers change. ## Trigger data Returns a `Signal`. `event` is `taskTimeTrackedUpdated`; the payload includes `webhookId`, `historyItems`, and applicable `taskId`, `listId`, `folderId`, `spaceId`, `goalId`, or `keyResultId`. Each history item includes its stable ID, date, type, optional field, before and after values, and user. # On task updated Source: https://docs.automate.ax/reference/integrations/clickup/triggers/on-task-updated Run an automation when a task is updated. `clickUp.onTaskUpdated` starts an automation when a task is updated. ```ts automations/clickup-on-task-updated.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("On task updated", () => { const event = clickUp.onTaskUpdated({ workspaceId: "workspace-id" }) sendEmail({ subject: "On task updated", text: event.event }) }) ``` Provide the ClickUp `workspaceId`. Optional static `account` defaults to the project's ClickUp binding. Automate.ax maintains one signed Workspace webhook and updates its provider event set as triggers change. ## Trigger data Returns a `Signal`. `event` is `taskUpdated`; the payload includes `webhookId`, `historyItems`, and applicable `taskId`, `listId`, `folderId`, `spaceId`, `goalId`, or `keyResultId`. Each history item includes its stable ID, date, type, optional field, before and after values, and user. # On Workspace event Source: https://docs.automate.ax/reference/integrations/clickup/triggers/on-workspace-event Run an automation when all ClickUp events in the selected Workspace. `clickUp.onWorkspaceEvent` starts an automation when all ClickUp events in the selected Workspace. ```ts automations/clickup-on-workspace-event.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { clickUp } from "automate.ax/clickup" export default automation("On Workspace event", () => { const event = clickUp.onWorkspaceEvent({ workspaceId: "workspace-id" }) sendEmail({ subject: "On Workspace event", text: event.event }) }) ``` Provide the ClickUp `workspaceId`. Optional static `account` defaults to the project's ClickUp binding. Automate.ax maintains one signed Workspace webhook and updates its provider event set as triggers change. ## Trigger data Returns a `Signal`. `event` is one of ClickUp's supported webhook names; the payload includes `webhookId`, `historyItems`, and applicable `taskId`, `listId`, `folderId`, `spaceId`, `goalId`, or `keyResultId`. History items preserve the stable ID, date, type, field, parent, data, source, before and after values, and user that ClickUp supplied. # Create comment Source: https://docs.automate.ax/reference/integrations/close/actions/create-comment Create a comment on a Close object. `close.createComment` create a comment on a Close object. ```ts automations/close-create-comment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Create comment", () => { onDashboardRun({ title: "Create comment" }) close.createComment({ objectId: "acti_abc123", body: "

Ready for review.

", }) }) ``` ## Inputs Provide the ID of an object that Close supports for comments, such as a note activity. Close determines which object types support comments and reuses the object's existing comment thread or creates one. The `body` must be Close rich text wrapped in `...`. Optional second argument `{ account }` selects a named Close binding. ## Output Returns the created `CloseComment` and its `threadId`. # Create contact Source: https://docs.automate.ax/reference/integrations/close/actions/create-contact Create a contact on a Close lead. `close.createContact` create a contact on a Close lead. ```ts automations/close-create-contact.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Create contact", () => { onDashboardRun({ title: "Create contact" }) close.createContact({ leadId: "lead_abc123", name: "Ada Lovelace", emails: [{ email: "ada@acme.example", type: "office" }], }) }) ``` ## Inputs Provide `leadId` to attach the contact to a lead. Optional fields include `name`, `title`, `timezone`, emails, phones, URLs, and `customFields` keyed by `cf_...`. Optional second argument `{ account }` selects a named Close binding. ## Output Returns the created `CloseContact`. # Create email Source: https://docs.automate.ax/reference/integrations/close/actions/create-email Create, send, schedule, or log a Close email. `close.createEmail` create, send, schedule, or log a Close email. ```ts automations/close-create-email.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Create email", () => { onDashboardRun({ title: "Create email" }) close.createEmail({ leadId: "lead_abc123", status: "outbox", sender: "Ada ", to: ["buyer@example.com"], subject: "Next steps", bodyText: "Here are the next steps.", }) }) ``` ## Inputs Provide `leadId` and `status`: `draft`, `scheduled`, `outbox`, `sent`, `inbox`, or `error`. Scheduled email requires `dateScheduled`; inbox, scheduled, outbox, and error require `sender`. `sendIn` accepts 0–59 seconds. You may include recipients, content, template, reply, follow-up, user, account, and uploaded Close attachments. Optional second argument `{ account }` selects a named Close binding. ## Output Returns the created `CloseEmail`. `outbox` sends, `scheduled` queues, `draft` saves, and `sent` or `inbox` logs an external message. # Create lead Source: https://docs.automate.ax/reference/integrations/close/actions/create-lead Create a Close lead with contacts and custom fields. `close.createLead` create a Close lead with contacts and custom fields. ```ts automations/close-create-lead.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Create lead", () => { onDashboardRun({ title: "Create lead" }) close.createLead({ name: "Acme", source: "Website", contacts: [{ name: "Ada", emails: [{ email: "ada@acme.example" }] }], }) }) ``` ## Inputs All fields are optional. Provide `name`, `description`, `url`, `source`, addresses, nested contacts, or `customFields` keyed by `cf_...`. Choose either `status` or `statusId`, not both. Optional second argument `{ account }` selects a named Close binding. ## Output Returns the created `CloseLead`, including Close-generated IDs and timestamps. Nested contacts are created with the lead. # Create note Source: https://docs.automate.ax/reference/integrations/close/actions/create-note Create a Close note activity. `close.createNote` create a Close note activity. ```ts automations/close-create-note.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Create note", () => { onDashboardRun({ title: "Create note" }) close.createNote({ leadId: "lead_abc123", title: "Discovery", note: "Budget confirmed.", pinned: true, }) }) ``` ## Inputs Provide `leadId`. Optional fields include `contactId`, `activityAt`, `title`, `note`, `noteHtml`, `pinned`, and Close file attachments. Attachment URLs must begin with `https://app.close.com/go/file/`. Optional second argument `{ account }` selects a named Close binding. ## Output Returns the created `CloseNote`. # Create opportunity Source: https://docs.automate.ax/reference/integrations/close/actions/create-opportunity Create a Close opportunity. `close.createOpportunity` creates a Close opportunity. ```ts automations/close-create-opportunity.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Create opportunity", () => { onDashboardRun({ title: "Create opportunity" }) close.createOpportunity({ leadId: "lead_abc123", statusId: "stat_active", value: 50000, valuePeriod: "annual", confidence: 75, }) }) ``` ## Inputs Set `leadId` to add the opportunity to an existing lead. If you omit it, Close creates an Untitled lead. `pipelineId` selects a pipeline and `statusId` selects one of its statuses. You can also set attachments, contact, owner, notes, custom fields, dates, value, value period, and 0–100 confidence. Optional second argument `{ account }` selects a named Close binding. ## Output Returns the created `CloseOpportunity`. # Create SMS Source: https://docs.automate.ax/reference/integrations/close/actions/create-sms Create, send, schedule, or log a Close SMS. `close.createSms` creates, sends, schedules, or logs a Close SMS. ```ts automations/close-create-sms.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Create SMS", () => { onDashboardRun({ title: "Create SMS" }) close.createSms({ status: "outbox", leadId: "lead_abc123", contactId: "cont_abc123", localPhone: "+14155550100", remotePhone: "+14155550199", text: "Your demo starts in 10 minutes.", }) }) ``` ## Inputs Provide `status`: `draft`, `scheduled`, `outbox`, `sent`, `inbox`, or `error`. `scheduled` requires `dateScheduled`; both `scheduled` and `outbox` require `localPhone`. `sendIn` accepts 0–59 seconds, and `sendToInbox` controls whether Close adds the sent message to the inbox. Optional fields cover lead/contact, direction, local, and remote E.164 numbers, source, text, user, template, timing, and Close-uploaded attachments with supported MIME types. Optional second argument `{ account }` selects a named Close binding. ## Output Returns the created `CloseSms`. Use `source: "External"` when logging a message sent outside Close. # Create task Source: https://docs.automate.ax/reference/integrations/close/actions/create-task Create a lead or outgoing-call Close task. `close.createTask` create a lead or outgoing-call Close task. ```ts automations/close-create-task.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Create task", () => { onDashboardRun({ title: "Create task" }) close.createTask({ type: "lead", leadId: "lead_abc123", text: "Qualify this lead", priority: "high", }) }) ``` ## Inputs For `type: "lead"`, provide `leadId` and non-empty `text`. For `type: "outgoing_call"`, provide `leadId` and `contactId`. Optional fields include assignment, dates, completion, priority (`high` or `medium`), and dateless state. Optional second argument `{ account }` selects a named Close binding. ## Output Returns the created `CloseTask`. Close reports outgoing-call webhook events under the `task.outbound_call` event subtype. # Delete call Source: https://docs.automate.ax/reference/integrations/close/actions/delete-call Delete a Close call activity. `close.deleteCall` permanently deletes a call activity. ```ts automations/delete-close-call.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Delete Close call", () => { onDashboardRun({ title: "Delete Close call" }) close.deleteCall({ callId: "acti_abc123" }) }) ``` Provide `callId`; optional second argument `{ account }` selects a named Close binding. Returns `{ deleted: true, callId }` after Close accepts the deletion. # Delete comment Source: https://docs.automate.ax/reference/integrations/close/actions/delete-comment Remove a Close comment. `close.deleteComment` remove a Close comment. ```ts automations/close-delete-comment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Delete comment", () => { onDashboardRun({ title: "Delete comment" }) close.deleteComment({ commentId: "comm_abc123" }) }) ``` ## Inputs Provide the `commentId` to remove. Optional second argument `{ account }` selects a named Close binding. ## Output Returns `{ deleted: true, commentId }` after Close accepts the removal. # Delete contact Source: https://docs.automate.ax/reference/integrations/close/actions/delete-contact Permanently delete a Close contact. `close.deleteContact` permanently delete a Close contact. ```ts automations/close-delete-contact.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Delete contact", () => { onDashboardRun({ title: "Delete contact" }) close.deleteContact({ contactId: "cont_abc123" }) }) ``` ## Inputs Provide the `contactId` to remove. Optional second argument `{ account }` selects a named Close binding. ## Output Returns `{ deleted: true, contactId }` after Close accepts the permanent deletion. # Delete email Source: https://docs.automate.ax/reference/integrations/close/actions/delete-email Delete a Close email activity. `close.deleteEmail` permanently deletes an email activity. ```ts automations/delete-close-email.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Delete Close email", () => { onDashboardRun({ title: "Delete Close email" }) close.deleteEmail({ emailId: "acti_abc123" }) }) ``` Provide `emailId`; optional second argument `{ account }` selects a named Close binding. Returns `{ deleted: true, emailId }` after Close accepts the deletion. # Delete lead Source: https://docs.automate.ax/reference/integrations/close/actions/delete-lead Permanently delete a Close lead. `close.deleteLead` permanently delete a Close lead. ```ts automations/close-delete-lead.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Delete lead", () => { onDashboardRun({ title: "Delete lead" }) close.deleteLead({ leadId: "lead_abc123" }) }) ``` ## Inputs Provide the `leadId` to remove. Optional second argument `{ account }` selects a named Close binding. ## Output Returns `{ deleted: true, leadId }` after Close accepts the deletion. This permanently removes the lead and its child records. # Delete note Source: https://docs.automate.ax/reference/integrations/close/actions/delete-note Permanently delete a Close note. `close.deleteNote` permanently delete a Close note. ```ts automations/close-delete-note.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Delete note", () => { onDashboardRun({ title: "Delete note" }) close.deleteNote({ noteId: "acti_abc123" }) }) ``` ## Inputs Provide the note activity `noteId`. Optional second argument `{ account }` selects a named Close binding. ## Output Returns `{ deleted: true, noteId }` after Close accepts the deletion. # Delete opportunity Source: https://docs.automate.ax/reference/integrations/close/actions/delete-opportunity Permanently delete a Close opportunity. `close.deleteOpportunity` permanently delete a Close opportunity. ```ts automations/close-delete-opportunity.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Delete opportunity", () => { onDashboardRun({ title: "Delete opportunity" }) close.deleteOpportunity({ opportunityId: "oppo_abc123" }) }) ``` ## Inputs Provide the `opportunityId` to remove. Optional second argument `{ account }` selects a named Close binding. ## Output Returns `{ deleted: true, opportunityId }` after Close accepts the permanent deletion. # Delete sequence subscription Source: https://docs.automate.ax/reference/integrations/close/actions/delete-sequence-subscription Remove a contact from a Close sequence. `close.deleteSequenceSubscription` remove a contact from a Close sequence. ```ts automations/close-delete-sequence-subscription.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Delete sequence subscription", () => { onDashboardRun({ title: "Delete sequence subscription" }) close.deleteSequenceSubscription({ subscriptionId: "sub_abc123" }) }) ``` ## Inputs Provide the `subscriptionId` to remove. Optional second argument `{ account }` selects a named Close binding. ## Output Returns `{ deleted: true, subscriptionId }`. Future sequence steps for that enrollment do not run. # Delete SMS Source: https://docs.automate.ax/reference/integrations/close/actions/delete-sms Delete a Close SMS activity. `close.deleteSms` permanently deletes an SMS activity. ```ts automations/delete-close-sms.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Delete Close SMS", () => { onDashboardRun({ title: "Delete Close SMS" }) close.deleteSms({ smsId: "acti_abc123" }) }) ``` Provide `smsId`; optional second argument `{ account }` selects a named Close binding. Returns `{ deleted: true, smsId }` after Close accepts the deletion. # Delete task Source: https://docs.automate.ax/reference/integrations/close/actions/delete-task Permanently delete a Close task. `close.deleteTask` permanently delete a Close task. ```ts automations/close-delete-task.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Delete task", () => { onDashboardRun({ title: "Delete task" }) close.deleteTask({ taskId: "task_abc123" }) }) ``` ## Inputs Provide the `taskId` to remove. Optional second argument `{ account }` selects a named Close binding. ## Output Returns `{ deleted: true, taskId }` after Close accepts the deletion. # Get call Source: https://docs.automate.ax/reference/integrations/close/actions/get-call Get one Close call activity. `close.getCall` retrieves a call by its activity ID. ```ts automations/get-close-call.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Get Close call", () => { onDashboardRun({ title: "Get Close call" }) const call = close.getCall({ callId: "acti_abc123" }) // Send the Close call recording to the reviewer. }) ``` Provide `callId`; optional second argument `{ account }` selects a named Close binding. Returns the `CloseCall` activity. # Get comment Source: https://docs.automate.ax/reference/integrations/close/actions/get-comment Retrieve one Close comment. `close.getComment` retrieve one Close comment. ```ts automations/close-get-comment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Get comment", () => { onDashboardRun({ title: "Get comment" }) close.getComment({ commentId: "comm_abc123" }) }) ``` ## Inputs Provide the stable Close `commentId`. Optional second argument `{ account }` selects a named Close binding. ## Output Returns a `CloseComment`. Close returns 404 when the comment is absent or the account cannot see its lead. # Get contact Source: https://docs.automate.ax/reference/integrations/close/actions/get-contact Retrieve one Close contact by ID. `close.getContact` retrieve one Close contact by ID. ```ts automations/close-get-contact.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Get contact", () => { onDashboardRun({ title: "Get contact" }) close.getContact({ contactId: "cont_abc123" }) }) ``` ## Inputs Provide the stable Close `contactId`. Optional second argument `{ account }` selects a named Close binding. ## Output Returns a `CloseContact` with email addresses, phone numbers, URLs, custom fields, and its parent lead ID. # Get current user Source: https://docs.automate.ax/reference/integrations/close/actions/get-current-user Retrieve the connected Close user. `close.getCurrentUser` retrieve the connected Close user. ```ts automations/close-get-current-user.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Get current user", () => { onDashboardRun({ title: "Get current user" }) close.getCurrentUser({}) }) ``` ## Inputs No action-specific input is required. Optional second argument `{ account }` selects a named Close binding. ## Output Returns a `CloseUser` with identity, timestamps, image, and `organizationIds` for the connected account. # Get email Source: https://docs.automate.ax/reference/integrations/close/actions/get-email Get one Close email activity. `close.getEmail` retrieves an email activity by ID. ```ts automations/get-close-email.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Get Close email", () => { onDashboardRun({ title: "Get Close email" }) const email = close.getEmail({ emailId: "acti_abc123" }) // Add the Close email to the thread archive. }) ``` Provide `emailId`; optional second argument `{ account }` selects a named Close binding. Returns the `CloseEmail` activity, including recipients, message content, delivery state, sequence context, and attachments. # Get lead Source: https://docs.automate.ax/reference/integrations/close/actions/get-lead Retrieve one Close lead by ID. `close.getLead` retrieve one Close lead by ID. ```ts automations/close-get-lead.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Get lead", () => { onDashboardRun({ title: "Get lead" }) close.getLead({ leadId: "lead_abc123" }) }) ``` ## Inputs Provide the stable Close `leadId`. Optional second argument `{ account }` selects a named Close binding. ## Output Returns a `CloseLead` with status, addresses, custom fields, timestamps, and stable contact IDs. # Get note Source: https://docs.automate.ax/reference/integrations/close/actions/get-note Retrieve one Close note activity. `close.getNote` retrieve one Close note activity. ```ts automations/close-get-note.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Get note", () => { onDashboardRun({ title: "Get note" }) close.getNote({ noteId: "acti_abc123" }) }) ``` ## Inputs Provide the note activity `noteId`. Optional second argument `{ account }` selects a named Close binding. ## Output Returns a `CloseNote` with plain and HTML content, attachments, pinning, lead/contact references, and timestamps. # Get opportunity Source: https://docs.automate.ax/reference/integrations/close/actions/get-opportunity Retrieve one Close opportunity by ID. `close.getOpportunity` retrieve one Close opportunity by ID. ```ts automations/close-get-opportunity.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Get opportunity", () => { onDashboardRun({ title: "Get opportunity" }) close.getOpportunity({ opportunityId: "oppo_abc123" }) }) ``` ## Inputs Provide the stable Close `opportunityId`. Optional second argument `{ account }` selects a named Close binding. ## Output Returns a `CloseOpportunity` with value, confidence, owner, lead, pipeline status, win/loss dates, and custom fields. # Get sequence Source: https://docs.automate.ax/reference/integrations/close/actions/get-sequence Retrieve one Close sequence and its steps. `close.getSequence` retrieve one Close sequence and its steps. ```ts automations/close-get-sequence.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Get sequence", () => { onDashboardRun({ title: "Get sequence" }) close.getSequence({ sequenceId: "seq_abc123" }) }) ``` ## Inputs Provide the stable Close `sequenceId`. Optional second argument `{ account }` selects a named Close binding. ## Output Returns a `CloseSequence` with typed call and email steps, weekly schedule ranges, and subscription counts by status when Close includes them. # Get sequence subscription Source: https://docs.automate.ax/reference/integrations/close/actions/get-sequence-subscription Get one Close sequence enrollment. `close.getSequenceSubscription` retrieves one contact's sequence enrollment. ```ts automations/get-close-sequence-subscription.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Get Close sequence subscription", () => { onDashboardRun({ title: "Get Close sequence subscription" }) const subscription = close.getSequenceSubscription({ subscriptionId: "sub_abc123", }) // Route the Close sequence subscription by status. }) ``` Provide `subscriptionId`; optional second argument `{ account }` selects a named Close binding. Returns the `CloseSequenceSubscription`, including sender, contact, sequence, start date, and current status. # Get SMS Source: https://docs.automate.ax/reference/integrations/close/actions/get-sms Get one Close SMS activity. `close.getSms` retrieves an SMS activity by ID. ```ts automations/get-close-sms.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Get Close SMS", () => { onDashboardRun({ title: "Get Close SMS" }) const sms = close.getSms({ smsId: "acti_abc123" }) // Send the Close SMS message to the support inbox. }) ``` Provide `smsId`; optional second argument `{ account }` selects a named Close binding. Returns the `CloseSms` activity. # Get task Source: https://docs.automate.ax/reference/integrations/close/actions/get-task Retrieve one Close task by ID. `close.getTask` retrieve one Close task by ID. ```ts automations/close-get-task.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Get task", () => { onDashboardRun({ title: "Get task" }) close.getTask({ taskId: "task_abc123" }) }) ``` ## Inputs Provide the stable Close `taskId`. Optional second argument `{ account }` selects a named Close binding. ## Output Returns a `CloseTask`, including its subtype, assignment, due dates, completion state, lead, and contact. # List activities Source: https://docs.automate.ax/reference/integrations/close/actions/list-activities List activity across Close communication and CRM activity types. `close.listActivities` lists activity across Close communication and CRM activity types. ```ts automations/close-list-activities.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("List activities", () => { onDashboardRun({ title: "List activities" }) close.listActivities({ leadId: "lead_abc123", type: "Email" }) }) ``` ## Inputs Optionally filter by `leadId`, `contactId`, `userId`, and provider activity `type`. `limit` defaults to `100`; `skip` defaults to `0`. Optional second argument `{ account }` selects a named Close binding. ## Output Returns `{ data: CloseActivity[], hasMore: boolean }`. `type` discriminates calls, emails, SMS, notes, meetings, and the other documented activity families. Common activity types retain their subtype-specific fields. # List calls Source: https://docs.automate.ax/reference/integrations/close/actions/list-calls List and filter Close call activities. `close.listCalls` lists call activities without widening them to generic activities. ```ts automations/list-close-calls.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("List Close calls", () => { onDashboardRun({ title: "List Close calls" }) const calls = close.listCalls({ leadIds: ["lead_abc123"], limit: 50 }) // Filter the Close calls or continue pagination. }) ``` ## Inputs Filter by `ids`, `leadIds`, `contactIds`, `userIds`, creation time, or activity time. `limit` defaults to 100 and `skip` to 0. Optional second argument `{ account }` selects a named Close binding. ## Output Returns a page of `CloseCall` records and `hasMore`. # List comments Source: https://docs.automate.ax/reference/integrations/close/actions/list-comments List comments attached to a Close object. `close.listComments` list comments attached to a Close object. ```ts automations/close-list-comments.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("List comments", () => { onDashboardRun({ title: "List comments" }) close.listComments({ objectId: "acti_abc123" }) }) ``` ## Inputs Provide the ID of an object that Close supports for comments, such as a note activity. Close determines which object types support comments. `limit` defaults to `100`; `skip` defaults to `0`. Optional second argument `{ account }` selects a named Close binding. ## Output Returns `{ data: CloseComment[], hasMore: boolean }`, including lead and thread IDs, mentions, removal state, authors, and timestamps. # List contacts Source: https://docs.automate.ax/reference/integrations/close/actions/list-contacts List Close contacts. `close.listContacts` list Close contacts. ```ts automations/close-list-contacts.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("List contacts", () => { onDashboardRun({ title: "List contacts" }) close.listContacts({ leadId: "lead_abc123", limit: 100 }) }) ``` ## Inputs Optionally filter by `leadId`. `limit` defaults to `100` and accepts 1–200; `skip` defaults to `0`. Optional second argument `{ account }` selects a named Close binding. ## Output Returns `{ data: CloseContact[], hasMore: boolean }`. # List emails Source: https://docs.automate.ax/reference/integrations/close/actions/list-emails List and filter Close email activities. `close.listEmails` lists Close email activities with typed message fields. ```ts automations/list-close-emails.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("List Close emails", () => { onDashboardRun({ title: "List Close emails" }) const emails = close.listEmails({ contactIds: ["cont_abc123"] }) // Filter the Close emails or continue pagination. }) ``` Filter by activity, lead, contact, user, creation time, or activity time. Pagination defaults to 100 results from offset 0. Optional second argument `{ account }` selects a named binding. Returns a page of `CloseEmail` records and `hasMore`. # List lead statuses Source: https://docs.automate.ax/reference/integrations/close/actions/list-lead-statuses List stages that can be assigned to Close leads. `close.listLeadStatuses` list stages that can be assigned to Close leads. ```ts automations/close-list-lead-statuses.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("List lead statuses", () => { onDashboardRun({ title: "List lead statuses" }) close.listLeadStatuses({}) }) ``` ## Inputs No action-specific input is required. Optional second argument `{ account }` selects a named Close binding. ## Output Returns `{ data: CloseLeadStatus[], hasMore: boolean }`, including stable IDs paired with their labels. # List leads Source: https://docs.automate.ax/reference/integrations/close/actions/list-leads List Close leads with offset pagination. `close.listLeads` list Close leads with offset pagination. ```ts automations/close-list-leads.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("List leads", () => { onDashboardRun({ title: "List leads" }) close.listLeads({ limit: 50, skip: 0 }) }) ``` ## Inputs `limit` is an integer from 1 to 200 and defaults to `100`. `skip` is a nonnegative integer and defaults to `0`. Optional second argument `{ account }` selects a named Close binding. ## Output Returns `{ data: CloseLead[], hasMore: boolean }`. Use `skip + data.length` for the next page when `hasMore` is true. # List opportunities Source: https://docs.automate.ax/reference/integrations/close/actions/list-opportunities List Close opportunities with common CRM filters. `close.listOpportunities` list Close opportunities with common CRM filters. ```ts automations/close-list-opportunities.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("List opportunities", () => { onDashboardRun({ title: "List opportunities" }) close.listOpportunities({ statusType: "active", userId: "user_abc123" }) }) ``` ## Inputs Optionally filter by `leadId`, `statusId`, `statusType` (`active`, `won`, or `lost`), and `userId`. `limit` defaults to `100`; `skip` defaults to `0`. Optional second argument `{ account }` selects a named Close binding. ## Output Returns the opportunity page with `data`, `hasMore`, `totalResults`, counts by value period, and provider totals for raw, annualized, and confidence-adjusted values. Each total also includes Close's formatted currency string, or `null` when Close has no value to format. Currency values are provider integer units. # List opportunity statuses Source: https://docs.automate.ax/reference/integrations/close/actions/list-opportunity-statuses List Close opportunity stages across pipelines. `close.listOpportunityStatuses` list Close opportunity stages across pipelines. ```ts automations/close-list-opportunity-statuses.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("List opportunity statuses", () => { onDashboardRun({ title: "List opportunity statuses" }) close.listOpportunityStatuses({}) }) ``` ## Inputs No action-specific input is required. Optional second argument `{ account }` selects a named Close binding. ## Output Returns `{ data: CloseOpportunityStatus[], hasMore: boolean }` with pipeline IDs and `active`, `won`, or `lost` types. # List pipelines Source: https://docs.automate.ax/reference/integrations/close/actions/list-pipelines List Close opportunity pipelines and statuses. `close.listPipelines` list Close opportunity pipelines and statuses. ```ts automations/close-list-pipelines.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("List pipelines", () => { onDashboardRun({ title: "List pipelines" }) close.listPipelines({}) }) ``` ## Inputs No action-specific input is required. Optional second argument `{ account }` selects a named Close binding. ## Output Returns `{ data: ClosePipeline[], hasMore: boolean }`. Each pipeline includes ordered active, won, and lost statuses. # List sequence subscriptions Source: https://docs.automate.ax/reference/integrations/close/actions/list-sequence-subscriptions List Close sequence enrollments. `close.listSequenceSubscriptions` list Close sequence enrollments. ```ts automations/close-list-sequence-subscriptions.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("List sequence subscriptions", () => { onDashboardRun({ title: "List sequence subscriptions" }) close.listSequenceSubscriptions({ sequenceId: "seq_abc123", }) }) ``` ## Inputs Provide at least one of `sequenceId`, `contactId`, or `leadId`. Close requires this filter for sequence-subscription lists. `limit` defaults to `100`; `skip` defaults to `0`. Optional second argument `{ account }` selects a named Close binding. ## Output Returns `{ data: CloseSequenceSubscription[], hasMore: boolean }`. # List sequences Source: https://docs.automate.ax/reference/integrations/close/actions/list-sequences List Close sales sequences and workflows. `close.listSequences` list Close sales sequences and workflows. ```ts automations/close-list-sequences.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("List sequences", () => { onDashboardRun({ title: "List sequences" }) close.listSequences({ limit: 100 }) }) ``` ## Inputs `limit` defaults to `100` and accepts 1–200. `skip` defaults to `0`. Optional second argument `{ account }` selects a named Close binding. ## Output Returns `{ data: CloseSequence[], hasMore: boolean }`, including sequence status, steps, schedule, and time zone. # List SMS messages Source: https://docs.automate.ax/reference/integrations/close/actions/list-sms-messages List and filter Close SMS activities. `close.listSmsMessages` lists Close SMS activities with typed message and phone fields. ```ts automations/list-close-sms.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("List Close SMS", () => { onDashboardRun({ title: "List Close SMS" }) const messages = close.listSmsMessages({ leadIds: ["lead_abc123"] }) // Filter the Close SMS messages or continue pagination. }) ``` Filter by activity, lead, contact, user, creation time, or activity time. Pagination defaults to 100 results from offset 0. Optional second argument `{ account }` selects a named binding. Returns a page of `CloseSms` records and `hasMore`. # List tasks Source: https://docs.automate.ax/reference/integrations/close/actions/list-tasks List and filter Close tasks. `close.listTasks` list and filter Close tasks. ```ts automations/close-list-tasks.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("List tasks", () => { onDashboardRun({ title: "List tasks" }) close.listTasks({ assignedTo: "user_abc123", complete: false, view: "inbox" }) }) ``` ## Inputs Filter by `assignedTo`, `complete`, `leadId`, provider task `type`, or `view` (`inbox`, `future`, or `archive`). `type` defaults to `all`, so the action returns every documented task subtype instead of only lead tasks. `limit` defaults to `100`; `skip` defaults to `0`. Optional second argument `{ account }` selects a named Close binding. ## Output Returns `{ data: CloseTask[], hasMore: boolean }` as a typed union of lead, email, call, voicemail, opportunity, SMS, and sequence call tasks. # List users Source: https://docs.automate.ax/reference/integrations/close/actions/list-users List users in the connected Close organization. `close.listUsers` list users in the connected Close organization. ```ts automations/close-list-users.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("List users", () => { onDashboardRun({ title: "List users" }) close.listUsers({ limit: 100 }) }) ``` ## Inputs `limit` defaults to `100` and accepts 1–200. `skip` defaults to `0`. Optional second argument `{ account }` selects a named Close binding. ## Output Returns `{ data: CloseUser[], hasMore: boolean }` for sales reps and other organization users. # Log call Source: https://docs.automate.ax/reference/integrations/close/actions/log-call Log a call handled outside Close. `close.logCall` log a call handled outside Close. ```ts automations/close-log-call.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Log call", () => { onDashboardRun({ title: "Log call" }) close.logCall({ leadId: "lead_abc123", contactId: "cont_abc123", direction: "outbound", phone: "+14155550100", duration: 240, status: "completed", }) }) ``` ## Inputs Provide the available lead, contact, direction, phone, duration in seconds, outcome, notes, recording URL, user, and activity time. `status` defaults to `completed`. The action always sends Close's `External` source. Optional second argument `{ account }` selects a named Close binding. ## Output Returns the created `CloseCall` activity. # Merge leads Source: https://docs.automate.ax/reference/integrations/close/actions/merge-leads Merge a source Close lead into a destination lead. `close.mergeLeads` merge a source Close lead into a destination lead. ```ts automations/close-merge-leads.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Merge leads", () => { onDashboardRun({ title: "Merge leads" }) close.mergeLeads({ sourceLeadId: "lead_duplicate", destinationLeadId: "lead_canonical", maxPolls: 60, pollInterval: "2s", }) }) ``` ## Inputs Provide distinct `sourceLeadId` and `destinationLeadId` values. Close moves the source lead's child records into the destination. Close performs merges asynchronously. Automate.ax submits the merge once, then checks its `LeadMerge` activity after durable delays until Close reports completion. `maxPolls` defaults to `60` and accepts integers from `1` to `120`. `pollInterval` defaults to `"2s"` and accepts a duration string or milliseconds. The action fails with Close's merge error or when the polling budget is exhausted. Optional second argument `{ account }` selects a named Close binding. ## Output Returns `{ merged: true, sourceLeadId, destinationLeadId }` only after Close reports the merge as completed. The source lead no longer remains as an independent record, so dependent actions can safely use `destinationLeadId`. # Subscribe contact to sequence Source: https://docs.automate.ax/reference/integrations/close/actions/subscribe-contact-to-sequence Enroll a Close contact in a sequence. `close.subscribeContactToSequence` enroll a Close contact in a sequence. ```ts automations/close-subscribe-contact-to-sequence.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Subscribe contact to sequence", () => { onDashboardRun({ title: "Subscribe contact to sequence" }) close.subscribeContactToSequence({ sequenceId: "seq_abc123", contactId: "cont_abc123", contactEmail: "buyer@example.com", senderEmail: "rep@example.com", }) }) ``` ## Inputs Provide `sequenceId`, `contactId`, and `contactEmail`. Optionally set `startDate`, sender account/email/name, and the user IDs assigned to call steps. Optional second argument `{ account }` selects a named Close binding. ## Output Returns the created `CloseSequenceSubscription`. Close stops or changes the subscription as replies, goals, errors, and workflow rules occur. # Update call Source: https://docs.automate.ax/reference/integrations/close/actions/update-call Update a Close call activity. `close.updateCall` updates a call logged outside Close's calling system. ```ts automations/update-close-call.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Update Close call", () => { onDashboardRun({ title: "Update Close call" }) close.updateCall({ callId: "acti_abc123", note: "Reached the decision maker", outcomeId: "outcome_abc123", }) }) ``` Provide `callId` and at least one mutable call field, such as notes, duration, outcome, recording, status, or owner. Close restricts updates to external call activities. Optional second argument `{ account }` selects a named binding. Returns the updated `CloseCall`. # Update comment Source: https://docs.automate.ax/reference/integrations/close/actions/update-comment Replace a Close comment body. `close.updateComment` replace a Close comment body. ```ts automations/close-update-comment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Update comment", () => { onDashboardRun({ title: "Update comment" }) close.updateComment({ commentId: "comm_abc123", body: "

Approved.

", }) }) ``` ## Inputs Provide `commentId` and the complete replacement Close rich-text `body`, wrapped in `...`. Optional second argument `{ account }` selects a named Close binding. ## Output Returns the updated `CloseComment`. # Update contact Source: https://docs.automate.ax/reference/integrations/close/actions/update-contact Update a Close contact. `close.updateContact` update a Close contact. ```ts automations/close-update-contact.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Update contact", () => { onDashboardRun({ title: "Update contact" }) close.updateContact({ contactId: "cont_abc123", title: "VP Sales" }) }) ``` ## Inputs Provide `contactId` and at least one mutable contact field. Set nullable fields to `null` to clear them. Optional second argument `{ account }` selects a named Close binding. ## Output Returns the updated `CloseContact`. # Update email Source: https://docs.automate.ax/reference/integrations/close/actions/update-email Update a Close email activity. `close.updateEmail` updates a draft or logged Close email. ```ts automations/update-close-email.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Update Close email", () => { onDashboardRun({ title: "Update Close email" }) close.updateEmail({ emailId: "acti_abc123", subject: "Updated proposal", bodyText: "Here is the revised proposal.", }) }) ``` Provide `emailId` and at least one documented mutable email field. You can update recipients, content, attachments, account, follow-up sequence fields, sender, template, status, or owner. Optional second argument `{ account }` selects a named binding. Returns the updated `CloseEmail`. # Update lead Source: https://docs.automate.ax/reference/integrations/close/actions/update-lead Update a Close lead. `close.updateLead` update a Close lead. ```ts automations/close-update-lead.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Update lead", () => { onDashboardRun({ title: "Update lead" }) close.updateLead({ leadId: "lead_abc123", statusId: "stat_qualified" }) }) ``` ## Inputs Provide `leadId` and at least one mutable lead field. Choose either `status` or `statusId`, not both. Arrays replace the provider value supplied for that field. Optional second argument `{ account }` selects a named Close binding. ## Output Returns the updated `CloseLead`. # Update note Source: https://docs.automate.ax/reference/integrations/close/actions/update-note Update a Close note activity. `close.updateNote` update a Close note activity. ```ts automations/close-update-note.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Update note", () => { onDashboardRun({ title: "Update note" }) close.updateNote({ noteId: "acti_abc123", note: "Budget and timeline confirmed.", }) }) ``` ## Inputs Provide `noteId` and at least one mutable note field. Set nullable fields to `null` to clear them. Optional second argument `{ account }` selects a named Close binding. ## Output Returns the updated `CloseNote`. # Update opportunity Source: https://docs.automate.ax/reference/integrations/close/actions/update-opportunity Update a Close opportunity. `close.updateOpportunity` updates a Close opportunity. ```ts automations/close-update-opportunity.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Update opportunity", () => { onDashboardRun({ title: "Update opportunity" }) close.updateOpportunity({ opportunityId: "oppo_abc123", statusId: "stat_won", dateWon: new Date("2026-08-23T12:00:00Z"), }) }) ``` ## Inputs Provide `opportunityId` and at least one mutable field: attachments, confidence, contact, custom fields, won date, notes, status, owner, value, or value period. Choose `status` or `statusId`, not both. `dateWon` accepts a `Date` or offset ISO timestamp. An opportunity cannot be moved to another lead. Optional second argument `{ account }` selects a named Close binding. ## Output Returns the updated `CloseOpportunity`. # Update sequence subscription Source: https://docs.automate.ax/reference/integrations/close/actions/update-sequence-subscription Pause or resume a Close sequence subscription. `close.updateSequenceSubscription` pause or resume a Close sequence subscription. ```ts automations/close-update-sequence-subscription.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Update sequence subscription", () => { onDashboardRun({ title: "Update sequence subscription" }) close.updateSequenceSubscription({ subscriptionId: "sub_abc123", status: "paused", }) }) ``` ## Inputs Provide `subscriptionId` and set `status` to `active` or `paused`. Optional second argument `{ account }` selects a named Close binding. ## Output Returns the updated `CloseSequenceSubscription`. # Update SMS Source: https://docs.automate.ax/reference/integrations/close/actions/update-sms Update a Close SMS activity. `close.updateSms` modifies a draft Close SMS or cancels a scheduled or outbox message that Close has not sent yet. ```ts automations/update-close-sms.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Update Close SMS", () => { onDashboardRun({ title: "Update Close SMS" }) close.updateSms({ smsId: "acti_abc123", text: "Updated message" }) }) ``` Close only permits message fields such as `text` to be modified while an SMS is a draft. Provide `smsId` and at least one documented mutable SMS field. Set `status` to `scheduled` with `dateScheduled` to send a draft later, or set it to `outbox` to send immediately. A scheduled or outbox message that Close has not sent yet can be canceled by setting `status` back to `draft`. Close can reuse the draft's existing local phone number, so you don't need to repeat `localPhone` in the update. Optional second argument `{ account }` selects a named binding. Returns the updated `CloseSms`. # Update task Source: https://docs.automate.ax/reference/integrations/close/actions/update-task Update or complete a Close task. `close.updateTask` update or complete a Close task. ```ts automations/close-update-task.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Update task", () => { onDashboardRun({ title: "Update task" }) close.updateTask({ taskId: "task_abc123", isComplete: true }) }) ``` ## Inputs Provide `taskId` and at least one of assignment, contact, date, due date, completion, dateless state, lead, priority, or text. Optional second argument `{ account }` selects a named Close binding. ## Output Returns the updated `CloseTask`. Setting `isComplete` to `true` also produces the task-completed webhook event. # Upload file Source: https://docs.automate.ax/reference/integrations/close/actions/upload-file Upload a file for a Close attachment. `close.uploadFile` uploads a `Blob` to Close and returns the temporary URL required by attachment inputs. ```ts automations/upload-close-file.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { close } from "automate.ax/close" export default automation("Upload Close file", () => { onDashboardRun({ title: "Upload Close file" }) const attachment = close.uploadFile({ file: new Blob(["Proposal"], { type: "text/plain" }), filename: "proposal.txt", }) close.createNote({ leadId: "lead_abc123", attachments: [attachment] }) }) ``` ## Inputs Provide `file` and `filename`. Set `contentType` when the `Blob` has no media type. Optional second argument `{ account }` selects a named Close binding. ## Output Returns `url`, `filename`, `contentType`, and `size`. Close upload URLs expire after 24 hours, so use the result in an attachment promptly. # Close Source: https://docs.automate.ax/reference/integrations/close/index Use Close OAuth or single-organization API keys for CRM records, tasks, sequences, and Smart View changes. ```ts automations/qualify-close-leads.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("Qualify Close leads", () => { const lead = close.onLeadCreated() close.createTask({ type: "lead", leadId: lead.data.id, text: "Qualify this lead", }) }) ``` Connect Close with OAuth or a Close API key. OAuth requests `all.full_access` and `offline_access`; API keys are scoped by Close to one user and organization. You can select a named binding with the optional second argument `{ account }` on actions or the `account` trigger option. List actions use offset pagination: `limit` defaults to 100 and `skip` defaults to 0. Close dates become JavaScript `Date` values, provider keys use public TypeScript field names, and custom fields appear under `customFields` using their `cf_...` IDs. Close Smart View definition triggers use provider webhooks. Lead entry and exit triggers maintain a durable per-account membership baseline because Close does not emit native membership events. They support structured lead Smart Views with up to 10,000 results and emit only changes observed after the initial baseline. ## Exports ```ts theme={null} import { close, closeAccount, getCloseApi } from "automate.ax/close" ``` * `close` contains the packaged Close actions and triggers. * `closeAccount("name")` selects a named Close connection. * `getCloseApi` creates the authenticated Close API helper for a custom account-backed action. ## Triggers * [On Close event](/reference/integrations/close/triggers/on-close-event) * [On Close Smart View created](/reference/integrations/close/triggers/on-close-smart-view-created) * [On Close Smart View updated](/reference/integrations/close/triggers/on-close-smart-view-updated) * [On Close lead entered Smart View](/reference/integrations/close/triggers/on-close-lead-entered-smart-view) * [On Close lead exited Smart View](/reference/integrations/close/triggers/on-close-lead-exited-smart-view) * [On Close call answered](/reference/integrations/close/triggers/on-close-call-answered) * [On Close call completed](/reference/integrations/close/triggers/on-close-call-completed) * [On Close email received](/reference/integrations/close/triggers/on-close-email-received) * [On Close email sent](/reference/integrations/close/triggers/on-close-email-sent) * [On Close SMS received](/reference/integrations/close/triggers/on-close-sms-received) * [On Close SMS sent](/reference/integrations/close/triggers/on-close-sms-sent) * [On Close meeting scheduled](/reference/integrations/close/triggers/on-close-meeting-scheduled) * [On Close meeting started](/reference/integrations/close/triggers/on-close-meeting-started) * [On Close meeting completed](/reference/integrations/close/triggers/on-close-meeting-completed) * [On Close meeting canceled](/reference/integrations/close/triggers/on-close-meeting-canceled) * [On Close comment created](/reference/integrations/close/triggers/on-close-comment-created) * [On Close comment updated](/reference/integrations/close/triggers/on-close-comment-updated) * [On Close comment deleted](/reference/integrations/close/triggers/on-close-comment-deleted) * [On Close sequence subscription created](/reference/integrations/close/triggers/on-close-sequence-subscription-created) * [On Close sequence subscription updated](/reference/integrations/close/triggers/on-close-sequence-subscription-updated) * [On Close sequence subscription paused](/reference/integrations/close/triggers/on-close-sequence-subscription-paused) * [On Close sequence subscription resumed](/reference/integrations/close/triggers/on-close-sequence-subscription-resumed) * [On Close sequence subscription finished](/reference/integrations/close/triggers/on-close-sequence-subscription-finished) * [On Close sequence subscription goal reached](/reference/integrations/close/triggers/on-close-sequence-subscription-goal-reached) * [On Close sequence subscription errored](/reference/integrations/close/triggers/on-close-sequence-subscription-errored) * [On Close sequence subscription deleted](/reference/integrations/close/triggers/on-close-sequence-subscription-deleted) * [On Close lead created](/reference/integrations/close/triggers/on-close-lead-created) * [On Close lead updated](/reference/integrations/close/triggers/on-close-lead-updated) * [On Close lead deleted](/reference/integrations/close/triggers/on-close-lead-deleted) * [On Close lead merged](/reference/integrations/close/triggers/on-close-lead-merged) * [On Close contact created](/reference/integrations/close/triggers/on-close-contact-created) * [On Close contact updated](/reference/integrations/close/triggers/on-close-contact-updated) * [On Close contact deleted](/reference/integrations/close/triggers/on-close-contact-deleted) * [On Close opportunity created](/reference/integrations/close/triggers/on-close-opportunity-created) * [On Close opportunity updated](/reference/integrations/close/triggers/on-close-opportunity-updated) * [On Close opportunity won](/reference/integrations/close/triggers/on-close-opportunity-won) * [On Close opportunity lost](/reference/integrations/close/triggers/on-close-opportunity-lost) * [On Close opportunity deleted](/reference/integrations/close/triggers/on-close-opportunity-deleted) * [On Close task created](/reference/integrations/close/triggers/on-close-task-created) * [On Close task updated](/reference/integrations/close/triggers/on-close-task-updated) * [On Close task completed](/reference/integrations/close/triggers/on-close-task-completed) * [On Close task deleted](/reference/integrations/close/triggers/on-close-task-deleted) ## Actions * [List leads](/reference/integrations/close/actions/list-leads) * [Get lead](/reference/integrations/close/actions/get-lead) * [Create lead](/reference/integrations/close/actions/create-lead) * [Update lead](/reference/integrations/close/actions/update-lead) * [Merge leads](/reference/integrations/close/actions/merge-leads) * [Delete lead](/reference/integrations/close/actions/delete-lead) * [List contacts](/reference/integrations/close/actions/list-contacts) * [Get contact](/reference/integrations/close/actions/get-contact) * [Create contact](/reference/integrations/close/actions/create-contact) * [Update contact](/reference/integrations/close/actions/update-contact) * [Delete contact](/reference/integrations/close/actions/delete-contact) * [List opportunities](/reference/integrations/close/actions/list-opportunities) * [Get opportunity](/reference/integrations/close/actions/get-opportunity) * [Create opportunity](/reference/integrations/close/actions/create-opportunity) * [Update opportunity](/reference/integrations/close/actions/update-opportunity) * [Delete opportunity](/reference/integrations/close/actions/delete-opportunity) * [List tasks](/reference/integrations/close/actions/list-tasks) * [Get task](/reference/integrations/close/actions/get-task) * [Create task](/reference/integrations/close/actions/create-task) * [Update task](/reference/integrations/close/actions/update-task) * [Delete task](/reference/integrations/close/actions/delete-task) * [List activities](/reference/integrations/close/actions/list-activities) * [Upload file](/reference/integrations/close/actions/upload-file) * [Get note](/reference/integrations/close/actions/get-note) * [Create note](/reference/integrations/close/actions/create-note) * [Update note](/reference/integrations/close/actions/update-note) * [Delete note](/reference/integrations/close/actions/delete-note) * [List calls](/reference/integrations/close/actions/list-calls) * [Get call](/reference/integrations/close/actions/get-call) * [Log call](/reference/integrations/close/actions/log-call) * [Update call](/reference/integrations/close/actions/update-call) * [Delete call](/reference/integrations/close/actions/delete-call) * [List emails](/reference/integrations/close/actions/list-emails) * [Get email](/reference/integrations/close/actions/get-email) * [Create email](/reference/integrations/close/actions/create-email) * [Update email](/reference/integrations/close/actions/update-email) * [Delete email](/reference/integrations/close/actions/delete-email) * [List SMS messages](/reference/integrations/close/actions/list-sms-messages) * [Get SMS](/reference/integrations/close/actions/get-sms) * [Create SMS](/reference/integrations/close/actions/create-sms) * [Update SMS](/reference/integrations/close/actions/update-sms) * [Delete SMS](/reference/integrations/close/actions/delete-sms) * [List comments](/reference/integrations/close/actions/list-comments) * [Get comment](/reference/integrations/close/actions/get-comment) * [Create comment](/reference/integrations/close/actions/create-comment) * [Update comment](/reference/integrations/close/actions/update-comment) * [Delete comment](/reference/integrations/close/actions/delete-comment) * [List sequences](/reference/integrations/close/actions/list-sequences) * [Get sequence](/reference/integrations/close/actions/get-sequence) * [List sequence subscriptions](/reference/integrations/close/actions/list-sequence-subscriptions) * [Get sequence subscription](/reference/integrations/close/actions/get-sequence-subscription) * [Subscribe contact to sequence](/reference/integrations/close/actions/subscribe-contact-to-sequence) * [Update sequence subscription](/reference/integrations/close/actions/update-sequence-subscription) * [Delete sequence subscription](/reference/integrations/close/actions/delete-sequence-subscription) * [Get current user](/reference/integrations/close/actions/get-current-user) * [List users](/reference/integrations/close/actions/list-users) * [List lead statuses](/reference/integrations/close/actions/list-lead-statuses) * [List pipelines](/reference/integrations/close/actions/list-pipelines) * [List opportunity statuses](/reference/integrations/close/actions/list-opportunity-statuses) # On Close call answered Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-call-answered Run when a Close call is answered. `close.onCallAnswered` starts an automation when Close reports an answered call. ```ts automations/on-close-call-answered.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close call answered", () => { const event = close.onCallAnswered() // Start the answered Close call follow-up. }) ``` Optional static `account` selects a named Close binding. Returns the shared [Close event envelope](/reference/integrations/close/triggers/on-close-event#trigger-data) with a `CloseCall` in `data`. # On Close call completed Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-call-completed Run when a Close call completes. `close.onCallCompleted` starts an automation when a Close call completes. ```ts automations/on-close-call-completed.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close call completed", () => { const event = close.onCallCompleted() // Record the completed Close call outcome. }) ``` Optional static `account` selects a named Close binding. Returns the Close event envelope with a `CloseCall` in `data`. # On Close comment created Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-comment-created Run when Close creates a comment. `close.onCommentCreated` starts an automation for new Close comments. ```ts automations/on-close-comment-created.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close comment created", () => { const event = close.onCommentCreated() // Notify the lead owner about the new Close comment. }) ``` Optional static `account` selects a named binding. Returns the Close event envelope with a `CloseComment` in `data`. # On Close comment deleted Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-comment-deleted Run when Close permanently deletes a comment during thread cleanup. `close.onCommentDeleted` starts an automation when Close permanently deletes a comment during comment-thread cleanup. Close reports ordinary user and API removals through `close.onCommentUpdated` instead. ```ts automations/on-close-comment-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close comment deleted", () => { const event = close.onCommentDeleted() // Remove state tied to the deleted Close comment. }) ``` Optional static `account` selects a named binding. `data` is `null`; use `objectId`, `leadId`, and `previousData` from the Close event envelope. Use `close.onCommentUpdated` for ordinary removals, where `data.body` is `null`. # On Close comment updated Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-comment-updated Run when Close updates a comment. `close.onCommentUpdated` starts an automation when a Close comment body changes or a user removes the comment. Close reports user removal as an update with `data.body` set to `null`; permanent deletion during comment-thread cleanup uses `close.onCommentDeleted` instead. ```ts automations/on-close-comment-updated.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close comment updated", () => { const event = close.onCommentUpdated() // Sync changes from the updated Close comment. }) ``` Optional static `account` selects a named binding. Returns the Close event envelope with the current comment snapshot in `data` and previous changed values in `previousData`. `data.body` is `null` for a removed comment. # On Close contact created Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-contact-created Run when Close creates a contact. `close.onContactCreated` run when Close creates a contact. ```ts automations/on-close-contact-created.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close contact created", () => { const event = close.onContactCreated() // Queue the new Close contact for enrichment. }) ``` Optional static `account` selects a named Close binding; the project binding is the default. Automate.ax creates and maintains the Close webhook and verifies each delivery with Close's signing secret. Returns a `CloseEvent` whose `data` is the created `CloseContact`. The contact's `leadId` identifies its parent lead. All semantic events preserve the shared [Close event envelope](/reference/integrations/close/triggers/on-close-event#trigger-data). # On Close contact deleted Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-contact-deleted Run when Close deletes a contact. `close.onContactDeleted` run when Close deletes a contact. ```ts automations/on-close-contact-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close contact deleted", () => { const event = close.onContactDeleted() // Remove state tied to the deleted Close contact. }) ``` Optional static `account` selects a named Close binding; the project binding is the default. Automate.ax creates and maintains the Close webhook and verifies each delivery with Close's signing secret. Returns a `CloseEvent` whose `data` is `null`. Use `objectId` for the deleted contact ID. All semantic events preserve the shared [Close event envelope](/reference/integrations/close/triggers/on-close-event#trigger-data). # On Close contact updated Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-contact-updated Run when Close updates a contact. `close.onContactUpdated` run when Close updates a contact. ```ts automations/on-close-contact-updated.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close contact updated", () => { const event = close.onContactUpdated() // Sync changes from the updated Close contact. }) ``` Optional static `account` selects a named Close binding; the project binding is the default. Automate.ax creates and maintains the Close webhook and verifies each delivery with Close's signing secret. Returns a `CloseEvent` whose `data` is the updated `CloseContact`. `changedFields` identifies provider fields that changed. All semantic events preserve the shared [Close event envelope](/reference/integrations/close/triggers/on-close-event#trigger-data). # On Close email received Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-email-received Run when Close receives an email from a lead or contact. `close.onEmailReceived` starts an automation when Close creates an incoming email activity. ```ts automations/on-close-email-received.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close email received", () => { const event = close.onEmailReceived() // Send the received Close email to the assigned representative. }) ``` Optional static `account` selects a named binding. Returns the Close event envelope with the incoming `CloseEmail` in `data`. # On Close email sent Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-email-sent Run when Close sends an email. `close.onEmailSent` starts an automation after Close sends an email. ```ts automations/on-close-email-sent.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close email sent", () => { const event = close.onEmailSent() // Track the sent Close email. }) ``` Optional static `account` selects a named binding. Returns the Close event envelope with the sent `CloseEmail` in `data`. # On Close event Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-event Run for every event selection accepted by Close webhooks. `close.onEvent` runs for every object and action pair that Close's webhook subscription API accepts. ```ts automations/on-close-event.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close event", () => { const event = close.onEvent() // Route the Close event by object and action. }) ``` Optional static `account` selects a named Close binding; the project binding is the default. Automate.ax creates and maintains the Close webhook and verifies each delivery with Close's signing secret. ## Trigger data ```ts theme={null} interface CloseEvent { action: string apiKeyId?: string | null changedFields: string[] createdAt: Date data: Record | null id: string leadId: string | null meta: Record objectId: string objectType: string organizationId: string previousData: Record | null requestId?: string | null updatedAt: Date userId: string | null } ``` Returns the normalized broad `CloseEvent` envelope. Use `objectType` and `action` to route uncommon Close event families. Close's Event Log also documents `activity.lead_merge.created`, `activity.lead_merge.updated`, `activity.lead_merge.deleted`, and `comment_thread.updated`, but its webhook subscription API rejects those selections, so this trigger cannot receive them. All semantic events preserve the shared [Close event envelope](/reference/integrations/close/triggers/on-close-event#trigger-data). # On Close lead created Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-lead-created Run when Close creates a lead. `close.onLeadCreated` run when Close creates a lead. ```ts automations/on-close-lead-created.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close lead created", () => { const event = close.onLeadCreated() // Assign the new Close lead to a sales representative. }) ``` Optional static `account` selects a named Close binding; the project binding is the default. Automate.ax creates and maintains the Close webhook and verifies each delivery with Close's signing secret. Returns a `CloseEvent` whose `data` is the created `CloseLead`. This also matches the broad Close event trigger. All semantic events preserve the shared [Close event envelope](/reference/integrations/close/triggers/on-close-event#trigger-data). # On Close lead deleted Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-lead-deleted Run when Close deletes a lead. `close.onLeadDeleted` run when Close deletes a lead. ```ts automations/on-close-lead-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close lead deleted", () => { const event = close.onLeadDeleted() // Remove state tied to the deleted Close lead. }) ``` Optional static `account` selects a named Close binding; the project binding is the default. Automate.ax creates and maintains the Close webhook and verifies each delivery with Close's signing secret. Returns a `CloseEvent` whose `data` is `null`. Use `objectId` for the deleted lead ID; the full record is no longer available. All semantic events preserve the shared [Close event envelope](/reference/integrations/close/triggers/on-close-event#trigger-data). # On Close lead entered Smart View Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-lead-entered-smart-view Run when a lead enters a Close Smart View. `close.onLeadEnteredSmartView` runs once for each lead that appears between two completed observations of a Close Smart View. ```ts automations/on-close-lead-entered-smart-view.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On lead entered Close Smart View", () => { const event = close.onLeadEnteredSmartView({ smartViewId: "save_abc123", }) // Start work for the Close lead entering the Smart View. }) ``` Provide a lead Smart View ID in `smartViewId`. Optional static `account` selects a named Close binding; the project binding is the default. Private and user-dependent views are evaluated with that exact connected Close user's permissions. The initial observation establishes a baseline and does not emit existing leads. Later events return `{ leadId, smartViewId }`. Automate.ax preserves the Smart View's query, sort, and result limit, fully reads each result set, and advances the baseline only after a complete successful observation. Close does not provide native membership events. This trigger therefore observes differences between completed polls; a transient entry and exit entirely between polls cannot be observed. Close caps Advanced Filtering pagination at 10,000 results, so larger Smart Views fail rather than silently truncating. Legacy text-only and non-lead Smart Views are not supported. # On Close lead exited Smart View Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-lead-exited-smart-view Run when a lead exits a Close Smart View. `close.onLeadExitedSmartView` runs once for each lead that disappears between two completed observations of a Close Smart View. ```ts automations/on-close-lead-exited-smart-view.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On lead exited Close Smart View", () => { const event = close.onLeadExitedSmartView({ smartViewId: "save_abc123", }) // Stop work for the Close lead leaving the Smart View. }) ``` Provide a lead Smart View ID in `smartViewId`. Optional static `account` selects a named Close binding; the project binding is the default. Private and user-dependent views are evaluated with that exact connected Close user's permissions. The initial observation establishes a baseline and does not emit existing leads. Later events return `{ leadId, smartViewId }`. The ID-only payload remains usable when the lead exited because it was deleted or became inaccessible. Close does not provide native membership events. This trigger therefore observes differences between completed polls; a transient entry and exit entirely between polls cannot be observed. Close caps Advanced Filtering pagination at 10,000 results, so larger Smart Views fail rather than silently truncating. Legacy text-only and non-lead Smart Views are not supported. # On Close lead merged Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-lead-merged Run when Close merges leads. `close.onLeadMerged` run when Close merges leads. ```ts automations/on-close-lead-merged.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close lead merged", () => { const event = close.onLeadMerged() // Reconcile records tied to the merged Close lead. }) ``` Optional static `account` selects a named Close binding; the project binding is the default. Automate.ax creates and maintains the Close webhook and verifies each delivery with Close's signing secret. Returns a `CloseEvent` whose `data` is the resulting `CloseLead`. Inspect `meta` and `previousData` for provider merge details when available. All semantic events preserve the shared [Close event envelope](/reference/integrations/close/triggers/on-close-event#trigger-data). # On Close lead updated Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-lead-updated Run when Close updates a lead. `close.onLeadUpdated` run when Close updates a lead. ```ts automations/on-close-lead-updated.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close lead updated", () => { const event = close.onLeadUpdated() // Sync changes from the updated Close lead. }) ``` Optional static `account` selects a named Close binding; the project binding is the default. Automate.ax creates and maintains the Close webhook and verifies each delivery with Close's signing secret. Returns a `CloseEvent` whose `data` is the updated `CloseLead`. `changedFields` identifies provider fields that changed. All semantic events preserve the shared [Close event envelope](/reference/integrations/close/triggers/on-close-event#trigger-data). # On Close meeting canceled Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-meeting-canceled Run when Close cancels a meeting. `close.onMeetingCanceled` starts an automation when Close cancels a meeting. ```ts automations/on-close-meeting-canceled.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close meeting canceled", () => { const event = close.onMeetingCanceled() // Remove downstream work for the canceled Close meeting. }) ``` Optional static `account` selects a named binding. Returns the Close event envelope with the canceled `CloseMeeting` in `data`. # On Close meeting completed Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-meeting-completed Run when a Close meeting completes. `close.onMeetingCompleted` starts an automation when a Close meeting completes. ```ts automations/on-close-meeting-completed.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close meeting completed", () => { const event = close.onMeetingCompleted() // Record the completed Close meeting outcome. }) ``` Optional static `account` selects a named binding. Returns the Close event envelope with the completed `CloseMeeting` in `data`. # On Close meeting scheduled Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-meeting-scheduled Run when Close schedules a meeting. `close.onMeetingScheduled` starts an automation when Close schedules a meeting. ```ts automations/on-close-meeting-scheduled.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close meeting scheduled", () => { const event = close.onMeetingScheduled() // Add the scheduled Close meeting to downstream calendars. }) ``` Optional static `account` selects a named binding. Returns the Close event envelope with a `CloseMeeting` in `data`. # On Close meeting started Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-meeting-started Run when a Close meeting starts. `close.onMeetingStarted` starts an automation when a Close meeting begins. ```ts automations/on-close-meeting-started.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close meeting started", () => { const event = close.onMeetingStarted() // Start the Close meeting follow-up workflow. }) ``` Optional static `account` selects a named binding. Returns the Close event envelope with a `CloseMeeting` in `data`. # On Close opportunity created Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-opportunity-created Run when Close creates an opportunity. `close.onOpportunityCreated` run when Close creates an opportunity. ```ts automations/on-close-opportunity-created.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close opportunity created", () => { const event = close.onOpportunityCreated() // Notify the owner about the new Close opportunity. }) ``` Optional static `account` selects a named Close binding; the project binding is the default. Automate.ax creates and maintains the Close webhook and verifies each delivery with Close's signing secret. Returns a `CloseEvent` whose `data` is the created `CloseOpportunity`. The event includes pipeline status, owner, value, confidence, and lead references. All semantic events preserve the shared [Close event envelope](/reference/integrations/close/triggers/on-close-event#trigger-data). # On Close opportunity deleted Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-opportunity-deleted Run when Close deletes an opportunity. `close.onOpportunityDeleted` run when Close deletes an opportunity. ```ts automations/on-close-opportunity-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close opportunity deleted", () => { const event = close.onOpportunityDeleted() // Remove state tied to the deleted Close opportunity. }) ``` Optional static `account` selects a named Close binding; the project binding is the default. Automate.ax creates and maintains the Close webhook and verifies each delivery with Close's signing secret. Returns a `CloseEvent` whose `data` is `null`. Use `objectId` for the deleted opportunity ID. All semantic events preserve the shared [Close event envelope](/reference/integrations/close/triggers/on-close-event#trigger-data). # On Close opportunity lost Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-opportunity-lost Run when an opportunity enters a lost status. `close.onOpportunityLost` run when an opportunity enters a lost status. ```ts automations/on-close-opportunity-lost.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close opportunity lost", () => { const event = close.onOpportunityLost() // Start the lost Close opportunity follow-up. }) ``` Optional static `account` selects a named Close binding; the project binding is the default. Automate.ax creates and maintains the Close webhook and verifies each delivery with Close's signing secret. Returns a `CloseEvent` whose `data` is the lost `CloseOpportunity`. Close emits an opportunity update; Automate.ax classifies it by `data.statusType === "lost"`. All semantic events preserve the shared [Close event envelope](/reference/integrations/close/triggers/on-close-event#trigger-data). # On Close opportunity updated Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-opportunity-updated Run when Close updates an opportunity. `close.onOpportunityUpdated` run when Close updates an opportunity. ```ts automations/on-close-opportunity-updated.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close opportunity updated", () => { const event = close.onOpportunityUpdated() // Sync changes from the updated Close opportunity. }) ``` Optional static `account` selects a named Close binding; the project binding is the default. Automate.ax creates and maintains the Close webhook and verifies each delivery with Close's signing secret. Returns a `CloseEvent` whose `data` is the updated `CloseOpportunity`. An update into a won or lost status also matches the corresponding semantic trigger. All semantic events preserve the shared [Close event envelope](/reference/integrations/close/triggers/on-close-event#trigger-data). # On Close opportunity won Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-opportunity-won Run when an opportunity enters a won status. `close.onOpportunityWon` run when an opportunity enters a won status. ```ts automations/on-close-opportunity-won.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close opportunity won", () => { const event = close.onOpportunityWon() // Start the won Close opportunity follow-up. }) ``` Optional static `account` selects a named Close binding; the project binding is the default. Automate.ax creates and maintains the Close webhook and verifies each delivery with Close's signing secret. Returns a `CloseEvent` whose `data` is the won `CloseOpportunity`. Close emits an opportunity update; Automate.ax classifies it by `data.statusType === "won"`. All semantic events preserve the shared [Close event envelope](/reference/integrations/close/triggers/on-close-event#trigger-data). # On Close sequence subscription created Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-sequence-subscription-created Run when Close enrolls a contact in a sequence. `close.onSequenceSubscriptionCreated` starts an automation when Close enrolls a contact in a sequence. ```ts automations/on-close-sequence-subscription-created.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close sequence enrollment", () => { const event = close.onSequenceSubscriptionCreated() // Track the new Close sequence subscription. }) ``` Optional static `account` selects a named binding. Returns the Close event envelope with a `CloseSequenceSubscription` in `data`. # On Close sequence subscription deleted Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-sequence-subscription-deleted Run when Close removes a sequence enrollment. `close.onSequenceSubscriptionDeleted` starts an automation when Close removes a contact from a sequence. ```ts automations/on-close-sequence-subscription-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close sequence removal", () => { const event = close.onSequenceSubscriptionDeleted() // Remove state tied to the deleted Close sequence subscription. }) ``` Optional static `account` selects a named binding. `data` is `null`; use `objectId`, `leadId`, and `previousData` from the Close event envelope. # On Close sequence subscription errored Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-sequence-subscription-errored Run when a Close sequence subscription enters an error state. `close.onSequenceSubscriptionErrored` starts an automation when a sequence subscription enters the `error` status. ```ts automations/on-close-sequence-subscription-errored.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On sequence error", () => { const event = close.onSequenceSubscriptionErrored() // Escalate the failed Close sequence subscription. }) ``` Optional static `account` selects a named binding. Returns the updated `CloseSequenceSubscription` in `data`. # On Close sequence subscription finished Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-sequence-subscription-finished Run when a Close sequence subscription finishes. `close.onSequenceSubscriptionFinished` starts an automation when a sequence subscription enters the `finished` status. ```ts automations/on-close-sequence-subscription-finished.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On sequence finished", () => { const event = close.onSequenceSubscriptionFinished() // Continue after the Close sequence subscription finishes. }) ``` Optional static `account` selects a named binding. Returns the updated `CloseSequenceSubscription` in `data`. # On Close sequence subscription goal reached Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-sequence-subscription-goal-reached Run when a Close sequence subscription reaches its goal. `close.onSequenceSubscriptionGoalReached` starts an automation when a sequence subscription enters the `goal` status. ```ts automations/on-close-sequence-subscription-goal-reached.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On sequence goal reached", () => { const event = close.onSequenceSubscriptionGoalReached() // Continue after the Close sequence reaches its goal. }) ``` Optional static `account` selects a named binding. Returns the updated `CloseSequenceSubscription` in `data`. # On Close sequence subscription paused Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-sequence-subscription-paused Run when a Close sequence subscription pauses. `close.onSequenceSubscriptionPaused` starts an automation when a sequence subscription enters the `paused` status. ```ts automations/on-close-sequence-subscription-paused.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On sequence paused", () => { const event = close.onSequenceSubscriptionPaused() // Pause downstream work for the Close sequence subscription. }) ``` Optional static `account` selects a named binding. Returns the updated `CloseSequenceSubscription` in `data`. # On Close sequence subscription resumed Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-sequence-subscription-resumed Run when a Close sequence subscription resumes. `close.onSequenceSubscriptionResumed` starts an automation when a sequence subscription returns to the `active` status. ```ts automations/on-close-sequence-subscription-resumed.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On sequence resumed", () => { const event = close.onSequenceSubscriptionResumed() // Resume downstream work for the Close sequence subscription. }) ``` Optional static `account` selects a named binding. Returns the updated `CloseSequenceSubscription` in `data`. # On Close sequence subscription updated Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-sequence-subscription-updated Run when a Close sequence enrollment changes. `close.onSequenceSubscriptionUpdated` starts an automation when an enrollment changes status or configuration. ```ts automations/on-close-sequence-subscription-updated.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close sequence update", () => { const event = close.onSequenceSubscriptionUpdated() // Sync the updated Close sequence subscription status. }) ``` Optional static `account` selects a named binding. Returns the Close event envelope with the current `CloseSequenceSubscription` in `data`. # On Close Smart View created Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-smart-view-created Run when Close creates a Smart View. `close.onSmartViewCreated` runs when Close creates a Smart View. ```ts automations/on-close-smart-view-created.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close Smart View created", () => { const event = close.onSmartViewCreated() // Index the new Close Smart View. }) ``` Optional static `account` selects a named Close binding; the project binding is the default. Returns a normalized [Close event envelope](/reference/integrations/close/triggers/on-close-event#trigger-data) whose `data` contains the created Smart View snapshot. # On Close Smart View updated Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-smart-view-updated Run when Close updates a Smart View definition. `close.onSmartViewUpdated` runs when Close updates a Smart View's basic fields, such as its name, `isShared` state, or query. ```ts automations/on-close-smart-view-updated.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close Smart View updated", () => { const event = close.onSmartViewUpdated() // Sync changes from the updated Close Smart View. }) ``` Optional static `account` selects a named Close binding; the project binding is the default. Returns a normalized [Close event envelope](/reference/integrations/close/triggers/on-close-event#trigger-data) whose `data` contains the updated Smart View snapshot. Close does not emit this provider event when the leads matching a Smart View change. Use `close.onLeadEnteredSmartView` or `close.onLeadExitedSmartView` for membership changes. Close also does not emit this event for changes limited to the Smart View's `sharedWith` field. # On Close SMS received Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-sms-received Run when Close receives an SMS message. `close.onSmsReceived` starts an automation when Close creates an inbound SMS activity. ```ts automations/on-close-sms-received.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close SMS received", () => { const event = close.onSmsReceived() // Send the received Close SMS message to the assigned representative. }) ``` Optional static `account` selects a named binding. Returns the Close event envelope with the inbound `CloseSms` in `data`. # On Close SMS sent Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-sms-sent Run when Close sends an SMS message. `close.onSmsSent` starts an automation after Close sends an SMS message. ```ts automations/on-close-sms-sent.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close SMS sent", () => { const event = close.onSmsSent() // Track the sent Close SMS message. }) ``` Optional static `account` selects a named binding. Returns the Close event envelope with the sent `CloseSms` in `data`. # On Close task completed Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-task-completed Run when Close completes any task subtype. `close.onTaskCompleted` run when Close completes any task subtype. ```ts automations/on-close-task-completed.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close task completed", () => { const event = close.onTaskCompleted() // Continue after the Close task is completed. }) ``` Optional static `account` selects a named Close binding; the project binding is the default. Automate.ax creates and maintains the Close webhook and verifies each delivery with Close's signing secret. Returns a `CloseEvent` whose `data` is the completed `CloseTask`. Marking a task complete may also emit a task update; using both triggers can run the automation twice. All semantic events preserve the shared [Close event envelope](/reference/integrations/close/triggers/on-close-event#trigger-data). # On Close task created Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-task-created Run when Close creates any task subtype. `close.onTaskCreated` run when Close creates any task subtype. ```ts automations/on-close-task-created.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close task created", () => { const event = close.onTaskCreated() // Notify the assignee about the new Close task. }) ``` Optional static `account` selects a named Close binding; the project binding is the default. Automate.ax creates and maintains the Close webhook and verifies each delivery with Close's signing secret. Returns a `CloseEvent` whose `data` is the created `CloseTask`. This covers lead, email, call, SMS, voicemail, and opportunity task subtypes supported by Close webhooks. All semantic events preserve the shared [Close event envelope](/reference/integrations/close/triggers/on-close-event#trigger-data). # On Close task deleted Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-task-deleted Run when Close deletes any task subtype. `close.onTaskDeleted` run when Close deletes any task subtype. ```ts automations/on-close-task-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close task deleted", () => { const event = close.onTaskDeleted() // Remove state tied to the deleted Close task. }) ``` Optional static `account` selects a named Close binding; the project binding is the default. Automate.ax creates and maintains the Close webhook and verifies each delivery with Close's signing secret. Returns a `CloseEvent` whose `data` is `null`. Use `objectId` and `objectType` to identify the deleted task and its subtype. All semantic events preserve the shared [Close event envelope](/reference/integrations/close/triggers/on-close-event#trigger-data). # On Close task updated Source: https://docs.automate.ax/reference/integrations/close/triggers/on-close-task-updated Run when Close updates any task subtype. `close.onTaskUpdated` run when Close updates any task subtype. ```ts automations/on-close-task-updated.automation.ts theme={null} import { automation } from "automate.ax" import { close } from "automate.ax/close" export default automation("On Close task updated", () => { const event = close.onTaskUpdated() // Sync changes from the updated Close task. }) ``` Optional static `account` selects a named Close binding; the project binding is the default. Automate.ax creates and maintains the Close webhook and verifies each delivery with Close's signing secret. Returns a `CloseEvent` whose `data` is the updated `CloseTask`. `objectType` contains the concrete provider subtype, such as `task.lead` or `task.outbound_call`. All semantic events preserve the shared [Close event envelope](/reference/integrations/close/triggers/on-close-event#trigger-data). # Answer Smart FAQs Source: https://docs.automate.ax/reference/integrations/closebot/actions/answer-smart-faqs Save answers for multiple CloseBot Smart FAQs. `closeBot.answerSmartFaqs` answers one or more existing Smart FAQs in one request. ```ts automations/answer-closebot-faqs.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Answer CloseBot FAQs", () => { onDashboardRun({ title: "Answer Smart FAQs" }) closeBot.answerSmartFaqs({ faqs: [{ id: "faq-id", answer: "Monday through Friday." }], }) }) ``` ## Inputs Provide a non-empty `faqs` array of FAQ IDs and answers. Automate.ax translates this camelCase input to CloseBot's unusual `faQs` wire field. ## Output Returns the updated Smart FAQs. # Attach library file to source Source: https://docs.automate.ax/reference/integrations/closebot/actions/attach-library-file-to-source Attach a CloseBot library file to a source. `closeBot.attachLibraryFileToSource` adds a library file to a source's bot knowledge. ```ts automations/attach-closebot-library-file.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Attach CloseBot library file", () => { onDashboardRun({ title: "Attach library file" }) closeBot.attachLibraryFileToSource({ fileId: "file-id", sourceId: "source-id", }) }) ``` ## Inputs Provide `fileId` and `sourceId`. ## Output Returns `null` after attachment. # Attach source to bot Source: https://docs.automate.ax/reference/integrations/closebot/actions/attach-source-to-bot Attach a CloseBot source and routing rules to a bot. `closeBot.attachSourceToBot` connects a source to a bot and configures which channels the bot may use. ```ts automations/attach-closebot-source.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Attach CloseBot source", () => { onDashboardRun({ title: "Attach source" }) closeBot.attachSourceToBot({ botId: "bot-id", sourceId: "source-id", channels: ["sms"], enabled: true, }) }) ``` ## Inputs Provide `botId`, `sourceId`, and `channels`. Optional inputs configure tags, tag groups, channel rules, a persona name override, enabled state, and flow variables. ## Output Returns `null` after CloseBot accepts the attachment. # Cancel scheduled message Source: https://docs.automate.ax/reference/integrations/closebot/actions/cancel-scheduled-message Cancel a pending CloseBot message or dismiss a failed one. `closeBot.cancelScheduledMessage` cancels a pending message. For a failed message, it dismisses the failure while CloseBot retains the audit row. ```ts automations/cancel-closebot-scheduled-message.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Cancel CloseBot message", () => { onDashboardRun({ title: "Cancel scheduled message" }) closeBot.cancelScheduledMessage({ leadId: "lead-id", scheduledMessageId: "scheduled-message-id", }) }) ``` ## Inputs Provide `leadId` and `scheduledMessageId`. ## Output Returns `null` after CloseBot accepts the cancellation or dismissal. # Create bot Source: https://docs.automate.ax/reference/integrations/closebot/actions/create-bot Create a CloseBot bot from a template, imported KDL, or a blank flow. `closeBot.createBot` creates a bot. Start with a blank flow, a `templateId`, or `importKdl`. ```ts automations/create-closebot-bot.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Create CloseBot bot", () => { onDashboardRun({ title: "Create CloseBot bot" }) closeBot.createBot({ name: "Website lead qualifier", conversationReason: "Qualify inbound website leads", personaIds: ["persona-id"], }) }) ``` ## Inputs Provide `name`. You can add `templateId`, `importKdl`, `folderId`, `category`, `conversationReason`, `businessInformation`, and one default `personaIds` entry. ## Output Returns the created bot. Creation is not replay-safe after an uncertain provider response. # Create bot with AI Source: https://docs.automate.ax/reference/integrations/closebot/actions/create-bot-with-ai Create a CloseBot bot from a natural-language description. `closeBot.createBotWithAi` asks CloseBot to generate a new bot from your description. ```ts automations/create-closebot-bot-with-ai.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Create CloseBot bot with AI", () => { onDashboardRun({ title: "Create AI bot" }) closeBot.createBotWithAi({ name: "Website lead qualifier", description: "Qualify website leads and offer an appointment.", folderId: "folder-id", }) }) ``` ## Inputs Provide `name` and a natural-language `description`. You can also set `category` and `folderId`. ## Output Returns the generated bot. Creation is not replay-safe after an uncertain provider response. # Create folder Source: https://docs.automate.ax/reference/integrations/closebot/actions/create-folder Create a CloseBot bot and persona folder. `closeBot.createFolder` creates a top-level or nested folder. ```ts automations/create-closebot-folder.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Create CloseBot folder", () => { onDashboardRun({ title: "Create folder" }) closeBot.createFolder({ name: "Sales", parentId: "parent-folder-id" }) }) ``` ## Inputs Provide `name`. Omit `parentId` for a top-level folder. ## Output Returns the new folder ID. # Create lead note Source: https://docs.automate.ax/reference/integrations/closebot/actions/create-lead-note Create an internal note on a CloseBot conversation. `closeBot.createLeadNote` adds an internal note. Notes are never sent to the contact. ```ts automations/create-closebot-note.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Note CloseBot qualification", () => { onDashboardRun({ title: "Add CloseBot note" }) closeBot.createLeadNote({ leadId: "lead-id", body: "Qualified for a consultation", aiVisible: true, }) }) ``` ## Inputs Provide `leadId`, `body`, and `aiVisible`. Optional `mentionedAccountIds` notify allowed team members or clients with source access. ## Output Returns the new note ID and its AI visibility. # Create persona Source: https://docs.automate.ax/reference/integrations/closebot/actions/create-persona Create an AI persona for CloseBot agents. `closeBot.createPersona` creates a reusable AI persona. ```ts automations/create-closebot-persona.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Create CloseBot persona", () => { onDashboardRun({ title: "Create CloseBot persona" }) closeBot.createPersona({ personaName: "Concise consultant", aiProviderPreferences: ["openai"], voiceStyles: "Warm, clear, and direct", }) }) ``` ## Inputs Provide `personaName` and `aiProviderPreferences`. Optional fields control description, voice, response guidance, typo and message-breakup percentages, response timing, color, and image data. ## Output Returns the created persona, including its `id`, name, response settings, provider preferences, and bot associations. # Create scheduled message Source: https://docs.automate.ax/reference/integrations/closebot/actions/create-scheduled-message Schedule a manual or AI-generated CloseBot lead message. `closeBot.createScheduledMessage` schedules a message for a future time. ```ts automations/schedule-closebot-message.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Schedule CloseBot message", () => { onDashboardRun({ title: "Schedule CloseBot message" }) closeBot.createScheduledMessage({ leadId: "lead-id", kind: "manual", body: "Checking in after your consultation", sendAt: new Date("2026-09-10T16:00:00Z"), }) }) ``` ## Inputs Provide `leadId`, `kind` (`manual` or `ai`), and `sendAt`. Manual messages require `body`; AI messages generate their body at send time. Optional `cancelOnReply` defaults in CloseBot to `false` for manual messages and `true` for AI messages. ## Output Returns the scheduled message. # Create Smart FAQ Source: https://docs.automate.ax/reference/integrations/closebot/actions/create-smart-faq Create a CloseBot Smart FAQ for one source. `closeBot.createSmartFaq` creates an authored question and answer for one source. ```ts automations/create-closebot-faq.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Create CloseBot FAQ", () => { onDashboardRun({ title: "Create Smart FAQ" }) closeBot.createSmartFaq({ sourceId: "source-id", question: "What are your hours?", answer: "Monday through Friday, 9 AM to 5 PM.", }) }) ``` ## Inputs Provide `sourceId`, `question`, and `answer`. ## Output Returns `null` after CloseBot creates the FAQ. # Create web scrape Source: https://docs.automate.ax/reference/integrations/closebot/actions/create-web-scrape Create CloseBot library knowledge from a website. `closeBot.createWebScrape` crawls a website into a CloseBot library file. ```ts automations/create-closebot-web-scrape.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Create CloseBot web scrape", () => { onDashboardRun({ title: "Create web scrape" }) closeBot.createWebScrape({ scrapeUrl: "https://example.com/docs", maxDepth: 2, maxBreadth: 20, }) }) ``` ## Inputs Provide `scrapeUrl`, nonnegative `maxDepth`, and nonnegative `maxBreadth` crawl limits. ## Output Returns the new file `id`, a provider message, and `totalSize`. Use `getLibraryFile` or `listLibraryFiles` to monitor processing status. # Delete bot Source: https://docs.automate.ax/reference/integrations/closebot/actions/delete-bot Delete a CloseBot bot by ID. `closeBot.deleteBot` permanently deletes a bot. ```ts automations/delete-closebot-bot.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Delete CloseBot bot", () => { onDashboardRun({ title: "Delete CloseBot bot" }) closeBot.deleteBot({ botId: "bot-id" }) }) ``` ## Inputs Provide `botId`. ## Output Returns `null` after CloseBot accepts the deletion. This destructive action is not replay-safe. # Delete folder Source: https://docs.automate.ax/reference/integrations/closebot/actions/delete-folder Delete a CloseBot bot and persona folder. `closeBot.deleteFolder` deletes one folder. ```ts automations/delete-closebot-folder.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Delete CloseBot folder", () => { onDashboardRun({ title: "Delete folder" }) closeBot.deleteFolder({ folderId: "folder-id" }) }) ``` ## Inputs Provide the `folderId`. ## Output Returns `null` after deletion. # Delete lead Source: https://docs.automate.ax/reference/integrations/closebot/actions/delete-lead Delete a CloseBot lead. `closeBot.deleteLead` permanently deletes a lead and its CloseBot conversation. ```ts automations/delete-closebot-lead.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Delete CloseBot lead", () => { onDashboardRun({ title: "Delete CloseBot lead" }) closeBot.deleteLead({ leadId: "lead-id" }) }) ``` ## Inputs Provide `leadId`. ## Output Returns `null` after deletion. This destructive action is not replay-safe. # Delete lead note Source: https://docs.automate.ax/reference/integrations/closebot/actions/delete-lead-note Delete an internal CloseBot conversation note. `closeBot.deleteLeadNote` deletes a note. CloseBot permits only the note's author to delete it. ```ts automations/delete-closebot-note.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Delete CloseBot note", () => { onDashboardRun({ title: "Delete CloseBot note" }) closeBot.deleteLeadNote({ leadId: "lead-id", noteId: "note-id" }) }) ``` ## Inputs Provide `leadId` and `noteId`. ## Output Returns `null` after CloseBot accepts the deletion. # Delete library file Source: https://docs.automate.ax/reference/integrations/closebot/actions/delete-library-file Delete a CloseBot agency library file. `closeBot.deleteLibraryFile` permanently deletes one knowledge file. ```ts automations/delete-closebot-library-file.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Delete CloseBot library file", () => { onDashboardRun({ title: "Delete library file" }) closeBot.deleteLibraryFile({ fileId: "file-id" }) }) ``` ## Inputs Provide the `fileId`. This operation cannot be undone. ## Output Returns `null` after deletion. # Delete persona Source: https://docs.automate.ax/reference/integrations/closebot/actions/delete-persona Delete a CloseBot AI persona. `closeBot.deletePersona` permanently deletes a persona. ```ts automations/delete-closebot-persona.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Delete CloseBot persona", () => { onDashboardRun({ title: "Delete CloseBot persona" }) closeBot.deletePersona({ personaId: "persona-id" }) }) ``` ## Inputs Provide `personaId`. ## Output Returns `null` after deletion. CloseBot rejects deletion when the persona cannot be removed. # Delete Smart FAQ Source: https://docs.automate.ax/reference/integrations/closebot/actions/delete-smart-faq Delete a CloseBot Smart FAQ. `closeBot.deleteSmartFaq` permanently deletes one FAQ. ```ts automations/delete-closebot-faq.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Delete CloseBot FAQ", () => { onDashboardRun({ title: "Delete Smart FAQ" }) closeBot.deleteSmartFaq({ faqId: "faq-id" }) }) ``` ## Inputs Provide `faqId`. ## Output Returns `null` after deletion. # Delete source Source: https://docs.automate.ax/reference/integrations/closebot/actions/delete-source Delete a CloseBot source and its associated data. `closeBot.deleteSource` permanently removes a source and its CloseBot data. ```ts automations/delete-closebot-source.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Delete CloseBot source", () => { onDashboardRun({ title: "Delete source" }) closeBot.deleteSource({ sourceId: "source-id" }) }) ``` ## Inputs Provide the `sourceId`. CloseBot also attempts to uninstall its app from the connected CRM. This operation cannot be undone. ## Output Returns `null` after deletion. # Detach library file from source Source: https://docs.automate.ax/reference/integrations/closebot/actions/detach-library-file-from-source Detach a CloseBot library file from a source. `closeBot.detachLibraryFileFromSource` removes a library file from a source's bot knowledge without deleting the file. ```ts automations/detach-closebot-library-file.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Detach CloseBot library file", () => { onDashboardRun({ title: "Detach library file" }) closeBot.detachLibraryFileFromSource({ fileId: "file-id", sourceId: "source-id", }) }) ``` ## Inputs Provide `fileId` and `sourceId`. ## Output Returns `null` after detachment. # Detach source from bot Source: https://docs.automate.ax/reference/integrations/closebot/actions/detach-source-from-bot Detach a CloseBot source from a bot. `closeBot.detachSourceFromBot` removes a source and its routing configuration from a bot. ```ts automations/detach-closebot-source.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Detach CloseBot source", () => { onDashboardRun({ title: "Detach source" }) closeBot.detachSourceFromBot({ botId: "bot-id", sourceId: "source-id" }) }) ``` ## Inputs Provide `botId` and `sourceId`. ## Output Returns `null` after CloseBot accepts the detachment. # Duplicate bot Source: https://docs.automate.ax/reference/integrations/closebot/actions/duplicate-bot Duplicate a CloseBot bot. `closeBot.duplicateBot` copies an existing bot and returns the new bot. ```ts automations/duplicate-closebot-bot.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Duplicate CloseBot bot", () => { onDashboardRun({ title: "Duplicate CloseBot bot" }) closeBot.duplicateBot({ botId: "bot-id" }) }) ``` ## Inputs Provide the source `botId`. ## Output Returns the duplicated bot. Duplication is not replay-safe after an uncertain response. # End persona split test Source: https://docs.automate.ax/reference/integrations/closebot/actions/end-persona-split-test End a CloseBot bot's persona split test and promote its winner. `closeBot.endPersonaSplitTest` immediately ends a bot's active persona split test, records its results, and promotes the winning persona as the default. ```ts automations/end-closebot-persona-split-test.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("End CloseBot persona split test", () => { onDashboardRun({ title: "End persona split test" }) closeBot.endPersonaSplitTest({ botId: "bot-id" }) }) ``` ## Inputs Provide `botId`. ## Output Returns the updated bot. CloseBot treats an already-finalized test as an idempotent request. # Follow up on Smart FAQ Source: https://docs.automate.ax/reference/integrations/closebot/actions/follow-up-on-smart-faq Follow up with selected CloseBot leads about an answered Smart FAQ. `closeBot.followUpOnSmartFaq` starts a follow-up for selected leads associated with one answered FAQ. ```ts automations/follow-up-closebot-faq.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Follow up on CloseBot FAQ", () => { onDashboardRun({ title: "Follow up on Smart FAQ" }) closeBot.followUpOnSmartFaq({ faqId: "faq-id", leadIds: ["lead-id"], }) }) ``` ## Inputs Provide `faqId` and a non-empty `leadIds` array. ## Output Returns `null` after CloseBot accepts the follow-up request. Follow-up delivery is not replay-safe after an uncertain response. # Get agency Source: https://docs.automate.ax/reference/integrations/closebot/actions/get-agency Get the CloseBot agency available to the connected API key. `closeBot.getAgency` returns the agency identity and members visible to the connected user. ```ts automations/get-closebot-agency.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Get CloseBot agency", () => { onDashboardRun({ title: "Get CloseBot agency" }) closeBot.getAgency() }) ``` ## Inputs No input is required. An optional second argument `{ account }` selects a named CloseBot binding. ## Output Returns the agency ID, name, Beta status, and member records. # Get bot Source: https://docs.automate.ax/reference/integrations/closebot/actions/get-bot Get one CloseBot bot by ID. `closeBot.getBot` retrieves a bot's configuration, versions, connected sources, personas, and follow-up settings. ```ts automations/get-closebot-bot.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Get CloseBot bot", () => { onDashboardRun({ title: "Get CloseBot bot" }) closeBot.getBot({ botId: "bot-id" }) }) ``` ## Inputs Provide `botId`. An optional second argument `{ account }` selects a named binding. ## Output Returns the matching CloseBot bot. # Get folder Source: https://docs.automate.ax/reference/integrations/closebot/actions/get-folder Get one CloseBot bot and persona folder. `closeBot.getFolder` retrieves one folder and its contained resource IDs. ```ts automations/get-closebot-folder.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Get CloseBot folder", () => { onDashboardRun({ title: "Get folder" }) closeBot.getFolder({ folderId: "folder-id" }) }) ``` ## Inputs Provide the `folderId` returned by `listFolders` or `createFolder`. ## Output Returns the folder's ID, name, child-folder IDs, bot IDs, and persona IDs. # Get lead Source: https://docs.automate.ax/reference/integrations/closebot/actions/get-lead Get one CloseBot lead and conversation summary. `closeBot.getLead` retrieves one lead with source, fields, tags, and bot instances. ```ts automations/get-closebot-lead.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Get CloseBot lead", () => { onDashboardRun({ title: "Get CloseBot lead" }) closeBot.getLead({ leadId: "lead-id", includeExternal: true }) }) ``` ## Inputs Provide `leadId`. `includeExternal` defaults to `false`; enable it when the connected source should enrich the response from its external CRM. ## Output Returns the matching lead. # Get lead AI status Source: https://docs.automate.ax/reference/integrations/closebot/actions/get-lead-ai-status Check whether CloseBot AI can respond to a lead. `closeBot.getLeadAiStatus` reports whether AI replies are enabled and applicable for a lead. ```ts automations/get-closebot-lead-ai-status.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Check CloseBot AI", () => { onDashboardRun({ title: "Check CloseBot AI" }) closeBot.getLeadAiStatus({ leadId: "lead-id" }) }) ``` ## Inputs Provide `leadId`. ## Output Returns `enabled`, `applicable`, and an optional reason. # Get library file Source: https://docs.automate.ax/reference/integrations/closebot/actions/get-library-file Get metadata for one CloseBot library file. `closeBot.getLibraryFile` retrieves metadata and source attachments for one knowledge file. ```ts automations/get-closebot-library-file.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Get CloseBot library file", () => { onDashboardRun({ title: "Get library file" }) closeBot.getLibraryFile({ fileId: "file-id" }) }) ``` ## Inputs Provide the `fileId` returned by `listLibraryFiles`. ## Output Returns file metadata and source attachments. Use `getLibraryFilePreview` for extracted text. # Get library file preview Source: https://docs.automate.ax/reference/integrations/closebot/actions/get-library-file-preview Get extracted text for a CloseBot library file. `closeBot.getLibraryFilePreview` retrieves the text CloseBot extracted from one file. ```ts automations/preview-closebot-library-file.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Preview CloseBot library file", () => { onDashboardRun({ title: "Preview library file" }) closeBot.getLibraryFilePreview({ fileId: "file-id" }) }) ``` ## Inputs Provide the `fileId`. ## Output Returns extracted content, chunks, processing status, and any extraction error. # Get persona Source: https://docs.automate.ax/reference/integrations/closebot/actions/get-persona Get one CloseBot AI persona. `closeBot.getPersona` retrieves one persona and its assigned bots. ```ts automations/get-closebot-persona.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Get CloseBot persona", () => { onDashboardRun({ title: "Get CloseBot persona" }) closeBot.getPersona({ personaId: "persona-id" }) }) ``` ## Inputs Provide `personaId`. ## Output Returns the matching persona. # Get source Source: https://docs.automate.ax/reference/integrations/closebot/actions/get-source Get one CloseBot source by ID. `closeBot.getSource` retrieves one CRM or messaging source and its operational settings. ```ts automations/get-closebot-source.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Get CloseBot source", () => { onDashboardRun({ title: "Get CloseBot source" }) closeBot.getSource({ sourceId: "source-id" }) }) ``` ## Inputs Provide `sourceId`. ## Output Returns the source, connected bots, availability, channel behavior, and web-script status. # List bot templates Source: https://docs.automate.ax/reference/integrations/closebot/actions/list-bot-templates List templates available for new CloseBot bots. `closeBot.listBotTemplates` returns the templates you can pass to `createBot`. ```ts automations/list-closebot-bot-templates.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("List CloseBot bot templates", () => { onDashboardRun({ title: "List bot templates" }) closeBot.listBotTemplates() }) ``` ## Inputs This action takes no input. ## Output Returns template IDs, names, descriptions, industries, levels, tags, tiers, and preview links. # List bots Source: https://docs.automate.ax/reference/integrations/closebot/actions/list-bots List bots available to the connected CloseBot account. `closeBot.listBots` lists bots with their versions, sources, personas, follow-up settings, and tools. ```ts automations/list-closebot-bots.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("List CloseBot bots", () => { onDashboardRun({ title: "List CloseBot bots" }) closeBot.listBots() }) ``` ## Inputs No input is required. An optional second argument `{ account }` selects a named binding. ## Output Returns an array of CloseBot bots. # List folders Source: https://docs.automate.ax/reference/integrations/closebot/actions/list-folders List CloseBot bot and persona folders. `closeBot.listFolders` lists the hierarchy that organizes bots and personas. ```ts automations/list-closebot-folders.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("List CloseBot folders", () => { onDashboardRun({ title: "List folders" }) closeBot.listFolders() }) ``` ## Inputs This action takes no input. ## Output Returns each folder's ID, name, child-folder IDs, bot IDs, and persona IDs. # List lead history Source: https://docs.automate.ax/reference/integrations/closebot/actions/list-lead-history List page visits and scoring events for a CloseBot lead. `closeBot.listLeadHistory` returns the recent mixed history timeline for one lead. ```ts automations/list-closebot-lead-history.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Inspect CloseBot lead history", () => { onDashboardRun({ title: "Inspect lead history" }) closeBot.listLeadHistory({ leadId: "lead-id", limit: 50 }) }) ``` ## Inputs Provide `leadId`. `limit` defaults to `20`. ## Output Returns page-visit and scoring events. Use `eventType` to distinguish event shapes. # List leads Source: https://docs.automate.ax/reference/integrations/closebot/actions/list-leads List CloseBot leads with page-based pagination. `closeBot.listLeads` lists conversations across the agency or within one source. ```ts automations/list-closebot-leads.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("List CloseBot leads", () => { onDashboardRun({ title: "List CloseBot leads" }) closeBot.listLeads({ sourceId: "source-id", pageSize: 50 }) }) ``` ## Inputs Use `sourceId` or `leadId` to narrow results. `page` defaults to `0`; `pageSize` defaults to `20`. ## Output Returns the page, page size, total counts, and lead records. # List library files Source: https://docs.automate.ax/reference/integrations/closebot/actions/list-library-files List files in the CloseBot agency library. `closeBot.listLibraryFiles` lists uploaded, web-scraped, and synchronized knowledge files. ```ts automations/list-closebot-library-files.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("List CloseBot library files", () => { onDashboardRun({ title: "List library files" }) closeBot.listLibraryFiles() }) ``` ## Inputs This action takes no input. ## Output Returns file metadata, processing status, source attachments, usage details, and external-resource metadata. # List personas Source: https://docs.automate.ax/reference/integrations/closebot/actions/list-personas List AI personas in a CloseBot agency. `closeBot.listPersonas` lists the personas available to bots in the connected agency. ```ts automations/list-closebot-personas.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("List CloseBot personas", () => { onDashboardRun({ title: "List CloseBot personas" }) closeBot.listPersonas() }) ``` ## Inputs No input is required. ## Output Returns personas with prompt, response, model, display, folder, and bot-assignment fields. # List scheduled messages Source: https://docs.automate.ax/reference/integrations/closebot/actions/list-scheduled-messages List pending and recently failed CloseBot scheduled messages for a lead. `closeBot.listScheduledMessages` returns pending messages and recent failures for one conversation. ```ts automations/list-closebot-scheduled-messages.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("List CloseBot scheduled messages", () => { onDashboardRun({ title: "List scheduled messages" }) closeBot.listScheduledMessages({ leadId: "lead-id" }) }) ``` ## Inputs Provide `leadId`. ## Output Returns scheduled messages with kind, channel, send time, cancellation behavior, creator, status, and failure reason. # List Smart FAQs Source: https://docs.automate.ax/reference/integrations/closebot/actions/list-smart-faqs List CloseBot Smart FAQs by source and state. `closeBot.listSmartFaqs` lists learned or authored questions and answers. ```ts automations/list-closebot-faqs.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("List CloseBot FAQs", () => { onDashboardRun({ title: "List Smart FAQs" }) closeBot.listSmartFaqs({ sourceId: "source-id", answered: "answered" }) }) ``` ## Inputs Optional `sourceId`, `state` (`compressed` or `uncompressed`), and `answered` (`answered` or `unanswered`) values filter the list. ## Output Returns Smart FAQs with their source, question, answer, associated leads, and compression state. # List source calendars Source: https://docs.automate.ax/reference/integrations/closebot/actions/list-source-calendars List calendars available to a CloseBot source. `closeBot.listSourceCalendars` lists manually added and external CRM calendars for one source. ```ts automations/list-closebot-calendars.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("List CloseBot calendars", () => { onDashboardRun({ title: "List source calendars" }) closeBot.listSourceCalendars({ sourceId: "source-id" }) }) ``` ## Inputs Provide `sourceId`. ## Output Returns calendar IDs and names. # List source channels Source: https://docs.automate.ax/reference/integrations/closebot/actions/list-source-channels List messaging channels available to a CloseBot source. `closeBot.listSourceChannels` lists the channels a source can use for bot routing and messages. ```ts automations/list-closebot-channels.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("List CloseBot channels", () => { onDashboardRun({ title: "List source channels" }) closeBot.listSourceChannels({ sourceId: "source-id" }) }) ``` ## Inputs Provide `sourceId`. ## Output Returns channel IDs, names, source names, and filter types. # List source fields Source: https://docs.automate.ax/reference/integrations/closebot/actions/list-source-fields List contact, location, and custom fields for a CloseBot source. `closeBot.listSourceFields` discovers the field keys accepted by lead updates for one source. ```ts automations/list-closebot-fields.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("List CloseBot fields", () => { onDashboardRun({ title: "List source fields" }) closeBot.listSourceFields({ sourceId: "source-id" }) }) ``` ## Inputs Provide `sourceId`. ## Output Returns contact, location, and custom-value field arrays with each field's name, key, and data type. # List source owners Source: https://docs.automate.ax/reference/integrations/closebot/actions/list-source-owners List HubSpot owners available to a CloseBot source. `closeBot.listSourceOwners` lists HubSpot owners you can assign with `updateSource`. ```ts automations/list-closebot-source-owners.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("List CloseBot source owners", () => { onDashboardRun({ title: "List source owners" }) closeBot.listSourceOwners({ sourceId: "source-id" }) }) ``` ## Inputs Provide a HubSpot `sourceId`. ## Output Returns owner IDs, names, and email addresses. # List source tags Source: https://docs.automate.ax/reference/integrations/closebot/actions/list-source-tags List contact tags available to a CloseBot source. `closeBot.listSourceTags` discovers tags available for bot routing rules. ```ts automations/list-closebot-tags.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("List CloseBot tags", () => { onDashboardRun({ title: "List source tags" }) closeBot.listSourceTags({ sourceId: "source-id" }) }) ``` ## Inputs Provide `sourceId`. ## Output Returns tag IDs and names. # List source variables Source: https://docs.automate.ax/reference/integrations/closebot/actions/list-source-variables List one CloseBot bot's variables for a source. `closeBot.listSourceVariables` returns a bot's variable values for one source. ```ts automations/list-closebot-source-variables.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("List CloseBot source variables", () => { onDashboardRun({ title: "List source variables" }) closeBot.listSourceVariables({ botId: "bot-id", sourceId: "source-id" }) }) ``` ## Inputs Provide `botId` and `sourceId`. ## Output Returns each variable's ID, name, and source-specific value. # List sources Source: https://docs.automate.ax/reference/integrations/closebot/actions/list-sources List CloseBot CRM and messaging sources. `closeBot.listSources` lists sources with pagination, search, category, and ordering. ```ts automations/list-closebot-sources.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("List CloseBot sources", () => { onDashboardRun({ title: "List CloseBot sources" }) closeBot.listSources({ query: "HubSpot", pageSize: 50 }) }) ``` ## Inputs Optional inputs are `query`, `category`, `order`, `page`, `pageSize`, and `forceTokenRefresh`. Defaults are `+id`, `0`, `20`, and `false` respectively. `pageSize` cannot exceed `100`. ## Output Returns the page, page size, total, and source records. # List web-scrape pages Source: https://docs.automate.ax/reference/integrations/closebot/actions/list-web-scrape-pages List pages discovered for a CloseBot web scrape. `closeBot.listWebScrapePages` lists the pages discovered for a web-scrape library file. ```ts automations/list-closebot-web-scrape-pages.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("List CloseBot web-scrape pages", () => { onDashboardRun({ title: "List web-scrape pages" }) closeBot.listWebScrapePages({ fileId: "file-id" }) }) ``` ## Inputs Provide the web-scrape `fileId` returned by `listLibraryFiles`. ## Output Returns page URLs and whether each page feeds bot knowledge. # Publish bot Source: https://docs.automate.ax/reference/integrations/closebot/actions/publish-bot Publish the current draft of a CloseBot bot. `closeBot.publishBot` publishes the bot's current saved draft. ```ts automations/publish-closebot-bot.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Publish CloseBot bot", () => { onDashboardRun({ title: "Publish CloseBot bot" }) closeBot.publishBot({ botId: "bot-id" }) }) ``` ## Inputs Provide `botId`. ## Output Returns CloseBot's published version and optional validation message. Publishing is not replay-safe after an uncertain response. # Replace library file Source: https://docs.automate.ax/reference/integrations/closebot/actions/replace-library-file Replace the content of a CloseBot library file. `closeBot.replaceLibraryFile` replaces file content while retaining the CloseBot file ID. ```ts automations/replace-closebot-library-file.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Replace CloseBot library file", () => { onDashboardRun({ title: "Replace library file" }) closeBot.replaceLibraryFile({ fileId: "file-id", file: new File(["Updated product guidance."], "guidance.txt", { type: "text/plain", }), }) }) ``` ## Inputs Provide `fileId` and the replacement JavaScript `File`. ## Output Returns `{ id: string }` with the retained library file ID. # Search leads Source: https://docs.automate.ax/reference/integrations/closebot/actions/search-leads Search CloseBot leads with source, bot, persona, and conversation filters. `closeBot.searchLeads` searches conversations using CloseBot's full lead-search endpoint. ```ts automations/search-closebot-leads.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Search CloseBot leads", () => { onDashboardRun({ title: "Search leads" }) closeBot.searchLeads({ sourceIds: ["source-id"], botIds: [], personaIds: [], channels: ["sms"], search: "Ada", }) }) ``` ## Inputs Provide `sourceIds`, `botIds`, `personaIds`, and `channels`; use empty arrays when a dimension is unrestricted. Optional filters cover text, offset/count, response count, last-message direction, scheduled follow-ups, starred leads, and mentions. ## Output Returns matching leads and total counts. # Send lead message Source: https://docs.automate.ax/reference/integrations/closebot/actions/send-lead-message Send a message to a CloseBot lead. `closeBot.sendLeadMessage` sends a message through the lead's connected channel. ```ts automations/send-closebot-message.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Send CloseBot message", () => { onDashboardRun({ title: "Send CloseBot message" }) closeBot.sendLeadMessage({ leadId: "lead-id", body: "Your consultation is confirmed.", }) }) ``` ## Inputs Provide `leadId` and a non-empty `body`. ## Output Returns the sent message ID. Sending is not replay-safe after an uncertain provider response. # Update bot Source: https://docs.automate.ax/reference/integrations/closebot/actions/update-bot Update a CloseBot bot's settings, personas, and follow-up behavior. `closeBot.updateBot` changes one or more mutable bot settings. Omitted fields remain unchanged. ```ts automations/update-closebot-bot.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Enable CloseBot follow-ups", () => { onDashboardRun({ title: "Enable follow-ups" }) closeBot.updateBot({ botId: "bot-id", followUpActive: true, smartFollowUp: true, }) }) ``` ## Inputs Provide `botId` and at least one mutable field. Supported fields cover name, folder, category, favorite, trash, lock, rescheduling, personas, persona split tests, and follow-up schedules. ## Output Returns the updated bot. # Update folder Source: https://docs.automate.ax/reference/integrations/closebot/actions/update-folder Rename a CloseBot bot and persona folder. `closeBot.updateFolder` renames one folder. ```ts automations/update-closebot-folder.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Rename CloseBot folder", () => { onDashboardRun({ title: "Rename folder" }) closeBot.updateFolder({ folderId: "folder-id", name: "Revenue" }) }) ``` ## Inputs Provide `folderId` and the new `name`. ## Output Returns `null` after CloseBot accepts the rename. # Update lead Source: https://docs.automate.ax/reference/integrations/closebot/actions/update-lead Update CloseBot lead fields and conversation flags. `closeBot.updateLead` updates source-backed fields and optional conversation flags. ```ts automations/update-closebot-lead.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Update CloseBot lead", () => { onDashboardRun({ title: "Update CloseBot lead" }) closeBot.updateLead({ leadId: "lead-id", fields: [{ field: "email", value: "ada@example.com" }], starred: true, }) }) ``` ## Inputs Provide `leadId` and the complete `fields` updates. Optional `starred`, `unread`, and `wontRespondUntil` values update conversation state. ## Output Returns the updated lead. # Update lead AI status Source: https://docs.automate.ax/reference/integrations/closebot/actions/update-lead-ai-status Enable or disable CloseBot AI responses for a lead. `closeBot.updateLeadAiStatus` changes whether CloseBot AI may respond in one conversation. ```ts automations/pause-closebot-ai.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Pause CloseBot AI", () => { onDashboardRun({ title: "Pause CloseBot AI" }) closeBot.updateLeadAiStatus({ leadId: "lead-id", enabled: false }) }) ``` ## Inputs Provide `leadId` and `enabled`. ## Output Returns the resulting enabled and applicable state with an optional reason. # Update lead instance Source: https://docs.automate.ax/reference/integrations/closebot/actions/update-lead-instance Update the follow-up time for a CloseBot lead's bot instance. `closeBot.updateLeadInstance` changes the follow-up time associated with one bot in a conversation. ```ts automations/update-closebot-lead-instance.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Set CloseBot follow-up", () => { onDashboardRun({ title: "Set CloseBot follow-up" }) closeBot.updateLeadInstance({ leadId: "lead-id", botId: "bot-id", followUpTime: new Date("2026-09-10T16:00:00Z"), }) }) ``` ## Inputs Provide `leadId`, `botId`, and `followUpTime`. Pass `null` to clear the scheduled follow-up. ## Output Returns `null` after CloseBot accepts the update. # Update lead note Source: https://docs.automate.ax/reference/integrations/closebot/actions/update-lead-note Update an internal CloseBot conversation note. `closeBot.updateLeadNote` changes a note's body, AI visibility, or mentions. ```ts automations/update-closebot-note.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Update CloseBot note", () => { onDashboardRun({ title: "Update CloseBot note" }) closeBot.updateLeadNote({ leadId: "lead-id", noteId: "note-id", aiVisible: false, }) }) ``` ## Inputs Provide `leadId`, `noteId`, and at least one field to change. `mentionedAccountIds` replaces the current mention list when provided. ## Output Returns the note ID and resulting AI visibility. # Update persona Source: https://docs.automate.ax/reference/integrations/closebot/actions/update-persona Update a CloseBot AI persona. `closeBot.updatePersona` changes prompt, response, model, display, folder, or status settings. ```ts automations/update-closebot-persona.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Update CloseBot persona", () => { onDashboardRun({ title: "Update CloseBot persona" }) closeBot.updatePersona({ personaId: "persona-id", howToRespond: "Ask one question at a time.", }) }) ``` ## Inputs Provide `personaId` and at least one mutable field. Omitted fields remain unchanged. ## Output Returns the updated persona. # Update scheduled message Source: https://docs.automate.ax/reference/integrations/closebot/actions/update-scheduled-message Update a pending CloseBot scheduled message. `closeBot.updateScheduledMessage` changes a pending message's time, manual body, or cancel-on-reply behavior. ```ts automations/update-closebot-scheduled-message.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Reschedule CloseBot message", () => { onDashboardRun({ title: "Reschedule message" }) closeBot.updateScheduledMessage({ leadId: "lead-id", scheduledMessageId: "scheduled-message-id", sendAt: new Date("2026-09-11T16:00:00Z"), }) }) ``` ## Inputs Provide `leadId`, `scheduledMessageId`, and at least one of `sendAt`, `body`, or `cancelOnReply`. CloseBot accepts body changes only for manual messages. ## Output Returns the updated scheduled message. # Update source Source: https://docs.automate.ax/reference/integrations/closebot/actions/update-source Update operational settings for a CloseBot source. `closeBot.updateSource` changes messaging, access, availability, and web-script settings. Omitted fields remain unchanged. ```ts automations/update-closebot-source.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Update CloseBot source", () => { onDashboardRun({ title: "Update CloseBot source" }) closeBot.updateSource({ sourceId: "source-id", summarizeAttachments: false, respondToReactions: true, }) }) ``` ## Inputs Provide `sourceId` and at least one setting. Supported fields cover name, account access, messaging behavior, response windows, quiet hours, timezone, webhook callback, script domains, and HubSpot owner. ## Output Returns the updated source. # Update source variable Source: https://docs.automate.ax/reference/integrations/closebot/actions/update-source-variable Update one CloseBot bot variable for a source. `closeBot.updateSourceVariable` changes one source-specific bot variable. ```ts automations/update-closebot-source-variable.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Update CloseBot source variable", () => { onDashboardRun({ title: "Update source variable" }) closeBot.updateSourceVariable({ botId: "bot-id", sourceId: "source-id", variableId: "variable-id", value: "Premium", }) }) ``` ## Inputs Provide the `botId`, `sourceId`, `variableId`, and replacement `value`. ## Output Returns `null` after CloseBot saves the value. # Update web-scrape pages Source: https://docs.automate.ax/reference/integrations/closebot/actions/update-web-scrape-pages Select pages for a CloseBot web-scrape file. `closeBot.updateWebScrapePages` chooses which discovered pages feed bot knowledge. ```ts automations/update-closebot-web-scrape-pages.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Update CloseBot web-scrape pages", () => { onDashboardRun({ title: "Update web-scrape pages" }) closeBot.updateWebScrapePages({ fileId: "file-id", pages: [{ url: "https://example.com/docs", enabled: true }], }) }) ``` ## Inputs Provide `fileId` and the full `pages` selection with an `enabled` state for every URL. ## Output Returns `null` after CloseBot saves the selection. # Upload library file Source: https://docs.automate.ax/reference/integrations/closebot/actions/upload-library-file Upload a file to the CloseBot agency library. `closeBot.uploadLibraryFile` uploads knowledge content to the agency library. ```ts automations/upload-closebot-library-file.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { closeBot } from "automate.ax/closebot" export default automation("Upload CloseBot library file", () => { onDashboardRun({ title: "Upload library file" }) closeBot.uploadLibraryFile({ file: new File(["Product support is available weekdays."], "support.txt", { type: "text/plain", }), }) }) ``` ## Inputs Provide a JavaScript `File`. The filename and media type are sent with its content. ## Output Returns `{ id: string }` with the new library file ID. Use `getLibraryFile` or `listLibraryFiles` to inspect processing status. # CloseBot Source: https://docs.automate.ax/reference/integrations/closebot/index Manage CloseBot bots, leads, conversations, sources, library knowledge, personas, and Smart FAQs with an API key. ```ts automations/message-closebot-lead.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { closeBot } from "automate.ax/closebot" import { z } from "zod" export default automation("Message a CloseBot lead", () => { const request = onHttpRequest({ body: z.object({ leadId: z.string(), message: z.string() }), }) closeBot.sendLeadMessage({ leadId: request.body.leadId, body: request.body.message, }) }) ``` Create a key in [CloseBot API key settings](https://app.closebot.com/settings?tab=keys), then connect it to your Automate.ax project. CloseBot keys belong to individual user accounts, so the connected user determines which agency resources each action can access. CloseBot does not expose an outbound webhook-subscription contract. This integration provides actions but no managed triggers. Use an Automate.ax HTTP trigger with a CloseBot custom webhook when a specific bot flow should start an automation. ## Exports ```ts theme={null} import { closeBot, closeBotAccount, getCloseBotApi } from "automate.ax/closebot" ``` * `closeBot` contains the packaged actions. * `closeBotAccount("name")` selects a named CloseBot connection. * `getCloseBotApi` creates an authenticated client for a custom account-backed action. ## Actions * [Get agency](/reference/integrations/closebot/actions/get-agency) * [List bots](/reference/integrations/closebot/actions/list-bots) * [List bot templates](/reference/integrations/closebot/actions/list-bot-templates) * [Get bot](/reference/integrations/closebot/actions/get-bot) * [Create bot](/reference/integrations/closebot/actions/create-bot) * [Create bot with AI](/reference/integrations/closebot/actions/create-bot-with-ai) * [Update bot](/reference/integrations/closebot/actions/update-bot) * [Delete bot](/reference/integrations/closebot/actions/delete-bot) * [Duplicate bot](/reference/integrations/closebot/actions/duplicate-bot) * [End persona split test](/reference/integrations/closebot/actions/end-persona-split-test) * [Attach source to bot](/reference/integrations/closebot/actions/attach-source-to-bot) * [Detach source from bot](/reference/integrations/closebot/actions/detach-source-from-bot) * [Publish bot](/reference/integrations/closebot/actions/publish-bot) * [List folders](/reference/integrations/closebot/actions/list-folders) * [Get folder](/reference/integrations/closebot/actions/get-folder) * [Create folder](/reference/integrations/closebot/actions/create-folder) * [Update folder](/reference/integrations/closebot/actions/update-folder) * [Delete folder](/reference/integrations/closebot/actions/delete-folder) * [List leads](/reference/integrations/closebot/actions/list-leads) * [Search leads](/reference/integrations/closebot/actions/search-leads) * [Get lead](/reference/integrations/closebot/actions/get-lead) * [Update lead](/reference/integrations/closebot/actions/update-lead) * [Delete lead](/reference/integrations/closebot/actions/delete-lead) * [Get lead AI status](/reference/integrations/closebot/actions/get-lead-ai-status) * [Update lead AI status](/reference/integrations/closebot/actions/update-lead-ai-status) * [List lead history](/reference/integrations/closebot/actions/list-lead-history) * [Create lead note](/reference/integrations/closebot/actions/create-lead-note) * [Update lead note](/reference/integrations/closebot/actions/update-lead-note) * [Delete lead note](/reference/integrations/closebot/actions/delete-lead-note) * [Send lead message](/reference/integrations/closebot/actions/send-lead-message) * [List scheduled messages](/reference/integrations/closebot/actions/list-scheduled-messages) * [Create scheduled message](/reference/integrations/closebot/actions/create-scheduled-message) * [Update scheduled message](/reference/integrations/closebot/actions/update-scheduled-message) * [Cancel scheduled message](/reference/integrations/closebot/actions/cancel-scheduled-message) * [Update lead instance](/reference/integrations/closebot/actions/update-lead-instance) * [List sources](/reference/integrations/closebot/actions/list-sources) * [Get source](/reference/integrations/closebot/actions/get-source) * [Delete source](/reference/integrations/closebot/actions/delete-source) * [Update source](/reference/integrations/closebot/actions/update-source) * [List source calendars](/reference/integrations/closebot/actions/list-source-calendars) * [List source channels](/reference/integrations/closebot/actions/list-source-channels) * [List source fields](/reference/integrations/closebot/actions/list-source-fields) * [List source tags](/reference/integrations/closebot/actions/list-source-tags) * [List source owners](/reference/integrations/closebot/actions/list-source-owners) * [List source variables](/reference/integrations/closebot/actions/list-source-variables) * [Update source variable](/reference/integrations/closebot/actions/update-source-variable) * [List library files](/reference/integrations/closebot/actions/list-library-files) * [Get library file](/reference/integrations/closebot/actions/get-library-file) * [Get library file preview](/reference/integrations/closebot/actions/get-library-file-preview) * [Upload library file](/reference/integrations/closebot/actions/upload-library-file) * [Replace library file](/reference/integrations/closebot/actions/replace-library-file) * [Delete library file](/reference/integrations/closebot/actions/delete-library-file) * [Attach library file to source](/reference/integrations/closebot/actions/attach-library-file-to-source) * [Detach library file from source](/reference/integrations/closebot/actions/detach-library-file-from-source) * [Create web scrape](/reference/integrations/closebot/actions/create-web-scrape) * [List web-scrape pages](/reference/integrations/closebot/actions/list-web-scrape-pages) * [Update web-scrape pages](/reference/integrations/closebot/actions/update-web-scrape-pages) * [List personas](/reference/integrations/closebot/actions/list-personas) * [Get persona](/reference/integrations/closebot/actions/get-persona) * [Create persona](/reference/integrations/closebot/actions/create-persona) * [Update persona](/reference/integrations/closebot/actions/update-persona) * [Delete persona](/reference/integrations/closebot/actions/delete-persona) * [List Smart FAQs](/reference/integrations/closebot/actions/list-smart-faqs) * [Create Smart FAQ](/reference/integrations/closebot/actions/create-smart-faq) * [Answer Smart FAQs](/reference/integrations/closebot/actions/answer-smart-faqs) * [Follow up on Smart FAQ](/reference/integrations/closebot/actions/follow-up-on-smart-faq) * [Delete Smart FAQ](/reference/integrations/closebot/actions/delete-smart-faq) # Cancel crawl Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/cancel-crawl Cancel an active Cloudflare Browser Run crawl. `cloudflare.cancelCrawl` cancels an active crawl and stops queued URLs. ```ts automations/cancel-cloudflare-crawl.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("Cancel crawl", () => { onDashboardRun({ title: "Cancel crawl" }) const result = cloudflare.cancelCrawl({ accountId: "cloudflare-account-id", jobId: "crawl-job-id", }) sendEmail({ subject: "Crawl cancelled", text: result.message }) }) ``` ## Inputs `accountId` and `jobId` are required. ## Output Returns the cancelled `jobId` and Cloudflare's confirmation message. Cancellation changes provider state and is not replay-safe. URLs already in progress may finish before cancellation takes effect. # Capture screenshot Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/capture-screenshot Render a URL or HTML document and return a screenshot image. `cloudflare.captureScreenshot` captures a rendered page through Cloudflare Browser Run. ```ts automations/capture-cloudflare-screenshot.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("Capture homepage", () => { onDashboardRun({ title: "Capture homepage" }) const image = cloudflare.captureScreenshot({ accountId: "cloudflare-account-id", screenshotOptions: { fullPage: true, type: "png" }, url: "https://example.com", }) // Pass image to the file-storage or messaging action that should publish it. }) ``` ## Inputs Provide `accountId` and exactly one of `url` or `html`. `screenshotOptions` controls PNG, JPEG, or WebP output, full-page capture, clipping, transparency, surface capture, viewport overflow, speed, and JPEG/WebP quality from 0–100. The type defaults to PNG, which does not accept `quality`. You can also set `selector` or enable `scrollPage`. `cacheTtl` defaults to 5 seconds, and the common Browser Run page controls are available. ## Output Returns the image as a `Blob` with Cloudflare's response media type. The action consumes Browser Run duration and is not replay-safe. # Capture snapshot Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/capture-snapshot Render a page and return multiple content representations at once. `cloudflare.captureSnapshot` returns several representations from one Browser Run render. ```ts automations/capture-cloudflare-snapshot.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("Archive release page", () => { onDashboardRun({ title: "Archive release page" }) const snapshot = cloudflare.captureSnapshot({ accountId: "cloudflare-account-id", formats: ["content", "markdown"], url: "https://example.com/releases/latest", }) sendEmail({ subject: "Release snapshot", text: snapshot.markdown ?? "" }) }) ``` ## Inputs Provide `accountId` and exactly one of `url` or `html`. `formats` accepts at least two unique values from `content`, `markdown`, `screenshot`, and `accessibilityTree`; omit it to use Cloudflare's default formats. `screenshotOptions` customizes the optional base64 screenshot. `cacheTtl` defaults to 5 seconds, and the common Browser Run page controls are available. ## Output Returns the requested HTML, Markdown, base64 screenshot, and accessibility tree fields. The action consumes Browser Run duration and is not replay-safe. # Create crawl Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/create-crawl Start an asynchronous Cloudflare Browser Run crawl. `cloudflare.createCrawl` starts an asynchronous crawl from one URL. ```ts automations/create-cloudflare-crawl.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("Crawl documentation", () => { onDashboardRun({ title: "Crawl documentation" }) const crawl = cloudflare.createCrawl({ accountId: "cloudflare-account-id", formats: ["markdown"], limit: 100, options: { includePatterns: ["https://example.com/docs/**"] }, url: "https://example.com/docs", }) sendEmail({ subject: "Crawl started", text: crawl.jobId }) }) ``` ## Inputs `accountId` and `url` are required. `render` defaults to `true`; set it to `false` for static fetching, which rejects browser-only page controls. Cloudflare defaults `formats` to `html`, `source` to `all`, `depth` to 100,000, `limit` to 10, `contentUse` to `full`, and `crawlPurposes` to all three supported purposes. Optional inputs also set cache age, modified-since timestamp, JSON extraction, include/exclude patterns, external links, and subdomains. `cacheTtl` defaults to 5 seconds. Rendered crawls accept the common Browser Run page controls. ## Output Returns `{ jobId }`. Creating a crawl starts metered provider work and is not replay-safe. Use `cloudflare.getCrawl` to read progress and paginated records. # Create DNS record Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/create-dns-record Creates a DNS record. `cloudflare.createDnsRecord` creates a DNS record. ```ts automations/cloudflare-create-dns-record.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("Create DNS record", () => { onDashboardRun({ title: "Create DNS record" }) cloudflare.createDnsRecord({ zoneId: "zone-id", type: "A", name: "www.example.com", content: "192.0.2.1", }) }) ``` Provide `zoneId`, `type`, `name`, and either `content` or structured `data`. `ttl` defaults to automatic (`1`). Optional second argument `{ account }` selects a static project account binding. Returns the created record. # Create health check Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/create-health-check Creates an HTTP, HTTPS, or TCP health check. `cloudflare.createHealthCheck` creates an HTTP, HTTPS, or TCP health check. ```ts automations/cloudflare-create-health-check.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("Create health check", () => { onDashboardRun({ title: "Create health check" }) cloudflare.createHealthCheck({ zoneId: "zone-id", name: "origin", address: "origin.example.com", type: "HTTPS", }) }) ``` `zoneId`, `name`, and `address` are required. Health Checks availability depends on the Cloudflare plan. Optional second argument `{ account }` selects a static project account binding. Returns the created health check. # Create notification policy Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/create-notification-policy Creates a Cloudflare notification policy. `cloudflare.createNotificationPolicy` creates a Cloudflare notification policy. ```ts automations/cloudflare-create-notification-policy.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("Create notification policy", () => { onDashboardRun({ title: "Create notification policy" }) cloudflare.createNotificationPolicy({ accountId: "account-id", name: "Origin alerts", alertType: "health_check_status_notification", mechanisms: { email: [{ id: "ops@example.com" }] }, }) }) ``` Provide the account, name, alert type, and at least one provider mechanism. `enabled` defaults to `true`; filters depend on the alert type. Optional second argument `{ account }` selects a static project account binding. Returns the created policy ID. # Create zone Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/create-zone Creates a zone in a Cloudflare account. `cloudflare.createZone` creates a zone in a Cloudflare account. ```ts automations/cloudflare-create-zone.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("Create zone", () => { onDashboardRun({ title: "Create zone" }) cloudflare.createZone({ accountId: "account-id", name: "example.com" }) }) ``` `accountId` and `name` are required. `type` defaults to `full`. Optional second argument `{ account }` selects a static project account binding. Returns the created zone. Creation is not replay-safe. # Delete DNS record Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/delete-dns-record Deletes one DNS record. `cloudflare.deleteDnsRecord` deletes one DNS record. ```ts automations/cloudflare-delete-dns-record.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("Delete DNS record", () => { onDashboardRun({ title: "Delete DNS record" }) cloudflare.deleteDnsRecord({ zoneId: "zone-id", recordId: "record-id" }) }) ``` `zoneId` and `recordId` are required. Optional second argument `{ account }` selects a static project account binding. Returns the deleted record ID. # Delete health check Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/delete-health-check Deletes one health check. `cloudflare.deleteHealthCheck` deletes one health check. ```ts automations/cloudflare-delete-health-check.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("Delete health check", () => { onDashboardRun({ title: "Delete health check" }) cloudflare.deleteHealthCheck({ zoneId: "zone-id", healthCheckId: "health-check-id", }) }) ``` `zoneId` and `healthCheckId` are required. Optional second argument `{ account }` selects a static project account binding. Returns the deleted health-check ID. # Delete notification policy Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/delete-notification-policy Deletes one notification policy. `cloudflare.deleteNotificationPolicy` deletes one notification policy. ```ts automations/cloudflare-delete-notification-policy.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("Delete notification policy", () => { onDashboardRun({ title: "Delete notification policy" }) cloudflare.deleteNotificationPolicy({ accountId: "account-id", policyId: "policy-id", }) }) ``` `accountId` and `policyId` are required. Optional second argument `{ account }` selects a static project account binding. Completes without a result after Cloudflare deletes the policy. # Delete zone Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/delete-zone Deletes a Cloudflare zone. `cloudflare.deleteZone` deletes a Cloudflare zone. ```ts automations/cloudflare-delete-zone.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("Delete zone", () => { onDashboardRun({ title: "Delete zone" }) cloudflare.deleteZone({ zoneId: "zone-id" }) }) ``` `zoneId` is required. This permanently removes the zone from the account. Optional second argument `{ account }` selects a static project account binding. Returns the deleted zone ID. # Extract JSON Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/extract-json Render a page and extract structured JSON with Cloudflare AI. `cloudflare.extractJson` renders a page and uses Cloudflare AI to extract structured data. ```ts automations/extract-cloudflare-json.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("Extract product data", () => { onDashboardRun({ title: "Extract product data" }) const product = cloudflare.extractJson({ accountId: "cloudflare-account-id", prompt: "Return the product name, SKU, and current price.", url: "https://example.com/products/1", }) sendEmail({ subject: "Product data", text: JSON.stringify(product) }) }) ``` ## Inputs Provide `accountId`, exactly one of `url` or `html`, and at least one of `prompt` or `responseFormat`. `responseFormat` accepts a `type` and optional JSON Schema. `customAi` supplies an ordered fallback list of model names and optional authorization values. `cacheTtl` defaults to 5 seconds, and the common Browser Run page controls are available. ## Output Returns the extracted JSON object. JSON Schema property names and extra HTTP-header names are preserved exactly. The action consumes Browser Run duration and is not replay-safe. # Extract links Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/extract-links Render a page and return its links. `cloudflare.extractLinks` renders a page and returns links discovered in it. ```ts automations/extract-cloudflare-links.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("List documentation links", () => { onDashboardRun({ title: "List documentation links" }) const links = cloudflare.extractLinks({ accountId: "cloudflare-account-id", excludeExternalLinks: true, url: "https://example.com/docs", visibleLinksOnly: true, }) sendEmail({ subject: "Documentation links", text: JSON.stringify(links) }) }) ``` ## Inputs Provide `accountId` and exactly one of `url` or `html`. `excludeExternalLinks` keeps links on the rendered origin; `visibleLinksOnly` excludes hidden links. `cacheTtl` defaults to 5 seconds. The common Browser Run timeout, request, authentication, page-setup, viewport, navigation, and wait controls are also available. ## Output Returns an array of link strings. The action consumes Browser Run duration and is not replay-safe. # Extract Markdown Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/extract-markdown Render a URL or HTML document and return its content as Markdown. `cloudflare.extractMarkdown` renders a page with Cloudflare Browser Run and converts its content to Markdown. ```ts automations/extract-cloudflare-markdown.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("Extract release notes", () => { onDashboardRun({ title: "Extract release notes" }) const markdown = cloudflare.extractMarkdown({ accountId: "cloudflare-account-id", url: "https://example.com/releases/latest", }) sendEmail({ subject: "Latest release notes", text: markdown }) }) ``` ## Inputs Provide `accountId` and exactly one of `url` or `html`. `cacheTtl` defaults to 5 seconds. Set it to `0` to turn off Cloudflare caching. Optional browser controls cover timeouts, request and resource filters, authentication, cookies, scripts, styles, headers, JavaScript, media type, user agent, viewport, navigation, and wait conditions. ## Output Returns Markdown as a string. Cloudflare may prefix it with a YAML metadata block when the page exposes supported metadata. The action consumes Browser Run duration and cannot be replayed safely. # Get accessibility tree Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/get-accessibility-tree Render a page and return its browser accessibility tree. `cloudflare.getAccessibilityTree` returns the semantic browser accessibility tree for a rendered page. ```ts automations/cloudflare-accessibility-tree.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("Inspect page accessibility", () => { onDashboardRun({ title: "Inspect page accessibility" }) const tree = cloudflare.getAccessibilityTree({ accountId: "cloudflare-account-id", interestingOnly: true, url: "https://example.com/checkout", }) sendEmail({ subject: "Accessibility tree", text: JSON.stringify(tree) }) }) ``` ## Inputs Provide `accountId` and exactly one of `url` or `html`. Set `interestingOnly` to limit the result to meaningful nodes or `root` to start at a CSS selector. `cacheTtl` defaults to 5 seconds. The common Browser Run timeout, request, authentication, page-setup, viewport, navigation, and wait controls are also available. ## Output Returns the recursive accessibility node, including roles, names, states, values, and children. Returns `null` when Cloudflare does not produce a root node. The action consumes Browser Run duration and is not replay-safe. # Get account Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/get-account Retrieves one Cloudflare account. `cloudflare.getAccount` retrieves one Cloudflare account. ```ts automations/cloudflare-get-account.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("Get account", () => { onDashboardRun({ title: "Get account" }) cloudflare.getAccount({ accountId: "account-id" }) }) ``` `accountId` is required. Optional second argument `{ account }` selects a static project account binding. Returns the account ID, name, type, and settings. # Get crawl Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/get-crawl Retrieve a Cloudflare Browser Run crawl and its records. `cloudflare.getCrawl` retrieves one crawl's status and current page of records. ```ts automations/get-cloudflare-crawl.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("Inspect crawl", () => { onDashboardRun({ title: "Inspect crawl" }) const crawl = cloudflare.getCrawl({ accountId: "cloudflare-account-id", jobId: "crawl-job-id", limit: 100, }) sendEmail({ subject: "Crawl status", text: crawl.status }) }) ``` ## Inputs `accountId` and `jobId` are required. `limit` controls page size and defaults to 50, `cursor` defaults to 0 and continues pagination, and `status` filters records to `queued`, `errored`, `completed`, `disallowed`, `skipped`, or `cancelled`. `cacheTtl` defaults to 5 seconds. ## Output Returns the job ID and status, browser seconds used, totals, optional numeric next cursor, and records. Cloudflare may encode the response cursor as a number or numeric string; Automate.ax normalizes both forms to a number you can pass back as `cursor`. Each record contains its URL and status plus available HTML, Markdown, JSON, and fetch metadata. # Get DNS record Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/get-dns-record Retrieves one DNS record. `cloudflare.getDnsRecord` retrieves one DNS record. ```ts automations/cloudflare-get-dns-record.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("Get DNS record", () => { onDashboardRun({ title: "Get DNS record" }) cloudflare.getDnsRecord({ zoneId: "zone-id", recordId: "record-id" }) }) ``` `zoneId` and `recordId` are required. Optional second argument `{ account }` selects a static project account binding. Returns the normalized DNS record. # Get health check Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/get-health-check Retrieves one health check. `cloudflare.getHealthCheck` retrieves one health check. ```ts automations/cloudflare-get-health-check.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("Get health check", () => { onDashboardRun({ title: "Get health check" }) cloudflare.getHealthCheck({ zoneId: "zone-id", healthCheckId: "health-check-id", }) }) ``` `zoneId` and `healthCheckId` are required. Optional second argument `{ account }` selects a static project account binding. Returns its HTTP/TCP configuration and status. # Get notification policy Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/get-notification-policy Retrieves one notification policy. `cloudflare.getNotificationPolicy` retrieves one notification policy. ```ts automations/cloudflare-get-notification-policy.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("Get notification policy", () => { onDashboardRun({ title: "Get notification policy" }) cloudflare.getNotificationPolicy({ accountId: "account-id", policyId: "policy-id", }) }) ``` `accountId` and `policyId` are required. Optional second argument `{ account }` selects a static project account binding. Returns the normalized policy. # Get zone Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/get-zone Retrieves one Cloudflare zone. `cloudflare.getZone` retrieves one Cloudflare zone. ```ts automations/cloudflare-get-zone.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("Get zone", () => { onDashboardRun({ title: "Get zone" }) cloudflare.getZone({ zoneId: "zone-id" }) }) ``` `zoneId` is required. Optional second argument `{ account }` selects a static project account binding. Returns the normalized zone, including account, status, type, name servers, and timestamps. # List accounts Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/list-accounts Lists connected-visible accounts with page metadata. `cloudflare.listAccounts` lists connected-visible accounts with page metadata. ```ts automations/cloudflare-list-accounts.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("List accounts", () => { onDashboardRun({ title: "List accounts" }) cloudflare.listAccounts({ page: 1, perPage: 20 }) }) ``` Use `name` to filter. `page` defaults to `1`; `perPage` defaults to `20` (5–50). Optional second argument `{ account }` selects a static project account binding. Returns `{ items, pageInfo }`; each item includes the account ID, name, type, and settings. # List available alert types Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/list-available-alert-types Lists notification alert types available to an account. `cloudflare.listAvailableAlertTypes` lists notification alert types available to an account. ```ts automations/cloudflare-list-available-alert-types.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("List available alert types", () => { onDashboardRun({ title: "List available alert types" }) cloudflare.listAvailableAlertTypes({ accountId: "account-id" }) }) ``` `accountId` is required. Availability varies by account products and plan. Optional second argument `{ account }` selects a static project account binding. Returns alert type IDs, display names, descriptions, and provider filter options. # List DNS records Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/list-dns-records Lists DNS records in a zone. `cloudflare.listDnsRecords` lists DNS records in a zone. ```ts automations/cloudflare-list-dns-records.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("List DNS records", () => { onDashboardRun({ title: "List DNS records" }) cloudflare.listDnsRecords({ zoneId: "zone-id", type: "A", page: 1 }) }) ``` `zoneId` is required. Filter by name, content, type, proxy state, tags, comments, or search text. Optional second argument `{ account }` selects a static project account binding. Returns `{ items, pageInfo }` with normalized DNS records. # List health checks Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/list-health-checks Lists health checks in a zone. `cloudflare.listHealthChecks` lists health checks in a zone. ```ts automations/cloudflare-list-health-checks.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("List health checks", () => { onDashboardRun({ title: "List health checks" }) cloudflare.listHealthChecks({ zoneId: "zone-id" }) }) ``` `zoneId` is required. Pagination defaults to page 1 with 20 results. Optional second argument `{ account }` selects a static project account binding. Returns `{ items, pageInfo }` with health-check configurations and current status. # List notification history Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/list-notification-history Lists notification deliveries for an account. `cloudflare.listNotificationHistory` lists notification deliveries for an account. ```ts automations/cloudflare-list-notification-history.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("List notification history", () => { onDashboardRun({ title: "List notification history" }) cloudflare.listNotificationHistory({ accountId: "account-id" }) }) ``` `accountId` is required. Pagination defaults to page 1 with 20 results and supports up to 1,000 results per page. Use RFC 3339 `since` and `before` timestamps to bound the delivery window. Optional second argument `{ account }` selects a static project account binding. Returns `{ items, pageInfo }` with policy, mechanism, type, and delivery timestamps. # List notification policies Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/list-notification-policies Lists notification policies for an account. `cloudflare.listNotificationPolicies` lists notification policies for an account. ```ts automations/cloudflare-list-notification-policies.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("List notification policies", () => { onDashboardRun({ title: "List notification policies" }) cloudflare.listNotificationPolicies({ accountId: "account-id" }) }) ``` `accountId` is required. Optional second argument `{ account }` selects a static project account binding. Returns all policies with alert types, filters, mechanisms, and enabled state. # List notification webhooks Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/list-notification-webhooks List webhook destinations configured for a Cloudflare account. `cloudflare.listNotificationWebhooks` lists generic and service-specific webhook destinations. ```ts automations/list-cloudflare-notification-webhooks.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("List Cloudflare webhooks", () => { onDashboardRun({ title: "List Cloudflare webhooks" }) cloudflare.listNotificationWebhooks({ accountId: "account-id" }) }) ``` `accountId` is required. Optional second argument `{ account }` selects a static project account binding. Returns all configured destinations with IDs, names, types, URLs, timestamps, and recent success or failure times. Cloudflare never returns destination secrets. # List zones Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/list-zones Lists zones with account, name, status, ordering, and pagination filters. `cloudflare.listZones` lists zones with account, name, status, ordering, and pagination filters. ```ts automations/cloudflare-list-zones.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("List zones", () => { onDashboardRun({ title: "List zones" }) cloudflare.listZones({ accountId: "account-id", status: "active" }) }) ``` All filters are optional. Pagination defaults to page 1 with 20 results. Optional second argument `{ account }` selects a static project account binding. Returns `{ items, pageInfo }` with normalized zone records. # Purge cache Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/purge-cache Purges cached content for a zone. `cloudflare.purgeCache` purges cached content for a zone. ```ts automations/cloudflare-purge-cache.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("Purge cache", () => { onDashboardRun({ title: "Purge cache" }) cloudflare.purgeCache({ zoneId: "zone-id", tags: ["catalog"] }) }) ``` Choose exactly one mode: `purgeEverything`, `files`, `hosts`, `prefixes`, or `tags`. Selective modes accept at most 30 entries. Optional second argument `{ account }` selects a static project account binding. Returns Cloudflare's purge operation ID. # Render content Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/render-content Render a URL or HTML document and return its serialized HTML. `cloudflare.renderContent` opens a page in Cloudflare Browser Run and returns the rendered HTML. ```ts automations/render-cloudflare-content.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("Render product page", () => { onDashboardRun({ title: "Render product page" }) const html = cloudflare.renderContent({ accountId: "cloudflare-account-id", url: "https://example.com/products/1", }) sendEmail({ subject: "Rendered product page", html }) }) ``` ## Inputs Provide `accountId` and exactly one of `url` or `html`. `cacheTtl` controls Cloudflare's response cache in seconds and defaults to 5; set it to `0` to disable caching. Optional browser controls include timeouts, request and resource filters, authentication, cookies, scripts, styles, headers, JavaScript, media type, user agent, viewport, navigation settings, and wait conditions. ## Output Returns the page's rendered HTML as a string. The action consumes Browser Run duration and is not replay-safe. # Render PDF Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/render-pdf Render a URL or HTML document and return a PDF. `cloudflare.renderPdf` prints a rendered page to PDF through Cloudflare Browser Run. ```ts automations/render-cloudflare-pdf.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("Render invoice PDF", () => { onDashboardRun({ title: "Render invoice PDF" }) const pdf = cloudflare.renderPdf({ accountId: "cloudflare-account-id", pdfOptions: { format: "letter", printBackground: true }, url: "https://example.com/invoices/1", }) // Pass pdf to the file-storage or email action that should publish it. }) ``` ## Inputs Provide `accountId` and exactly one of `url` or `html`. `pdfOptions` controls paper format or dimensions, scale, orientation, margins, page ranges, backgrounds, CSS page sizing, headers, footers, outline, tagging, and PDF timeout. Cloudflare defaults to letter paper, scale 1, a 30-second PDF timeout, and tagged output. `cacheTtl` defaults to 5 seconds, and the common Browser Run page controls are available. ## Output Returns the PDF as an `application/pdf` `Blob`. The action consumes Browser Run duration and is not replay-safe. # Rerun zone activation check Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/rerun-zone-activation-check Requests another activation check for a pending zone. `cloudflare.rerunZoneActivationCheck` requests another activation check for a pending zone. ```ts automations/cloudflare-rerun-zone-activation-check.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("Rerun zone activation check", () => { onDashboardRun({ title: "Rerun zone activation check" }) cloudflare.rerunZoneActivationCheck({ zoneId: "zone-id" }) }) ``` `zoneId` is required. Cloudflare limits how often activation checks can run. Optional second argument `{ account }` selects a static project account binding. Returns the zone ID whose activation check was requested. # Scrape elements Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/scrape-elements Render a page and extract elements that match CSS selectors. `cloudflare.scrapeElements` extracts rendered element content and geometry for CSS selectors. ```ts automations/scrape-cloudflare-elements.automation.ts theme={null} import { automation, onDashboardRun, sendEmail } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("Scrape product price", () => { onDashboardRun({ title: "Scrape product price" }) const elements = cloudflare.scrapeElements({ accountId: "cloudflare-account-id", elements: [{ selector: "[data-product-price]" }], url: "https://example.com/products/1", }) sendEmail({ subject: "Product price", text: JSON.stringify(elements) }) }) ``` ## Inputs Provide `accountId`, one or more `elements` with a non-empty CSS `selector`, and exactly one of `url` or `html`. `cacheTtl` defaults to 5 seconds. The common Browser Run timeout, request, authentication, page-setup, viewport, navigation, and wait controls are also available. ## Output Returns one entry per selector. Each entry contains a `results` array with every matched element's text, HTML, attributes, position, width, and height. The action consumes Browser Run duration and is not replay-safe. # Update DNS record Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/update-dns-record Overwrites one DNS record. `cloudflare.updateDnsRecord` overwrites one DNS record. ```ts automations/cloudflare-update-dns-record.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("Update DNS record", () => { onDashboardRun({ title: "Update DNS record" }) cloudflare.updateDnsRecord({ zoneId: "zone-id", recordId: "record-id", type: "A", name: "www.example.com", content: "192.0.2.2", }) }) ``` Provide the zone and record IDs plus the complete record type, name, and content or data. Optional second argument `{ account }` selects a static project account binding. Returns the updated record. # Update health check Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/update-health-check Overwrites a health-check configuration. `cloudflare.updateHealthCheck` overwrites a health-check configuration. ```ts automations/cloudflare-update-health-check.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("Update health check", () => { onDashboardRun({ title: "Update health check" }) cloudflare.updateHealthCheck({ zoneId: "zone-id", healthCheckId: "health-check-id", name: "origin", address: "origin.example.com", type: "HTTPS", }) }) ``` Provide both IDs and the complete `name` and `address`; protocol settings are optional. Optional second argument `{ account }` selects a static project account binding. Returns the updated health check. # Update notification policy Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/update-notification-policy Overwrites one notification policy. `cloudflare.updateNotificationPolicy` overwrites one notification policy. ```ts automations/cloudflare-update-notification-policy.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("Update notification policy", () => { onDashboardRun({ title: "Update notification policy" }) cloudflare.updateNotificationPolicy({ accountId: "account-id", policyId: "policy-id", name: "Origin alerts", alertType: "health_check_status_notification", enabled: true, mechanisms: { email: [{ id: "ops@example.com" }] }, }) }) ``` Provide both IDs and the complete policy definition. Optional second argument `{ account }` selects a static project account binding. Returns the updated policy ID. # Update zone Source: https://docs.automate.ax/reference/integrations/cloudflare/actions/update-zone Updates mutable zone settings. `cloudflare.updateZone` updates mutable zone settings. ```ts automations/cloudflare-update-zone.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("Update zone", () => { onDashboardRun({ title: "Update zone" }) cloudflare.updateZone({ zoneId: "zone-id", paused: true }) }) ``` Provide `zoneId` and at least one of `paused`, `type`, or `vanityNameServers`. Optional second argument `{ account }` selects a static project account binding. Returns the updated zone. # Connect Cloudflare and extend its API Source: https://docs.automate.ax/reference/integrations/cloudflare/authorization-and-raw-api Connect Cloudflare with OAuth or least-privilege API tokens, receive verified alerts, and call uncovered v4 endpoints. Automate.ax connects Cloudflare through OAuth or an API token. OAuth requests the exact Cloudflare permission each callable needs: Account Settings Read, Zone Read or Write, DNS Read or Write, Cache Purge, `Healthcheck (Legacy)` Read or Write, Notifications Read or Write, or Browser Rendering Write. Managed notification triggers request Notifications Write. Every API token must include Account Settings Read so Automate.ax can identify the connected account. Add only the callable permissions and account or zone resources the automation uses. For Browser Run, the minimum is Account Settings Read plus Browser Run Edit on the target account. The packaged surface covers Browser Run quick actions and crawls plus accounts, zones, DNS records, cache purge, health checks, and notifications. Browser Run actions require an account with the product available and Browser Rendering Write permission. Quick actions consume browser duration; crawls report accumulated `browserSecondsUsed`. Cloudflare's plan, concurrency, request-rate, and browser-time limits still apply. Workers Browser Rendering bindings and long-lived DevTools or WebSocket browser sessions are not packaged actions. Cloudflare Workers, Pages, storage, rule sets, Zero Trust, load balancing, certificates, log delivery, analytics, billing, media, AI, and enterprise networking remain separate product areas. Use `getCloudflareApi(account)` inside a custom account-backed action for another Cloudflare REST endpoint. Paths are relative to `https://api.cloudflare.com/client/v4/`; public body and query keys use camel case and the helper converts Cloudflare wire keys recursively. For an uncovered Browser Run endpoint, set `keyFormat: "browser-rendering"`; use `requestBlob` for binary data and `responseKeyFormat: "preserve"` for provider-defined or extracted JSON keys. Every response requires a Zod schema. Failures throw `CloudflareApiError` with the HTTP status, provider errors, retry delay, and rate-limit headers. Managed triggers create one generic webhook destination and notification policy per account, alert type, and filter set. Cloudflare sends the destination secret in `cf-webhook-auth`; Automate.ax verifies it before parsing or ingesting the body. Provider retries are deduplicated by exact-body SHA-256 hash. Cloudflare generic webhooks, Health Checks, and some alert types require particular products or paid plans. Use `cloudflare.listAvailableAlertTypes` to inspect what an account supports. See Cloudflare's [Browser Run documentation](https://developers.cloudflare.com/browser-run/), [Browser Run pricing and limits](https://developers.cloudflare.com/browser-run/platform/pricing/), [API documentation](https://developers.cloudflare.com/api/), [API-token permissions](https://developers.cloudflare.com/fundamentals/api/reference/permissions/), [notification webhooks](https://developers.cloudflare.com/notifications/get-started/configure-webhooks/), and [API rate limits](https://developers.cloudflare.com/fundamentals/api/reference/limits/). # Cloudflare Source: https://docs.automate.ax/reference/integrations/cloudflare/index Render and crawl websites, manage Cloudflare infrastructure, and react to security and availability alerts. ## Exports ```ts theme={null} import { cloudflare, cloudflareAccount, getCloudflareApi, } from "automate.ax/cloudflare" ``` * `cloudflare` contains the packaged Cloudflare actions and triggers. * `cloudflareAccount("name")` selects a named Cloudflare connection. * `getCloudflareApi` creates the authenticated Cloudflare API helper for a custom account-backed action. Read [Connect Cloudflare and extend its API](/reference/integrations/cloudflare/authorization-and-raw-api) for OAuth permissions, least-privilege API tokens, verified alerts, and raw v4 calls. ## Triggers * [On notification](/reference/integrations/cloudflare/triggers/on-notification) * [On Layer 4 DDoS attack](/reference/integrations/cloudflare/triggers/on-layer-4-ddos-attack) * [On Layer 7 DDoS attack](/reference/integrations/cloudflare/triggers/on-layer-7-ddos-attack) * [On SSL certificate event](/reference/integrations/cloudflare/triggers/on-ssl-certificate-event) * [On origin health-check status changed](/reference/integrations/cloudflare/triggers/on-origin-health-check-status-changed) * [On Access certificate expiring](/reference/integrations/cloudflare/triggers/on-access-certificate-expiring) ## Actions ### Browser Run * [Render content](/reference/integrations/cloudflare/actions/render-content) * [Extract Markdown](/reference/integrations/cloudflare/actions/extract-markdown) * [Get accessibility tree](/reference/integrations/cloudflare/actions/get-accessibility-tree) * [Extract links](/reference/integrations/cloudflare/actions/extract-links) * [Scrape elements](/reference/integrations/cloudflare/actions/scrape-elements) * [Capture screenshot](/reference/integrations/cloudflare/actions/capture-screenshot) * [Render PDF](/reference/integrations/cloudflare/actions/render-pdf) * [Capture snapshot](/reference/integrations/cloudflare/actions/capture-snapshot) * [Extract JSON](/reference/integrations/cloudflare/actions/extract-json) * [Create crawl](/reference/integrations/cloudflare/actions/create-crawl) * [Get crawl](/reference/integrations/cloudflare/actions/get-crawl) * [Cancel crawl](/reference/integrations/cloudflare/actions/cancel-crawl) ### Infrastructure and notifications * [List accounts](/reference/integrations/cloudflare/actions/list-accounts) * [Get account](/reference/integrations/cloudflare/actions/get-account) * [List zones](/reference/integrations/cloudflare/actions/list-zones) * [Get zone](/reference/integrations/cloudflare/actions/get-zone) * [Create zone](/reference/integrations/cloudflare/actions/create-zone) * [Update zone](/reference/integrations/cloudflare/actions/update-zone) * [Delete zone](/reference/integrations/cloudflare/actions/delete-zone) * [Rerun zone activation check](/reference/integrations/cloudflare/actions/rerun-zone-activation-check) * [List DNS records](/reference/integrations/cloudflare/actions/list-dns-records) * [Get DNS record](/reference/integrations/cloudflare/actions/get-dns-record) * [Create DNS record](/reference/integrations/cloudflare/actions/create-dns-record) * [Update DNS record](/reference/integrations/cloudflare/actions/update-dns-record) * [Delete DNS record](/reference/integrations/cloudflare/actions/delete-dns-record) * [Purge cache](/reference/integrations/cloudflare/actions/purge-cache) * [List health checks](/reference/integrations/cloudflare/actions/list-health-checks) * [Get health check](/reference/integrations/cloudflare/actions/get-health-check) * [Create health check](/reference/integrations/cloudflare/actions/create-health-check) * [Update health check](/reference/integrations/cloudflare/actions/update-health-check) * [Delete health check](/reference/integrations/cloudflare/actions/delete-health-check) * [List available alert types](/reference/integrations/cloudflare/actions/list-available-alert-types) * [List notification history](/reference/integrations/cloudflare/actions/list-notification-history) * [List notification policies](/reference/integrations/cloudflare/actions/list-notification-policies) * [Get notification policy](/reference/integrations/cloudflare/actions/get-notification-policy) * [Create notification policy](/reference/integrations/cloudflare/actions/create-notification-policy) * [Update notification policy](/reference/integrations/cloudflare/actions/update-notification-policy) * [Delete notification policy](/reference/integrations/cloudflare/actions/delete-notification-policy) * [List notification webhooks](/reference/integrations/cloudflare/actions/list-notification-webhooks) # On Access certificate expiring Source: https://docs.automate.ax/reference/integrations/cloudflare/triggers/on-access-certificate-expiring Runs when a Cloudflare Access custom certificate approaches expiration. `cloudflare.onAccessCertificateExpiring` runs when a Cloudflare Access custom certificate approaches expiration. Automate.ax creates the generic webhook destination and notification policy, verifies `cf-webhook-auth`, and removes managed resources when the deployment no longer subscribes. ```ts automations/cloudflare-on-access-certificate-expiring.automation.ts theme={null} import { automation } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("On Access certificate expiring", () => { const event = cloudflare.onAccessCertificateExpiring({ accountId: "account-id", }) // Rotate the expiring Cloudflare Access certificate. }) ``` Optional `filters` narrow the managed Cloudflare policy. Optional `account` selects a static project account binding. Returns the normalized alert type, provider data, text, timestamp, account and policy IDs, policy name, correlation ID, and alert state when present. > [!WARNING] > > Cloudflare generic webhooks and individual alert types can require a paid plan > or enabled product. # On Layer 4 DDoS attack Source: https://docs.automate.ax/reference/integrations/cloudflare/triggers/on-layer-4-ddos-attack Runs for advanced network-layer DDoS attack alerts. `cloudflare.onLayer4DdosAttack` runs for advanced network-layer DDoS attack alerts. Automate.ax creates the generic webhook destination and notification policy, verifies `cf-webhook-auth`, and removes managed resources when the deployment no longer subscribes. ```ts automations/cloudflare-on-layer-4-ddos-attack.automation.ts theme={null} import { automation } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("On Layer 4 DDoS attack", () => { const event = cloudflare.onLayer4DdosAttack({ accountId: "account-id" }) // Escalate the Cloudflare Layer 4 DDoS alert. }) ``` Optional `filters` narrow the managed Cloudflare policy. Optional `account` selects a static project account binding. Returns the normalized alert type, provider data, text, timestamp, account and policy IDs, policy name, correlation ID, and alert state when present. > [!WARNING] > > Cloudflare generic webhooks and individual alert types can require a paid plan > or enabled product. # On Layer 7 DDoS attack Source: https://docs.automate.ax/reference/integrations/cloudflare/triggers/on-layer-7-ddos-attack Runs for advanced application-layer DDoS attack alerts. `cloudflare.onLayer7DdosAttack` runs for advanced application-layer DDoS attack alerts. Automate.ax creates the generic webhook destination and notification policy, verifies `cf-webhook-auth`, and removes managed resources when the deployment no longer subscribes. ```ts automations/cloudflare-on-layer-7-ddos-attack.automation.ts theme={null} import { automation } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("On Layer 7 DDoS attack", () => { const event = cloudflare.onLayer7DdosAttack({ accountId: "account-id" }) // Escalate the Cloudflare Layer 7 DDoS alert. }) ``` Optional `filters` narrow the managed Cloudflare policy. Optional `account` selects a static project account binding. Returns the normalized alert type, provider data, text, timestamp, account and policy IDs, policy name, correlation ID, and alert state when present. > [!WARNING] > > Cloudflare generic webhooks and individual alert types can require a paid plan > or enabled product. # On notification Source: https://docs.automate.ax/reference/integrations/cloudflare/triggers/on-notification Runs for any selected Cloudflare notification alert type. `cloudflare.onNotification` runs for any selected Cloudflare notification alert type. Automate.ax creates the generic webhook destination and notification policy, verifies `cf-webhook-auth`, and removes managed resources when the deployment no longer subscribes. ```ts automations/cloudflare-on-notification.automation.ts theme={null} import { automation } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("On notification", () => { const event = cloudflare.onNotification({ accountId: "account-id", alertTypes: ["health_check_status_notification"], }) // Route the Cloudflare notification by alert type. }) ``` Choose one or more `alertTypes`; optional `filters` use Cloudflare's alert-policy filters. Optional `account` selects a static project account binding. Returns the normalized alert type, provider data, text, timestamp, account and policy IDs, policy name, correlation ID, and alert state when present. > [!WARNING] > > Cloudflare generic webhooks and individual alert types can require a paid plan > or enabled product. # On origin health-check status changed Source: https://docs.automate.ax/reference/integrations/cloudflare/triggers/on-origin-health-check-status-changed Runs when an origin health check changes status. `cloudflare.onOriginHealthCheckStatusChanged` runs when an origin health check changes status. Automate.ax creates the generic webhook destination and notification policy, verifies `cf-webhook-auth`, and removes managed resources when the deployment no longer subscribes. ```ts automations/cloudflare-on-origin-health-check-status-changed.automation.ts theme={null} import { automation } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("On origin health-check status changed", () => { const event = cloudflare.onOriginHealthCheckStatusChanged({ accountId: "account-id", }) // Update incident state from the Cloudflare origin health alert. }) ``` Optional `filters`, such as `healthCheckId`, narrow the managed policy. Optional `account` selects a static project account binding. Returns the normalized alert type, provider data, text, timestamp, account and policy IDs, policy name, correlation ID, and alert state when present. > [!WARNING] > > Cloudflare generic webhooks and individual alert types can require a paid plan > or enabled product. # On SSL certificate event Source: https://docs.automate.ax/reference/integrations/cloudflare/triggers/on-ssl-certificate-event Runs for dedicated SSL certificate lifecycle events. `cloudflare.onSslCertificateEvent` runs for dedicated SSL certificate lifecycle events. Automate.ax creates the generic webhook destination and notification policy, verifies `cf-webhook-auth`, and removes managed resources when the deployment no longer subscribes. ```ts automations/cloudflare-on-ssl-certificate-event.automation.ts theme={null} import { automation } from "automate.ax" import { cloudflare } from "automate.ax/cloudflare" export default automation("On SSL certificate event", () => { const event = cloudflare.onSslCertificateEvent({ accountId: "account-id" }) // Route the Cloudflare SSL certificate alert by type. }) ``` Optional `filters` narrow the managed Cloudflare policy. Optional `account` selects a static project account binding. Returns the normalized alert type, provider data, text, timestamp, account and policy IDs, policy name, correlation ID, and alert state when present. > [!WARNING] > > Cloudflare generic webhooks and individual alert types can require a paid plan > or enabled product. # Archive cloud task Source: https://docs.automate.ax/reference/integrations/codex/actions/archive-cloud-task Archive a completed Codex cloud task. > [!WARNING] > > Codex Cloud does not currently provide an official public REST API. This > action calls undocumented ChatGPT backend endpoints that may change without > notice. `codex.archiveCloudTask` removes one Codex cloud task from the current-task list. ```ts automations/archive-codex-task.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { codex } from "automate.ax/codex" export default automation("Archive Codex task", () => { onSchedule({ schedule: "0 0 * * 0" }) codex.archiveCloudTask({ taskId: "task_e_abc123" }) }) ``` Archiving does not delete the task. Restore it with `codex.unarchiveCloudTask`. Optional second argument `{ account }` defaults to the project binding. # Cancel cloud task Source: https://docs.automate.ax/reference/integrations/codex/actions/cancel-cloud-task Request cancellation of an active Codex cloud task turn. > [!WARNING] > > Codex Cloud does not currently provide an official public REST API. This > action calls undocumented ChatGPT backend endpoints that may change without > notice. `codex.cancelCloudTask` requests cancellation of the task's active turn. ```ts automations/cancel-codex-task.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { codex } from "automate.ax/codex" export default automation("Cancel Codex task", () => { onSchedule({ schedule: "0 18 * * 1-5" }) codex.cancelCloudTask({ taskId: "task_e_abc123" }) }) ``` Cancellation is asynchronous. Call `codex.getCloudTask` to confirm that the active attempt reached `cancelled`. Optional second argument `{ account }` defaults to the project binding. # Continue cloud task Source: https://docs.automate.ax/reference/integrations/codex/actions/continue-cloud-task Start another remote turn on an existing Codex cloud task. > [!WARNING] > > Codex Cloud does not currently provide an official public REST API. This > action calls undocumented ChatGPT backend endpoints that may change without > notice. `codex.continueCloudTask` sends a follow-up instruction to an existing task. ```ts automations/continue-codex-task.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { codex } from "automate.ax/codex" export default automation("Continue Codex task", () => { onSchedule({ schedule: "0 10 * * 1-5" }) const turn = codex.continueCloudTask({ mode: "code", prompt: "Run the full test suite and fix any failures.", taskId: "task_e_abc123", }) // Send the new Codex turn URL to the requester. }) ``` `mode` defaults to `code`, which lets the remote agent change the repository. Use `ask` for a response without repository changes. By default, the action continues the task's current assistant turn; pass `turnId` to continue a specific turn. Optional second argument `{ account }` defaults to the project binding. The returned turn starts asynchronously. # Create cloud pull request Source: https://docs.automate.ax/reference/integrations/codex/actions/create-cloud-pull-request Create a GitHub pull request from a completed Codex cloud turn. > [!WARNING] > > Codex Cloud does not currently provide an official public REST API. This > action calls undocumented ChatGPT backend endpoints that may change without > notice. `codex.createCloudPullRequest` publishes the diff from a completed Codex cloud turn as a GitHub pull request. ```ts automations/create-codex-pr.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { codex } from "automate.ax/codex" export default automation("Create Codex PR", () => { onSchedule({ schedule: "0 11 * * 1-5" }) const request = codex.createCloudPullRequest({ draft: true, taskId: "task_e_abc123", }) // Send the Codex pull request URL to the reviewer. }) ``` The task's current completed assistant turn is used by default. Pass `turnId` to publish another completed attempt. `draft` defaults to `false`. Optional second argument `{ account }` defaults to the project binding. PR creation is asynchronous; call `codex.getCloudTask` until its `pullRequests` contains the resulting GitHub URL and metadata. # Get cloud task Source: https://docs.automate.ax/reference/integrations/codex/actions/get-cloud-task Get a Codex cloud task's output, diff, attempts, and pull requests. > [!WARNING] > > Codex Cloud does not currently provide an official public REST API. This > action calls undocumented ChatGPT backend endpoints that may change without > notice. `codex.getCloudTask` retrieves the detailed result and complete turn history of one remote task. ```ts automations/get-codex-task.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { codex } from "automate.ax/codex" export default automation("Inspect Codex task", () => { onSchedule({ schedule: "*/5 * * * *" }) const task = codex.getCloudTask({ taskId: "task_e_abc123" }) // Publish the task's complete turn history, diffs, and pull requests. }) ``` The task includes its current state, environment, branch, latest-attempt diff summary, current turn ID, latest prompt, complete `turns` history, and normalized GitHub pull requests. Each turn contains its user prompt and every assistant attempt. An attempt includes `messages`, the complete inline unified `diff`, its turn status, error, and attempt number. Top-level `attempts` contains the current turn's attempts for convenient result handling. Optional second argument `{ account }` defaults to the project binding. Task `status` is `pending`, `ready`, `applied`, `error`, or `unknown`. `unknown` preserves a new provider state so an automation does not wait forever after the backend contract changes. # List cloud environments Source: https://docs.automate.ax/reference/integrations/codex/actions/list-cloud-environments List the remote environments configured for Codex cloud. > [!WARNING] > > Codex Cloud does not currently provide an official public REST API. This > action calls undocumented ChatGPT backend endpoints that may change without > notice. `codex.listCloudEnvironments` returns the Codex cloud environments available to the connected ChatGPT workspace. ```ts automations/list-codex-environments.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { codex } from "automate.ax/codex" export default automation("List Codex environments", () => { onSchedule({ schedule: "0 9 * * 1" }) const page = codex.listCloudEnvironments({ limit: 20 }) // Store the environment IDs for later Codex task submissions. }) ``` Each environment includes its stable `id`, display `label`, `isPinned` state, and current `taskCount`. `limit` accepts `1` through `50` and defaults to `50`. Pass `cursor` from one result to retrieve the next page. Pass an environment ID to `codex.startCloudTask` or `codex.listCloudTasks`. Optional second argument `{ account }` defaults to the project binding. # List cloud tasks Source: https://docs.automate.ax/reference/integrations/codex/actions/list-cloud-tasks List recent remote tasks from Codex cloud. > [!WARNING] > > Codex Cloud does not currently provide an official public REST API. This > action calls undocumented ChatGPT backend endpoints that may change without > notice. `codex.listCloudTasks` returns recent Codex cloud tasks from the connected ChatGPT workspace. ```ts automations/check-codex-tasks.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { codex } from "automate.ax/codex" export default automation("Check Codex tasks", () => { onSchedule({ schedule: "*/5 * * * *" }) const page = codex.listCloudTasks({ environmentId: "env_abc123", filter: "current", limit: 10, }) // Index the Codex tasks and persist the cursor for the next page. }) ``` Connect a Codex access token. `environmentId` optionally filters the results to one configured environment. `filter` accepts `current`, `archived`, or `all` and defaults to `current`; use `archived` to find a task before restoring it with `codex.unarchiveCloudTask`. `limit` accepts `1` through `20` and defaults to `20`. Pass a previous `cursor` to retrieve the next page. Optional second argument `{ account }` defaults to the project binding. Each task includes its ID, ChatGPT URL, title, last update time when reported, status, branch, environment label, archive state, attempt count, pull requests, and the latest attempt's changed-file and line counts. The list endpoint does not report a stable environment ID, so `environmentId` is `null`; use `codex.getCloudTask` when you need it. `status` is `pending`, `ready`, `applied`, `error`, or `unknown` when Codex reports a state this integration does not yet recognize. # Run cloud task Source: https://docs.automate.ax/reference/integrations/codex/actions/run-cloud-task Run a Codex cloud task and continue after it finishes. > [!WARNING] > > Codex Cloud does not currently provide an official public REST API. This > callable uses undocumented ChatGPT backend endpoints that may change without > notice. `codex.runCloudTask` submits a task and returns a signal that materializes after Codex reaches a terminal state. ```ts automations/run-codex-task.automation.ts theme={null} import { automation, t } from "automate.ax" import { codex } from "automate.ax/codex" import { linear } from "automate.ax/linear" export default automation("Implement Linear issues", () => { const issue = linear.onIssueCreated() const task = codex.runCloudTask({ branch: "main", environmentId: "env_abc123", prompt: t`Implement ${issue.identifier} and run the test suite.`, }) // Post the completed task's messages and diff to the Linear issue. }) ``` The task submission fields match `codex.startCloudTask`. `pollInterval` accepts a compact duration or milliseconds and defaults to `"5m"`. `maxPolls` accepts `1` through `120` and defaults to `36`, giving the default wait roughly three hours to finish. Optional second argument `{ account }` defaults to the project binding and is reused for every status check. Automate.ax checks immediately, then runs each remaining check as a new action after a durable delay. It doesn't keep a Lambda invocation open. One reusable delivery route handles every check, so increasing `maxPolls` does not enlarge the automation plan. The returned signal continues in a correlated child context when the task is no longer `pending`. The result is the same detailed task returned by `codex.getCloudTask`. Inspect `status` for `ready`, `applied`, `error`, or `unknown`. The signal fails when the polling budget is exhausted or a provider request exhausts its retries. > [!WARNING] > > `codex.runCloudTask` uses a hidden invocation trigger and introduces > additional context roots. The example's `issue.identifier` signal anchors the > starter action to the Linear event. If every task input is literal, wrap the > call in `withPrerequisites(initiatingSignal, () => ...)`. Use `codex.startCloudTask` when you only need immediate task identity. Use `codex.waitForCloudTask` when the task was submitted separately or when you need to wait for a follow-up turn. # Start cloud task Source: https://docs.automate.ax/reference/integrations/codex/actions/start-cloud-task Start a remote coding task in Codex cloud. > [!WARNING] > > Codex Cloud does not currently provide an official public REST API. This > action calls undocumented ChatGPT backend endpoints that may change without > notice. `codex.startCloudTask` submits a coding task directly to a configured Codex cloud environment. Automate.ax dispatches the request; the Codex agent runs in OpenAI's cloud container. ```ts automations/start-codex-task.automation.ts theme={null} import { automation, t } from "automate.ax" import { codex } from "automate.ax/codex" import { linear } from "automate.ax/linear" export default automation("Implement Linear issues", () => { const issue = linear.onIssueCreated() const task = codex.startCloudTask({ branch: "main", environmentId: "env_abc123", mode: "code", prompt: t`Implement ${issue.identifier} and open a pull request.`, }) // Persist the Codex task ID and URL for later polling. }) ``` Connect a Codex access token from a ChatGPT Business or Enterprise workspace. Create the token in your workspace's access-token settings, and configure the target repository and setup scripts as a Codex cloud environment before running the action. `environmentId` is the stable environment identifier returned by `codex.listCloudEnvironments`. `branch` is required so the headless dispatcher never guesses a ref from its own checkout. Set `attempts` from `1` to `4`; it defaults to `1`. `mode` defaults to `code`; use `ask` when you only want an answer and no repository changes. Optional second argument `{ account }` defaults to the project binding. The result contains the new task ID and its ChatGPT URL. Submission is asynchronous. Use `codex.runCloudTask` when downstream work should wait for completion, `codex.waitForCloudTask` when you already have a task ID or signal, or `codex.getCloudTask` for one immediate status check. # Unarchive cloud task Source: https://docs.automate.ax/reference/integrations/codex/actions/unarchive-cloud-task Restore an archived Codex cloud task. > [!WARNING] > > Codex Cloud does not currently provide an official public REST API. This > action calls undocumented ChatGPT backend endpoints that may change without > notice. `codex.unarchiveCloudTask` restores a task archived with `codex.archiveCloudTask`. ```ts automations/unarchive-codex-task.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { codex } from "automate.ax/codex" export default automation("Restore Codex task", () => { onSchedule({ schedule: "0 9 * * 1" }) codex.unarchiveCloudTask({ taskId: "task_e_abc123" }) }) ``` The restored task appears in subsequent `codex.listCloudTasks` results. Optional second argument `{ account }` defaults to the project binding. # Wait for cloud task Source: https://docs.automate.ax/reference/integrations/codex/actions/wait-for-cloud-task Continue an automation after an existing Codex cloud task finishes. > [!WARNING] > > Codex Cloud does not currently provide an official public REST API. This > callable uses undocumented ChatGPT backend endpoints that may change without > notice. `codex.waitForCloudTask` durably checks an existing task until it reaches a terminal state. ```ts automations/wait-for-codex-task.automation.ts theme={null} import { automation, onHttpRequest, withPrerequisites } from "automate.ax" import { codex } from "automate.ax/codex" export default automation("Wait for Codex", () => { const request = onHttpRequest({ scope: "automation" }) const completed = withPrerequisites(request, () => { const started = codex.startCloudTask({ branch: "main", environmentId: "env_abc123", prompt: "Implement the requested change and validate it.", }) return codex.waitForCloudTask({ taskId: started.id, pollInterval: "5m", maxPolls: 36, }) }) // Publish the completed Codex status and pull requests. }) ``` `taskId` accepts a task ID or compatible signal, including `codex.startCloudTask(...).id` or `codex.continueCloudTask(...).taskId`. `pollInterval` defaults to `"5m"`. `maxPolls` defaults to `36` and accepts up to `120`. Optional second argument `{ account }` defaults to the project binding and is reused for every status check. Automate.ax checks immediately, then performs each remaining check after a durable delay, so provider work can outlive any individual Lambda invocation. One reusable delivery route handles every check, so the plan stays the same size at every polling budget. Deliveries start independent roots, and correlation joins the terminal delivery with the initiating context. The result emits when the task leaves `pending`, including an explicit `unknown` state for an unrecognized provider state. It includes the prompt, turn history, attempts, messages, diff, branch, environment, and pull requests. The signal fails if the task remains pending for the complete polling budget or a provider request exhausts its retries. > [!WARNING] > > `codex.waitForCloudTask` uses a hidden invocation trigger and introduces > additional context roots. Scope literal starter actions to their initiating > signal. In this example, `withPrerequisites` anchors both `startCloudTask` and > the wait composition to the HTTP request. # Codex Source: https://docs.automate.ax/reference/integrations/codex/index Start, continue, wait for, archive, and cancel Codex cloud tasks or open pull requests from completed work. ## Exports ```ts theme={null} import { codex, codexAccount } from "automate.ax/codex" ``` * `codex` contains the packaged Codex actions. * `codexAccount("name")` selects a named Codex connection. ## Actions * [Archive cloud task](/reference/integrations/codex/actions/archive-cloud-task) * [Cancel cloud task](/reference/integrations/codex/actions/cancel-cloud-task) * [Continue cloud task](/reference/integrations/codex/actions/continue-cloud-task) * [Create cloud pull request](/reference/integrations/codex/actions/create-cloud-pull-request) * [Get cloud task](/reference/integrations/codex/actions/get-cloud-task) * [List cloud environments](/reference/integrations/codex/actions/list-cloud-environments) * [List cloud tasks](/reference/integrations/codex/actions/list-cloud-tasks) * [Run cloud task](/reference/integrations/codex/actions/run-cloud-task) * [Start cloud task](/reference/integrations/codex/actions/start-cloud-task) * [Unarchive cloud task](/reference/integrations/codex/actions/unarchive-cloud-task) * [Wait for cloud task](/reference/integrations/codex/actions/wait-for-cloud-task) # Run action Source: https://docs.automate.ax/reference/integrations/convex/actions/run-action Run a public or internal Convex action. `convex.runAction` calls a named Convex action and returns its Convex value. ```ts automations/run-convex-report.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { convex } from "automate.ax/convex" export default automation("Run Convex report", () => { onSchedule({ schedule: "0 8 * * 1" }) convex.runAction({ functionName: "reports:generate", arguments: { format: "weekly" }, }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `functionName` | `string` | Yes | None | Exported function path. | | `arguments` | `Record` | No | `{}` | Convex function arguments. | | `deployment` | `string` | No | `prod` | Deployment reference for project OAuth. Omit it for a deployment-key account. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"convex">` | No | Project default | Connected Convex account. | Use the HTTP API path for internal actions, without the `internal.` prefix used by generated Convex references. Internal actions require credentials allowed to run them. Convex action failures propagate as automation action failures. The selected deployment must use a hosted `.convex.cloud` URL. Automate.ax can't reach a local development deployment. # Run mutation Source: https://docs.automate.ax/reference/integrations/convex/actions/run-mutation Run a public or internal Convex mutation. `convex.runMutation` calls a named mutation and returns its Convex value. ```ts automations/create-convex-message.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { convex } from "automate.ax/convex" export default automation("Create Convex message", () => { onSchedule({ schedule: "0 9 * * *" }) convex.runMutation({ functionName: "messages:create", arguments: { body: "Daily check-in" }, }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `functionName` | `string` | Yes | None | Exported function path. | | `arguments` | `Record` | No | `{}` | Convex function arguments. | | `deployment` | `string` | No | `prod` | Deployment reference for project OAuth. Omit it for a deployment-key account. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"convex">` | No | Project default | Connected Convex account. | The mutation runs with the connected project token or deploy key. Prefer an internal mutation for service-only operations and grant only the run-internal permission it needs. The selected deployment must use a hosted `.convex.cloud` URL. Automate.ax can't reach a local development deployment. # Run query Source: https://docs.automate.ax/reference/integrations/convex/actions/run-query Run a public or internal Convex query. `convex.runQuery` calls a named query on a connected Convex deployment and returns its Convex value. ```ts automations/read-convex-messages.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { convex } from "automate.ax/convex" export default automation("Read Convex messages", () => { onSchedule({ schedule: "0 * * * *" }) convex.runQuery({ functionName: "messages:list", arguments: { limit: 25 }, }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `functionName` | `string` | Yes | None | Exported HTTP API path, such as `messages:list` or `reports:get`. | | `arguments` | `Record` | No | `{}` | Convex function arguments. | | `deployment` | `string` | No | `prod` | Deployment reference for a project OAuth connection. Omit it for a deployment-key connection. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"convex">` | No | Project default | Connected Convex account. | The result is a `ConvexValue`, including Convex `bigint` and `ArrayBuffer` values. For an internal query, omit the `internal.` prefix used by generated Convex references and connect credentials with the corresponding run-internal permission. The selected deployment must use a hosted `.convex.cloud` URL. Automate.ax can't reach a local development deployment. # Convex Source: https://docs.automate.ax/reference/integrations/convex/index Run Convex functions and start automations from signed document changes or custom events. ## Exports ```ts theme={null} import { convex, convexAccount } from "automate.ax/convex" ``` * `convex` contains the packaged Convex actions and triggers. * `convexAccount("name")` selects a named Convex connection. Convex functions can emit signed events without importing the automation runtime: ```ts theme={null} import { emitConvexEvent, signConvexEvent } from "automate.ax/convex/events" ``` ## Triggers * [On document event](/reference/integrations/convex/triggers/on-document-event) * [On document created](/reference/integrations/convex/triggers/on-document-created) * [On document updated](/reference/integrations/convex/triggers/on-document-updated) * [On document deleted](/reference/integrations/convex/triggers/on-document-deleted) * [On event](/reference/integrations/convex/triggers/on-event) ## Actions * [Run query](/reference/integrations/convex/actions/run-query) * [Run mutation](/reference/integrations/convex/actions/run-mutation) * [Run action](/reference/integrations/convex/actions/run-action) # On document created Source: https://docs.automate.ax/reference/integrations/convex/triggers/on-document-created Run an automation when Convex creates a document. `convex.onDocumentCreated` watches one table and starts the automation for documents that appear after the initial Data Sync baseline. ```ts automations/new-convex-message.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { convex } from "automate.ax/convex" export default automation("New Convex message", () => { const event = convex.onDocumentCreated({ table: "messages" }) sendEmail({ subject: "New message", text: event.documentId }) }) ``` Options are `table`, optional `component` (default `""`), optional OAuth `deployment` (default `prod`), and optional `account`. Trigger data includes the complete `document`, `documentId`, `revision`, `table`, `component`, and `action: "created"`. This trigger requires Convex Pro Data Sync and `deployment:data:view`. Existing documents are recorded silently when you first deploy the automation. # On document deleted Source: https://docs.automate.ax/reference/integrations/convex/triggers/on-document-deleted Run an automation when Convex deletes a document. `convex.onDocumentDeleted` watches one table and starts the automation when Convex emits a document tombstone. ```ts automations/deleted-convex-message.automation.ts theme={null} import { automation } from "automate.ax" import { convex } from "automate.ax/convex" export default automation("Deleted Convex message", () => { const event = convex.onDocumentDeleted({ table: "messages" }) // Remove state tied to the deleted Convex document. }) ``` Options are `table`, optional `component` (default `""`), optional OAuth `deployment` (default `prod`), and optional `account`. Trigger data includes `documentId`, `revision`, `table`, `component`, `action: "deleted"`, and `document: null`. This trigger requires Convex Pro Data Sync and `deployment:data:view`. # On document event Source: https://docs.automate.ax/reference/integrations/convex/triggers/on-document-event Run an automation for any Convex document lifecycle change. `convex.onDocumentEvent` watches one table and emits created, updated, and deleted document changes. ```ts automations/audit-convex-documents.automation.ts theme={null} import { automation } from "automate.ax" import { convex } from "automate.ax/convex" export default automation("Audit Convex documents", () => { const event = convex.onDocumentEvent({ table: "messages" }) // Route the Convex document event by action. }) ``` ## Options | Option | Type | Required | Default | Description | | - | - | - | - | - | | `table` | `string` | Yes | None | Convex table name. | | `component` | `string` | No | `""` | Component path; the empty path selects the root component. | | `deployment` | `string` | No | `prod` | Deployment reference for project OAuth. | | `account` | `string \| IntegrationAccountReference<"convex">` | No | Project default | Connected Convex account. | Trigger data includes `action`, `component`, `table`, `documentId`, `revision: bigint`, and `document`. `document` is `null` for deletions. Automate.ax uses [Convex Data Sync](https://docs.convex.dev/production/integrations/streaming-import-export), which requires a Convex Pro deployment and `deployment:data:view`. It establishes the initial table baseline without firing events and resumes from a durable cursor. A Convex import or table replacement also re-establishes the baseline without producing a burst of false creates. # On document updated Source: https://docs.automate.ax/reference/integrations/convex/triggers/on-document-updated Run an automation when Convex updates a document. `convex.onDocumentUpdated` watches one table and starts the automation when an existing document receives a new revision. ```ts automations/changed-convex-message.automation.ts theme={null} import { automation } from "automate.ax" import { convex } from "automate.ax/convex" export default automation("Changed Convex message", () => { const event = convex.onDocumentUpdated({ table: "messages" }) // Sync the updated Convex document to the search index. }) ``` Options are `table`, optional `component` (default `""`), optional OAuth `deployment` (default `prod`), and optional `account`. Trigger data includes the current `document`, `documentId`, `revision`, `table`, `component`, and `action: "updated"`. This trigger requires Convex Pro Data Sync and `deployment:data:view`. It reports the current document, not a field-level diff. # On event Source: https://docs.automate.ax/reference/integrations/convex/triggers/on-event Run an automation for an explicitly emitted Convex event. `convex.onEvent` exposes a signed endpoint for app-defined events emitted from a Convex action. ```ts automations/convex-invoice-paid.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { convex } from "automate.ax/convex" export default automation("Convex invoice paid", () => { const event = convex.onEvent({ name: "invoice.paid" }) sendEmail({ subject: "Invoice paid", text: event.id }) }) ``` Copy the trigger's `endpoint`, connect Convex with the deployment-key method, and set `AUTOMATE_AX_EVENT_ENDPOINT` and `AUTOMATE_AX_WEBHOOK_SECRET` in Convex. Use the same signing secret on the connected account. Emit from a Convex action: ```ts theme={null} import { v } from "convex/values" import { action } from "./_generated/server" import { emitConvexEvent } from "automate.ax/convex/events" export const emitInvoicePaid = action({ args: { invoiceId: v.id("invoices") }, handler: async (_context, { invoiceId }) => { await emitConvexEvent({ endpoint: process.env.AUTOMATE_AX_EVENT_ENDPOINT!, id: invoiceId, name: "invoice.paid", payload: { invoiceId }, signingSecret: process.env.AUTOMATE_AX_WEBHOOK_SECRET!, }) }, }) ``` `id` is the idempotency key: retries with the same ID produce one event. The signature covers the exact body, timestamp, and ID, and Automate.ax rejects requests older than five minutes. Trigger data contains `id`, `name`, `payload`, and `emittedAt`. # Add member role Source: https://docs.automate.ax/reference/integrations/discord/actions/add-member-role Assign one Discord server role to a member. `discord.addMemberRole` assign one Discord server role to a member. ```ts automations/discord-add-member-role.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Add member role", () => { onHttpRequest({ scope: "automation" }) discord.addMemberRole({ guildId: "123456789012345678", userId: "234567890123456789", roleId: "345678901234567890", }) }) ``` ## Inputs Required server, user, and role IDs; optional audit-log `reason`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns no value. ## Discord behavior Requires `MANAGE_ROLES`; the bot can assign only roles below its highest role. # Add reaction Source: https://docs.automate.ax/reference/integrations/discord/actions/add-reaction Add the connected bot's reaction to a Discord message. `discord.addReaction` add the connected bot's reaction to a Discord message. ```ts automations/discord-add-reaction.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Add reaction", () => { onHttpRequest({ scope: "automation" }) discord.addReaction({ channelId: "234567890123456789", messageId: "345678901234567890", emoji: "👍", }) }) ``` ## Inputs Required channel and message IDs plus a Unicode emoji or custom `name:id` value. Optional second argument `{ account }` selects the Discord binding. ## Output Returns no value. ## Discord behavior Requires `ADD_REACTIONS` when the emoji is not already present and `READ_MESSAGE_HISTORY`. # Add thread member Source: https://docs.automate.ax/reference/integrations/discord/actions/add-thread-member Add a Discord user to a thread. `discord.addThreadMember` adds one user to a Discord thread. ```ts automations/discord-add-thread-member.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Add thread member", () => { onHttpRequest({ scope: "automation" }) discord.addThreadMember({ threadId: "234567890123456789", userId: "345678901234567890", }) }) ``` ## Inputs Required `threadId` and `userId`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns nothing after Discord accepts the membership change. ## Discord behavior Adding another user requires the appropriate thread-management permission. Adding the bot itself is handled by `discord.joinThread`. # Ban member Source: https://docs.automate.ax/reference/integrations/discord/actions/ban-member Ban a user from a Discord server. `discord.banMember` ban a user from a Discord server. ```ts automations/discord-ban-member.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Ban member", () => { onHttpRequest({ scope: "automation" }) discord.banMember({ guildId: "123456789012345678", userId: "234567890123456789", deleteMessageSeconds: 86400, }) }) ``` ## Inputs Required server and user IDs. `deleteMessageSeconds` defaults to 0 and may be 0–604,800; optional audit-log `reason`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns no value. ## Discord behavior Requires `BAN_MEMBERS`, and the bot's highest role must outrank an existing member. # Bulk delete messages Source: https://docs.automate.ax/reference/integrations/discord/actions/bulk-delete-messages Delete 2–100 recent Discord messages in one request. `discord.bulkDeleteMessages` delete 2–100 recent Discord messages in one request. ```ts automations/discord-bulk-delete-messages.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Bulk delete messages", () => { onHttpRequest({ scope: "automation" }) discord.bulkDeleteMessages({ channelId: "234567890123456789", messageIds: ["345678901234567890", "456789012345678901"], }) }) ``` ## Inputs Required `channelId` and 2–100 unique `messageIds`; optional audit-log `reason`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns no value. ## Discord behavior Requires `MANAGE_MESSAGES`. The action rejects message IDs older than 14 days before sending the request. # Create Auto Moderation rule Source: https://docs.automate.ax/reference/integrations/discord/actions/create-automod-rule Create a Discord Auto Moderation rule. `discord.createAutomodRule` creates a Discord Auto Moderation rule. ```ts automations/discord-create-automod-rule.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Create Auto Moderation rule", () => { onHttpRequest({ scope: "automation" }) discord.createAutomodRule({ guildId: "123456789012345678", name: "Block spam", triggerType: "keyword", keywordFilter: ["spam"], actions: [{ type: "blockMessage" }], enabled: true, }) }) ``` ## Inputs Required `guildId`, `name`, `triggerType`, and one to three actions. Matching fields support keywords, regex, presets, mention limits, and allow lists; optional exemptions and audit-log `reason`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns the created `DiscordAutomodRule`. ## Discord behavior Requires `MANAGE_GUILD`. Action types must be unique. Mention-spam rules require `mentionTotalLimit`; keyword-preset rules require at least one entry in `presets`. `sendAlert` actions require `channelId`, `timeoutMember` actions require `durationSeconds`, and `blockMessage` actions accept optional `customMessage`. Keyword and mention-spam rules support block, alert, and timeout actions. Spam and preset rules support block and alert actions. Member-profile rules support alert and block-interaction actions. Timeout also requires `MODERATE_MEMBERS`. `eventType` defaults to `memberUpdate` for `memberProfile` triggers and `messageSend` otherwise. Explicit event and trigger types must be compatible. # Create channel Source: https://docs.automate.ax/reference/integrations/discord/actions/create-channel Create a text, voice, category, announcement, stage, forum, or media channel. `discord.createChannel` create a text, voice, category, announcement, stage, forum, or media channel. ```ts automations/discord-create-channel.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Create channel", () => { onHttpRequest({ scope: "automation" }) discord.createChannel({ guildId: "123456789012345678", name: "releases", type: "text", }) }) ``` ## Inputs Required `guildId` and `name`. Optional `type`, `topic`, `parentId`, `position`, `nsfw`, `rateLimitPerUser`, and `reason`. Topics apply to text, announcement, forum, and media channels. Text and announcement topics accept up to 1,024 characters; forum and media topics accept up to 4,096. Voice and stage channels also accept `bitrate` and `userLimit`; stage `bitrate` is at most 64,000, voice user limit is at most 99, and stage user limit is at most 10,000. Category and announcement channels do not accept `rateLimitPerUser`; category and media channels do not accept `nsfw`; category channels do not accept `parentId`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns the created `DiscordChannel`. ## Discord behavior Requires `MANAGE_CHANNELS`; server feature and tier limits still apply. # Create emoji Source: https://docs.automate.ax/reference/integrations/discord/actions/create-emoji Create a custom emoji in a Discord server. `discord.createEmoji` create a custom emoji in a Discord server. ```ts automations/discord-create-emoji.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Create emoji", () => { onHttpRequest({ scope: "automation" }) discord.createEmoji({ guildId: "123456789012345678", name: "ship", imageDataUri: "data:image/png;base64,...", }) }) ``` ## Inputs Required `guildId`, 2–32 character alphanumeric/underscore `name`, and image data URI. Optional `roleIds` and audit-log `reason`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns the created `DiscordEmoji`. ## Discord behavior Requires `CREATE_GUILD_EXPRESSIONS`; size, format, animation, and server emoji limits apply. # Create invite Source: https://docs.automate.ax/reference/integrations/discord/actions/create-invite Create an invite to a Discord channel. `discord.createInvite` create an invite to a Discord channel. ```ts automations/discord-create-invite.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Create invite", () => { onHttpRequest({ scope: "automation" }) discord.createInvite({ channelId: "234567890123456789", maxAge: 86400, maxUses: 10, unique: true, }) }) ``` ## Inputs Required `channelId`. Optional `maxAge` up to 604,800 seconds, `maxUses` up to 100, `temporary`, `unique`, and audit-log `reason`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns the created `DiscordInvite`. ## Discord behavior Requires `CREATE_INSTANT_INVITE`; `unique: false` may reuse a matching invite. # Create role Source: https://docs.automate.ax/reference/integrations/discord/actions/create-role Create a Discord server role. `discord.createRole` create a Discord server role. ```ts automations/discord-create-role.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Create role", () => { onHttpRequest({ scope: "automation" }) discord.createRole({ guildId: "123456789012345678", name: "Operators", permissions: "2048", }) }) ``` ## Inputs Required `guildId` and `name`. Optional decimal `permissions`, `color`, `hoist`, `mentionable`, and audit-log `reason`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns the created `DiscordRole`. ## Discord behavior Requires `MANAGE_ROLES`. Discord creates the role at the bottom of the bot-manageable hierarchy. # Create scheduled event Source: https://docs.automate.ax/reference/integrations/discord/actions/create-scheduled-event Create a voice, stage, or external Discord scheduled event. `discord.createScheduledEvent` creates a voice, stage, or external Discord scheduled event. ```ts automations/discord-create-scheduled-event.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Create scheduled event", () => { onHttpRequest({ scope: "automation" }) const scheduledStartTime = new Date(Date.now() + 86_400_000).toISOString() discord.createScheduledEvent({ guildId: "123456789012345678", channelId: "234567890123456789", entityType: "voice", name: "Town hall", scheduledStartTime, }) }) ``` ## Inputs Required server ID, `entityType`, `name`, and offset ISO `scheduledStartTime`. Voice/stage events require `channelId` and cannot set `location`; external events require `location` and `scheduledEndTime` and cannot set `channelId`. A supplied end time must be after the start time. Optional description and audit-log `reason`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns the created `DiscordScheduledEvent`. ## Discord behavior Requires `CREATE_EVENTS`; stage events also depend on stage-channel permissions. `scheduledStartTime` must be in the future. Discord creates every new event with `scheduled` status. Create requests are not automatically replayed. # Create thread Source: https://docs.automate.ax/reference/integrations/discord/actions/create-thread Create a standalone public, private, or announcement Discord thread. `discord.createThread` creates a standalone public, private, or announcement Discord thread. ```ts automations/discord-create-thread.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Create thread", () => { onHttpRequest({ scope: "automation" }) discord.createThread({ channelId: "234567890123456789", name: "Private review", type: "private", }) }) ``` ## Inputs Required parent `channelId` and `name`. Optional `type`, `autoArchiveDuration`, `rateLimitPerUser`, and `reason`. Private threads also accept `invitable`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns the created thread as `DiscordChannel`. ## Discord behavior Requires the matching public/private thread permission; announcement threads require an announcement channel. # Create thread from message Source: https://docs.automate.ax/reference/integrations/discord/actions/create-thread-from-message Create a public Discord thread attached to an existing message. `discord.createThreadFromMessage` create a public Discord thread attached to an existing message. ```ts automations/discord-create-thread-from-message.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Create thread from message", () => { onHttpRequest({ scope: "automation" }) discord.createThreadFromMessage({ channelId: "234567890123456789", messageId: "345678901234567890", name: "Release discussion", }) }) ``` ## Inputs Required channel ID, message ID, and 1–100 character `name`. Optional `autoArchiveDuration`, `rateLimitPerUser`, and `reason`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns the created thread as `DiscordChannel`. ## Discord behavior Requires `CREATE_PUBLIC_THREADS`; the starter message cannot already have a thread. # Create webhook Source: https://docs.automate.ax/reference/integrations/discord/actions/create-webhook Create an incoming webhook in a Discord channel. `discord.createWebhook` create an incoming webhook in a Discord channel. ```ts automations/discord-create-webhook.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Create webhook", () => { onHttpRequest({ scope: "automation" }) discord.createWebhook({ channelId: "234567890123456789", name: "Release events", }) }) ``` ## Inputs Required `channelId` and 1–80 character `name`. Names cannot contain `Discord` or `Clyde`, case-insensitively. Optional image `avatarDataUri` and audit-log `reason`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns the created `DiscordWebhook` without its token or executable URL. ## Discord behavior Requires `MANAGE_WEBHOOKS`. Automate.ax intentionally does not expose the returned webhook token or token-bearing URL. # Delete Auto Moderation rule Source: https://docs.automate.ax/reference/integrations/discord/actions/delete-automod-rule Delete a Discord Auto Moderation rule. `discord.deleteAutomodRule` delete a Discord Auto Moderation rule. ```ts automations/discord-delete-automod-rule.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Delete Auto Moderation rule", () => { onHttpRequest({ scope: "automation" }) discord.deleteAutomodRule({ guildId: "123456789012345678", ruleId: "345678901234567890", }) }) ``` ## Inputs Required server and rule IDs; optional audit-log `reason`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns no value. ## Discord behavior Requires `MANAGE_GUILD`. # Delete channel Source: https://docs.automate.ax/reference/integrations/discord/actions/delete-channel Delete a Discord channel or close a private thread. `discord.deleteChannel` delete a Discord channel or close a private thread. ```ts automations/discord-delete-channel.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Delete channel", () => { onHttpRequest({ scope: "automation" }) discord.deleteChannel({ channelId: "234567890123456789", reason: "Project closed", }) }) ``` ## Inputs Required `channelId`; optional audit-log `reason`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns Discord's final `DiscordChannel` representation. ## Discord behavior Requires `MANAGE_CHANNELS` or `MANAGE_THREADS`. Deleting a channel cannot be undone. # Delete channel permission Source: https://docs.automate.ax/reference/integrations/discord/actions/delete-channel-permission Delete a Discord channel permission overwrite. `discord.deleteChannelPermission` removes one role or member permission overwrite. ```ts automations/discord-delete-channel-permission.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Delete channel permission", () => { onHttpRequest({ scope: "automation" }) discord.deleteChannelPermission({ channelId: "234567890123456789", overwriteId: "345678901234567890", }) }) ``` ## Inputs Required `channelId` and `overwriteId`; the overwrite ID is the affected role or user ID. Optional `reason` populates the server audit log. Optional second argument `{ account }` selects the Discord binding. ## Output Returns nothing after Discord deletes the overwrite. ## Discord behavior Requires `MANAGE_ROLES`. Deleting the overwrite restores inherited channel permissions. # Delete emoji Source: https://docs.automate.ax/reference/integrations/discord/actions/delete-emoji Delete a custom emoji from a Discord server. `discord.deleteEmoji` delete a custom emoji from a Discord server. ```ts automations/discord-delete-emoji.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Delete emoji", () => { onHttpRequest({ scope: "automation" }) discord.deleteEmoji({ guildId: "123456789012345678", emojiId: "345678901234567890", }) }) ``` ## Inputs Required server and emoji IDs; optional audit-log `reason`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns no value. ## Discord behavior Requires `MANAGE_GUILD_EXPRESSIONS`. # Delete invite Source: https://docs.automate.ax/reference/integrations/discord/actions/delete-invite Revoke a Discord invite by code. `discord.deleteInvite` revoke a Discord invite by code. ```ts automations/discord-delete-invite.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Delete invite", () => { onHttpRequest({ scope: "automation" }) discord.deleteInvite({ code: "abcDEF123", reason: "Campaign ended" }) }) ``` ## Inputs Required invite `code`; optional audit-log `reason`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns the revoked `DiscordInvite`. ## Discord behavior Requires `MANAGE_CHANNELS` for the invite's channel or `MANAGE_GUILD`. # Delete message Source: https://docs.automate.ax/reference/integrations/discord/actions/delete-message Delete one Discord channel message. `discord.deleteMessage` delete one Discord channel message. ```ts automations/discord-delete-message.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Delete message", () => { onHttpRequest({ scope: "automation" }) discord.deleteMessage({ channelId: "234567890123456789", messageId: "345678901234567890", }) }) ``` ## Inputs Required channel and message IDs; optional audit-log `reason`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns no value after Discord accepts the deletion. ## Discord behavior Deleting another author's message requires `MANAGE_MESSAGES`. # Delete role Source: https://docs.automate.ax/reference/integrations/discord/actions/delete-role Delete a Discord server role. `discord.deleteRole` delete a Discord server role. ```ts automations/discord-delete-role.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Delete role", () => { onHttpRequest({ scope: "automation" }) discord.deleteRole({ guildId: "123456789012345678", roleId: "345678901234567890", }) }) ``` ## Inputs Required server and role IDs; optional audit-log `reason`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns no value. ## Discord behavior Requires `MANAGE_ROLES`. Discord rejects managed roles and roles above the bot. # Delete scheduled event Source: https://docs.automate.ax/reference/integrations/discord/actions/delete-scheduled-event Delete a Discord scheduled event. `discord.deleteScheduledEvent` delete a Discord scheduled event. ```ts automations/discord-delete-scheduled-event.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Delete scheduled event", () => { onHttpRequest({ scope: "automation" }) discord.deleteScheduledEvent({ guildId: "123456789012345678", eventId: "345678901234567890", }) }) ``` ## Inputs Required server and event IDs; optional audit-log `reason`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns no value. ## Discord behavior Requires `MANAGE_EVENTS`. # Delete webhook Source: https://docs.automate.ax/reference/integrations/discord/actions/delete-webhook Delete a Discord webhook. `discord.deleteWebhook` delete a Discord webhook. ```ts automations/discord-delete-webhook.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Delete webhook", () => { onHttpRequest({ scope: "automation" }) discord.deleteWebhook({ webhookId: "345678901234567890", reason: "Integration retired", }) }) ``` ## Inputs Required `webhookId`; optional audit-log `reason`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns no value. ## Discord behavior Requires `MANAGE_WEBHOOKS`. # End poll Source: https://docs.automate.ax/reference/integrations/discord/actions/end-poll End a Discord message poll early. `discord.endPoll` closes a message poll before its scheduled expiry. ```ts automations/discord-end-poll.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("End poll", () => { onHttpRequest({ scope: "automation" }) discord.endPoll({ channelId: "234567890123456789", messageId: "345678901234567890", }) }) ``` ## Inputs Required `channelId` and poll `messageId`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns the updated `DiscordMessage` containing the finalized poll. ## Discord behavior The connected bot must own the poll message. This action does not implement a polling trigger or repeatedly query Discord. # Get channel Source: https://docs.automate.ax/reference/integrations/discord/actions/get-channel Retrieve one Discord channel or thread by ID. `discord.getChannel` retrieve one Discord channel or thread by ID. ```ts automations/discord-get-channel.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Get channel", () => { onHttpRequest({ scope: "automation" }) discord.getChannel({ channelId: "234567890123456789" }) }) ``` ## Inputs Required `channelId`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns a `DiscordChannel`. ## Discord behavior The bot must be able to view the channel. # Get current bot Source: https://docs.automate.ax/reference/integrations/discord/actions/get-current-bot Retrieve the user represented by the connected Discord bot token. `discord.getCurrentBot` retrieve the user represented by the connected Discord bot token. ```ts automations/discord-get-current-bot.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Get current bot", () => { onHttpRequest({ scope: "automation" }) discord.getCurrentBot({}) }) ``` ## Inputs No resource inputs. Optional second argument `{ account }` selects a Discord binding. Optional second argument `{ account }` selects the Discord binding. ## Output Returns a `DiscordUser` for the connected bot. ## Discord behavior Requires only a valid bot token. # Get server Source: https://docs.automate.ax/reference/integrations/discord/actions/get-guild Retrieve one Discord server by ID. `discord.getGuild` retrieve one Discord server by ID. ```ts automations/discord-get-guild.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Get server", () => { onHttpRequest({ scope: "automation" }) discord.getGuild({ guildId: "123456789012345678", withCounts: true }) }) ``` ## Inputs Required `guildId`; optional `withCounts` defaults to `false`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns a `DiscordGuild`. When `withCounts` is `true`, it also includes `approximateMemberCount` and `approximatePresenceCount`. ## Discord behavior The bot must be installed in the server. # Get member Source: https://docs.automate.ax/reference/integrations/discord/actions/get-member Retrieve one Discord server member. `discord.getMember` retrieve one Discord server member. ```ts automations/discord-get-member.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Get member", () => { onHttpRequest({ scope: "automation" }) discord.getMember({ guildId: "123456789012345678", userId: "234567890123456789", }) }) ``` ## Inputs Required `guildId` and `userId`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns a `DiscordMember`. ## Discord behavior The bot must be installed in the server. # Get message Source: https://docs.automate.ax/reference/integrations/discord/actions/get-message Retrieve one Discord channel message. `discord.getMessage` retrieve one Discord channel message. ```ts automations/discord-get-message.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Get message", () => { onHttpRequest({ scope: "automation" }) discord.getMessage({ channelId: "234567890123456789", messageId: "345678901234567890", }) }) ``` ## Inputs Required `channelId` and `messageId`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns a `DiscordMessage`. ## Discord behavior Requires `VIEW_CHANNEL` and `READ_MESSAGE_HISTORY`. # Get webhook Source: https://docs.automate.ax/reference/integrations/discord/actions/get-webhook Get a Discord webhook without exposing its token. `discord.getWebhook` retrieves one webhook by ID. ```ts automations/discord-get-webhook.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Get webhook", () => { onHttpRequest({ scope: "automation" }) discord.getWebhook({ webhookId: "234567890123456789" }) }) ``` ## Inputs Required `webhookId`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns `DiscordWebhook`. Automate.ax never returns the webhook token or token-bearing URL. ## Discord behavior The bot must be able to manage the webhook or its server. # Join thread Source: https://docs.automate.ax/reference/integrations/discord/actions/join-thread Add the connected Discord bot to a thread. `discord.joinThread` add the connected Discord bot to a thread. ```ts automations/discord-join-thread.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Join thread", () => { onHttpRequest({ scope: "automation" }) discord.joinThread({ threadId: "345678901234567890" }) }) ``` ## Inputs Required `threadId`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns no value. ## Discord behavior The bot must be able to view and join the thread. # Kick member Source: https://docs.automate.ax/reference/integrations/discord/actions/kick-member Remove a member from a Discord server without banning them. `discord.kickMember` remove a member from a Discord server without banning them. ```ts automations/discord-kick-member.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Kick member", () => { onHttpRequest({ scope: "automation" }) discord.kickMember({ guildId: "123456789012345678", userId: "234567890123456789", reason: "Access removed", }) }) ``` ## Inputs Required server and user IDs; optional audit-log `reason`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns no value. ## Discord behavior Requires `KICK_MEMBERS`, and the bot's highest role must outrank the member. # Leave thread Source: https://docs.automate.ax/reference/integrations/discord/actions/leave-thread Remove the connected Discord bot from a thread. `discord.leaveThread` remove the connected Discord bot from a thread. ```ts automations/discord-leave-thread.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Leave thread", () => { onHttpRequest({ scope: "automation" }) discord.leaveThread({ threadId: "345678901234567890" }) }) ``` ## Inputs Required `threadId`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns no value. ## Discord behavior Leaving is idempotent when the bot is already absent. # List active threads Source: https://docs.automate.ax/reference/integrations/discord/actions/list-active-threads List active threads in a Discord server. `discord.listActiveThreads` lists active public and private threads visible to the bot. ```ts automations/discord-list-active-threads.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("List active threads", () => { onHttpRequest({ scope: "automation" }) discord.listActiveThreads({ guildId: "234567890123456789" }) }) ``` ## Inputs Required `guildId`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns `{ threads: DiscordChannel[], members: DiscordThreadMember[] }`. ## Discord behavior Discord includes private threads only when the bot can access them. # List Auto Moderation rules Source: https://docs.automate.ax/reference/integrations/discord/actions/list-automod-rules List every Discord Auto Moderation rule in a server. `discord.listAutomodRules` lists every Discord Auto Moderation rule in a server. ```ts automations/discord-list-automod-rules.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("List Auto Moderation rules", () => { onHttpRequest({ scope: "automation" }) discord.listAutomodRules({ guildId: "123456789012345678" }) }) ``` ## Inputs Required `guildId`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns `DiscordAutomodRule[]` with normalized actions and camel-case trigger metadata such as `keywordFilter`, `regexPatterns`, `allowList`, and mention limits. ## Discord behavior Requires `MANAGE_GUILD`. # List bans Source: https://docs.automate.ax/reference/integrations/discord/actions/list-bans List banned users and reasons in a Discord server. `discord.listBans` list banned users and reasons in a Discord server. ```ts automations/discord-list-bans.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("List bans", () => { onHttpRequest({ scope: "automation" }) discord.listBans({ guildId: "123456789012345678", limit: 100 }) }) ``` ## Inputs Required `guildId`; optional `before` or `after` user cursor and `limit` from 1–1,000. Do not combine cursors. Optional second argument `{ account }` selects the Discord binding. ## Output Returns `DiscordBan[]`. ## Discord behavior Requires `BAN_MEMBERS`. # List channel invites Source: https://docs.automate.ax/reference/integrations/discord/actions/list-channel-invites List active invites for a Discord channel. `discord.listChannelInvites` list active invites for a Discord channel. ```ts automations/discord-list-channel-invites.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("List channel invites", () => { onHttpRequest({ scope: "automation" }) discord.listChannelInvites({ channelId: "234567890123456789" }) }) ``` ## Inputs Required `channelId`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns `DiscordInvite[]`. ## Discord behavior Requires `MANAGE_CHANNELS`. # List channel webhooks Source: https://docs.automate.ax/reference/integrations/discord/actions/list-channel-webhooks List webhooks configured for a Discord channel. `discord.listChannelWebhooks` list webhooks configured for a Discord channel. ```ts automations/discord-list-channel-webhooks.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("List channel webhooks", () => { onHttpRequest({ scope: "automation" }) discord.listChannelWebhooks({ channelId: "234567890123456789" }) }) ``` ## Inputs Required `channelId`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns `DiscordWebhook[]` without webhook tokens or token-bearing URLs. ## Discord behavior Requires `MANAGE_WEBHOOKS`. # List channels Source: https://docs.automate.ax/reference/integrations/discord/actions/list-channels List every channel in a Discord server. `discord.listChannels` lists every channel in a Discord server. ```ts automations/discord-list-channels.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("List channels", () => { onHttpRequest({ scope: "automation" }) discord.listChannels({ guildId: "123456789012345678" }) }) ``` ## Inputs Required `guildId`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns `DiscordChannel[]`, including categories. Use `discord.listActiveThreads` to list active threads. ## Discord behavior Requires `VIEW_CHANNEL`; hidden channels may be omitted. # List emojis Source: https://docs.automate.ax/reference/integrations/discord/actions/list-emojis List custom emojis in a Discord server. `discord.listEmojis` list custom emojis in a Discord server. ```ts automations/discord-list-emojis.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("List emojis", () => { onHttpRequest({ scope: "automation" }) discord.listEmojis({ guildId: "123456789012345678" }) }) ``` ## Inputs Required `guildId`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns `DiscordEmoji[]`. ## Discord behavior The response includes managed and unavailable emoji state when Discord reports it. # List servers Source: https://docs.automate.ax/reference/integrations/discord/actions/list-guilds List Discord servers where the connected bot is installed. `discord.listGuilds` list Discord servers where the connected bot is installed. ```ts automations/discord-list-guilds.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("List servers", () => { onHttpRequest({ scope: "automation" }) discord.listGuilds({ limit: 100 }) }) ``` ## Inputs Optional `before` or `after` snowflake cursor and `limit` from 1–200. Do not combine both cursors. Optional second argument `{ account }` selects the Discord binding. ## Output Returns `DiscordGuild[]` with each server's ID, name, icon, features, and bot permissions. ## Discord behavior Discord only returns servers visible to this bot token. # List members Source: https://docs.automate.ax/reference/integrations/discord/actions/list-members List a page of members in a Discord server. `discord.listMembers` list a page of members in a Discord server. ```ts automations/discord-list-members.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("List members", () => { onHttpRequest({ scope: "automation" }) discord.listMembers({ guildId: "123456789012345678", limit: 100 }) }) ``` ## Inputs Required `guildId`; optional `after` user ID and `limit` from 1–1,000. Optional second argument `{ account }` selects the Discord binding. ## Output Returns `DiscordMember[]` with user, nickname, roles, join time, and timeout state. ## Discord behavior Large member lists may require the privileged Server Members intent to be enabled for the bot application. # List messages Source: https://docs.automate.ax/reference/integrations/discord/actions/list-messages List a page of Discord channel messages. `discord.listMessages` list a page of Discord channel messages. ```ts automations/discord-list-messages.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("List messages", () => { onHttpRequest({ scope: "automation" }) discord.listMessages({ channelId: "234567890123456789", limit: 50 }) }) ``` ## Inputs Required `channelId`. Optional `before`, `after`, or `around` cursor and `limit` from 1–100; use at most one cursor. Optional second argument `{ account }` selects the Discord binding. ## Output Returns `DiscordMessage[]` in Discord's provider order. ## Discord behavior Requires `VIEW_CHANNEL` and `READ_MESSAGE_HISTORY`. # List poll answer voters Source: https://docs.automate.ax/reference/integrations/discord/actions/list-poll-answer-voters List Discord users who selected a poll answer. `discord.listPollAnswerVoters` lists users who selected one answer in a message poll. ```ts automations/discord-list-poll-answer-voters.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("List poll voters", () => { onHttpRequest({ scope: "automation" }) discord.listPollAnswerVoters({ answerId: 1, channelId: "234567890123456789", messageId: "345678901234567890", }) }) ``` ## Inputs Required `answerId`, `channelId`, and poll `messageId`. Optional `after` user cursor and `limit` from 1–100. Optional second argument `{ account }` selects the Discord binding. ## Output Returns `DiscordUser[]` in Discord's provider order. ## Discord behavior This action performs one paginated API request. It is not a polling trigger. # List roles Source: https://docs.automate.ax/reference/integrations/discord/actions/list-roles List every role in a Discord server. `discord.listRoles` list every role in a Discord server. ```ts automations/discord-list-roles.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("List roles", () => { onHttpRequest({ scope: "automation" }) discord.listRoles({ guildId: "123456789012345678" }) }) ``` ## Inputs Required `guildId`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns `DiscordRole[]`, including the everyone role and managed roles. ## Discord behavior Role `permissions` is a decimal permission-value string; keep it as a string. # List scheduled events Source: https://docs.automate.ax/reference/integrations/discord/actions/list-scheduled-events List scheduled events in a Discord server. `discord.listScheduledEvents` list scheduled events in a Discord server. ```ts automations/discord-list-scheduled-events.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("List scheduled events", () => { onHttpRequest({ scope: "automation" }) discord.listScheduledEvents({ guildId: "123456789012345678", withUserCount: true, }) }) ``` ## Inputs Required `guildId`; optional `withUserCount` defaults to `false`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns `DiscordScheduledEvent[]`. ## Discord behavior User counts are approximate provider values when requested. # List thread members Source: https://docs.automate.ax/reference/integrations/discord/actions/list-thread-members List members of a Discord thread. `discord.listThreadMembers` lists membership records for a thread. ```ts automations/discord-list-thread-members.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("List thread members", () => { onHttpRequest({ scope: "automation" }) discord.listThreadMembers({ threadId: "234567890123456789", limit: 100, }) }) ``` ## Inputs Required `threadId`. Optional `after` user cursor and `limit` from 1–100. Optional second argument `{ account }` selects the Discord binding. ## Output Returns `DiscordThreadMember[]` with thread ID, user ID, join timestamp, and flags when Discord provides them. ## Discord behavior The bot must be able to view the thread. Private-thread membership follows Discord's access rules. # Pin message Source: https://docs.automate.ax/reference/integrations/discord/actions/pin-message Pin a Discord channel message. `discord.pinMessage` pin a Discord channel message. ```ts automations/discord-pin-message.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Pin message", () => { onHttpRequest({ scope: "automation" }) discord.pinMessage({ channelId: "234567890123456789", messageId: "345678901234567890", }) }) ``` ## Inputs Required channel and message IDs; optional audit-log `reason`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns no value. ## Discord behavior Requires `MANAGE_MESSAGES`; channel pin limits apply. # Remove member role Source: https://docs.automate.ax/reference/integrations/discord/actions/remove-member-role Remove one Discord server role from a member. `discord.removeMemberRole` remove one Discord server role from a member. ```ts automations/discord-remove-member-role.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Remove member role", () => { onHttpRequest({ scope: "automation" }) discord.removeMemberRole({ guildId: "123456789012345678", userId: "234567890123456789", roleId: "345678901234567890", }) }) ``` ## Inputs Required server, user, and role IDs; optional audit-log `reason`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns no value. ## Discord behavior Requires `MANAGE_ROLES`; managed integration roles cannot be removed this way. # Remove own reaction Source: https://docs.automate.ax/reference/integrations/discord/actions/remove-own-reaction Remove the connected bot's reaction from a Discord message. `discord.removeOwnReaction` remove the connected bot's reaction from a Discord message. ```ts automations/discord-remove-own-reaction.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Remove own reaction", () => { onHttpRequest({ scope: "automation" }) discord.removeOwnReaction({ channelId: "234567890123456789", messageId: "345678901234567890", emoji: "👍", }) }) ``` ## Inputs Required channel and message IDs plus the exact Unicode or custom emoji value. Optional second argument `{ account }` selects the Discord binding. ## Output Returns no value. ## Discord behavior Removing the bot's own reaction does not require `MANAGE_MESSAGES`. # Remove thread member Source: https://docs.automate.ax/reference/integrations/discord/actions/remove-thread-member Remove a Discord user from a thread. `discord.removeThreadMember` removes one user from a Discord thread. ```ts automations/discord-remove-thread-member.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Remove thread member", () => { onHttpRequest({ scope: "automation" }) discord.removeThreadMember({ threadId: "234567890123456789", userId: "345678901234567890", }) }) ``` ## Inputs Required `threadId` and `userId`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns nothing after Discord accepts the membership change. ## Discord behavior Removing another user requires the appropriate thread-management permission. Use `discord.leaveThread` for the connected bot. # Reply to message Source: https://docs.automate.ax/reference/integrations/discord/actions/reply-to-message Send a Discord message that references another message. `discord.replyToMessage` send a Discord message that references another message. ```ts automations/discord-reply-to-message.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Reply to message", () => { onHttpRequest({ scope: "automation" }) discord.replyToMessage({ channelId: "234567890123456789", messageId: "345678901234567890", content: "Acknowledged", }) }) ``` ## Inputs Required `channelId`, `messageId`, and `content`. `failIfNotExists` defaults to `true`; `tts` and `suppressEmbeds` are optional. Optional second argument `{ account }` selects the Discord binding. ## Output Returns the created reply `DiscordMessage`. ## Discord behavior The referenced message must be in the same channel unless `failIfNotExists` is disabled. # Send message Source: https://docs.automate.ax/reference/integrations/discord/actions/send-message Send a text message to a Discord channel or thread. `discord.sendMessage` send a text message to a Discord channel or thread. ```ts automations/discord-send-message.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Send message", () => { onHttpRequest({ scope: "automation" }) discord.sendMessage({ channelId: "234567890123456789", content: "Deployment complete", }) }) ``` ## Inputs Required `channelId` and 1–2,000 character `content`. Optional `tts` and `suppressEmbeds`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns the created `DiscordMessage`. ## Discord behavior Requires `SEND_MESSAGES`; threads also require `SEND_MESSAGES_IN_THREADS`. Create requests are not automatically replayed. # Set channel permission Source: https://docs.automate.ax/reference/integrations/discord/actions/set-channel-permission Create or replace a Discord channel permission overwrite. `discord.setChannelPermission` creates or replaces one role or member permission overwrite. ```ts automations/discord-set-channel-permission.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Set channel permission", () => { onHttpRequest({ scope: "automation" }) discord.setChannelPermission({ allow: "1024", channelId: "234567890123456789", overwriteId: "345678901234567890", type: "role", }) }) ``` ## Inputs Required `channelId`, affected role or user `overwriteId`, and `type` (`role` or `member`). Optional decimal permission-value strings `allow` and `deny` default to `"0"`; `reason` populates the audit log. Optional second argument `{ account }` selects the Discord binding. ## Output Returns nothing after Discord stores the overwrite. ## Discord behavior Requires `MANAGE_ROLES`. Decimal permission values are strings so they remain exact. # Remove member ban Source: https://docs.automate.ax/reference/integrations/discord/actions/unban-member Remove a user's Discord server ban. `discord.unbanMember` remove a user's Discord server ban. ```ts automations/discord-unban-member.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Unban member", () => { onHttpRequest({ scope: "automation" }) discord.unbanMember({ guildId: "123456789012345678", userId: "234567890123456789", }) }) ``` ## Inputs Required server and user IDs; optional audit-log `reason`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns no value. ## Discord behavior Requires `BAN_MEMBERS`. # Unpin message Source: https://docs.automate.ax/reference/integrations/discord/actions/unpin-message Remove a Discord channel message from pins. `discord.unpinMessage` remove a Discord channel message from pins. ```ts automations/discord-unpin-message.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Unpin message", () => { onHttpRequest({ scope: "automation" }) discord.unpinMessage({ channelId: "234567890123456789", messageId: "345678901234567890", }) }) ``` ## Inputs Required channel and message IDs; optional audit-log `reason`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns no value. ## Discord behavior Requires `MANAGE_MESSAGES`. # Update Auto Moderation rule Source: https://docs.automate.ax/reference/integrations/discord/actions/update-automod-rule Update a Discord Auto Moderation rule. `discord.updateAutomodRule` updates a Discord Auto Moderation rule. ```ts automations/discord-update-automod-rule.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Update Auto Moderation rule", () => { onHttpRequest({ scope: "automation" }) discord.updateAutomodRule({ guildId: "123456789012345678", ruleId: "345678901234567890", enabled: false, }) }) ``` ## Inputs Required server and rule IDs. Provide any matching, action, exemption, name, event, or enabled fields plus optional audit-log `reason`. A rule's `triggerType` cannot change after creation. Optional second argument `{ account }` selects the Discord binding. ## Output Returns the updated `DiscordAutomodRule`. ## Discord behavior Requires `MANAGE_GUILD`; fields omitted from the input remain unchanged. A trigger-dependent update first reads the existing rule so Automate.ax can validate its immutable trigger type before sending the change. A supplied `presets` list must contain at least one entry. You can provide up to three actions with unique action types. `sendAlert` actions require `channelId`, `timeoutMember` actions require `durationSeconds`, and `blockMessage` actions accept optional `customMessage`. Timeout also requires `MODERATE_MEMBERS`. # Update channel Source: https://docs.automate.ax/reference/integrations/discord/actions/update-channel Update mutable Discord channel or thread fields. `discord.updateChannel` update mutable Discord channel or thread fields. ```ts automations/discord-update-channel.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Update channel", () => { onHttpRequest({ scope: "automation" }) discord.updateChannel({ channelId: "234567890123456789", topic: "Release status", }) }) ``` ## Inputs Required `channelId`; provide any mutable channel fields plus optional audit-log `reason`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns the updated `DiscordChannel`. ## Discord behavior Requires the permission appropriate to the changed field, usually `MANAGE_CHANNELS` or `MANAGE_THREADS`. Updates to type-dependent fields first read the channel so Automate.ax can validate them against its existing type. # Update emoji Source: https://docs.automate.ax/reference/integrations/discord/actions/update-emoji Update a custom Discord emoji's name or allowed roles. `discord.updateEmoji` update a custom Discord emoji's name or allowed roles. ```ts automations/discord-update-emoji.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Update emoji", () => { onHttpRequest({ scope: "automation" }) discord.updateEmoji({ guildId: "123456789012345678", emojiId: "345678901234567890", name: "shipped", }) }) ``` ## Inputs Required server and emoji IDs. Optional valid `name`, `roleIds`, and audit-log `reason`; `null` role IDs clears restrictions. Optional second argument `{ account }` selects the Discord binding. ## Output Returns the updated `DiscordEmoji`. ## Discord behavior Requires `MANAGE_GUILD_EXPRESSIONS`; managed emojis cannot be edited. # Update server Source: https://docs.automate.ax/reference/integrations/discord/actions/update-guild Update a Discord server's core settings. `discord.updateGuild` updates a server's name and common moderation settings. ```ts automations/discord-update-guild.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Update server", () => { onHttpRequest({ scope: "automation" }) discord.updateGuild({ guildId: "234567890123456789", name: "Automation Community", verificationLevel: "medium", }) }) ``` ## Inputs Required `guildId`. Optional `name`, `verificationLevel`, `defaultMessageNotifications`, `explicitContentFilter`, `afkChannelId`, `afkTimeout`, `systemChannelId`, and audit-log `reason`. Nullable channel IDs clear the setting. Optional second argument `{ account }` selects the Discord binding. ## Output Returns the updated `DiscordGuild`. ## Discord behavior Requires `MANAGE_GUILD`. Discord may reject settings unavailable to the server's current feature set. # Update member Source: https://docs.automate.ax/reference/integrations/discord/actions/update-member Update a Discord member's nickname, voice state, or timeout. `discord.updateMember` update a Discord member's nickname, voice state, or timeout. ```ts automations/discord-update-member.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Update member", () => { onHttpRequest({ scope: "automation" }) discord.updateMember({ guildId: "123456789012345678", userId: "234567890123456789", nickname: "Ada", }) }) ``` ## Inputs Required server and user IDs. Optional `nickname`, `communicationDisabledUntil`, `mute`, `deaf`, `channelId`, and audit-log `reason`. A timeout must be an offset ISO timestamp no more than 28 days in the future. Use `null` to clear nickname, timeout, or voice channel. Optional second argument `{ account }` selects the Discord binding. ## Output Returns the updated `DiscordMember`, including `mute` and `deaf` voice-state fields when Discord provides them. ## Discord behavior Discord permission and role hierarchy checks depend on the changed fields. Timeout timestamps must be within Discord's supported window. # Update message Source: https://docs.automate.ax/reference/integrations/discord/actions/update-message Update a message authored by the connected Discord bot. `discord.updateMessage` update a message authored by the connected Discord bot. ```ts automations/discord-update-message.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Update message", () => { onHttpRequest({ scope: "automation" }) discord.updateMessage({ channelId: "234567890123456789", messageId: "345678901234567890", content: "Updated status", }) }) ``` ## Inputs Required channel and message IDs. Provide `content` and/or `suppressEmbeds`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns the updated `DiscordMessage`. ## Discord behavior Bots can edit only their own messages. # Update role Source: https://docs.automate.ax/reference/integrations/discord/actions/update-role Update a Discord server role. `discord.updateRole` update a Discord server role. ```ts automations/discord-update-role.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Update role", () => { onHttpRequest({ scope: "automation" }) discord.updateRole({ guildId: "123456789012345678", roleId: "345678901234567890", mentionable: true, }) }) ``` ## Inputs Required server and role IDs. Optional `name`, decimal `permissions`, `color`, `hoist`, `mentionable`, and audit-log `reason`. Optional second argument `{ account }` selects the Discord binding. ## Output Returns the updated `DiscordRole`. ## Discord behavior Requires `MANAGE_ROLES`; the target role must be below the bot's highest role. # Update scheduled event Source: https://docs.automate.ax/reference/integrations/discord/actions/update-scheduled-event Update a Discord scheduled event's details or status. `discord.updateScheduledEvent` updates a Discord scheduled event's details or status. ```ts automations/discord-update-scheduled-event.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Update scheduled event", () => { onHttpRequest({ scope: "automation" }) discord.updateScheduledEvent({ guildId: "123456789012345678", eventId: "345678901234567890", status: "active", }) }) ``` ## Inputs Required server and event IDs. Optional name, description, channel, entity type, location, start/end times, status, and audit-log `reason`. When you supply both times, the end must be after the start. Optional second argument `{ account }` selects the Discord binding. ## Output Returns the updated `DiscordScheduledEvent`. ## Discord behavior Requires `MANAGE_EVENTS`. Changes to type-dependent fields, either timestamp, or status first read the event so Automate.ax can validate the complete resulting event. Changing `entityType` to `external` also requires `location` and `scheduledEndTime`; the action clears `channelId`. Changing it to `voice` or `stage` requires `channelId`, cannot set `location`, and clears external location metadata. Status can move from scheduled to active or canceled, and from active to completed. # Update webhook Source: https://docs.automate.ax/reference/integrations/discord/actions/update-webhook Update a Discord webhook name, avatar, or channel. `discord.updateWebhook` updates a Discord webhook name, avatar, or channel. ```ts automations/discord-update-webhook.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Update webhook", () => { onHttpRequest({ scope: "automation" }) discord.updateWebhook({ webhookId: "345678901234567890", name: "Deployment events", }) }) ``` ## Inputs Required `webhookId`. Optional `name`, `avatarDataUri`, destination `channelId`, and audit-log `reason`; use `null` to clear the avatar. Names cannot contain `Discord` or `Clyde`, case-insensitively. Optional second argument `{ account }` selects the Discord binding. ## Output Returns the updated `DiscordWebhook` without its token or executable URL. ## Discord behavior Requires `MANAGE_WEBHOOKS`; moving a webhook requires access to both channels. # Discord Source: https://docs.automate.ax/reference/integrations/discord/index Connect your own Discord bot for typed server actions and signed HTTP webhook events. Automate.ax connects to a Discord application that you own. Your bot token stays isolated in the integration account used by your automation. ## Connect a bot 1. Create or select an application in the [Discord Developer Portal](https://discord.com/developers/applications). 2. Open **Bot**, create the bot if needed, reset its token, and copy the token. 3. Open **OAuth2 → URL Generator**. Select `bot` and `applications.commands`, then select only the server permissions your automations need. 4. Open the generated URL and install the bot in each server you want to automate. 5. In Automate.ax, connect Discord with **Bot token** and paste the token. Discord permissions are server- and channel-specific. Automate.ax validates the bot identity when you connect it; Discord enforces each action's permissions and role hierarchy when the action runs. Use the optional `reason` input on moderation and management actions to populate the server audit log. Some actions also depend on privileged Gateway intents configured on the application's **Bot** page. Enable **Server Members Intent** (`GUILD_MEMBERS`) before using `discord.listMembers`. Enable **Message Content Intent** (`MESSAGE_CONTENT`) when your bot must read message content; without it, Discord can return empty content and related message fields. Verified applications may need Discord's approval before enabling these intents. ## Receive HTTP webhook events Deploy an automation that uses a Discord trigger, then configure this URL under your application's **Webhooks** settings: ```text theme={null} https://automate.ax/api/v1/events/discord/YOUR_APPLICATION_ID ``` Replace `YOUR_APPLICATION_ID` with the application ID from **General Information**. Discord verifies the endpoint with a signed PING. Enable the application authorization and entitlement events your automation uses. Discord's Event Webhooks do not deliver ordinary server messages, reactions, channel changes, or member changes. This integration does not poll for them. Those events require Discord Gateway support, which is not part of the current integration. ## Use an account ```ts automations/discord-message.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { discord, discordAccount } from "automate.ax/discord" export default automation("Post Discord update", () => { onHttpRequest({ scope: "automation" }) discord.sendMessage( { channelId: "123456789012345678", content: "Deployment complete" }, { account: discordAccount("operations-bot") }, ) }) ``` Omit the second argument to use the project's default Discord account. Discord IDs are snowflake strings; keep them as strings even when they contain only digits. ## Provider behavior Automate.ax uses Discord API v10, validates successful responses, and follows Discord's `Retry-After` value after a rate limit. Invalid credentials, missing permissions, bad inputs, and role-hierarchy failures stop immediately. Create actions are not replayed automatically when Discord may have accepted the first request. ## Exports ```ts theme={null} import { discord, discordAccount } from "automate.ax/discord" ``` * `discord` contains the packaged Discord actions and triggers. * `discordAccount("name")` selects a named Discord bot connection. ## Triggers * [On webhook event](/reference/integrations/discord/triggers/on-webhook-event) * [On application authorized](/reference/integrations/discord/triggers/on-application-authorized) * [On application access removed](/reference/integrations/discord/triggers/on-application-deauthorized) * [On entitlement created](/reference/integrations/discord/triggers/on-entitlement-created) * [On entitlement updated](/reference/integrations/discord/triggers/on-entitlement-updated) * [On entitlement deleted](/reference/integrations/discord/triggers/on-entitlement-deleted) ## Actions * [Add member role](/reference/integrations/discord/actions/add-member-role) * [Add reaction](/reference/integrations/discord/actions/add-reaction) * [Add thread member](/reference/integrations/discord/actions/add-thread-member) * [Ban member](/reference/integrations/discord/actions/ban-member) * [Bulk delete messages](/reference/integrations/discord/actions/bulk-delete-messages) * [Create Auto Moderation rule](/reference/integrations/discord/actions/create-automod-rule) * [Create channel](/reference/integrations/discord/actions/create-channel) * [Create emoji](/reference/integrations/discord/actions/create-emoji) * [Create invite](/reference/integrations/discord/actions/create-invite) * [Create role](/reference/integrations/discord/actions/create-role) * [Create scheduled event](/reference/integrations/discord/actions/create-scheduled-event) * [Create thread](/reference/integrations/discord/actions/create-thread) * [Create thread from message](/reference/integrations/discord/actions/create-thread-from-message) * [Create webhook](/reference/integrations/discord/actions/create-webhook) * [Delete Auto Moderation rule](/reference/integrations/discord/actions/delete-automod-rule) * [Delete channel](/reference/integrations/discord/actions/delete-channel) * [Delete channel permission](/reference/integrations/discord/actions/delete-channel-permission) * [Delete emoji](/reference/integrations/discord/actions/delete-emoji) * [Delete invite](/reference/integrations/discord/actions/delete-invite) * [Delete message](/reference/integrations/discord/actions/delete-message) * [Delete role](/reference/integrations/discord/actions/delete-role) * [Delete scheduled event](/reference/integrations/discord/actions/delete-scheduled-event) * [Delete webhook](/reference/integrations/discord/actions/delete-webhook) * [End poll](/reference/integrations/discord/actions/end-poll) * [Get channel](/reference/integrations/discord/actions/get-channel) * [Get current bot](/reference/integrations/discord/actions/get-current-bot) * [Get server](/reference/integrations/discord/actions/get-guild) * [Get member](/reference/integrations/discord/actions/get-member) * [Get message](/reference/integrations/discord/actions/get-message) * [Get webhook](/reference/integrations/discord/actions/get-webhook) * [Join thread](/reference/integrations/discord/actions/join-thread) * [Kick member](/reference/integrations/discord/actions/kick-member) * [Leave thread](/reference/integrations/discord/actions/leave-thread) * [List active threads](/reference/integrations/discord/actions/list-active-threads) * [List Auto Moderation rules](/reference/integrations/discord/actions/list-automod-rules) * [List bans](/reference/integrations/discord/actions/list-bans) * [List channel invites](/reference/integrations/discord/actions/list-channel-invites) * [List channel webhooks](/reference/integrations/discord/actions/list-channel-webhooks) * [List channels](/reference/integrations/discord/actions/list-channels) * [List emojis](/reference/integrations/discord/actions/list-emojis) * [List servers](/reference/integrations/discord/actions/list-guilds) * [List members](/reference/integrations/discord/actions/list-members) * [List messages](/reference/integrations/discord/actions/list-messages) * [List poll answer voters](/reference/integrations/discord/actions/list-poll-answer-voters) * [List roles](/reference/integrations/discord/actions/list-roles) * [List scheduled events](/reference/integrations/discord/actions/list-scheduled-events) * [List thread members](/reference/integrations/discord/actions/list-thread-members) * [Pin message](/reference/integrations/discord/actions/pin-message) * [Remove member role](/reference/integrations/discord/actions/remove-member-role) * [Remove own reaction](/reference/integrations/discord/actions/remove-own-reaction) * [Remove thread member](/reference/integrations/discord/actions/remove-thread-member) * [Reply to message](/reference/integrations/discord/actions/reply-to-message) * [Send message](/reference/integrations/discord/actions/send-message) * [Set channel permission](/reference/integrations/discord/actions/set-channel-permission) * [Remove member ban](/reference/integrations/discord/actions/unban-member) * [Unpin message](/reference/integrations/discord/actions/unpin-message) * [Update Auto Moderation rule](/reference/integrations/discord/actions/update-automod-rule) * [Update channel](/reference/integrations/discord/actions/update-channel) * [Update emoji](/reference/integrations/discord/actions/update-emoji) * [Update server](/reference/integrations/discord/actions/update-guild) * [Update member](/reference/integrations/discord/actions/update-member) * [Update message](/reference/integrations/discord/actions/update-message) * [Update role](/reference/integrations/discord/actions/update-role) * [Update scheduled event](/reference/integrations/discord/actions/update-scheduled-event) * [Update webhook](/reference/integrations/discord/actions/update-webhook) # On application authorized Source: https://docs.automate.ax/reference/integrations/discord/triggers/on-application-authorized Start an automation when a user authorizes your Discord application. `discord.onApplicationAuthorized` receives `APPLICATION_AUTHORIZED` after a user installs the application to a server or their account. ```ts automations/discord-install.automation.ts theme={null} import { automation } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Record Discord install", () => { const event = discord.onApplicationAuthorized() // Store the user, server, and scopes in your application install registry. }) ``` The payload includes the authorizing `user`, granted `scopes`, optional `guild`, and optional `integrationType`. Optional `account` selects the Discord application. # On application access removed Source: https://docs.automate.ax/reference/integrations/discord/triggers/on-application-deauthorized Start an automation when a user removes authorization from your Discord application. `discord.onApplicationDeauthorized` receives `APPLICATION_DEAUTHORIZED` when a user revokes the application authorization. ```ts automations/discord-uninstall.automation.ts theme={null} import { automation } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Record removed Discord access", () => { const event = discord.onApplicationDeauthorized() // Remove event.data.user.id from your application install registry. }) ``` The payload includes the user who removed authorization and event metadata. Optional `account` selects the Discord application. # On entitlement created Source: https://docs.automate.ax/reference/integrations/discord/triggers/on-entitlement-created Start an automation when Discord creates an application entitlement. `discord.onEntitlementCreated` receives `ENTITLEMENT_CREATE` when Discord grants or sells one of your application's SKUs. ```ts automations/discord-entitlement.automation.ts theme={null} import { automation } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Record Discord entitlement", () => { const event = discord.onEntitlementCreated() // Grant the Discord SKU identified by event.data.skuId. }) ``` The normalized entitlement includes application, SKU, user or server ownership, time bounds, type, consumed state, and deletion state. Optional `account` selects the Discord application. # On entitlement deleted Source: https://docs.automate.ax/reference/integrations/discord/triggers/on-entitlement-deleted Start an automation when Discord deletes an application entitlement. `discord.onEntitlementDeleted` receives `ENTITLEMENT_DELETE` when Discord removes an entitlement. ```ts automations/discord-entitlement-delete.automation.ts theme={null} import { automation } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Track Discord entitlement deletion", () => { const event = discord.onEntitlementDeleted() // Revoke the Discord SKU identified by event.data.skuId. }) ``` The payload retains the entitlement identity and reports `deleted: true`. Optional `account` selects the Discord application. # On entitlement updated Source: https://docs.automate.ax/reference/integrations/discord/triggers/on-entitlement-updated Start an automation when Discord updates an application entitlement. `discord.onEntitlementUpdated` receives `ENTITLEMENT_UPDATE` when an entitlement's provider state changes. ```ts automations/discord-entitlement-update.automation.ts theme={null} import { automation } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Track Discord entitlement updates", () => { const event = discord.onEntitlementUpdated() // Reconcile the entitlement using event.data.id and event.data.consumed. }) ``` The payload contains the complete normalized entitlement rather than a field-level diff. Optional `account` selects the Discord application. # On webhook event Source: https://docs.automate.ax/reference/integrations/discord/triggers/on-webhook-event Start an automation from any signed Discord HTTP Event Webhook event. `discord.onWebhookEvent` receives every signed HTTP Event Webhook event selected in the Discord Developer Portal, including types without a dedicated semantic trigger. ```ts automations/route-discord-events.automation.ts theme={null} import { automation } from "automate.ax" import { discord } from "automate.ax/discord" export default automation("Route Discord events", () => { const event = discord.onWebhookEvent() // Route the event by event.type and use event.timestamp for ordering. }) ``` ## Options Optional `account` selects the customer-managed Discord application. The payload includes `applicationId`, `type`, `timestamp`, `version`, and `data`. Data fields use camelCase for supported and unrecognized event types. This trigger does not poll and does not receive Gateway events such as server messages or reactions. # Align speech Source: https://docs.automate.ax/reference/integrations/elevenlabs/actions/align-speech Aligns a known transcript to an audio file. `elevenLabs.alignSpeech` requires `file` and its exact `text`. It returns timed `words` and `characters` plus the provider's alignment `loss` score. ```ts automations/align-speech.automation.ts theme={null} import { automation, markSignificant, onInvocation } from "automate.ax" import { elevenLabs } from "automate.ax/elevenlabs" export default automation("Align speech", () => { const request = onInvocation<{ audio: File }>() markSignificant( elevenLabs.alignSpeech({ file: request.audio, text: "Welcome aboard." }), ) }) ``` # Compose music Source: https://docs.automate.ax/reference/integrations/elevenlabs/actions/compose-music Composes a music track from a text prompt. `elevenLabs.composeMusic` requires `prompt`. `modelId` defaults to `music_v1`, `outputFormat` to `auto`, `forceInstrumental` to `false`, and `signWithC2pa` to `false`. `musicLengthMs` can request 3–600 seconds. It returns a generated `File`. ```ts automations/compose-music.automation.ts theme={null} import { automation, markSignificant, onInvocation } from "automate.ax" import { elevenLabs } from "automate.ax/elevenlabs" export default automation("Compose music", () => { onInvocation() markSignificant( elevenLabs.composeMusic({ forceInstrumental: true, prompt: "Warm ambient product intro", }), ) }) ``` # Convert speech Source: https://docs.automate.ax/reference/integrations/elevenlabs/actions/convert-speech Changes a speaker's voice while preserving delivery. `elevenLabs.convertSpeech` requires an audio `File` and `voiceId`. `modelId` defaults to `eleven_english_sts_v2`, `outputFormat` to `mp3_44100_128`, `fileFormat` to `other`, and `removeBackgroundNoise` to `false`. `voiceSettings` and `seed` are optional. It returns the converted audio as a `File`. ```ts automations/convert-speech.automation.ts theme={null} import { automation, markSignificant, onInvocation } from "automate.ax" import { elevenLabs } from "automate.ax/elevenlabs" export default automation("Convert speech", () => { const request = onInvocation<{ audio: File }>() markSignificant( elevenLabs.convertSpeech({ audio: request.audio, voiceId: "voice-id" }), ) }) ``` # Create dialogue Source: https://docs.automate.ax/reference/integrations/elevenlabs/actions/create-dialogue Converts a multi-speaker script into one audio file. `elevenLabs.createDialogue` requires `inputs`, an ordered list of `{ text, voiceId }` segments. A request can contain at most 10 distinct voices and 2,000 total characters. `modelId` defaults to `eleven_v3`, `outputFormat` to `mp3_44100_128`, and `applyTextNormalization` to `auto`; `languageCode` and `seed` are optional. It returns a generated `File`. ```ts automations/create-dialogue.automation.ts theme={null} import { automation, markSignificant, onInvocation } from "automate.ax" import { elevenLabs } from "automate.ax/elevenlabs" export default automation("Create dialogue", () => { onInvocation() markSignificant( elevenLabs.createDialogue({ inputs: [ { text: "Are we ready?", voiceId: "host-voice" }, { text: "Ready.", voiceId: "guest-voice" }, ], }), ) }) ``` # Create dubbing Source: https://docs.automate.ax/reference/integrations/elevenlabs/actions/create-dubbing Starts an automatic dub for uploaded or remote media. `elevenLabs.createDubbing` requires `targetLanguage` and exactly one of `file` or `sourceUrl`. `sourceLanguage` defaults to `auto`; voice cloning, background audio, and highest resolution can be controlled with booleans. `name`, `numSpeakers`, and `targetAccent` are optional. It returns `dubbingId` and `expectedDurationSec`. ```ts automations/create-dubbing.automation.ts theme={null} import { automation, markSignificant, onInvocation } from "automate.ax" import { elevenLabs } from "automate.ax/elevenlabs" export default automation("Dub a recording", () => { const request = onInvocation<{ video: File }>() markSignificant( elevenLabs.createDubbing({ file: request.video, targetLanguage: "es" }), ) }) ``` Automate.ax does not replay this action after an uncertain provider response because a second request could create another dubbing project. # Create outbound call Source: https://docs.automate.ax/reference/integrations/elevenlabs/actions/create-outbound-call Places an outbound call through an ElevenLabs agent and Twilio number. `elevenLabs.createOutboundCall` requires `agentId`, `agentPhoneNumberId`, and an E.164 `toNumber`. `dynamicVariables` supplies string, number, or boolean conversation variables; `callRecordingEnabled` controls provider recording. It returns `success`, a message, and nullable `conversationId` and Twilio `callSid`. ```ts automations/create-outbound-agent-call.automation.ts theme={null} import { automation, markSignificant, onInvocation } from "automate.ax" import { elevenLabs } from "automate.ax/elevenlabs" export default automation("Place an agent call", () => { onInvocation() markSignificant( elevenLabs.createOutboundCall({ agentId: "agent-id", agentPhoneNumberId: "phone-number-id", toNumber: "+14155550100", }), ) }) ``` The phone number must already be imported into ElevenLabs from Twilio. Automate.ax does not replay this action after an uncertain provider response because another request could place a duplicate call. # Create sound effect Source: https://docs.automate.ax/reference/integrations/elevenlabs/actions/create-sound-effect Generates a sound effect from a text description. `elevenLabs.createSoundEffect` requires `text`. `modelId` defaults to `eleven_text_to_sound_v2`, `outputFormat` to `mp3_44100_128`, `promptInfluence` to `0.3`, and `loop` to `false`. `durationSeconds` can be 0.5–30 seconds. It returns a generated `File`. ```ts automations/create-sound-effect.automation.ts theme={null} import { automation, markSignificant, onInvocation } from "automate.ax" import { elevenLabs } from "automate.ax/elevenlabs" export default automation("Create a sound effect", () => { onInvocation() markSignificant( elevenLabs.createSoundEffect({ text: "A wooden door closes softly" }), ) }) ``` # Create speech Source: https://docs.automate.ax/reference/integrations/elevenlabs/actions/create-speech Converts text to an audio file with an ElevenLabs voice. `elevenLabs.createSpeech` requires `text` and `voiceId`. `modelId` defaults to `eleven_multilingual_v2`, `outputFormat` to `mp3_44100_128`, `applyTextNormalization` to `auto`, and `enableLogging` to `true`. Optional inputs include `languageCode`, `voiceSettings`, `seed`, request IDs, and surrounding text. It returns a generated `File`. ```ts automations/create-elevenlabs-speech.automation.ts theme={null} import { automation, markSignificant, onInvocation } from "automate.ax" import { elevenLabs } from "automate.ax/elevenlabs" export default automation("Create speech", () => { onInvocation() markSignificant( elevenLabs.createSpeech({ text: "Welcome aboard.", voiceId: "voice-id" }), ) }) ``` # Create speech with timestamps Source: https://docs.automate.ax/reference/integrations/elevenlabs/actions/create-speech-with-timestamps Generates speech with character-level alignment. `elevenLabs.createSpeechWithTimestamps` accepts the same inputs and defaults as `createSpeech`. It returns Base64 audio plus raw and normalized character alignment instead of a `File`. ```ts automations/create-aligned-speech.automation.ts theme={null} import { automation, markSignificant, onInvocation } from "automate.ax" import { elevenLabs } from "automate.ax/elevenlabs" export default automation("Create aligned speech", () => { onInvocation() markSignificant( elevenLabs.createSpeechWithTimestamps({ text: "Hello.", voiceId: "voice-id", }), ) }) ``` # Delete dubbing Source: https://docs.automate.ax/reference/integrations/elevenlabs/actions/delete-dubbing Permanently deletes an ElevenLabs dubbing project. `elevenLabs.deleteDubbing` requires `dubbingId`. It permanently removes the provider project and returns `{ dubbingId, deleted }`. ```ts automations/delete-dubbing.automation.ts theme={null} import { automation, markSignificant, onInvocation } from "automate.ax" import { elevenLabs } from "automate.ax/elevenlabs" export default automation("Delete dubbing", () => { onInvocation() markSignificant(elevenLabs.deleteDubbing({ dubbingId: "dubbing-id" })) }) ``` # Download conversation audio Source: https://docs.automate.ax/reference/integrations/elevenlabs/actions/download-conversation-audio Downloads the complete audio for one ElevenLabs agent conversation. `elevenLabs.downloadConversationAudio` requires `conversationId` and returns the complete conversation audio as an MP3 `File`. The conversation must have audio available. ```ts automations/download-conversation-audio.automation.ts theme={null} import { automation, markSignificant, onInvocation } from "automate.ax" import { elevenLabs } from "automate.ax/elevenlabs" export default automation("Download conversation audio", () => { onInvocation() markSignificant( elevenLabs.downloadConversationAudio({ conversationId: "conversation-id" }), ) }) ``` # Download dubbing Source: https://docs.automate.ax/reference/integrations/elevenlabs/actions/download-dubbing Downloads one completed ElevenLabs dub. `elevenLabs.downloadDubbing` requires `dubbingId` and the target `languageCode`. It returns the completed dub as a `File`; ElevenLabs chooses audio or video content from the source project. ```ts automations/download-dubbing.automation.ts theme={null} import { automation, markSignificant, onInvocation } from "automate.ax" import { elevenLabs } from "automate.ax/elevenlabs" export default automation("Download dubbing", () => { onInvocation() markSignificant( elevenLabs.downloadDubbing({ dubbingId: "dubbing-id", languageCode: "es" }), ) }) ``` # Get conversation Source: https://docs.automate.ax/reference/integrations/elevenlabs/actions/get-conversation Returns one ElevenLabs agent conversation and transcript. `elevenLabs.getConversation` requires `conversationId`. It returns the agent ID, conversation status, audio availability, and ordered transcript messages with roles, timing, and optional agent metadata. ```ts automations/get-agent-conversation.automation.ts theme={null} import { automation, markSignificant, onInvocation } from "automate.ax" import { elevenLabs } from "automate.ax/elevenlabs" export default automation("Get agent conversation", () => { onInvocation() markSignificant( elevenLabs.getConversation({ conversationId: "conversation-id" }), ) }) ``` # Get dubbing Source: https://docs.automate.ax/reference/integrations/elevenlabs/actions/get-dubbing Returns the state of one ElevenLabs dubbing project. `elevenLabs.getDubbing` requires `dubbingId`. It returns the project name, source and target languages, processing `status`, and a provider error when present. ```ts automations/get-dubbing.automation.ts theme={null} import { automation, markSignificant, onInvocation } from "automate.ax" import { elevenLabs } from "automate.ax/elevenlabs" export default automation("Get dubbing", () => { onInvocation() markSignificant(elevenLabs.getDubbing({ dubbingId: "dubbing-id" })) }) ``` # Get user Source: https://docs.automate.ax/reference/integrations/elevenlabs/actions/get-user Returns the connected ElevenLabs user and subscription usage. `elevenLabs.getUser` takes no inputs. It returns the connected `userId`, profile fields, seat type, onboarding state, and current subscription tier, status, character count, and character limit. ```ts automations/check-elevenlabs-usage.automation.ts theme={null} import { automation, markSignificant, onSchedule } from "automate.ax" import { elevenLabs } from "automate.ax/elevenlabs" export default automation("Check ElevenLabs usage", () => { onSchedule({ schedule: "0 9 * * *" }) markSignificant(elevenLabs.getUser({})) }) ``` # Get voice Source: https://docs.automate.ax/reference/integrations/elevenlabs/actions/get-voice Returns metadata for one ElevenLabs voice. `elevenLabs.getVoice` requires `voiceId`. It returns the voice's name, category, labels, description, preview URL, and available tiers when supplied by ElevenLabs. ```ts automations/get-elevenlabs-voice.automation.ts theme={null} import { automation, markSignificant, onInvocation } from "automate.ax" import { elevenLabs } from "automate.ax/elevenlabs" export default automation("Get voice", () => { onInvocation() markSignificant(elevenLabs.getVoice({ voiceId: "voice-id" })) }) ``` # Isolate audio Source: https://docs.automate.ax/reference/integrations/elevenlabs/actions/isolate-audio Removes background sound from speech. `elevenLabs.isolateAudio` requires an audio or video `File`. `fileFormat` defaults to `other` and can be set to `pcm_s16le_16` for raw PCM input. It returns the isolated speech as an MP3 `File`. ```ts automations/isolate-speech.automation.ts theme={null} import { automation, markSignificant, onInvocation } from "automate.ax" import { elevenLabs } from "automate.ax/elevenlabs" export default automation("Isolate speech", () => { const request = onInvocation<{ recording: File }>() markSignificant(elevenLabs.isolateAudio({ audio: request.recording })) }) ``` # List agents Source: https://docs.automate.ax/reference/integrations/elevenlabs/actions/list-agents Lists ElevenLabs agents available to the connected account. `elevenLabs.listAgents` supports `search` and `cursor`. `pageSize` defaults to `30` and accepts 1–100. It returns agent IDs, names, tags, `hasMore`, and `nextCursor`. ```ts automations/list-elevenlabs-agents.automation.ts theme={null} import { automation, markSignificant, onInvocation } from "automate.ax" import { elevenLabs } from "automate.ax/elevenlabs" export default automation("List agents", () => { onInvocation() markSignificant(elevenLabs.listAgents({ search: "support" })) }) ``` # List conversations Source: https://docs.automate.ax/reference/integrations/elevenlabs/actions/list-conversations Lists conversations handled by ElevenLabs agents. `elevenLabs.listConversations` supports `agentId`, `userId`, call-success state, Unix start-time bounds, `cursor`, and `sortDirection`. `pageSize` defaults to `30` and `sortDirection` to `desc`. It returns conversation summaries, `hasMore`, and `nextCursor`. ```ts automations/list-agent-conversations.automation.ts theme={null} import { automation, markSignificant, onSchedule } from "automate.ax" import { elevenLabs } from "automate.ax/elevenlabs" export default automation("List agent conversations", () => { onSchedule({ schedule: "0 * * * *" }) markSignificant( elevenLabs.listConversations({ agentId: "agent-id", callSuccessful: "failure", }), ) }) ``` # List models Source: https://docs.automate.ax/reference/integrations/elevenlabs/actions/list-models Lists ElevenLabs models and their speech capabilities. `elevenLabs.listModels` takes no inputs. It returns `models` with each model's ID, name, description, languages, text limit, and text-to-speech, voice-conversion, style, and speaker-boost capabilities. ```ts automations/list-elevenlabs-models.automation.ts theme={null} import { automation, markSignificant, onInvocation } from "automate.ax" import { elevenLabs } from "automate.ax/elevenlabs" export default automation("List ElevenLabs models", () => { onInvocation() markSignificant(elevenLabs.listModels({})) }) ``` # List voices Source: https://docs.automate.ax/reference/integrations/elevenlabs/actions/list-voices Lists voices available to the connected ElevenLabs account. `elevenLabs.listVoices` supports `search`, `category`, `voiceType`, `languages`, `voiceIds`, `sort`, `sortDirection`, and `nextPageToken`. `pageSize` defaults to `20`; `includeTotalCount` defaults to `false`. It returns matching voice metadata, `hasMore`, `nextPageToken`, and `totalCount`. ```ts automations/find-elevenlabs-voices.automation.ts theme={null} import { automation, markSignificant, onInvocation } from "automate.ax" import { elevenLabs } from "automate.ax/elevenlabs" export default automation("Find voices", () => { onInvocation() markSignificant(elevenLabs.listVoices({ languages: ["en"], search: "calm" })) }) ``` # Transcribe Source: https://docs.automate.ax/reference/integrations/elevenlabs/actions/transcribe Transcribes an audio or video file or a supported URL. `elevenLabs.transcribe` requires exactly one of `file` or `sourceUrl`. `modelId` defaults to `scribe_v2`, word timestamps are enabled, audio-event tagging is enabled, and multichannel output defaults to separate transcripts. Optional inputs control language, diarization, speaker roles and count, channels, key terms, verbatim handling, temperature, seed, and file format. It returns one transcript or a `transcripts` array for separate channels. ```ts automations/transcribe-audio.automation.ts theme={null} import { automation, markSignificant, onInvocation } from "automate.ax" import { elevenLabs } from "automate.ax/elevenlabs" export default automation("Transcribe audio", () => { const request = onInvocation<{ audio: File }>() markSignificant(elevenLabs.transcribe({ diarize: true, file: request.audio })) }) ``` # ElevenLabs Source: https://docs.automate.ax/reference/integrations/elevenlabs/index Generate and process audio, manage dubbing and agent conversations, and react to ElevenLabs workspace events. Automate.ax connects to ElevenLabs with an API key. Use the integration to generate speech, dialogue, sound effects, and music; transcribe, isolate, align, convert, and dub media; inspect agent conversations; and place outbound agent calls. ```ts automations/transcribe-with-elevenlabs.automation.ts theme={null} import { automation, markSignificant, onInvocation } from "automate.ax" import { elevenLabs } from "automate.ax/elevenlabs" export default automation("Transcribe media", () => { const request = onInvocation<{ recording: File }>() markSignificant(elevenLabs.transcribe({ file: request.recording })) }) ``` Create a restricted key in ElevenLabs and grant only the permissions your actions need. Workspace event triggers also require permission to manage webhooks. Automate.ax creates one HMAC-authenticated workspace webhook for the connected account and verifies every delivery before starting an automation. Generation, processing, dubbing, deletion, and calling actions are not replayed after an uncertain provider response because another request could duplicate work, consume credits, or repeat a side effect. See [ElevenLabs API authentication](https://elevenlabs.io/docs/api-reference/authentication) and [workspace webhooks](https://elevenlabs.io/docs/product-guides/administration/webhooks) for provider requirements. ## Exports ```ts theme={null} import { elevenLabs, elevenLabsAccount, getElevenLabsApi, } from "automate.ax/elevenlabs" ``` * `elevenLabs` contains the packaged actions and triggers. * `elevenLabsAccount("name")` selects a named connection. * `getElevenLabsApi` creates the authenticated REST helper for a custom account-backed action. ## Actions * [Get user](/reference/integrations/elevenlabs/actions/get-user) * [List models](/reference/integrations/elevenlabs/actions/list-models) * [List voices](/reference/integrations/elevenlabs/actions/list-voices) * [Get voice](/reference/integrations/elevenlabs/actions/get-voice) * [Create speech](/reference/integrations/elevenlabs/actions/create-speech) * [Create speech with timestamps](/reference/integrations/elevenlabs/actions/create-speech-with-timestamps) * [Create dialogue](/reference/integrations/elevenlabs/actions/create-dialogue) * [Convert speech](/reference/integrations/elevenlabs/actions/convert-speech) * [Transcribe](/reference/integrations/elevenlabs/actions/transcribe) * [Create sound effect](/reference/integrations/elevenlabs/actions/create-sound-effect) * [Isolate audio](/reference/integrations/elevenlabs/actions/isolate-audio) * [Align speech](/reference/integrations/elevenlabs/actions/align-speech) * [Compose music](/reference/integrations/elevenlabs/actions/compose-music) * [Create dubbing](/reference/integrations/elevenlabs/actions/create-dubbing) * [Get dubbing](/reference/integrations/elevenlabs/actions/get-dubbing) * [Download dubbing](/reference/integrations/elevenlabs/actions/download-dubbing) * [Delete dubbing](/reference/integrations/elevenlabs/actions/delete-dubbing) * [List agents](/reference/integrations/elevenlabs/actions/list-agents) * [List conversations](/reference/integrations/elevenlabs/actions/list-conversations) * [Get conversation](/reference/integrations/elevenlabs/actions/get-conversation) * [Download conversation audio](/reference/integrations/elevenlabs/actions/download-conversation-audio) * [Create outbound call](/reference/integrations/elevenlabs/actions/create-outbound-call) ## Triggers * [On any event](/reference/integrations/elevenlabs/triggers/on-event) * [On any flow generation](/reference/integrations/elevenlabs/triggers/on-flow-generation-event) * [On flow generation completed](/reference/integrations/elevenlabs/triggers/on-flow-generation-completed) * [On flow generation failed](/reference/integrations/elevenlabs/triggers/on-flow-generation-failed) * [On transcription completed](/reference/integrations/elevenlabs/triggers/on-transcription-completed) * [On any voice removal event](/reference/integrations/elevenlabs/triggers/on-voice-removal-event) * [On voice removal scheduled](/reference/integrations/elevenlabs/triggers/on-voice-removal-scheduled) * [On voice removal withdrawn](/reference/integrations/elevenlabs/triggers/on-voice-removal-withdrawn) * [On voice removed](/reference/integrations/elevenlabs/triggers/on-voice-removed) # On any event Source: https://docs.automate.ax/reference/integrations/elevenlabs/triggers/on-event Starts an automation for any supported ElevenLabs workspace event. `elevenLabs.onEvent` takes no filters and starts for flow generation, asynchronous transcription, and voice-library removal events. It returns the normalized provider payload. Use a narrower trigger when your automation handles one event family. ```ts automations/handle-elevenlabs-events.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { elevenLabs } from "automate.ax/elevenlabs" export default automation("Handle ElevenLabs events", () => { markSignificant(elevenLabs.onEvent({})) }) ``` The connected API key must be able to manage workspace webhooks. Automate.ax creates and maintains the HMAC-authenticated endpoint. # On flow generation completed Source: https://docs.automate.ax/reference/integrations/elevenlabs/triggers/on-flow-generation-completed Starts an automation when an ElevenLabs flow generation succeeds. `elevenLabs.onFlowGenerationCompleted` takes no filters. It returns the generation `id`, `contentUrl`, `contentMimeType`, completed status, and event timestamp. ```ts automations/use-flow-generation.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { elevenLabs } from "automate.ax/elevenlabs" export default automation("Use flow generation", () => { markSignificant(elevenLabs.onFlowGenerationCompleted({})) }) ``` # On any flow generation Source: https://docs.automate.ax/reference/integrations/elevenlabs/triggers/on-flow-generation-event Starts an automation when an ElevenLabs flow generation completes or fails. `elevenLabs.onFlowGenerationEvent` takes no filters. It returns the generation `id`, `status`, event timestamp, and either a signed content URL and MIME type or a failure reason and message. ```ts automations/handle-flow-generation.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { elevenLabs } from "automate.ax/elevenlabs" export default automation("Handle flow generation", () => { markSignificant(elevenLabs.onFlowGenerationEvent({})) }) ``` # On flow generation failed Source: https://docs.automate.ax/reference/integrations/elevenlabs/triggers/on-flow-generation-failed Starts an automation when an ElevenLabs flow generation fails. `elevenLabs.onFlowGenerationFailed` takes no filters. It returns the generation `id`, failure reason, error message, failed status, and event timestamp. ```ts automations/review-flow-failures.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { elevenLabs } from "automate.ax/elevenlabs" export default automation("Review flow failures", () => { markSignificant(elevenLabs.onFlowGenerationFailed({})) }) ``` # On transcription completed Source: https://docs.automate.ax/reference/integrations/elevenlabs/triggers/on-transcription-completed Starts an automation when an asynchronous ElevenLabs transcription completes. `elevenLabs.onTranscriptionCompleted` takes no filters. It returns the provider `requestId`, normalized transcription result, optional webhook metadata, and event timestamp when ElevenLabs supplies one. ```ts automations/handle-elevenlabs-transcription.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { elevenLabs } from "automate.ax/elevenlabs" export default automation("Handle transcription", () => { markSignificant(elevenLabs.onTranscriptionCompleted({})) }) ``` This trigger handles transcriptions requested asynchronously through ElevenLabs. The packaged `transcribe` action returns its result directly and does not request a webhook. # On any voice removal event Source: https://docs.automate.ax/reference/integrations/elevenlabs/triggers/on-voice-removal-event Starts an automation for any ElevenLabs voice-library removal lifecycle event. `elevenLabs.onVoiceRemovalEvent` takes no filters. It starts when a shared voice is scheduled for removal, the notice is withdrawn, or the voice is removed. The result contains `voiceId`, optional voice name and notice period, event type, and timestamp. ```ts automations/track-voice-removals.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { elevenLabs } from "automate.ax/elevenlabs" export default automation("Track voice removals", () => { markSignificant(elevenLabs.onVoiceRemovalEvent({})) }) ``` # On voice removal scheduled Source: https://docs.automate.ax/reference/integrations/elevenlabs/triggers/on-voice-removal-scheduled Starts an automation when ElevenLabs schedules a shared voice for removal. `elevenLabs.onVoiceRemovalScheduled` takes no filters. It returns the affected `voiceId`, optional voice name and notice period, and event timestamp. ```ts automations/replace-retiring-voice.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { elevenLabs } from "automate.ax/elevenlabs" export default automation("Replace retiring voice", () => { markSignificant(elevenLabs.onVoiceRemovalScheduled({})) }) ``` # On voice removal withdrawn Source: https://docs.automate.ax/reference/integrations/elevenlabs/triggers/on-voice-removal-withdrawn Starts an automation when ElevenLabs withdraws a voice-removal notice. `elevenLabs.onVoiceRemovalWithdrawn` takes no filters. It returns the affected `voiceId`, optional voice name and notice period, and event timestamp. ```ts automations/restore-voice-status.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { elevenLabs } from "automate.ax/elevenlabs" export default automation("Restore voice status", () => { markSignificant(elevenLabs.onVoiceRemovalWithdrawn({})) }) ``` # On voice removed Source: https://docs.automate.ax/reference/integrations/elevenlabs/triggers/on-voice-removed Starts an automation when ElevenLabs removes a shared voice. `elevenLabs.onVoiceRemoved` takes no filters. It returns the removed `voiceId`, optional voice name, and event timestamp. ```ts automations/handle-removed-voice.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { elevenLabs } from "automate.ax/elevenlabs" export default automation("Handle removed voice", () => { markSignificant(elevenLabs.onVoiceRemoved({})) }) ``` # Crawl website with Firecrawl Source: https://docs.automate.ax/reference/integrations/firecrawl/actions/crawl-website Crawl a site and continue after Firecrawl reports completion. `firecrawl.crawlWebsite` starts a Firecrawl crawl and continues in a correlated child context after Firecrawl reports completion through a callback. It doesn't hold an action invocation open while the crawl runs. Use it for related pages on one site. Use `firecrawl.scrapeUrl` for a single page. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects the Firecrawl binding. ## Example ```ts automations/crawl-help-center.automation.ts theme={null} import { automation, onSchedule, withPrerequisites } from "automate.ax" import { firecrawl } from "automate.ax/firecrawl" export default automation("Crawl help center", () => { const scheduled = onSchedule({ schedule: "0 3 * * 0" }) withPrerequisites(scheduled, () => firecrawl.crawlWebsite({ url: "https://help.example.com", includePaths: ["articles/.*"], excludePaths: ["articles/archive/.*"], limit: 100, maxDiscoveryDepth: 3, scrapeOptions: { formats: ["markdown", "links"] }, }), ) }) ``` > [!WARNING] > > `firecrawl.crawlWebsite` introduces a protected callback trigger and therefore > another possible root. Scope literal crawl inputs to the trigger that should > start them, as shown above. Passing a signal in the crawl input also anchors > the starter action to that signal's context boundary. ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `url` | `string` | Yes | — | Website root URL. | | `limit` | `number` | No | `100` | Maximum pages to crawl. Start with a small limit to control duration and credits. | | `includePaths` / `excludePaths` | `string[]` | No | None | Regular expressions matched against URL paths. | | `regexOnFullURL` | `boolean` | No | `false` | Match path expressions against complete URLs, including query parameters. | | `maxDiscoveryDepth` | `number` | No | Provider default | Maximum link-discovery depth; the root and sitemap pages are depth 0. | | `sitemap` | `'skip' \| 'include' \| 'only'` | No | `include` | Sitemap discovery mode. | | `ignoreQueryParameters` | `boolean` | No | `false` | Avoid scraping the same path with different query parameters. | | `ignoreRobotsTxt` | `boolean` | No | `false` | Crawl pages even when robots.txt disallows them. | | `deduplicateSimilarURLs` | `boolean` | No | Provider default | Deduplicate URLs Firecrawl considers materially similar. | | `crawlEntireDomain` | `boolean` | No | `false` | Follow sibling and parent paths, not only descendants of the starting path. | | `allowSubdomains` / `allowExternalLinks` | `boolean` | No | `false` | Expand the crawl beyond the starting hostname. | | `prompt` | `string` | No | None | Natural-language instructions from which Firecrawl derives crawl options. Explicit inputs take precedence. | | `delay` | `number` | No | None | Seconds between scrapes. A delay reduces crawl concurrency. | | `maxConcurrency` | `number` | No | Team limit | Maximum simultaneous page scrapes. | | `robotsUserAgent` | `string` | No | Firecrawl default | User-Agent used to evaluate robots.txt. | | `scrapeOptions` | `object` | No | Markdown | Per-page formats, browser actions, content filters, cache, proxy, redaction, and target settings accepted by `firecrawl.scrapeUrl`. | | `zeroDataRetention` | `boolean` | No | `false` | Request enterprise zero-data-retention mode when enabled for the Firecrawl team. | ## Output Returns Firecrawl's crawl job as `{ id, status, total, completed, creditsUsed?, expiresAt?, next?, data }`. `expiresAt` is a `Date`. `data` contains Firecrawl documents in the same shape returned by `firecrawl.scrapeUrl`. Automate.ax supplies Firecrawl with a signed callback URL. The terminal delivery starts an independent root context, and correlation joins its crawl ID with the action that started the job. The callback capability authorizes access to the exact endpoint. It doesn't create causal inheritance. A failed crawl fails the correlated action path. Use [`firecrawl.startWebsiteCrawl`](/reference/integrations/firecrawl/actions/start-website-crawl) instead when you want the job ID immediately or need to provide your own webhook. # Map website with Firecrawl Source: https://docs.automate.ax/reference/integrations/firecrawl/actions/map-website Discover and rank a site's URLs without scraping every page. `firecrawl.mapWebsite` discovers pages from sitemaps and links without downloading full page content. Use it to inspect a site before choosing URLs to scrape or crawl. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects the Firecrawl binding. ## Example ```ts automations/map-documentation.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { firecrawl } from "automate.ax/firecrawl" export default automation("Map documentation", () => { onDashboardRun({ title: "Map documentation" }) firecrawl.mapWebsite({ url: "https://docs.example.com", search: "authentication", sitemap: "include", limit: 500, }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `url` | `string` | Yes | — | Website root URL. | | `search` | `string` | No | None | Rank discovered pages against this text. | | `sitemap` | `'only' \| 'include' \| 'skip'` | No | `include` | Use only the sitemap, combine it with link discovery, or skip it. | | `includeSubdomains` | `boolean` | No | `true` | Include pages from subdomains. | | `ignoreQueryParameters` | `boolean` | No | `true` | Exclude URL variants that differ only by query parameters. | | `limit` | `number` | No | `5000` | Maximum discovered links, up to 100,000. | | `location` | `{ country?: string; languages?: string[] }` | No | US | Proxy location and preferred languages. | | `timeout` | `number` | No | Provider default | Maximum provider map time in milliseconds. | | `threatProtection` | `object` | No | Account policy | Enterprise threat-protection overrides. | | `auditMetadata` | `{ username: string }` | No | None | User identity attached to Firecrawl audit logs. | ## Output Returns `{ id?, links }`. Every link contains `url` and can include Firecrawl's `title` and `description`. Mapping does not return page bodies; pass selected URLs to `firecrawl.scrapeUrl` when you need content. # Scrape URL with Firecrawl Source: https://docs.automate.ax/reference/integrations/firecrawl/actions/scrape-url Extract one page as Markdown, HTML, structured data, screenshots, and other Firecrawl formats. `firecrawl.scrapeUrl` loads one URL through Firecrawl and returns the requested LLM-ready content and page metadata. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects the Firecrawl binding. ## Example ```ts automations/scrape-release-notes.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { firecrawl } from "automate.ax/firecrawl" export default automation("Scrape release notes", () => { onDashboardRun({ title: "Scrape release notes" }) firecrawl.scrapeUrl({ url: "https://example.com/releases", formats: ["markdown", "links", "summary"], onlyMainContent: true, }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `url` | `string` | Yes | — | Complete page or public document URL. | | `formats` | `(string \| object)[]` | No | `['markdown']` | Content formats such as `markdown`, `html`, `rawHtml`, `links`, `images`, `summary`, `screenshot`, `json`, `changeTracking`, `attributes`, `branding`, `product`, `menu`, `audio`, or `video`. Configurable format objects accept screenshot, JSON Schema, change-tracking, attribute, question, and highlight options. | | `onlyMainContent` | `boolean` | No | `true` | Remove page chrome such as navigation, headers, and footers. | | `includeTags` / `excludeTags` | `string[]` | No | None | Include or exclude selected HTML tags, classes, or IDs. | | `headers` | `Record` | No | None | Headers sent to the target page, such as a cookie or user agent. | | `actions` | `object[]` | No | None | Wait, click, write, press, scroll, execute JavaScript, take screenshots, scrape intermediate state, or create PDFs before extraction. | | `waitFor` | `number` | No | `0` | Additional milliseconds to wait for dynamic content. | | `timeout` | `number` | No | `60000` | Provider scrape timeout from 1,000 through 300,000 milliseconds. | | `mobile` | `boolean` | No | `false` | Emulate a mobile device. | | `location` | `{ country?: string; languages?: string[] }` | No | US | Proxy location and preferred languages. | | `proxy` | `'basic' \| 'stealth' \| 'enhanced' \| 'auto'` | No | `auto` | Proxy tier. Enhanced or automatic retries can consume extra credits. | | `maxAge` / `minAge` | `number` | No | Provider defaults | Control use of Firecrawl's indexed cache in milliseconds. | | `storeInCache` / `lockdown` | `boolean` | No | Provider defaults | Allow cache storage, or require cache-only retrieval. | | `removeBase64Images` / `blockAds` / `skipTlsVerification` / `fastMode` | `boolean` | No | Provider defaults | Provider-native scrape behavior. | | `parsers` | `(string \| FirecrawlPdfParser)[]` | No | PDF parser | File parser configuration, including PDF OCR mode and page limits. | | `profile` | `{ name: string; saveChanges?: boolean }` | No | None | Persistent browser profile shared by name. | | `redactPII` | `boolean \| FirecrawlRedactionOptions` | No | `false` | Redact selected personal-information categories. | | `threatProtection` | `object` | No | Account policy | Enterprise threat-protection overrides. | | `auditMetadata` | `{ username: string }` | No | None | User identity attached to Firecrawl audit logs. | Headers can contain credentials. Send them only to URLs you trust. ## Output The action returns Firecrawl's document shape. Optional results include `markdown`, `html`, `rawHtml`, `summary`, `highlights`, `json`, `links`, `images`, `screenshot`, `audio`, `video`, `attributes`, browser `actions`, `changeTracking`, `branding`, `product`, and `menu`. Page details remain under `metadata`, including `sourceURL`, `url`, `title`, `description`, `language`, `statusCode`, `scrapeId`, `contentType`, `cacheState`, `creditsUsed`, and `error` when Firecrawl supplies them. Use a JSON format object with `prompt` or `schema` when you need structured extraction. The returned `json` value is JSON and should be narrowed to your expected shape in automation code. # Search the web with Firecrawl Source: https://docs.automate.ax/reference/integrations/firecrawl/actions/search-web Search web, news, image, and developer sources and optionally scrape the results. `firecrawl.searchWeb` searches one or more Firecrawl source families. Add `scrapeOptions` when you need page content instead of result metadata alone. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects the Firecrawl binding. ## Example ```ts automations/search-product-news.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { firecrawl } from "automate.ax/firecrawl" export default automation("Search product news", () => { onSchedule({ schedule: "0 9 * * 1" }) firecrawl.searchWeb({ query: '"Automate.ax" release', sources: ["web", "news"], tbs: "qdr:w", limit: 10, scrapeOptions: { formats: ["markdown", "summary"] }, }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `query` | `string` | Yes | — | Search query, up to 500 characters. Firecrawl supports operators such as quotes, `site:`, `filetype:`, and exclusions prefixed with `-`. | | `sources` | `('web' \| 'news' \| 'images' \| { type })[]` | No | `['web']` | Result families to request. Object entries use the same source names. | | `categories` | `('github' \| 'research' \| 'pdf' \| 'developer' \| { type })[]` | No | None | Narrow ordinary web results or add developer results. Object entries use the same category names. `research` filters academic websites; it is not Firecrawl's research-paper index. | | `limit` | `number` | No | `10` | Maximum results per source, from 1 through 100. | | `includeDomains` | `string[]` | No | None | Restrict results to these hostnames. Cannot be combined with `excludeDomains`. | | `excludeDomains` | `string[]` | No | None | Exclude these hostnames. Cannot be combined with `includeDomains`. | | `tbs` | `string` | No | None | Firecrawl time filter, such as `qdr:h`, `qdr:d`, `qdr:w`, `qdr:m`, `qdr:y`, or a custom date range. | | `location` | `string` | No | None | Geographic search location. | | `ignoreInvalidURLs` | `boolean` | No | `false` | Remove results that cannot be passed to other Firecrawl endpoints. | | `highlights` | `boolean` | No | Provider default | Generate query-relevant result highlights. | | `timeout` | `number` | No | `60000` | Maximum provider search time in milliseconds. | | `scrapeOptions` | `object` | No | None | The same formats, browser actions, content filters, cache, proxy, redaction, and target settings accepted by `firecrawl.scrapeUrl`. | | `enterprise` | `('default' \| 'anon' \| 'zdr')[]` | No | None | Enterprise privacy modes enabled for the Firecrawl team. | | `threatProtection` | `object` | No | Account policy | Enterprise threat-protection overrides. | ## Output Returns Firecrawl's optional `web`, `news`, `images`, and `developer` arrays. Firecrawl omits buckets it did not return. Web and developer results contain web fields such as `url`, `title`, `description`, `position`, and `category`; news and image results retain their own `snippet`, `date`, `imageUrl`, and dimension fields. When `scrapeOptions` is present, results can also contain the document fields returned by `firecrawl.scrapeUrl`. # Start website crawl with Firecrawl Source: https://docs.automate.ax/reference/integrations/firecrawl/actions/start-website-crawl Start a Firecrawl crawl and return its job identity immediately. `firecrawl.startWebsiteCrawl` submits a crawl and returns without waiting for any pages. Use it when another system will receive the webhook or when you only need the Firecrawl job identity. Use [`firecrawl.crawlWebsite`](/reference/integrations/firecrawl/actions/crawl-website) when the automation should continue after the crawl finishes. Inputs accept literal values or compatible signals. An optional second argument `{ account }` selects the Firecrawl binding. ## Example ```ts automations/start-documentation-crawl.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { firecrawl } from "automate.ax/firecrawl" export default automation("Start documentation crawl", () => { onDashboardRun({ title: "Start documentation crawl" }) firecrawl.startWebsiteCrawl({ url: "https://docs.example.com", includePaths: ["guides/.*"], limit: 500, }) }) ``` ## Inputs The action accepts the crawl fields documented for `firecrawl.crawlWebsite`, plus: | Input | Type | Required | Default | Description | | - | - | - | - | - | | `webhook` | `string \| { url: string; events?: ('started' \| 'page' \| 'completed' \| 'failed')[]; headers?: Record; metadata?: Record }` | No | None | Callback URL or callback configuration. Firecrawl copies custom headers into each request and metadata into each payload. | ## Output Returns `{ id, url }`, where `id` is the Firecrawl crawl job ID and `url` is its provider status URL. The action does not poll the job or retrieve pages. # Firecrawl Source: https://docs.automate.ax/reference/integrations/firecrawl/index Scrape pages, search the web, map sites, and start Firecrawl crawls. ## Exports ```ts theme={null} import { firecrawl, firecrawlAccount, getFirecrawlApi, } from "automate.ax/firecrawl" ``` * `firecrawl` contains the packaged Firecrawl actions. * `firecrawlAccount("name")` selects a named Firecrawl connection. * `getFirecrawlApi` creates the authenticated Firecrawl API helper for a custom account-backed action. ## Actions * [Scrape URL with Firecrawl](/reference/integrations/firecrawl/actions/scrape-url) * [Search the web with Firecrawl](/reference/integrations/firecrawl/actions/search-web) * [Map website with Firecrawl](/reference/integrations/firecrawl/actions/map-website) * [Start website crawl with Firecrawl](/reference/integrations/firecrawl/actions/start-website-crawl) * [Crawl website with Firecrawl](/reference/integrations/firecrawl/actions/crawl-website) # Cancel GitHub workflow run Source: https://docs.automate.ax/reference/integrations/github/actions/cancel-workflow-run Cancel or force-cancel a GitHub Actions workflow run. `github.cancelWorkflowRun` requests cancellation of an active workflow run. ```ts automations/cancel-github-workflow.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Cancel GitHub workflow", () => { github.cancelWorkflowRun({ force: false, owner: "SentsCo", repository: "automate.ax", runId: 123456789, }) }) ``` Provide the repository and `runId`. `force` defaults to `false`; set it only when normal cancellation cannot stop the run. Returns `{}` after GitHub accepts the request. Cancellation is asynchronous, so use workflow-run triggers or `getWorkflowRun` to observe completion. Requires Actions write permission. # Create GitHub branch Source: https://docs.automate.ax/reference/integrations/github/actions/create-branch Create a GitHub branch at an existing commit. `github.createBranch` creates a `refs/heads/` reference at an existing commit SHA. ```ts automations/create-github-branch.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Create release branch", () => { github.createBranch({ branch: "release/2.0", owner: "SentsCo", repository: "automate.ax", sha: "existing-commit-sha", }) }) ``` Provide `owner`, `repository`, a branch name without `refs/heads/`, and an existing commit `sha`. Returns the created reference's `ref` plus its target `sha` and `type`. GitHub rejects duplicate branch names and empty repositories. Requires Contents write permission. # Create GitHub check run Source: https://docs.automate.ax/reference/integrations/github/actions/create-check-run Create a check run for one GitHub commit. `github.createCheckRun` creates a check run for one commit SHA. ```ts automations/create-github-check-run.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Create GitHub check", () => { github.createCheckRun({ headSha: "commit-sha", name: "Automate.ax policy", owner: "SentsCo", repository: "automate.ax", status: "in_progress", }) }) ``` Provide the repository, `headSha`, and a `name` of at most 100 characters. `status` defaults to `"queued"`; setting it to `"completed"` requires a `conclusion`. Optional fields include `detailsUrl`, `externalId`, `startedAt`, up to three actions, and rich `output` with up to 50 annotations. Annotation columns must be supplied together and only for a single-line range. Returns the check run's `id`, `name`, `head_sha`, `status`, and `conclusion`. Requires Checks write permission. # Create GitHub commit status Source: https://docs.automate.ax/reference/integrations/github/actions/create-commit-status Set a GitHub commit status for one context. `github.createCommitStatus` creates a status for a commit SHA and context. ```ts automations/report-github-status.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Report GitHub status", () => { github.createCommitStatus({ context: "automate.ax/production", description: "Production verification passed", owner: "SentsCo", repository: "automate.ax", sha: "commit-sha", state: "success", targetUrl: "https://automate.ax/runs/run_123", }) }) ``` Provide the repository, commit `sha`, and `state`: `"error"`, `"failure"`, `"pending"`, or `"success"`. `context` defaults to `"default"`; optional `description` accepts up to 140 characters and `targetUrl` links to details. Returns the status's `id`, `context`, and `state`. Requires Commit statuses write permission. # Create GitHub deployment Source: https://docs.automate.ax/reference/integrations/github/actions/create-deployment Create a GitHub deployment for a branch, tag, or commit. `github.createDeployment` creates a deployment record for a ref. ```ts automations/create-github-deployment.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Create GitHub deployment", () => { github.createDeployment({ autoMerge: false, environment: "production", owner: "SentsCo", payload: { releaseId: "rel_123" }, productionEnvironment: true, ref: "v2.0.0", repository: "automate.ax", }) }) ``` Provide the repository and branch, tag, or commit `ref`. `task` defaults to `"deploy"`; `autoMerge` defaults to `true`. Omit `requiredContexts` to require every unique commit-status context before deployment. Pass an empty array to bypass status checks, or list the exact contexts GitHub must verify. Optional fields also include JSON `payload`, `environment`, `description`, `transientEnvironment`, and `productionEnvironment`. Returns the deployment's `id`, `ref`, and `environment`, or GitHub's accepted auto-merge `message` when it must update the ref first. Requires Deployments write permission. # Create GitHub deployment status Source: https://docs.automate.ax/reference/integrations/github/actions/create-deployment-status Report a lifecycle status for a GitHub deployment. `github.createDeploymentStatus` records a new state for a deployment. ```ts automations/report-github-deployment.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Report GitHub deployment", () => { github.createDeploymentStatus({ deploymentId: 123456, description: "Production is healthy", environment: "production", environmentUrl: "https://automate.ax", owner: "SentsCo", repository: "automate.ax", state: "success", }) }) ``` Provide the repository, `deploymentId`, and `state`: `"error"`, `"failure"`, `"inactive"`, `"in_progress"`, `"pending"`, `"queued"`, or `"success"`. Optional fields are `description`, `environment`, `environmentUrl`, `logUrl`, and legacy `targetUrl`. `autoInactive` defaults to `true`. Returns the status's `id` and `state`. GitHub does not emit `deployment_status` webhooks for `inactive` states. Requires Deployments write permission. # Create GitHub issue Source: https://docs.automate.ax/reference/integrations/github/actions/create-issue Create a GitHub issue with its current fields and metadata. `github.createIssue` creates an issue in a repository accessible to the GitHub App installation. ```ts automations/create-github-issue.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { github } from "automate.ax/github" export default automation("Create GitHub issue", () => { onDashboardRun({ title: "Create GitHub issue" }) github.createIssue({ owner: "SentsCo", repository: "automate.ax", title: "Investigate webhook delivery", body: "Review the production delivery logs.", labels: ["bug"], }) }) ``` Provide `owner`, `repository`, and `title`, which accepts a string or integer. Optional fields are `body`, `assignees`, `labels`, `milestone`, `issueFieldValues`, and `type`. `milestone` and `type` also accept `null`. `milestone` accepts a string or integer. `labels` accepts names or objects with optional `id`, `name`, `description`, and `color`. Each custom issue field value has an integer `fieldId` and a string, number, or string-array `value`. Optional second argument `{ account }` selects the GitHub binding. Inputs accept compatible signals. Returns the created issue's `id`, `number`, and `title`. The installation needs Issues write permission. Setting assignees, labels, a milestone, or an issue type requires push access; GitHub silently drops those fields without it. Custom issue fields are available only for organization-owned repositories with that feature enabled and are otherwise silently dropped. # Create GitHub issue comment Source: https://docs.automate.ax/reference/integrations/github/actions/create-issue-comment Add a Markdown comment to a GitHub issue or pull request. `github.createIssueComment` adds a comment to an issue or pull request. ```ts automations/comment-on-github-issue.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Welcome GitHub issues", () => { const event = github.onIssueOpened() github.createIssueComment({ owner: event.repository.owner.login, repository: event.repository.name, issueNumber: event.issue.number, body: "Thanks for the report!", }) }) ``` Provide `owner`, `repository`, positive integer `issueNumber`, and non-empty Markdown `body`. Optional second argument `{ account }` defaults to the project binding. Inputs accept compatible signals. Returns the comment's `id` and `body`. The installation may use Issues write or Pull requests write permission, depending on the target. # Create or update GitHub repository file Source: https://docs.automate.ax/reference/integrations/github/actions/create-or-update-repository-file Create or replace one GitHub repository file in a commit. `github.createOrUpdateRepositoryFile` creates a file or replaces an existing file through GitHub's Contents API. ```ts automations/update-github-file.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Update GitHub config", () => { github.createOrUpdateRepositoryFile({ branch: "main", commitMessage: "Update deployment config", contentBase64: "eyJlbmFibGVkIjp0cnVlfQ==", owner: "SentsCo", path: "deployment.json", repository: "automate.ax", }) }) ``` Provide the repository, `path`, Base64-encoded `contentBase64`, and `commitMessage`. Add the existing blob `sha` when replacing a file. Optional `branch` defaults to the default branch; `author` and `committer` accept `{ name, email }`. Returns the commit `sha` and the content `path` and `sha`. Requires Contents write permission. This action rejects paths under `.github/workflows/`. Use `github.createOrUpdateWorkflowFile` for workflow files so Automate.ax requests GitHub's additional Workflows write permission only when GitHub requires it. # Create or update GitHub workflow file Source: https://docs.automate.ax/reference/integrations/github/actions/create-or-update-workflow-file Create or replace one GitHub Actions workflow file in a commit. `github.createOrUpdateWorkflowFile` creates or replaces a YAML workflow file directly under `.github/workflows/`. ```ts automations/update-github-workflow.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Update GitHub workflow", () => { github.createOrUpdateWorkflowFile({ branch: "main", commitMessage: "Update deployment workflow", contentBase64: "bmFtZTogRGVwbG95Cg==", owner: "SentsCo", path: ".github/workflows/deploy.yml", repository: "automate.ax", }) }) ``` Provide a `.yml` or `.yaml` path directly under `.github/workflows/`, Base64-encoded `contentBase64`, and `commitMessage`. Add the existing blob `sha` when replacing a workflow. Optional `branch` defaults to the default branch; `author` and `committer` accept `{ name, email }`. Returns the commit `sha` and the workflow content `path` and `sha`. The action requires both Contents and Workflows write permissions. # Create GitHub pull request Source: https://docs.automate.ax/reference/integrations/github/actions/create-pull-request Create a pull request between two GitHub branches. `github.createPullRequest` opens a pull request from a source branch to a target branch. ```ts automations/create-github-pull-request.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { github } from "automate.ax/github" export default automation("Create GitHub pull request", () => { onDashboardRun({ title: "Create GitHub pull request" }) github.createPullRequest({ owner: "SentsCo", repository: "automate.ax", head: "feature/github-docs", base: "main", title: "Document GitHub integration", draft: true, }) }) ``` Provide `owner`, `repository`, non-empty `head`, `base`, and `title`. Prefix `head` with `owner:` for a fork. For a cross-repository pull request where both repositories belong to the same organization, also set `headRepository` to the source repository name. Optional fields are Markdown `body`, `draft`, and `maintainerCanModify`. Optional second argument `{ account }` selects the GitHub binding. Inputs accept compatible signals. Returns the created pull request's `id`, `number`, `title`, and head `ref` and `sha`. GitHub rejects missing branches, identical source and target commits, and branch combinations inaccessible to the installation. # Create GitHub pull request review Source: https://docs.automate.ax/reference/integrations/github/actions/create-pull-request-review Submit an approval, comment, or change request on a pull request. `github.createPullRequestReview` submits one review without inline comments. ```ts automations/approve-github-pull-request.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { github } from "automate.ax/github" export default automation("Approve GitHub pull request", () => { onDashboardRun({ title: "Approve GitHub pull request" }) github.createPullRequestReview({ owner: "SentsCo", repository: "automate.ax", pullRequestNumber: 173, event: "APPROVE", body: "Automated checks passed.", }) }) ``` Provide `owner`, `repository`, positive integer `pullRequestNumber`, and `event`. The event accepts `"APPROVE"`, `"COMMENT"`, or `"REQUEST_CHANGES"`. A non-empty `body` is required for comments and change requests and optional for approvals. `commitId` defaults to the current head commit. Optional second argument `{ account }` defaults to the project binding. Inputs accept compatible signals. Returns the review's `id` and `state`. GitHub rejects approvals by the pull request author and reviews of inaccessible commits. # Create GitHub pull request review comment Source: https://docs.automate.ax/reference/integrations/github/actions/create-pull-request-review-comment Create an inline review comment on a GitHub pull request diff. `github.createPullRequestReviewComment` creates a standalone inline comment on a pull request diff. ```ts automations/comment-on-github-diff.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Comment on GitHub diff", () => { github.createPullRequestReviewComment({ body: "Please handle the empty response here.", commitId: "pull-request-head-sha", line: 48, owner: "SentsCo", path: "src/api.ts", pullRequestNumber: 42, repository: "automate.ax", side: "RIGHT", }) }) ``` Provide the repository, `pullRequestNumber`, Markdown `body`, reviewed `commitId`, and file `path`. For an inline comment, omit `subjectType` or set it to `"line"`, then provide `line` and `side`. For a multi-line comment, also provide `startLine` and `startSide` together. For a whole-file comment, set `subjectType: "file"` and omit all line fields. Diff coordinates must exist in the selected commit. Returns the comment's `id`, `body`, and file `path`. Requires Pull requests write permission. # Create GitHub release Source: https://docs.automate.ax/reference/integrations/github/actions/create-release Create a draft, prerelease, or published GitHub release. `github.createRelease` creates a release and can ask GitHub to generate release notes. ```ts automations/create-github-release.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Create GitHub release", () => { github.createRelease({ generateReleaseNotes: true, name: "Automate.ax 2.0", owner: "SentsCo", repository: "automate.ax", tagName: "v2.0.0", targetCommitish: "main", }) }) ``` Provide the repository and `tagName`. Optional fields are `targetCommitish`, `name`, Markdown `body`, `draft`, `prerelease`, `generateReleaseNotes`, `discussionCategoryName`, and `makeLatest` (`"true"`, `"false"`, or `"legacy"`). Draft, prerelease, and generated notes default to `false`. GitHub creates the tag from `targetCommitish` when it does not exist. Returns the release's `id`, `tag_name`, `draft`, and `prerelease` state. Requires Contents write permission. GitHub also requires Workflows write permission when the target commit changes a file under `.github/workflows/` relative to the default branch. # Delete GitHub branch Source: https://docs.automate.ax/reference/integrations/github/actions/delete-branch Delete a branch reference from a GitHub repository. `github.deleteBranch` deletes one repository branch. ```ts automations/delete-github-branch.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Delete GitHub branch", () => { github.deleteBranch({ owner: "SentsCo", repository: "automate.ax", branch: "release/old", }) }) ``` Provide the repository and branch name without the `refs/heads/` prefix. Returns `{}` after deletion. GitHub rejects deletion of a protected branch or the repository's default branch. Requires Contents write permission. # Delete GitHub deployment Source: https://docs.automate.ax/reference/integrations/github/actions/delete-deployment Delete a deployment from a GitHub repository. `github.deleteDeployment` deletes one deployment record. ```ts automations/delete-github-deployment.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Delete GitHub deployment", () => { github.deleteDeployment({ deploymentId: 123456, owner: "SentsCo", repository: "automate.ax", }) }) ``` Provide the repository and `deploymentId`. If the repository has multiple deployments, the target must already have an `inactive` status. GitHub permits the repository's sole deployment to be deleted regardless of status. Returns `{}` after deletion. Requires Deployments write permission. # Delete GitHub issue comment Source: https://docs.automate.ax/reference/integrations/github/actions/delete-issue-comment Delete a GitHub issue or pull request comment. `github.deleteIssueComment` deletes one conversation comment. ```ts automations/delete-github-comment.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Delete GitHub comment", () => { github.deleteIssueComment({ commentId: 123456, owner: "SentsCo", repository: "automate.ax", }) }) ``` Provide the repository and `commentId`. Returns `{}` after deletion. The installation must be allowed to delete the target comment and needs Issues write or Pull requests write permission. # Delete GitHub pull request review comment Source: https://docs.automate.ax/reference/integrations/github/actions/delete-pull-request-review-comment Delete an inline GitHub pull request review comment. `github.deletePullRequestReviewComment` deletes one inline diff comment. ```ts automations/delete-github-review-comment.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Delete GitHub review comment", () => { github.deletePullRequestReviewComment({ commentId: 123456, owner: "SentsCo", repository: "automate.ax", }) }) ``` Provide the repository and `commentId`. Returns `{}` after deletion. The installation must be allowed to delete the target comment. Requires Pull requests write permission. # Delete GitHub release Source: https://docs.automate.ax/reference/integrations/github/actions/delete-release Delete a GitHub release without deleting its tag. `github.deleteRelease` deletes one release record. ```ts automations/delete-github-release.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Delete GitHub release", () => { github.deleteRelease({ owner: "SentsCo", releaseId: 123456, repository: "automate.ax", }) }) ``` Provide the repository and `releaseId`. Returns `{}` after deletion. GitHub does not delete the associated Git tag; delete that reference separately if needed. Requires Contents write permission. # Delete GitHub release asset Source: https://docs.automate.ax/reference/integrations/github/actions/delete-release-asset Delete an asset attached to a GitHub release. `github.deleteReleaseAsset` deletes one release asset. ```ts automations/delete-github-release-asset.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Delete GitHub release asset", () => { github.deleteReleaseAsset({ owner: "SentsCo", repository: "automate.ax", assetId: 987654, }) }) ``` Provide the repository and `assetId` returned by `github.listReleaseAssets` or `github.uploadReleaseAsset`. Returns `{}` after deletion. Deleting an asset does not delete its release. Requires Contents write permission. # Delete GitHub repository file Source: https://docs.automate.ax/reference/integrations/github/actions/delete-repository-file Delete one GitHub repository file in a commit. `github.deleteRepositoryFile` deletes one file through GitHub's Contents API. ```ts automations/delete-github-file.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Remove generated file", () => { github.deleteRepositoryFile({ branch: "cleanup", commitMessage: "Remove generated report", owner: "SentsCo", path: "reports/old.json", repository: "automate.ax", sha: "existing-blob-sha", }) }) ``` Provide the repository, file `path`, current blob `sha`, and `commitMessage`. Optional `branch` defaults to the default branch; `author` and `committer` accept `{ name, email }`. Returns `commit.sha` and `content: null`. Requires Contents write permission. GitHub rejects stale blob IDs and conflicting concurrent Contents API writes. This action rejects paths under `.github/workflows/`. Use `github.deleteWorkflowFile` for workflow files so Automate.ax requests GitHub's additional Workflows write permission only when GitHub requires it. # Delete GitHub workflow file Source: https://docs.automate.ax/reference/integrations/github/actions/delete-workflow-file Delete one GitHub Actions workflow file in a commit. `github.deleteWorkflowFile` deletes a YAML workflow file directly under `.github/workflows/`. ```ts automations/delete-github-workflow.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Delete GitHub workflow", () => { github.deleteWorkflowFile({ branch: "main", commitMessage: "Remove retired workflow", owner: "SentsCo", path: ".github/workflows/retired.yml", repository: "automate.ax", sha: "existing-blob-sha", }) }) ``` Provide a `.yml` or `.yaml` path directly under `.github/workflows/`, the current blob `sha`, and `commitMessage`. Optional `branch` defaults to the default branch; `author` and `committer` accept `{ name, email }`. Returns `commit.sha` and `content: null`. The action requires both Contents and Workflows write permissions. # Disable GitHub workflow Source: https://docs.automate.ax/reference/integrations/github/actions/disable-workflow Disable a GitHub Actions workflow without deleting its file. `github.disableWorkflow` disables a workflow while leaving its YAML file unchanged. ```ts automations/disable-github-workflow.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Disable legacy workflow", () => { github.disableWorkflow({ owner: "SentsCo", repository: "automate.ax", workflowId: 123456, }) }) ``` Provide the repository and a numeric workflow ID or workflow file name. Returns `{}` after GitHub accepts the change. Requires Actions write permission. # Dispatch GitHub repository event Source: https://docs.automate.ax/reference/integrations/github/actions/dispatch-repository-event Send a custom repository dispatch event to GitHub. `github.dispatchRepositoryEvent` sends a custom `repository_dispatch` event to a repository. ```ts automations/dispatch-github-deploy.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Dispatch GitHub deployment", () => { github.dispatchRepositoryEvent({ clientPayload: { environment: "production", releaseId: "rel_123" }, eventType: "deploy.requested", owner: "SentsCo", repository: "automate.ax", }) }) ``` Provide `owner`, `repository`, and an `eventType` of at most 100 characters. Optional `clientPayload` must be JSON-compatible, may have at most 10 top-level properties, and its JSON representation must be smaller than 64 KB. The action completes after GitHub accepts the event and returns `{}`. GitHub delivers the value as `action` to app webhooks and evaluates matching `repository_dispatch` workflow triggers on the default branch. Requires Contents write permission. # Dispatch GitHub workflow Source: https://docs.automate.ax/reference/integrations/github/actions/dispatch-workflow Directly dispatch a GitHub Actions workflow and get its run ID. `github.dispatchWorkflow` directly starts a workflow configured for `workflow_dispatch` and returns the created run identity. ```ts automations/dispatch-github-workflow.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Deploy through GitHub", () => { const run = github.dispatchWorkflow({ inputs: { environment: "production", version: "2.0.0" }, owner: "SentsCo", ref: "main", repository: "automate.ax", workflowId: "deploy.yml", }) }) ``` Provide the repository, numeric workflow ID or file name, and a branch or tag `ref`. Optional `inputs` must match the workflow's declared inputs; GitHub accepts at most 25 properties. Returns `workflow_run_id`, `run_url`, and `html_url`, so you can correlate the exact run without searching by timestamp. Requires Actions write permission. # Enable GitHub workflow Source: https://docs.automate.ax/reference/integrations/github/actions/enable-workflow Enable a disabled GitHub Actions workflow. `github.enableWorkflow` enables a disabled workflow. ```ts automations/enable-github-workflow.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Enable deploy workflow", () => { github.enableWorkflow({ owner: "SentsCo", repository: "automate.ax", workflowId: "deploy.yml", }) }) ``` Provide the repository and a numeric workflow ID or workflow file name. Returns `{}` after GitHub accepts the change. Requires Actions write permission. # Get GitHub branch Source: https://docs.automate.ax/reference/integrations/github/actions/get-branch Get one GitHub branch and its protection metadata. `github.getBranch` gets one repository branch. ```ts automations/get-github-branch.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Get main branch", () => { const branch = github.getBranch({ branch: "main", owner: "SentsCo", repository: "automate.ax", }) }) ``` Provide `owner`, `repository`, and the branch name without `refs/heads/`. Returns the branch `name` and head commit `sha`. Requires Contents read permission. # Get GitHub combined commit status Source: https://docs.automate.ax/reference/integrations/github/actions/get-combined-commit-status Get the combined commit status for a GitHub ref. `github.getCombinedCommitStatus` returns the latest status for each context and GitHub's combined state. ```ts automations/get-github-status.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Check GitHub status", () => { const status = github.getCombinedCommitStatus({ owner: "SentsCo", ref: "main", repository: "automate.ax", }) }) ``` Provide `owner`, `repository`, and a commit SHA, branch, or tag `ref`. Optional pagination controls the returned status contexts. Returns `state`, `sha`, `total_count`, and `statuses`. Requires Commit statuses read permission. # Get GitHub deployment Source: https://docs.automate.ax/reference/integrations/github/actions/get-deployment Get one GitHub deployment by ID. `github.getDeployment` gets one repository deployment. ```ts automations/get-github-deployment.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Get GitHub deployment", () => { const deployment = github.getDeployment({ deploymentId: 123456, owner: "SentsCo", repository: "automate.ax", }) }) ``` Provide the repository and numeric `deploymentId`. Returns the deployment's `id`, `ref`, and `environment`. Requires Deployments read permission. # Get GitHub deployment status Source: https://docs.automate.ax/reference/integrations/github/actions/get-deployment-status Get one status from a GitHub deployment. `github.getDeploymentStatus` gets one deployment status by ID. ```ts automations/get-github-deployment-status.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Get GitHub deployment status", () => { const status = github.getDeploymentStatus({ deploymentId: 123456, owner: "SentsCo", repository: "automate.ax", statusId: 789, }) }) ``` Provide the repository, `deploymentId`, and `statusId`. Returns the status `id` and `state`. Requires Deployments read permission. # Get GitHub issue Source: https://docs.automate.ax/reference/integrations/github/actions/get-issue Get a GitHub issue or pull request by its repository number. `github.getIssue` uses GitHub's shared Issues API for issues and pull requests. ```ts automations/get-github-issue.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { github } from "automate.ax/github" export default automation("Get GitHub issue", () => { onDashboardRun({ title: "Get GitHub issue" }) github.getIssue({ owner: "SentsCo", repository: "automate.ax", issueNumber: 179, }) }) ``` Provide `owner`, `repository`, and positive integer `issueNumber`. Optional second argument `{ account }` defaults to the project's GitHub binding. Inputs accept compatible signals. Returns the issue's `id`, `number`, and `title`. GitHub returns an error if the installation can't access the repository or the number doesn't exist. # Get GitHub issue comment Source: https://docs.automate.ax/reference/integrations/github/actions/get-issue-comment Get one GitHub issue or pull request comment. `github.getIssueComment` gets one conversation comment by ID. ```ts automations/get-github-comment.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Get GitHub comment", () => { const comment = github.getIssueComment({ commentId: 123456, owner: "SentsCo", repository: "automate.ax", }) }) ``` Provide the repository and numeric `commentId`. Returns the comment's `id` and `body`. Requires Issues read or Pull requests read permission. # Get GitHub pull request Source: https://docs.automate.ax/reference/integrations/github/actions/get-pull-request Get a GitHub pull request by its repository number. `github.getPullRequest` gets a pull request with its branches, merge state, requested reviewers, labels, and repository metadata. ```ts automations/get-github-pull-request.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { github } from "automate.ax/github" export default automation("Get GitHub pull request", () => { onDashboardRun({ title: "Get GitHub pull request" }) github.getPullRequest({ owner: "SentsCo", repository: "automate.ax", pullRequestNumber: 173, }) }) ``` Provide `owner`, `repository`, and positive integer `pullRequestNumber`. Optional second argument `{ account }` defaults to the project binding. Inputs accept compatible signals. Returns the pull request's `id`, `number`, `title`, and head `ref` and `sha`. GitHub returns an error if the installation can't access the repository or the pull request doesn't exist. # Get GitHub pull request review comment Source: https://docs.automate.ax/reference/integrations/github/actions/get-pull-request-review-comment Get one inline GitHub pull request review comment. `github.getPullRequestReviewComment` gets one inline diff comment by ID. ```ts automations/get-github-review-comment.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Get GitHub review comment", () => { const comment = github.getPullRequestReviewComment({ commentId: 123456, owner: "SentsCo", repository: "automate.ax", }) }) ``` Provide the repository and `commentId`. Returns the inline comment's `id`, `body`, and file `path`. Requires Pull requests read permission. # Get GitHub release Source: https://docs.automate.ax/reference/integrations/github/actions/get-release Get one GitHub release by ID. `github.getRelease` gets one repository release. ```ts automations/get-github-release.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Get GitHub release", () => { const release = github.getRelease({ owner: "SentsCo", releaseId: 123456, repository: "automate.ax", }) }) ``` Provide the repository and numeric `releaseId`. Returns the release's `id`, `tag_name`, `draft`, and `prerelease` state. Requires Contents read permission. # Get GitHub repository Source: https://docs.automate.ax/reference/integrations/github/actions/get-repository Get metadata for one GitHub repository. `github.getRepository` returns repository metadata visible to the installation. ```ts automations/get-github-repository.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Get GitHub repository", () => { const repository = github.getRepository({ owner: "SentsCo", repository: "automate.ax", }) }) ``` Provide `owner` and `repository`. Optional second argument `{ account }` selects the GitHub binding. Returns the repository's `id`, `name`, and `full_name`. Requires Metadata read permission. # Get GitHub repository content Source: https://docs.automate.ax/reference/integrations/github/actions/get-repository-content Get a file or directory at a GitHub repository path. `github.getRepositoryContent` reads a file, directory, symlink, or submodule through GitHub's Contents API. File results include GitHub's encoded content so your automation can use the bytes instead of only inspecting metadata. ```ts automations/read-github-file.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Read GitHub config", () => { const file = github.getRepositoryContent({ owner: "SentsCo", path: "package.json", ref: "main", repository: "automate.ax", }) }) ``` Provide `owner`, `repository`, and a repository-relative `path`; use `""` for the root directory. Optional `ref` accepts a branch, tag, or commit SHA and defaults to the default branch. The result depends on `type`: * A file returns `{ type: "file", path, sha, content, encoding }`. GitHub normally returns Base64 content. * A symlink returns `{ type: "symlink", path, sha, target }`. * A submodule returns `{ type: "submodule", path, sha, submodule_git_url }`. * A directory returns an array of `{ type, path, sha }` entries. Requires Contents read permission. # Get GitHub workflow Source: https://docs.automate.ax/reference/integrations/github/actions/get-workflow Get one GitHub Actions workflow by ID or file name. `github.getWorkflow` gets one workflow definition. ```ts automations/get-github-workflow.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Get deploy workflow", () => { const workflow = github.getWorkflow({ owner: "SentsCo", repository: "automate.ax", workflowId: "deploy.yml", }) }) ``` Provide `owner`, `repository`, and a numeric workflow ID or workflow file name. Returns the workflow's `id`, `name`, `path`, and `state`. Requires Actions read permission. # Get GitHub workflow run Source: https://docs.automate.ax/reference/integrations/github/actions/get-workflow-run Get one GitHub Actions workflow run by ID. `github.getWorkflowRun` gets one workflow run and its current lifecycle state. ```ts automations/get-github-workflow-run.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Get GitHub workflow run", () => { const run = github.getWorkflowRun({ owner: "SentsCo", repository: "automate.ax", runId: 123456789, }) }) ``` Provide the repository and numeric `runId`. Optional `excludePullRequests` removes pull request objects from GitHub's response. Returns the run's `id`, `html_url`, `status`, and `conclusion`. Requires Actions read permission. # List GitHub branches Source: https://docs.automate.ax/reference/integrations/github/actions/list-branches List branches in a GitHub repository. `github.listBranches` lists repository branches and their head commits. ```ts automations/list-github-branches.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("List protected branches", () => { const branches = github.listBranches({ owner: "SentsCo", protected: true, repository: "automate.ax", }) }) ``` Provide `owner` and `repository`. Optional `protected` filters by protection state. `page` defaults to `1`; `perPage` defaults to `30` and accepts up to `100`. Returns each branch's `name` and head commit `sha`. Requires Contents read permission. # List GitHub deployment statuses Source: https://docs.automate.ax/reference/integrations/github/actions/list-deployment-statuses List the status history for a GitHub deployment. `github.listDeploymentStatuses` lists every status recorded for one deployment. ```ts automations/list-github-deployment-statuses.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("List GitHub deployment statuses", () => { const statuses = github.listDeploymentStatuses({ deploymentId: 123456, owner: "SentsCo", repository: "automate.ax", }) }) ``` Provide the repository and `deploymentId`. Pagination defaults to page `1` with `30` results. Returns each status's `id` and `state`. Requires Deployments read permission. # List GitHub deployments Source: https://docs.automate.ax/reference/integrations/github/actions/list-deployments List and filter deployments in a GitHub repository. `github.listDeployments` lists repository deployments. ```ts automations/list-github-deployments.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("List production deployments", () => { const deployments = github.listDeployments({ environment: "production", owner: "SentsCo", repository: "automate.ax", }) }) ``` Provide `owner` and `repository`. Optional filters are `sha`, `ref`, `task`, and `environment`. Pagination defaults to page `1` with `30` results. Returns each deployment's `id`, `ref`, and `environment`. Requires Deployments read permission. # List GitHub issue comments Source: https://docs.automate.ax/reference/integrations/github/actions/list-issue-comments List comments on a GitHub issue or pull request. `github.listIssueComments` lists conversation comments on one issue or pull request. ```ts automations/list-github-comments.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("List GitHub comments", () => { const comments = github.listIssueComments({ issueNumber: 42, owner: "SentsCo", repository: "automate.ax", sort: "updated", }) }) ``` Provide the repository and `issueNumber`. Optional `sort`, `direction`, `since`, `page`, and `perPage` control the page. Returns each issue comment's `id` and `body`, not inline diff comments. Requires Issues read or Pull requests read permission. # List GitHub issues Source: https://docs.automate.ax/reference/integrations/github/actions/list-issues List and filter a repository's GitHub issues and pull requests. `github.listIssues` returns issues and pull requests together, matching GitHub's repository Issues API. ```ts automations/list-github-issues.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { github } from "automate.ax/github" export default automation("List open GitHub issues", () => { onDashboardRun({ title: "List open GitHub issues" }) github.listIssues({ owner: "SentsCo", repository: "automate.ax", labels: ["bug"], }) }) ``` Provide `owner` and `repository`. Optional filters are `assignee`, `creator`, `direction`, `labels`, and `state`. `assignee` accepts a login, `"none"`, or `"*"`. `direction` accepts `"asc"` or `"desc"`. `state` accepts `"open"`, `"closed"`, or `"all"` and defaults to `"open"`. `page` defaults to 1 and `perPage` defaults to 30 with a maximum of 100. Optional second argument `{ account }` defaults to the project binding. Inputs accept compatible signals. Returns an array with each issue or pull request's `id`, `number`, and `title`. Request another page while the returned page length equals `perPage`. # List GitHub pull request files Source: https://docs.automate.ax/reference/integrations/github/actions/list-pull-request-files List files changed by a GitHub pull request. `github.listPullRequestFiles` lists the files and patches in one pull request. ```ts automations/list-github-pr-files.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("List GitHub pull request files", () => { const files = github.listPullRequestFiles({ owner: "SentsCo", pullRequestNumber: 42, repository: "automate.ax", }) }) ``` Provide the repository and `pullRequestNumber`. Pagination defaults to page `1` with `30` results. Returns each file's `filename`, `sha`, and `status`. Requires Pull requests read permission. # List GitHub pull request review comments Source: https://docs.automate.ax/reference/integrations/github/actions/list-pull-request-review-comments List inline review comments on a GitHub pull request. `github.listPullRequestReviewComments` lists comments attached to lines in a pull request diff. ```ts automations/list-github-review-comments.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("List GitHub review comments", () => { const comments = github.listPullRequestReviewComments({ owner: "SentsCo", pullRequestNumber: 42, repository: "automate.ax", }) }) ``` Provide the repository and `pullRequestNumber`. Optional `sort`, `direction`, `since`, `page`, and `perPage` control the page. Returns each inline comment's `id`, `body`, and file `path`. Conversation comments use `listIssueComments`. Requires Pull requests read permission. # List GitHub pull request reviews Source: https://docs.automate.ax/reference/integrations/github/actions/list-pull-request-reviews List submitted reviews on a GitHub pull request. `github.listPullRequestReviews` lists summary reviews on one pull request. ```ts automations/list-github-pr-reviews.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("List GitHub pull request reviews", () => { const reviews = github.listPullRequestReviews({ owner: "SentsCo", pullRequestNumber: 42, repository: "automate.ax", }) }) ``` Provide the repository and `pullRequestNumber`. Pagination defaults to page `1` with `30` results. Returns each review's `id` and `state`. Inline diff comments are returned by `listPullRequestReviewComments`. Requires Pull requests read permission. # List GitHub pull requests Source: https://docs.automate.ax/reference/integrations/github/actions/list-pull-requests List and filter a repository's GitHub pull requests. `github.listPullRequests` filters by branch and state and supports sorting and pagination. ```ts automations/list-github-pull-requests.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { github } from "automate.ax/github" export default automation("List GitHub pull requests", () => { onDashboardRun({ title: "List GitHub pull requests" }) github.listPullRequests({ owner: "SentsCo", repository: "automate.ax", base: "main", }) }) ``` Provide `owner` and `repository`. Optional filters are `base`, `head`, `state`, `sort`, and `direction`. For forks, format `head` as `owner:branch`. `state` accepts `"open"`, `"closed"`, or `"all"` and defaults to `"open"`. `sort` accepts `"created"`, `"updated"`, `"popularity"`, or `"long-running"`. `page` defaults to 1 and `perPage` defaults to 30 with a maximum of 100. Optional second argument `{ account }` defaults to the project binding. Inputs accept compatible signals. Returns an array with each pull request's `id`, `number`, `title`, and head `ref` and `sha`. Request another page while the returned page length equals `perPage`. # List GitHub release assets Source: https://docs.automate.ax/reference/integrations/github/actions/list-release-assets List assets attached to a GitHub release. `github.listReleaseAssets` lists one page of assets attached to a release. ```ts automations/list-github-release-assets.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("List GitHub release assets", () => { github.listReleaseAssets({ owner: "SentsCo", repository: "automate.ax", releaseId: 123456, perPage: 100, }) }) ``` Provide the repository and `releaseId`. Optional `page` and `perPage` select one provider page. Returns typed release assets with their IDs, names, sizes, states, and download URLs. Requires Contents read permission. # List GitHub releases Source: https://docs.automate.ax/reference/integrations/github/actions/list-releases List releases in a GitHub repository. `github.listReleases` lists published, prerelease, and accessible draft releases. ```ts automations/list-github-releases.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("List GitHub releases", () => { const releases = github.listReleases({ owner: "SentsCo", repository: "automate.ax", }) }) ``` Provide `owner` and `repository`. Pagination defaults to page `1` with `30` results. Returns each release's `id`, `tag_name`, `draft`, and `prerelease` state. Plain Git tags without releases are not included. Requires Contents read permission. # List GitHub repositories Source: https://docs.automate.ax/reference/integrations/github/actions/list-repositories List repositories available to a GitHub App installation. `github.listRepositories` lists repositories the selected GitHub App installation can access. ```ts automations/list-github-repositories.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("List GitHub repositories", () => { const repositories = github.listRepositories({ perPage: 100 }) // Sync the accessible GitHub repositories to the asset inventory. }) ``` Optional `page` defaults to `1`; `perPage` defaults to `30` and accepts up to `100`. Optional second argument `{ account }` selects the GitHub binding. Returns each repository's `id`, `name`, and `full_name`. No additional repository permission is required beyond installation access. # List GitHub workflow run jobs Source: https://docs.automate.ax/reference/integrations/github/actions/list-workflow-run-jobs List jobs for a GitHub Actions workflow run or attempt. `github.listWorkflowRunJobs` lists jobs and steps for one workflow run. ```ts automations/list-github-run-jobs.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("List GitHub run jobs", () => { const jobs = github.listWorkflowRunJobs({ filter: "all", owner: "SentsCo", repository: "automate.ax", runId: 123456789, }) }) ``` Provide the repository and `runId`. `filter` defaults to `"latest"` and also accepts `"all"`. Optional `attemptNumber` selects one attempt directly. Pagination defaults to page `1` with `30` results. Returns each job's `id`, `name`, `status`, and `conclusion`. Requires Actions read permission. # List GitHub workflow runs Source: https://docs.automate.ax/reference/integrations/github/actions/list-workflow-runs List and filter GitHub Actions workflow runs. `github.listWorkflowRuns` lists runs across a repository or for one workflow. ```ts automations/list-failed-github-runs.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("List failed GitHub runs", () => { const runs = github.listWorkflowRuns({ branch: "main", owner: "SentsCo", repository: "automate.ax", status: "failure", workflowId: "ci.yml", }) }) ``` Provide `owner` and `repository`. Optional filters are `workflowId`, `actor`, `branch`, `checkSuiteId`, `created`, `event`, `headSha`, `status`, and `excludePullRequests`. `created` uses GitHub date-search syntax. Pagination defaults to page `1` with `30` results. Returns each run's `id`, `html_url`, `status`, and `conclusion`. Requires Actions read permission. # List GitHub workflows Source: https://docs.automate.ax/reference/integrations/github/actions/list-workflows List GitHub Actions workflows in a repository. `github.listWorkflows` lists GitHub Actions workflow definitions. ```ts automations/list-github-workflows.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("List GitHub workflows", () => { const workflows = github.listWorkflows({ owner: "SentsCo", perPage: 100, repository: "automate.ax", }) }) ``` Provide `owner` and `repository`. `page` defaults to `1`; `perPage` defaults to `30` and accepts up to `100`. Returns one page of workflows with `id`, `name`, `path`, and `state`. Requires Actions read permission. # Merge GitHub pull request Source: https://docs.automate.ax/reference/integrations/github/actions/merge-pull-request Merge a pull request using an allowed repository merge method. `github.mergePullRequest` merges a pull request through GitHub. ```ts automations/merge-github-pull-request.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { github } from "automate.ax/github" export default automation("Merge GitHub pull request", () => { onDashboardRun({ title: "Merge GitHub pull request" }) github.mergePullRequest({ owner: "SentsCo", repository: "automate.ax", pullRequestNumber: 173, mergeMethod: "squash", }) }) ``` Provide `owner`, `repository`, and positive integer `pullRequestNumber`. Optional fields are `commitTitle`, `commitMessage`, and expected head `sha`. Optional second argument `{ account }` selects the GitHub binding. `mergeMethod` accepts `"merge"`, `"rebase"`, or `"squash"`. Inputs accept compatible signals. Returns `{ merged: boolean; message: string; sha: string | null }`. When `merged` is false, `message` explains why. Repository rules, required checks, reviews, conflicts, methods that the repository doesn't allow, or a mismatched `sha` can prevent merging. # Remove GitHub pull request reviewers Source: https://docs.automate.ax/reference/integrations/github/actions/remove-pull-request-reviewers Remove requested reviewers from a GitHub pull request. `github.removePullRequestReviewers` removes pending user or team review requests. ```ts automations/remove-github-reviewer.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Remove GitHub reviewer", () => { github.removePullRequestReviewers({ owner: "SentsCo", pullRequestNumber: 42, repository: "automate.ax", reviewers: ["octocat"], }) }) ``` Provide the repository and `pullRequestNumber`, plus `reviewers` user logins, `teamReviewers` team slugs, or both. Returns the pull request's `id` and `state`. Submitted reviews are not deleted. Requires Pull requests write permission. # Reply to GitHub pull request review comment Source: https://docs.automate.ax/reference/integrations/github/actions/reply-to-pull-request-review-comment Reply to an inline GitHub pull request review comment. `github.replyToPullRequestReviewComment` replies inside an existing review-comment thread. ```ts automations/reply-to-github-review.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Reply to GitHub review", () => { github.replyToPullRequestReviewComment({ body: "Fixed in the latest commit.", commentId: 123456, owner: "SentsCo", pullRequestNumber: 42, repository: "automate.ax", }) }) ``` Provide the repository, `pullRequestNumber`, parent `commentId`, and Markdown `body`. Returns the reply's `id`, `body`, and file `path`. The parent must belong to the same pull request. Requires Pull requests write permission. # Request GitHub pull request reviewers Source: https://docs.automate.ax/reference/integrations/github/actions/request-pull-request-reviewers Request user or team reviews on a GitHub pull request. `github.requestPullRequestReviewers` requests reviews from users or organization teams. ```ts automations/request-github-review.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Request GitHub review", () => { github.requestPullRequestReviewers({ owner: "SentsCo", pullRequestNumber: 42, repository: "automate.ax", reviewers: ["octocat"], teamReviewers: ["platform"], }) }) ``` Provide the repository and `pullRequestNumber`, plus `reviewers` user logins, `teamReviewers` team slugs, or both. Returns the pull request's `id` and `state`. GitHub notifies newly requested reviewers. Requires Pull requests write permission. # Re-run failed GitHub workflow jobs Source: https://docs.automate.ax/reference/integrations/github/actions/rerun-failed-workflow-jobs Re-run failed jobs and their dependent GitHub Actions jobs. `github.rerunFailedWorkflowJobs` creates another attempt for failed jobs and jobs that depend on them. ```ts automations/rerun-failed-github-jobs.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Retry failed GitHub jobs", () => { github.rerunFailedWorkflowJobs({ owner: "SentsCo", repository: "automate.ax", runId: 123456789, }) }) ``` Provide the repository and completed `runId`. Optional `enableDebugLogging` enables runner diagnostic logs. Returns `{}` after GitHub accepts the request. Successful independent jobs are not repeated. Requires Actions write permission. # Re-run GitHub workflow Source: https://docs.automate.ax/reference/integrations/github/actions/rerun-workflow Re-run every job in a GitHub Actions workflow run. `github.rerunWorkflow` creates another attempt for every job in a completed workflow run. ```ts automations/rerun-github-workflow.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Re-run GitHub workflow", () => { github.rerunWorkflow({ enableDebugLogging: true, owner: "SentsCo", repository: "automate.ax", runId: 123456789, }) }) ``` Provide the repository and completed `runId`. Optional `enableDebugLogging` enables runner diagnostic logs for the new attempt. Returns `{}` after GitHub accepts the request. The run ID remains the same and `run_attempt` increases. Requires Actions write permission. # Update GitHub check run Source: https://docs.automate.ax/reference/integrations/github/actions/update-check-run Update a GitHub check run's lifecycle or output. `github.updateCheckRun` updates one check run. ```ts automations/complete-github-check-run.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Complete GitHub check", () => { github.updateCheckRun({ checkRunId: 123456, conclusion: "success", owner: "SentsCo", repository: "automate.ax", status: "completed", output: { title: "Policy passed", summary: "All policy checks passed." }, }) }) ``` Provide the repository and `checkRunId`. Update the status, name, timestamps, correlation fields, actions, or rich output. Setting `status: "completed"` requires a `conclusion`; queued and in-progress updates cannot include one. Returns the check run's `id`, `name`, `head_sha`, `status`, and `conclusion`. Requires Checks write permission. # Update GitHub issue Source: https://docs.automate.ax/reference/integrations/github/actions/update-issue Update a GitHub issue or pull request through the Issues API. `github.updateIssue` updates fields shared by GitHub issues and pull requests. ```ts automations/close-github-issue.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { github } from "automate.ax/github" export default automation("Close GitHub issue", () => { onDashboardRun({ title: "Close GitHub issue" }) github.updateIssue({ owner: "SentsCo", repository: "automate.ax", issueNumber: 179, state: "closed", stateReason: "completed", }) }) ``` Provide `owner`, `repository`, and positive integer `issueNumber`. Optional replacements are `title`, `body`, `assignees`, `labels`, `milestone`, `issueFieldValues`, `type`, `state`, `stateReason`, and `duplicateIssueId`. `title` and `milestone` accept a string, integer, or `null`; `body` and `type` are also nullable. An empty `assignees` or `labels` array clears that collection. `stateReason` accepts `"completed"`, `"duplicate"`, `"not_planned"`, `"reopened"`, or `null`. `duplicateIssueId` is the canonical issue database ID and is used only with the `"duplicate"` reason. Assignees accept login strings or objects with `login`; labels accept names or objects with `id`, `name`, `description`, and `color`. Custom issue field values contain integer `fieldId` and a string, number, or string-array `value`. Structured assignees, labels, custom fields, and issue types may also include `rationale`, `suggest`, and `confidence` (`"low"`, `"medium"`, or `"high"`). A structured issue `type` uses `value` for its name or `null` to remove the current type. Optional second argument `{ account }` defaults to the project binding. Inputs accept compatible signals. Returns the updated issue or pull request's `id`, `number`, `title`, and any pending `suggestions` GitHub reports for requested fields. The installation needs either Issues write or Pull requests write permission. Setting assignees, labels, a milestone, custom fields, or an issue type also requires push access; GitHub silently drops applicable changes without it. # Update GitHub issue comment Source: https://docs.automate.ax/reference/integrations/github/actions/update-issue-comment Replace a GitHub issue or pull request comment body. `github.updateIssueComment` replaces one conversation comment's Markdown body. ```ts automations/update-github-comment.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Update GitHub comment", () => { github.updateIssueComment({ body: "Deployment completed successfully.", commentId: 123456, owner: "SentsCo", repository: "automate.ax", }) }) ``` Provide the repository, `commentId`, and non-empty Markdown `body`. Returns the comment's `id` and `body`. The installation must be allowed to edit the target comment and needs Issues write or Pull requests write permission. # Update GitHub pull request Source: https://docs.automate.ax/reference/integrations/github/actions/update-pull-request Update a GitHub pull request's metadata, state, or target branch. `github.updatePullRequest` changes a pull request's title, body, target branch, state, or maintainer permissions. ```ts automations/update-github-pull-request.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { github } from "automate.ax/github" export default automation("Update GitHub pull request", () => { onDashboardRun({ title: "Update GitHub pull request" }) github.updatePullRequest({ owner: "SentsCo", repository: "automate.ax", pullRequestNumber: 173, title: "Add GitHub App integration", }) }) ``` Provide `owner`, `repository`, and positive integer `pullRequestNumber`. Optional replacements are `base`, `body`, `maintainerCanModify`, and `title`. Optional second argument `{ account }` selects the GitHub binding. `state` accepts `"open"` or `"closed"`. Inputs accept compatible signals. Returns the updated pull request's `id`, `number`, `title`, and head `ref` and `sha`. Changing `base` can change the diff and mergeability. GitHub validates branch access and state transitions. # Update GitHub pull request branch Source: https://docs.automate.ax/reference/integrations/github/actions/update-pull-request-branch Update a GitHub pull request branch from its base branch. `github.updatePullRequestBranch` updates a pull request's head branch with changes from its base branch. ```ts automations/update-github-pr-branch.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Update GitHub pull request branch", () => { github.updatePullRequestBranch({ expectedHeadSha: "current-head-sha", owner: "SentsCo", pullRequestNumber: 42, repository: "automate.ax", }) }) ``` Provide the repository and `pullRequestNumber`. Optional `expectedHeadSha` prevents updating a branch that changed since you read it. Returns GitHub's asynchronous `message` and `url` when present. GitHub may reject conflicting branches or repositories that disable update-branch. Requires Pull requests and Contents write permissions. For a pull request from a fork, the GitHub App installation must also have access to the head repository. # Update GitHub pull request review comment Source: https://docs.automate.ax/reference/integrations/github/actions/update-pull-request-review-comment Replace an inline GitHub pull request review comment body. `github.updatePullRequestReviewComment` replaces an inline comment's Markdown body. ```ts automations/update-github-review-comment.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Update GitHub review comment", () => { github.updatePullRequestReviewComment({ body: "Updated review note.", commentId: 123456, owner: "SentsCo", repository: "automate.ax", }) }) ``` Provide the repository, `commentId`, and non-empty Markdown `body`. Returns the comment's `id`, `body`, and file `path`. The installation must be allowed to edit the target comment. Requires Pull requests write permission. # Update GitHub release Source: https://docs.automate.ax/reference/integrations/github/actions/update-release Update a GitHub release's notes or publication state. `github.updateRelease` changes an existing release. ```ts automations/publish-github-release.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Publish GitHub release", () => { github.updateRelease({ draft: false, owner: "SentsCo", releaseId: 123456, repository: "automate.ax", }) }) ``` Provide the repository and `releaseId`. Optional replacements are `tagName`, `targetCommitish`, `name`, Markdown `body`, `draft`, `prerelease`, `discussionCategoryName`, and `makeLatest`. GitHub only supports generated notes when creating a release. Returns the release's `id`, `tag_name`, `draft`, and `prerelease` state. Publishing a draft or changing prerelease state can emit different release webhook actions. Requires Contents write permission. GitHub also requires Workflows write permission when the target commit changes a file under `.github/workflows/` relative to the default branch. # Update GitHub release asset Source: https://docs.automate.ax/reference/integrations/github/actions/update-release-asset Rename or relabel an asset attached to a GitHub release. `github.updateReleaseAsset` changes an uploaded release asset's filename or display label. ```ts automations/update-github-release-asset.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Label GitHub release asset", () => { github.updateReleaseAsset({ assetId: 123456, label: "macOS binary", owner: "SentsCo", repository: "automate.ax", }) }) ``` Provide the repository, `assetId`, and at least one replacement: `name` or `label`. Use an empty `label` to remove the display label. Returns the asset's `id`, `name`, `size`, `state`, and `browser_download_url`. Renaming does not replace the asset's binary content. Requires Contents write permission. # Upload GitHub release asset Source: https://docs.automate.ax/reference/integrations/github/actions/upload-release-asset Upload binary content to a GitHub release. `github.uploadReleaseAsset` uploads one Base64-encoded file to a release. ```ts automations/upload-github-release-asset.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Upload GitHub release asset", () => { github.uploadReleaseAsset({ contentType: "application/zip", dataBase64: "UEsDBAoAAAAAA...", name: "automate-ax.zip", owner: "SentsCo", releaseId: 123456, repository: "automate.ax", }) }) ``` Provide the repository, `releaseId`, file `name`, media `contentType`, and valid Base64 `dataBase64`. Optional `label` sets a display label. Returns the asset's `id`, `name`, `size`, `state`, and `browser_download_url`. GitHub rejects duplicate asset names on one release. Requires Contents write permission. # GitHub Source: https://docs.automate.ax/reference/integrations/github/index Manage GitHub repositories, branches, pull requests, issues, releases, workflows, and checks, or react to GitHub App events. ## Exports ```ts theme={null} import { github, githubAccount, getGitHubApi } from "automate.ax/github" ``` * `github` contains the packaged GitHub actions and triggers. * `githubAccount("name")` selects a named GitHub connection. * `getGitHubApi` creates the authenticated GitHub API helper for a custom account-backed action. ## Triggers * [On GitHub check run event](/reference/integrations/github/triggers/on-check-run-event) * [On GitHub check run created](/reference/integrations/github/triggers/on-check-run-created) * [On GitHub check run rerequested](/reference/integrations/github/triggers/on-check-run-rerequested) * [On GitHub check run requested action](/reference/integrations/github/triggers/on-check-run-requested-action) * [On GitHub check run completed](/reference/integrations/github/triggers/on-check-run-completed) * [On GitHub check run succeeded](/reference/integrations/github/triggers/on-check-run-succeeded) * [On GitHub check run failed](/reference/integrations/github/triggers/on-check-run-failed) * [On GitHub check run neutral](/reference/integrations/github/triggers/on-check-run-neutral) * [On GitHub check run pending](/reference/integrations/github/triggers/on-check-run-pending) * [On GitHub check run skipped](/reference/integrations/github/triggers/on-check-run-skipped) * [On GitHub check run stale](/reference/integrations/github/triggers/on-check-run-stale) * [On GitHub check run waiting](/reference/integrations/github/triggers/on-check-run-waiting) * [On GitHub check run startup failed](/reference/integrations/github/triggers/on-check-run-startup-failed) * [On GitHub check run cancelled](/reference/integrations/github/triggers/on-check-run-cancelled) * [On GitHub check run timed out](/reference/integrations/github/triggers/on-check-run-timed-out) * [On GitHub check run action required](/reference/integrations/github/triggers/on-check-run-action-required) * [On GitHub check suite event](/reference/integrations/github/triggers/on-check-suite-event) * [On GitHub check suite requested](/reference/integrations/github/triggers/on-check-suite-requested) * [On GitHub check suite rerequested](/reference/integrations/github/triggers/on-check-suite-rerequested) * [On GitHub check suite completed](/reference/integrations/github/triggers/on-check-suite-completed) * [On GitHub check suite succeeded](/reference/integrations/github/triggers/on-check-suite-succeeded) * [On GitHub check suite failed](/reference/integrations/github/triggers/on-check-suite-failed) * [On GitHub check suite neutral](/reference/integrations/github/triggers/on-check-suite-neutral) * [On GitHub check suite skipped](/reference/integrations/github/triggers/on-check-suite-skipped) * [On GitHub check suite stale](/reference/integrations/github/triggers/on-check-suite-stale) * [On GitHub check suite startup failed](/reference/integrations/github/triggers/on-check-suite-startup-failed) * [On GitHub check suite cancelled](/reference/integrations/github/triggers/on-check-suite-cancelled) * [On GitHub check suite timed out](/reference/integrations/github/triggers/on-check-suite-timed-out) * [On GitHub check suite action required](/reference/integrations/github/triggers/on-check-suite-action-required) * [On GitHub ref created](/reference/integrations/github/triggers/on-ref-created) * [On GitHub branch created](/reference/integrations/github/triggers/on-branch-created) * [On GitHub tag created](/reference/integrations/github/triggers/on-tag-created) * [On GitHub ref deleted](/reference/integrations/github/triggers/on-ref-deleted) * [On GitHub branch deleted](/reference/integrations/github/triggers/on-branch-deleted) * [On GitHub tag deleted](/reference/integrations/github/triggers/on-tag-deleted) * [On GitHub issue event](/reference/integrations/github/triggers/on-issue-event) * [On GitHub issue assigned](/reference/integrations/github/triggers/on-issue-assigned) * [On GitHub issue closed](/reference/integrations/github/triggers/on-issue-closed) * [On GitHub issue deleted](/reference/integrations/github/triggers/on-issue-deleted) * [On GitHub issue removed from milestone](/reference/integrations/github/triggers/on-issue-demilestoned) * [On GitHub issue edited](/reference/integrations/github/triggers/on-issue-edited) * [On GitHub issue field added](/reference/integrations/github/triggers/on-issue-field-added) * [On GitHub issue field removed](/reference/integrations/github/triggers/on-issue-field-removed) * [On GitHub issue labeled](/reference/integrations/github/triggers/on-issue-labeled) * [On GitHub issue locked](/reference/integrations/github/triggers/on-issue-locked) * [On GitHub issue added to milestone](/reference/integrations/github/triggers/on-issue-milestoned) * [On GitHub issue opened](/reference/integrations/github/triggers/on-issue-opened) * [On GitHub issue pinned](/reference/integrations/github/triggers/on-issue-pinned) * [On GitHub issue reopened](/reference/integrations/github/triggers/on-issue-reopened) * [On GitHub issue transferred](/reference/integrations/github/triggers/on-issue-transferred) * [On GitHub issue typed](/reference/integrations/github/triggers/on-issue-typed) * [On GitHub issue unassigned](/reference/integrations/github/triggers/on-issue-unassigned) * [On GitHub issue unlabeled](/reference/integrations/github/triggers/on-issue-unlabeled) * [On GitHub issue unlocked](/reference/integrations/github/triggers/on-issue-unlocked) * [On GitHub issue unpinned](/reference/integrations/github/triggers/on-issue-unpinned) * [On GitHub issue type removed](/reference/integrations/github/triggers/on-issue-untyped) * [On GitHub pull request event](/reference/integrations/github/triggers/on-pull-request-event) * [On GitHub pull request assigned](/reference/integrations/github/triggers/on-pull-request-assigned) * [On GitHub pull request auto-merge disabled](/reference/integrations/github/triggers/on-pull-request-auto-merge-disabled) * [On GitHub pull request auto-merge enabled](/reference/integrations/github/triggers/on-pull-request-auto-merge-enabled) * [On GitHub pull request opened](/reference/integrations/github/triggers/on-pull-request-opened) * [On GitHub pull request ready for review](/reference/integrations/github/triggers/on-pull-request-ready-for-review) * [On GitHub pull request converted to draft](/reference/integrations/github/triggers/on-pull-request-converted-to-draft) * [On GitHub pull request removed from milestone](/reference/integrations/github/triggers/on-pull-request-demilestoned) * [On GitHub pull request left merge queue](/reference/integrations/github/triggers/on-pull-request-dequeued) * [On GitHub pull request edited](/reference/integrations/github/triggers/on-pull-request-edited) * [On GitHub pull request entered merge queue](/reference/integrations/github/triggers/on-pull-request-enqueued) * [On GitHub pull request labeled](/reference/integrations/github/triggers/on-pull-request-labeled) * [On GitHub pull request locked](/reference/integrations/github/triggers/on-pull-request-locked) * [On GitHub pull request added to milestone](/reference/integrations/github/triggers/on-pull-request-milestoned) * [On GitHub pull request reopened](/reference/integrations/github/triggers/on-pull-request-reopened) * [On GitHub pull request review request removed](/reference/integrations/github/triggers/on-pull-request-review-request-removed) * [On GitHub pull request review requested](/reference/integrations/github/triggers/on-pull-request-review-requested) * [On GitHub pull request stacked](/reference/integrations/github/triggers/on-pull-request-stacked) * [On GitHub pull request synchronized](/reference/integrations/github/triggers/on-pull-request-synchronized) * [On GitHub pull request unassigned](/reference/integrations/github/triggers/on-pull-request-unassigned) * [On GitHub pull request unlabeled](/reference/integrations/github/triggers/on-pull-request-unlabeled) * [On GitHub pull request unlocked](/reference/integrations/github/triggers/on-pull-request-unlocked) * [On GitHub pull request closed](/reference/integrations/github/triggers/on-pull-request-closed) * [On GitHub pull request merged](/reference/integrations/github/triggers/on-pull-request-merged) * [On GitHub pull request review event](/reference/integrations/github/triggers/on-pull-request-review-event) * [On GitHub pull request review submitted](/reference/integrations/github/triggers/on-pull-request-review-submitted) * [On GitHub pull request review approved](/reference/integrations/github/triggers/on-pull-request-review-approved) * [On GitHub pull request review changes requested](/reference/integrations/github/triggers/on-pull-request-review-changes-requested) * [On GitHub pull request review dismissed](/reference/integrations/github/triggers/on-pull-request-review-dismissed) * [On GitHub pull request review edited](/reference/integrations/github/triggers/on-pull-request-review-edited) * [On GitHub workflow run event](/reference/integrations/github/triggers/on-workflow-run-event) * [On GitHub workflow run requested](/reference/integrations/github/triggers/on-workflow-run-requested) * [On GitHub workflow run started](/reference/integrations/github/triggers/on-workflow-run-started) * [On GitHub workflow run completed](/reference/integrations/github/triggers/on-workflow-run-completed) * [On GitHub workflow run succeeded](/reference/integrations/github/triggers/on-workflow-run-succeeded) * [On GitHub workflow run failed](/reference/integrations/github/triggers/on-workflow-run-failed) * [On GitHub workflow run cancelled](/reference/integrations/github/triggers/on-workflow-run-cancelled) * [On GitHub workflow run action required](/reference/integrations/github/triggers/on-workflow-run-action-required) * [On GitHub workflow run neutral](/reference/integrations/github/triggers/on-workflow-run-neutral) * [On GitHub workflow run skipped](/reference/integrations/github/triggers/on-workflow-run-skipped) * [On GitHub workflow run stale](/reference/integrations/github/triggers/on-workflow-run-stale) * [On GitHub workflow run startup failed](/reference/integrations/github/triggers/on-workflow-run-startup-failed) * [On GitHub workflow run timed out](/reference/integrations/github/triggers/on-workflow-run-timed-out) * [On GitHub push](/reference/integrations/github/triggers/on-push) * [On GitHub release event](/reference/integrations/github/triggers/on-release-event) * [On GitHub release created](/reference/integrations/github/triggers/on-release-created) * [On GitHub release deleted](/reference/integrations/github/triggers/on-release-deleted) * [On GitHub release edited](/reference/integrations/github/triggers/on-release-edited) * [On GitHub release prereleased](/reference/integrations/github/triggers/on-release-prereleased) * [On GitHub release published](/reference/integrations/github/triggers/on-release-published) * [On GitHub release released](/reference/integrations/github/triggers/on-release-released) * [On GitHub release unpublished](/reference/integrations/github/triggers/on-release-unpublished) * [On GitHub issue comment event](/reference/integrations/github/triggers/on-issue-comment-event) * [On GitHub issue comment created](/reference/integrations/github/triggers/on-issue-comment-created) * [On GitHub issue comment edited](/reference/integrations/github/triggers/on-issue-comment-edited) * [On GitHub issue comment deleted](/reference/integrations/github/triggers/on-issue-comment-deleted) * [On GitHub issue comment pinned](/reference/integrations/github/triggers/on-issue-comment-pinned) * [On GitHub issue comment unpinned](/reference/integrations/github/triggers/on-issue-comment-unpinned) * [On GitHub pull request review comment event](/reference/integrations/github/triggers/on-pull-request-review-comment-event) * [On GitHub pull request review comment created](/reference/integrations/github/triggers/on-pull-request-review-comment-created) * [On GitHub pull request review comment edited](/reference/integrations/github/triggers/on-pull-request-review-comment-edited) * [On GitHub pull request review comment deleted](/reference/integrations/github/triggers/on-pull-request-review-comment-deleted) * [On GitHub workflow job event](/reference/integrations/github/triggers/on-workflow-job-event) * [On GitHub workflow job queued](/reference/integrations/github/triggers/on-workflow-job-queued) * [On GitHub workflow job started](/reference/integrations/github/triggers/on-workflow-job-started) * [On GitHub workflow job waiting](/reference/integrations/github/triggers/on-workflow-job-waiting) * [On GitHub workflow job completed](/reference/integrations/github/triggers/on-workflow-job-completed) * [On GitHub workflow job succeeded](/reference/integrations/github/triggers/on-workflow-job-succeeded) * [On GitHub workflow job failed](/reference/integrations/github/triggers/on-workflow-job-failed) * [On GitHub workflow job cancelled](/reference/integrations/github/triggers/on-workflow-job-cancelled) * [On GitHub workflow job timed out](/reference/integrations/github/triggers/on-workflow-job-timed-out) * [On GitHub workflow job action required](/reference/integrations/github/triggers/on-workflow-job-action-required) * [On GitHub workflow job neutral](/reference/integrations/github/triggers/on-workflow-job-neutral) * [On GitHub workflow job skipped](/reference/integrations/github/triggers/on-workflow-job-skipped) * [On GitHub workflow dispatch](/reference/integrations/github/triggers/on-workflow-dispatch) * [On GitHub repository dispatch](/reference/integrations/github/triggers/on-repository-dispatch) * [On GitHub commit comment event](/reference/integrations/github/triggers/on-commit-comment-event) * [On GitHub commit comment created](/reference/integrations/github/triggers/on-commit-comment-created) * [On GitHub issue dependencies event](/reference/integrations/github/triggers/on-issue-dependencies-event) * [On GitHub issue dependency blocked by added](/reference/integrations/github/triggers/on-issue-dependency-blocked-by-added) * [On GitHub issue dependency blocked by removed](/reference/integrations/github/triggers/on-issue-dependency-blocked-by-removed) * [On GitHub issue dependency blocking added](/reference/integrations/github/triggers/on-issue-dependency-blocking-added) * [On GitHub issue dependency blocking removed](/reference/integrations/github/triggers/on-issue-dependency-blocking-removed) * [On GitHub sub issues event](/reference/integrations/github/triggers/on-sub-issues-event) * [On GitHub parent issue added](/reference/integrations/github/triggers/on-parent-issue-added) * [On GitHub parent issue removed](/reference/integrations/github/triggers/on-parent-issue-removed) * [On GitHub sub issue added](/reference/integrations/github/triggers/on-sub-issue-added) * [On GitHub sub issue removed](/reference/integrations/github/triggers/on-sub-issue-removed) * [On GitHub pull request review thread event](/reference/integrations/github/triggers/on-pull-request-review-thread-event) * [On GitHub pull request review thread resolved](/reference/integrations/github/triggers/on-pull-request-review-thread-resolved) * [On GitHub pull request review thread unresolved](/reference/integrations/github/triggers/on-pull-request-review-thread-unresolved) * [On GitHub deployment review event](/reference/integrations/github/triggers/on-deployment-review-event) * [On GitHub deployment review approved](/reference/integrations/github/triggers/on-deployment-review-approved) * [On GitHub deployment review rejected](/reference/integrations/github/triggers/on-deployment-review-rejected) * [On GitHub deployment review requested](/reference/integrations/github/triggers/on-deployment-review-requested) * [On GitHub deployment protection rule event](/reference/integrations/github/triggers/on-deployment-protection-rule-event) * [On GitHub deployment protection rule requested](/reference/integrations/github/triggers/on-deployment-protection-rule-requested) * [On GitHub merge group event](/reference/integrations/github/triggers/on-merge-group-event) * [On GitHub merge group checks requested](/reference/integrations/github/triggers/on-merge-group-checks-requested) * [On GitHub merge group destroyed](/reference/integrations/github/triggers/on-merge-group-destroyed) * [On GitHub repository event](/reference/integrations/github/triggers/on-repository-event) * [On GitHub repository archived](/reference/integrations/github/triggers/on-repository-archived) * [On GitHub repository created](/reference/integrations/github/triggers/on-repository-created) * [On GitHub repository deleted](/reference/integrations/github/triggers/on-repository-deleted) * [On GitHub repository edited](/reference/integrations/github/triggers/on-repository-edited) * [On GitHub repository privatized](/reference/integrations/github/triggers/on-repository-privatized) * [On GitHub repository publicized](/reference/integrations/github/triggers/on-repository-publicized) * [On GitHub repository renamed](/reference/integrations/github/triggers/on-repository-renamed) * [On GitHub repository transferred](/reference/integrations/github/triggers/on-repository-transferred) * [On GitHub repository unarchived](/reference/integrations/github/triggers/on-repository-unarchived) * [On GitHub deployment created](/reference/integrations/github/triggers/on-deployment-created) * [On GitHub deployment status event](/reference/integrations/github/triggers/on-deployment-status-event) * [On GitHub deployment queued](/reference/integrations/github/triggers/on-deployment-queued) * [On GitHub deployment started](/reference/integrations/github/triggers/on-deployment-started) * [On GitHub deployment pending](/reference/integrations/github/triggers/on-deployment-pending) * [On GitHub deployment succeeded](/reference/integrations/github/triggers/on-deployment-succeeded) * [On GitHub deployment failed](/reference/integrations/github/triggers/on-deployment-failed) * [On GitHub deployment errored](/reference/integrations/github/triggers/on-deployment-errored) * [On GitHub status event](/reference/integrations/github/triggers/on-status-event) * [On GitHub status pending](/reference/integrations/github/triggers/on-status-pending) * [On GitHub status succeeded](/reference/integrations/github/triggers/on-status-succeeded) * [On GitHub status failed](/reference/integrations/github/triggers/on-status-failed) * [On GitHub status errored](/reference/integrations/github/triggers/on-status-errored) ## Actions * [List GitHub repositories](/reference/integrations/github/actions/list-repositories) * [Get GitHub repository](/reference/integrations/github/actions/get-repository) * [Get GitHub repository content](/reference/integrations/github/actions/get-repository-content) * [Create or update GitHub repository file](/reference/integrations/github/actions/create-or-update-repository-file) * [Create or update GitHub workflow file](/reference/integrations/github/actions/create-or-update-workflow-file) * [Delete GitHub repository file](/reference/integrations/github/actions/delete-repository-file) * [Delete GitHub workflow file](/reference/integrations/github/actions/delete-workflow-file) * [Dispatch GitHub repository event](/reference/integrations/github/actions/dispatch-repository-event) * [List GitHub branches](/reference/integrations/github/actions/list-branches) * [Get GitHub branch](/reference/integrations/github/actions/get-branch) * [Create GitHub branch](/reference/integrations/github/actions/create-branch) * [Delete GitHub branch](/reference/integrations/github/actions/delete-branch) * [Get GitHub combined commit status](/reference/integrations/github/actions/get-combined-commit-status) * [Create GitHub commit status](/reference/integrations/github/actions/create-commit-status) * [Create GitHub check run](/reference/integrations/github/actions/create-check-run) * [Update GitHub check run](/reference/integrations/github/actions/update-check-run) * [List GitHub workflows](/reference/integrations/github/actions/list-workflows) * [Get GitHub workflow](/reference/integrations/github/actions/get-workflow) * [Dispatch GitHub workflow](/reference/integrations/github/actions/dispatch-workflow) * [Enable GitHub workflow](/reference/integrations/github/actions/enable-workflow) * [Disable GitHub workflow](/reference/integrations/github/actions/disable-workflow) * [List GitHub workflow runs](/reference/integrations/github/actions/list-workflow-runs) * [Get GitHub workflow run](/reference/integrations/github/actions/get-workflow-run) * [List GitHub workflow run jobs](/reference/integrations/github/actions/list-workflow-run-jobs) * [Cancel GitHub workflow run](/reference/integrations/github/actions/cancel-workflow-run) * [Re-run GitHub workflow](/reference/integrations/github/actions/rerun-workflow) * [Re-run failed GitHub workflow jobs](/reference/integrations/github/actions/rerun-failed-workflow-jobs) * [Create GitHub issue comment](/reference/integrations/github/actions/create-issue-comment) * [List GitHub issue comments](/reference/integrations/github/actions/list-issue-comments) * [Get GitHub issue comment](/reference/integrations/github/actions/get-issue-comment) * [Update GitHub issue comment](/reference/integrations/github/actions/update-issue-comment) * [Delete GitHub issue comment](/reference/integrations/github/actions/delete-issue-comment) * [Create GitHub issue](/reference/integrations/github/actions/create-issue) * [Create GitHub pull request review](/reference/integrations/github/actions/create-pull-request-review) * [List GitHub pull request reviews](/reference/integrations/github/actions/list-pull-request-reviews) * [List GitHub pull request files](/reference/integrations/github/actions/list-pull-request-files) * [Request GitHub pull request reviewers](/reference/integrations/github/actions/request-pull-request-reviewers) * [Remove GitHub pull request reviewers](/reference/integrations/github/actions/remove-pull-request-reviewers) * [Update GitHub pull request branch](/reference/integrations/github/actions/update-pull-request-branch) * [List GitHub pull request review comments](/reference/integrations/github/actions/list-pull-request-review-comments) * [Get GitHub pull request review comment](/reference/integrations/github/actions/get-pull-request-review-comment) * [Create GitHub pull request review comment](/reference/integrations/github/actions/create-pull-request-review-comment) * [Reply to GitHub pull request review comment](/reference/integrations/github/actions/reply-to-pull-request-review-comment) * [Update GitHub pull request review comment](/reference/integrations/github/actions/update-pull-request-review-comment) * [Delete GitHub pull request review comment](/reference/integrations/github/actions/delete-pull-request-review-comment) * [Create GitHub pull request](/reference/integrations/github/actions/create-pull-request) * [Get GitHub issue](/reference/integrations/github/actions/get-issue) * [Get GitHub pull request](/reference/integrations/github/actions/get-pull-request) * [List GitHub issues](/reference/integrations/github/actions/list-issues) * [List GitHub pull requests](/reference/integrations/github/actions/list-pull-requests) * [Merge GitHub pull request](/reference/integrations/github/actions/merge-pull-request) * [Update GitHub issue](/reference/integrations/github/actions/update-issue) * [Update GitHub pull request](/reference/integrations/github/actions/update-pull-request) * [List GitHub releases](/reference/integrations/github/actions/list-releases) * [Get GitHub release](/reference/integrations/github/actions/get-release) * [Create GitHub release](/reference/integrations/github/actions/create-release) * [Update GitHub release](/reference/integrations/github/actions/update-release) * [Delete GitHub release](/reference/integrations/github/actions/delete-release) * [List GitHub release assets](/reference/integrations/github/actions/list-release-assets) * [Upload GitHub release asset](/reference/integrations/github/actions/upload-release-asset) * [Update GitHub release asset](/reference/integrations/github/actions/update-release-asset) * [Delete GitHub release asset](/reference/integrations/github/actions/delete-release-asset) * [List GitHub deployments](/reference/integrations/github/actions/list-deployments) * [Get GitHub deployment](/reference/integrations/github/actions/get-deployment) * [Create GitHub deployment](/reference/integrations/github/actions/create-deployment) * [Delete GitHub deployment](/reference/integrations/github/actions/delete-deployment) * [List GitHub deployment statuses](/reference/integrations/github/actions/list-deployment-statuses) * [Get GitHub deployment status](/reference/integrations/github/actions/get-deployment-status) * [Create GitHub deployment status](/reference/integrations/github/actions/create-deployment-status) # On GitHub branch created Source: https://docs.automate.ax/reference/integrations/github/triggers/on-branch-created Start an automation when GitHub creates a branch. `github.onBranchCreated` starts an automation when a repository branch is created. ```ts automations/github-branch-created.automation.ts theme={null} import { automation, t } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub branch created", () => { const event = github.onBranchCreated() github.createIssue({ owner: event.repository.owner.login, repository: event.repository.name, title: t`Branch created: ${event.ref}`, }) }) ``` Returns the typed `create` payload with `ref_type: "branch"`. GitHub does not deliver this event when more than three tags are created at once; branch creation is unaffected. Requires Contents read permission. # On GitHub branch deleted Source: https://docs.automate.ax/reference/integrations/github/triggers/on-branch-deleted Start an automation when GitHub deletes a branch. `github.onBranchDeleted` starts an automation when a repository branch is deleted. ```ts automations/github-branch-deleted.automation.ts theme={null} import { automation, t } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub branch deleted", () => { const event = github.onBranchDeleted() github.createIssue({ owner: event.repository.owner.login, repository: event.repository.name, title: t`Branch deleted: ${event.ref}`, }) }) ``` Returns the typed `delete` payload with `ref_type: "branch"`. Requires Contents read permission. # On GitHub check run action required Source: https://docs.automate.ax/reference/integrations/github/triggers/on-check-run-action-required Start an automation when a GitHub check run requires action. `github.onCheckRunActionRequired` starts an automation for a completed check run with conclusion `"action_required"`. ```ts automations/github-check-run-action-required.automation.ts theme={null} import { automation, t } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub check needs action", () => { const event = github.onCheckRunActionRequired() github.createIssue({ owner: event.repository.owner.login, repository: event.repository.name, title: t`Action required: ${event.check_run.name}`, }) }) ``` Returns the typed payload with `check_run.conclusion: "action_required"`. This is a check conclusion, not GitHub's `requested_action` webhook action. Requires Checks read permission. # On GitHub check run cancelled Source: https://docs.automate.ax/reference/integrations/github/triggers/on-check-run-cancelled Start an automation when a GitHub check run is cancelled. `github.onCheckRunCancelled` starts an automation for a completed check run with conclusion `"cancelled"`. ```ts automations/github-check-run-cancelled.automation.ts theme={null} import { automation, t } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub check cancelled", () => { const event = github.onCheckRunCancelled() github.createIssue({ owner: event.repository.owner.login, repository: event.repository.name, title: t`Check cancelled: ${event.check_run.name}`, }) }) ``` Returns the typed payload with `check_run.conclusion: "cancelled"`. Requires Checks read permission. # On GitHub check run completed Source: https://docs.automate.ax/reference/integrations/github/triggers/on-check-run-completed Start an automation when a GitHub check run completes. `github.onCheckRunCompleted` starts an automation for every completed check run, regardless of conclusion. ```ts automations/github-check-run-completed.automation.ts theme={null} import { automation, t } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub check run completed", () => { const event = github.onCheckRunCompleted() github.createIssue({ owner: event.repository.owner.login, repository: event.repository.name, title: t`Check completed: ${event.check_run.name}`, }) }) ``` Returns the typed payload with `action: "completed"` and the provider conclusion. Use a conclusion-specific trigger when possible. Requires Checks read permission. # On GitHub check run created Source: https://docs.automate.ax/reference/integrations/github/triggers/on-check-run-created Start an automation when GitHub creates a check run. `github.onCheckRunCreated` starts an automation when a check run is created. ```ts automations/github-check-run-created.automation.ts theme={null} import { automation, t } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub check run created", () => { const event = github.onCheckRunCreated() github.createIssue({ owner: event.repository.owner.login, repository: event.repository.name, title: t`Check started: ${event.check_run.name}`, }) }) ``` Returns the typed `check_run` payload with `action: "created"`. Requires Checks read permission. # On GitHub check run event Source: https://docs.automate.ax/reference/integrations/github/triggers/on-check-run-event Start an automation from any GitHub check run activity. `github.onCheckRunEvent` starts an automation for any delivered `check_run` action. ```ts automations/watch-github-check-runs.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub check runs", () => { const event = github.onCheckRunEvent() github.createIssue({ owner: event.repository.owner.login, repository: event.repository.name, title: event.check_run.name, }) }) ``` Returns GitHub's typed check-run webhook payload, including `action`, `check_run`, repository, and sender. Use a semantic trigger when you only need one lifecycle outcome. Requires Checks read permission. # On GitHub check run failed Source: https://docs.automate.ax/reference/integrations/github/triggers/on-check-run-failed Start an automation when a GitHub check run fails. `github.onCheckRunFailed` starts an automation for a completed check run with conclusion `"failure"`. ```ts automations/github-check-run-failed.automation.ts theme={null} import { automation, t } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub check failed", () => { const event = github.onCheckRunFailed() github.createIssue({ owner: event.repository.owner.login, repository: event.repository.name, title: t`Check failed: ${event.check_run.name}`, }) }) ``` Returns the typed payload with `check_run.conclusion: "failure"`. Startup failures use `github.onCheckRunStartupFailed`. Requires Checks read permission. # On GitHub check run neutral Source: https://docs.automate.ax/reference/integrations/github/triggers/on-check-run-neutral Start an automation when a GitHub check run completes neutrally. `github.onCheckRunNeutral` emits check run events with `check_run.conclusion: "neutral"`. ```ts automations/github-check-run-neutral.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("check run neutral", () => { const event = github.onCheckRunNeutral() // Update the GitHub check in the CI dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `check_run.conclusion: "neutral"`. Requires Checks read permission. # On GitHub check run pending Source: https://docs.automate.ax/reference/integrations/github/triggers/on-check-run-pending Start an automation when a GitHub check run enters the pending state. `github.onCheckRunPending` emits when GitHub creates a check run with `check_run.status: "pending"`, including GitHub Actions jobs blocked by group concurrency. It also preserves GitHub's documented completed payload variant with `check_run.conclusion: "pending"`. ```ts automations/github-check-run-pending.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("check run pending", () => { const event = github.onCheckRunPending() // Update the GitHub check in the CI dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to either the created pending-status or completed pending-conclusion variant. GitHub reserves the pending status for GitHub Actions. Requires Checks read permission. # On GitHub check run requested action Source: https://docs.automate.ax/reference/integrations/github/triggers/on-check-run-requested-action Start an automation when someone selects a check-run action. `github.onCheckRunRequestedAction` starts an automation when someone selects one of the actions exposed by a check run. ```ts automations/github-check-run-requested-action.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Handle GitHub check action", () => { const event = github.onCheckRunRequestedAction() github.updateCheckRun({ owner: event.repository.owner.login, repository: event.repository.name, checkRunId: event.check_run.id, status: "in_progress", }) }) ``` Returns the typed payload with `action: "requested_action"` and the selected `requested_action.identifier`. GitHub sends it only to the App that owns the check run. Requires Checks write permission. # On GitHub check run rerequested Source: https://docs.automate.ax/reference/integrations/github/triggers/on-check-run-rerequested Start an automation when someone requests another check run. `github.onCheckRunRerequested` starts an automation when someone requests that the owning GitHub App run a check again. ```ts automations/github-check-run-rerequested.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Rerun GitHub check", () => { const event = github.onCheckRunRerequested() github.updateCheckRun({ owner: event.repository.owner.login, repository: event.repository.name, checkRunId: event.check_run.id, status: "queued", }) }) ``` Returns the typed check-run payload with `action: "rerequested"`. GitHub sends it only to the App that owns the check run. Requires Checks write permission. # On GitHub check run skipped Source: https://docs.automate.ax/reference/integrations/github/triggers/on-check-run-skipped Start an automation when a GitHub check run is skipped. `github.onCheckRunSkipped` emits check run events with `check_run.conclusion: "skipped"`. ```ts automations/github-check-run-skipped.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("check run skipped", () => { const event = github.onCheckRunSkipped() // Update the GitHub check in the CI dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `check_run.conclusion: "skipped"`. Requires Checks read permission. # On GitHub check run stale Source: https://docs.automate.ax/reference/integrations/github/triggers/on-check-run-stale Start an automation when a GitHub check run becomes stale. `github.onCheckRunStale` emits check run events with `check_run.conclusion: "stale"`. ```ts automations/github-check-run-stale.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("check run stale", () => { const event = github.onCheckRunStale() // Update the GitHub check in the CI dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `check_run.conclusion: "stale"`. Requires Checks read permission. # On GitHub check run startup failed Source: https://docs.automate.ax/reference/integrations/github/triggers/on-check-run-startup-failed Start an automation when a GitHub check run cannot start. `github.onCheckRunStartupFailed` starts an automation for a completed check run with conclusion `"startup_failure"`. ```ts automations/github-check-run-startup-failed.automation.ts theme={null} import { automation, t } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub check startup failed", () => { const event = github.onCheckRunStartupFailed() github.createIssue({ owner: event.repository.owner.login, repository: event.repository.name, title: t`Check could not start: ${event.check_run.name}`, }) }) ``` Returns the typed payload with `check_run.conclusion: "startup_failure"`. Requires Checks read permission. # On GitHub check run succeeded Source: https://docs.automate.ax/reference/integrations/github/triggers/on-check-run-succeeded Start an automation when a GitHub check run succeeds. `github.onCheckRunSucceeded` starts an automation for a completed check run with conclusion `"success"`. ```ts automations/github-check-run-succeeded.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub check passed", () => { const event = github.onCheckRunSucceeded() github.createCommitStatus({ owner: event.repository.owner.login, repository: event.repository.name, sha: event.check_run.head_sha, state: "success", }) }) ``` Returns the typed payload with `check_run.conclusion: "success"`. Requires Checks read permission. # On GitHub check run timed out Source: https://docs.automate.ax/reference/integrations/github/triggers/on-check-run-timed-out Start an automation when a GitHub check run times out. `github.onCheckRunTimedOut` starts an automation for a completed check run with conclusion `"timed_out"`. ```ts automations/github-check-run-timed-out.automation.ts theme={null} import { automation, t } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub check timed out", () => { const event = github.onCheckRunTimedOut() github.createIssue({ owner: event.repository.owner.login, repository: event.repository.name, title: t`Check timed out: ${event.check_run.name}`, }) }) ``` Returns the typed payload with `check_run.conclusion: "timed_out"`. Requires Checks read permission. # On GitHub check run waiting Source: https://docs.automate.ax/reference/integrations/github/triggers/on-check-run-waiting Start an automation when a GitHub check run enters the waiting state. `github.onCheckRunWaiting` emits when GitHub creates a check run with `check_run.status: "waiting"`, including GitHub Actions jobs awaiting deployment protection. It also preserves GitHub's documented completed payload variant with `check_run.conclusion: "waiting"`. ```ts automations/github-check-run-waiting.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("check run waiting", () => { const event = github.onCheckRunWaiting() // Update the GitHub check in the CI dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to either the created waiting-status or completed waiting-conclusion variant. GitHub reserves the waiting status for GitHub Actions. Requires Checks read permission. # On GitHub check suite action required Source: https://docs.automate.ax/reference/integrations/github/triggers/on-check-suite-action-required Start an automation when a GitHub check suite requires action. `github.onCheckSuiteActionRequired` starts an automation for a completed check suite with conclusion `"action_required"`. ```ts automations/github-check-suite-action-required.automation.ts theme={null} import { automation, t } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub check suite needs action", () => { const event = github.onCheckSuiteActionRequired() github.createIssue({ owner: event.repository.owner.login, repository: event.repository.name, title: t`Check suite needs action at ${event.check_suite.head_sha}`, }) }) ``` Returns the typed payload with `check_suite.conclusion: "action_required"`. Requires Checks read permission. # On GitHub check suite cancelled Source: https://docs.automate.ax/reference/integrations/github/triggers/on-check-suite-cancelled Start an automation when a GitHub check suite is cancelled. `github.onCheckSuiteCancelled` starts an automation for a completed check suite with conclusion `"cancelled"`. ```ts automations/github-check-suite-cancelled.automation.ts theme={null} import { automation, t } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub check suite cancelled", () => { const event = github.onCheckSuiteCancelled() github.createIssue({ owner: event.repository.owner.login, repository: event.repository.name, title: t`Check suite cancelled at ${event.check_suite.head_sha}`, }) }) ``` Returns the typed payload with `check_suite.conclusion: "cancelled"`. Requires Checks read permission. # On GitHub check suite completed Source: https://docs.automate.ax/reference/integrations/github/triggers/on-check-suite-completed Start an automation when a GitHub check suite completes. `github.onCheckSuiteCompleted` starts an automation for every completed check suite, regardless of conclusion. ```ts automations/github-check-suite-completed.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub check suite completed", () => { const event = github.onCheckSuiteCompleted() github.getCombinedCommitStatus({ owner: event.repository.owner.login, repository: event.repository.name, ref: event.check_suite.head_sha, }) }) ``` Returns the typed payload with `action: "completed"`. Use a conclusion-specific trigger when possible. Requires Checks read permission. # On GitHub check suite event Source: https://docs.automate.ax/reference/integrations/github/triggers/on-check-suite-event Start an automation from GitHub check suite activity. `github.onCheckSuiteEvent` starts an automation for any delivered `check_suite` action. ```ts automations/watch-github-check-suites.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub check suites", () => { const event = github.onCheckSuiteEvent() github.getCombinedCommitStatus({ owner: event.repository.owner.login, repository: event.repository.name, ref: event.check_suite.head_sha, }) }) ``` Returns GitHub's typed check-suite webhook payload. Apps with Checks read permission receive completed suites; requested and rerequested actions require Checks write permission and remain available through the broad type if the installation later grants it. Requires Checks read permission. # On GitHub check suite failed Source: https://docs.automate.ax/reference/integrations/github/triggers/on-check-suite-failed Start an automation when a GitHub check suite fails. `github.onCheckSuiteFailed` starts an automation for a completed check suite with conclusion `"failure"`. ```ts automations/github-check-suite-failed.automation.ts theme={null} import { automation, t } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub check suite failed", () => { const event = github.onCheckSuiteFailed() github.createIssue({ owner: event.repository.owner.login, repository: event.repository.name, title: t`Check suite failed at ${event.check_suite.head_sha}`, }) }) ``` Returns the typed payload with `check_suite.conclusion: "failure"`. Startup failures use `github.onCheckSuiteStartupFailed`. Requires Checks read permission. # On GitHub check suite neutral Source: https://docs.automate.ax/reference/integrations/github/triggers/on-check-suite-neutral Start an automation when a GitHub check suite completes neutrally. `github.onCheckSuiteNeutral` emits check suite events with `check_suite.conclusion: "neutral"`. ```ts automations/github-check-suite-neutral.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("check suite neutral", () => { const event = github.onCheckSuiteNeutral() // Update the GitHub check in the CI dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `check_suite.conclusion: "neutral"`. Requires Checks read permission. # On GitHub check suite requested Source: https://docs.automate.ax/reference/integrations/github/triggers/on-check-suite-requested Start an automation when GitHub requests a check suite. `github.onCheckSuiteRequested` starts an automation when GitHub asks the App to create checks for a new suite. ```ts automations/github-check-suite-requested.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Start GitHub check suite", () => { const event = github.onCheckSuiteRequested() github.createCheckRun({ owner: event.repository.owner.login, repository: event.repository.name, headSha: event.check_suite.head_sha, name: "Automate.ax policy", }) }) ``` Returns the typed check-suite payload with `action: "requested"`. GitHub sends this action to Apps with Checks write permission. # On GitHub check suite rerequested Source: https://docs.automate.ax/reference/integrations/github/triggers/on-check-suite-rerequested Start an automation when someone requests another check suite run. `github.onCheckSuiteRerequested` starts an automation when someone asks the owning GitHub App to rerun a check suite. ```ts automations/github-check-suite-rerequested.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Rerun GitHub check suite", () => { const event = github.onCheckSuiteRerequested() github.createCheckRun({ owner: event.repository.owner.login, repository: event.repository.name, headSha: event.check_suite.head_sha, name: "Automate.ax policy", }) }) ``` Returns the typed check-suite payload with `action: "rerequested"`. GitHub sends it only to the App that owns the suite. Requires Checks write permission. # On GitHub check suite skipped Source: https://docs.automate.ax/reference/integrations/github/triggers/on-check-suite-skipped Start an automation when a GitHub check suite is skipped. `github.onCheckSuiteSkipped` emits check suite events with `check_suite.conclusion: "skipped"`. ```ts automations/github-check-suite-skipped.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("check suite skipped", () => { const event = github.onCheckSuiteSkipped() // Update the GitHub check in the CI dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `check_suite.conclusion: "skipped"`. Requires Checks read permission. # On GitHub check suite stale Source: https://docs.automate.ax/reference/integrations/github/triggers/on-check-suite-stale Start an automation when a GitHub check suite becomes stale. `github.onCheckSuiteStale` emits check suite events with `check_suite.conclusion: "stale"`. ```ts automations/github-check-suite-stale.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("check suite stale", () => { const event = github.onCheckSuiteStale() // Update the GitHub check in the CI dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `check_suite.conclusion: "stale"`. Requires Checks read permission. # On GitHub check suite startup failed Source: https://docs.automate.ax/reference/integrations/github/triggers/on-check-suite-startup-failed Start an automation when a GitHub check suite cannot start. `github.onCheckSuiteStartupFailed` starts an automation for a completed check suite with conclusion `"startup_failure"`. ```ts automations/github-check-suite-startup-failed.automation.ts theme={null} import { automation, t } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub check suite startup failed", () => { const event = github.onCheckSuiteStartupFailed() github.createIssue({ owner: event.repository.owner.login, repository: event.repository.name, title: t`Check suite could not start at ${event.check_suite.head_sha}`, }) }) ``` Returns the typed payload with `check_suite.conclusion: "startup_failure"`. Requires Checks read permission. # On GitHub check suite succeeded Source: https://docs.automate.ax/reference/integrations/github/triggers/on-check-suite-succeeded Start an automation when a GitHub check suite succeeds. `github.onCheckSuiteSucceeded` starts an automation for a completed check suite with conclusion `"success"`. ```ts automations/github-check-suite-succeeded.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub check suite passed", () => { const event = github.onCheckSuiteSucceeded() github.createCommitStatus({ owner: event.repository.owner.login, repository: event.repository.name, sha: event.check_suite.head_sha, state: "success", }) }) ``` Returns the typed payload with `check_suite.conclusion: "success"`. Requires Checks read permission. # On GitHub check suite timed out Source: https://docs.automate.ax/reference/integrations/github/triggers/on-check-suite-timed-out Start an automation when a GitHub check suite times out. `github.onCheckSuiteTimedOut` starts an automation for a completed check suite with conclusion `"timed_out"`. ```ts automations/github-check-suite-timed-out.automation.ts theme={null} import { automation, t } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub check suite timed out", () => { const event = github.onCheckSuiteTimedOut() github.createIssue({ owner: event.repository.owner.login, repository: event.repository.name, title: t`Check suite timed out at ${event.check_suite.head_sha}`, }) }) ``` Returns the typed payload with `check_suite.conclusion: "timed_out"`. Requires Checks read permission. # On GitHub commit comment created Source: https://docs.automate.ax/reference/integrations/github/triggers/on-commit-comment-created Run when a GitHub commit comment is created. `github.onCommitCommentCreated` subscribes to created commit comments. ```ts automations/watch-github-commit-comment-created.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub commit comment created", () => { const event = github.onCommitCommentCreated() // Send the GitHub commit comment to the review inbox. }) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `commit_comment` payloads with `action: "created"`. Requires Contents read permission and repository access. # On GitHub commit comment event Source: https://docs.automate.ax/reference/integrations/github/triggers/on-commit-comment-event Run for GitHub commit comment activity. `github.onCommitCommentEvent` subscribes to commit-comment activity. ```ts automations/watch-github-commit-comment-event.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub commit comment event", () => { const event = github.onCommitCommentEvent() // Send the GitHub commit comment to the review inbox. }) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `commit_comment` payloads. Requires Contents read permission and repository access. # On GitHub deployment created Source: https://docs.automate.ax/reference/integrations/github/triggers/on-deployment-created Run when a GitHub deployment is created. `github.onDeploymentCreated` emits deployment webhooks with `action: "created"`. ```ts automations/on-github-deployment.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub deployment created", () => { const event = github.onDeploymentCreated() // Update the GitHub deployment in the release dashboard. }) ``` Returns the full deployment, including ref, SHA, task, payload, environment, creator, repository, and installation. Use deployment-status triggers for subsequent lifecycle changes. Requires Deployments read permission. # On GitHub deployment errored Source: https://docs.automate.ax/reference/integrations/github/triggers/on-deployment-errored Run when a GitHub deployment status reports an error. `github.onDeploymentErrored` emits deployment statuses with `state: "error"`. ```ts automations/github-deployment-errored.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub deployment errored", () => { const event = github.onDeploymentErrored() // Update the GitHub deployment in the release dashboard. }) ``` Returns the typed deployment-status payload. Use this separately from `onDeploymentFailed` when infrastructure errors and deployment failures need different handling. Requires Deployments read permission. # On GitHub deployment failed Source: https://docs.automate.ax/reference/integrations/github/triggers/on-deployment-failed Run when a GitHub deployment status fails. `github.onDeploymentFailed` emits deployment statuses with `state: "failure"`. ```ts automations/github-deployment-failed.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub deployment failed", () => { const event = github.onDeploymentFailed() // Update the GitHub deployment in the release dashboard. }) ``` Returns the typed deployment-status payload, including description and log URL. Requires Deployments read permission. # On GitHub deployment pending Source: https://docs.automate.ax/reference/integrations/github/triggers/on-deployment-pending Run when a GitHub deployment status becomes pending. `github.onDeploymentPending` emits deployment statuses with `state: "pending"`. ```ts automations/github-deployment-pending.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub deployment pending", () => { const event = github.onDeploymentPending() // Update the GitHub deployment in the release dashboard. }) ``` Returns the typed deployment-status payload. Requires Deployments read permission. # On GitHub deployment protection rule event Source: https://docs.automate.ax/reference/integrations/github/triggers/on-deployment-protection-rule-event Run for GitHub deployment protection rule activity. `github.onDeploymentProtectionRuleEvent` subscribes to deployment protection-rule activity. ```ts automations/watch-github-deployment-protection-rule-event.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation( "Watch GitHub deployment protection rule event", () => { const event = github.onDeploymentProtectionRuleEvent() }, ) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `deployment_protection_rule` payloads. Requires Deployments read permission and repository access. # On GitHub deployment protection rule requested Source: https://docs.automate.ax/reference/integrations/github/triggers/on-deployment-protection-rule-requested Run when a deployment protection rule decision is requested. `github.onDeploymentProtectionRuleRequested` subscribes to deployment protection-rule requests. ```ts automations/watch-github-deployment-protection-rule-requested.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation( "Watch GitHub deployment protection rule requested", () => { const event = github.onDeploymentProtectionRuleRequested() }, ) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `deployment_protection_rule` payloads with `action: "requested"`. Requires Deployments read permission and repository access. # On GitHub deployment queued Source: https://docs.automate.ax/reference/integrations/github/triggers/on-deployment-queued Run when a GitHub deployment status becomes queued. `github.onDeploymentQueued` emits deployment statuses with `state: "queued"`. ```ts automations/github-deployment-queued.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub deployment queued", () => { const event = github.onDeploymentQueued() // Update the GitHub deployment in the release dashboard. }) ``` Returns the typed deployment-status payload. Requires Deployments read permission. # On GitHub deployment review approved Source: https://docs.automate.ax/reference/integrations/github/triggers/on-deployment-review-approved Run when a deployment review is approved. `github.onDeploymentReviewApproved` subscribes to approved deployment reviews. ```ts automations/watch-github-deployment-review-approved.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub deployment review approved", () => { const event = github.onDeploymentReviewApproved() // Update the GitHub deployment gate. }) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `deployment_review` payloads with `action: "approved"`. Requires Deployments read permission and repository access. # On GitHub deployment review event Source: https://docs.automate.ax/reference/integrations/github/triggers/on-deployment-review-event Run for GitHub deployment review activity. `github.onDeploymentReviewEvent` subscribes to deployment review activity. ```ts automations/watch-github-deployment-review-event.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub deployment review event", () => { const event = github.onDeploymentReviewEvent() // Update the GitHub deployment gate. }) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `deployment_review` payloads. Requires Deployments read permission and repository access. # On GitHub deployment review rejected Source: https://docs.automate.ax/reference/integrations/github/triggers/on-deployment-review-rejected Run when a deployment review is rejected. `github.onDeploymentReviewRejected` subscribes to rejected deployment reviews. ```ts automations/watch-github-deployment-review-rejected.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub deployment review rejected", () => { const event = github.onDeploymentReviewRejected() // Update the GitHub deployment gate. }) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `deployment_review` payloads with `action: "rejected"`. Requires Deployments read permission and repository access. # On GitHub deployment review requested Source: https://docs.automate.ax/reference/integrations/github/triggers/on-deployment-review-requested Run when a deployment review is requested. `github.onDeploymentReviewRequested` subscribes to requested deployment reviews. ```ts automations/watch-github-deployment-review-requested.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub deployment review requested", () => { const event = github.onDeploymentReviewRequested() // Update the GitHub deployment gate. }) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `deployment_review` payloads with `action: "requested"`. Requires Deployments read permission and repository access. # On GitHub deployment started Source: https://docs.automate.ax/reference/integrations/github/triggers/on-deployment-started Run when a GitHub deployment status becomes in progress. `github.onDeploymentStarted` emits deployment statuses with `state: "in_progress"`. ```ts automations/github-deployment-started.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub deployment started", () => { const event = github.onDeploymentStarted() // Update the GitHub deployment in the release dashboard. }) ``` Returns the typed deployment-status payload. Requires Deployments read permission. # On GitHub deployment status event Source: https://docs.automate.ax/reference/integrations/github/triggers/on-deployment-status-event Run for broad GitHub deployment status activity. `github.onDeploymentStatusEvent` handles every delivered deployment status. ```ts automations/watch-github-deployment-status.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub deployment status", () => { const event = github.onDeploymentStatusEvent() // Update the GitHub deployment in the release dashboard. }) ``` Returns the deployment and its new `deployment_status`, including state, environment, description, URLs, creator, and timestamps. GitHub does not emit this webhook for `inactive` statuses. Requires Deployments read permission. # On GitHub deployment succeeded Source: https://docs.automate.ax/reference/integrations/github/triggers/on-deployment-succeeded Run when a GitHub deployment status succeeds. `github.onDeploymentSucceeded` emits deployment statuses with `state: "success"`. ```ts automations/github-deployment-succeeded.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub deployment succeeded", () => { const event = github.onDeploymentSucceeded() // Update the GitHub deployment in the release dashboard. }) ``` Returns the typed deployment-status payload, including environment and environment URL. Requires Deployments read permission. # On GitHub issue assigned Source: https://docs.automate.ax/reference/integrations/github/triggers/on-issue-assigned Run an automation when a GitHub issue assigned. `github.onIssueAssigned` emits issue events with action `"assigned"`. ```ts automations/watch-github-issue-assigned.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub issue assigned", () => { const event = github.onIssueAssigned() // Sync the GitHub issue to the external tracker. }) ``` Optional static `account` defaults to the project binding. Returns the typed GitHub issue webhook payload with `action: "assigned"`. The installation needs Issues read permission and repository access. # On GitHub issue closed Source: https://docs.automate.ax/reference/integrations/github/triggers/on-issue-closed Run an automation when a GitHub issue closes. `github.onIssueClosed` emits issue events with action `"closed"`, including GitHub's state reason. ```ts automations/watch-closed-github-issues.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch closed GitHub issues", () => { const event = github.onIssueClosed() // Sync the GitHub issue to the external tracker. }) ``` Optional static `account` defaults to the project binding. Returns `Signal` with `action: "closed"` and GitHub's full issue webhook payload. The installation needs Issues read permission and repository access. # On GitHub issue comment created Source: https://docs.automate.ax/reference/integrations/github/triggers/on-issue-comment-created Run when a GitHub issue or pull request comment is created. `github.onIssueCommentCreated` emits `issue_comment` payloads with `action: "created"`. ```ts automations/github-comment-created.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub comment created", () => { const event = github.onIssueCommentCreated() // Send the GitHub issue comment to its owner. }) ``` Returns the full comment, issue or pull request, repository, sender, and installation payload. Requires Issues read permission. # On GitHub issue comment deleted Source: https://docs.automate.ax/reference/integrations/github/triggers/on-issue-comment-deleted Run when a GitHub issue or pull request comment is deleted. `github.onIssueCommentDeleted` emits `issue_comment` payloads with `action: "deleted"`. ```ts automations/github-comment-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub comment deleted", () => { const event = github.onIssueCommentDeleted() // Send the GitHub issue comment to its owner. }) ``` Returns GitHub's deleted-comment snapshot with its issue or pull request context. Requires Issues read permission. # On GitHub issue comment edited Source: https://docs.automate.ax/reference/integrations/github/triggers/on-issue-comment-edited Run when a GitHub issue or pull request comment is edited. `github.onIssueCommentEdited` emits `issue_comment` payloads with `action: "edited"`. ```ts automations/github-comment-edited.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub comment edited", () => { const event = github.onIssueCommentEdited() // Send the GitHub issue comment to its owner. }) ``` Returns the edited comment and `changes.body.from` when GitHub supplies the previous body. Requires Issues read permission. # On GitHub issue comment event Source: https://docs.automate.ax/reference/integrations/github/triggers/on-issue-comment-event Run for created, edited, or deleted GitHub issue comments. `github.onIssueCommentEvent` handles broad conversation-comment activity on issues and pull requests. ```ts automations/watch-github-comments.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub comments", () => { const event = github.onIssueCommentEvent() // Send the GitHub issue comment to its owner. }) ``` Optional static `account` selects the GitHub binding. Returns GitHub's full `issue_comment` payload with `action` equal to `"created"`, `"edited"`, or `"deleted"`. Pull request conversation comments include a `pull_request` marker on `issue`; inline diff comments use the review-comment triggers. Requires Issues read permission. # On GitHub issue comment pinned Source: https://docs.automate.ax/reference/integrations/github/triggers/on-issue-comment-pinned Start an automation when a GitHub issue or pull request comment is pinned. `github.onIssueCommentPinned` emits issue comment events with `action: "pinned"`. ```ts automations/github-issue-comment-pinned.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("issue comment pinned", () => { const event = github.onIssueCommentPinned() // Send the GitHub issue comment to its owner. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `action: "pinned"`. Requires Issues read permission. # On GitHub issue comment unpinned Source: https://docs.automate.ax/reference/integrations/github/triggers/on-issue-comment-unpinned Start an automation when a GitHub issue or pull request comment is unpinned. `github.onIssueCommentUnpinned` emits issue comment events with `action: "unpinned"`. ```ts automations/github-issue-comment-unpinned.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("issue comment unpinned", () => { const event = github.onIssueCommentUnpinned() // Send the GitHub issue comment to its owner. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `action: "unpinned"`. Requires Issues read permission. # On GitHub issue deleted Source: https://docs.automate.ax/reference/integrations/github/triggers/on-issue-deleted Run an automation when a GitHub issue deleted. `github.onIssueDeleted` emits issue events with action `"deleted"`. ```ts automations/watch-github-issue-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub issue deleted", () => { const event = github.onIssueDeleted() // Sync the GitHub issue to the external tracker. }) ``` Optional static `account` defaults to the project binding. Returns the typed GitHub issue webhook payload with `action: "deleted"`. The installation needs Issues read permission and repository access. # On GitHub issue removed from milestone Source: https://docs.automate.ax/reference/integrations/github/triggers/on-issue-demilestoned Run an automation when a GitHub issue removed from a milestone. `github.onIssueDemilestoned` emits issue events with action `"demilestoned"`. ```ts automations/watch-github-issue-demilestoned.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub issue demilestoned", () => { const event = github.onIssueDemilestoned() // Sync the GitHub issue to the external tracker. }) ``` Optional static `account` defaults to the project binding. Returns the typed GitHub issue webhook payload with `action: "demilestoned"`. The installation needs Issues read permission and repository access. # On GitHub issue dependencies event Source: https://docs.automate.ax/reference/integrations/github/triggers/on-issue-dependencies-event Run for GitHub issue dependency changes. `github.onIssueDependenciesEvent` subscribes to issue dependency activity. ```ts automations/watch-github-issue-dependencies-event.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub issue dependencies event", () => { const event = github.onIssueDependenciesEvent() // Sync the GitHub issue hierarchy to the project plan. }) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `issue_dependencies` payloads. Requires Issues read permission and repository access. # On GitHub issue dependency blocked by added Source: https://docs.automate.ax/reference/integrations/github/triggers/on-issue-dependency-blocked-by-added Run when a blocking issue is added. `github.onIssueDependencyBlockedByAdded` subscribes to added blocking-issue relationships. ```ts automations/watch-github-issue-dependency-blocked-by-added.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation( "Watch GitHub issue dependency blocked by added", () => { const event = github.onIssueDependencyBlockedByAdded() }, ) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `issue_dependencies` payloads with `action: "blocked_by_added"`. Requires Issues read permission and repository access. # On GitHub issue dependency blocked by removed Source: https://docs.automate.ax/reference/integrations/github/triggers/on-issue-dependency-blocked-by-removed Run when a blocking issue is removed. `github.onIssueDependencyBlockedByRemoved` subscribes to removed blocking-issue relationships. ```ts automations/watch-github-issue-dependency-blocked-by-removed.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation( "Watch GitHub issue dependency blocked by removed", () => { const event = github.onIssueDependencyBlockedByRemoved() }, ) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `issue_dependencies` payloads with `action: "blocked_by_removed"`. Requires Issues read permission and repository access. # On GitHub issue dependency blocking added Source: https://docs.automate.ax/reference/integrations/github/triggers/on-issue-dependency-blocking-added Run when an issue starts blocking another issue. `github.onIssueDependencyBlockingAdded` subscribes to added blocked-issue relationships. ```ts automations/watch-github-issue-dependency-blocking-added.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation( "Watch GitHub issue dependency blocking added", () => { const event = github.onIssueDependencyBlockingAdded() }, ) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `issue_dependencies` payloads with `action: "blocking_added"`. Requires Issues read permission and repository access. # On GitHub issue dependency blocking removed Source: https://docs.automate.ax/reference/integrations/github/triggers/on-issue-dependency-blocking-removed Run when an issue stops blocking another issue. `github.onIssueDependencyBlockingRemoved` subscribes to removed blocked-issue relationships. ```ts automations/watch-github-issue-dependency-blocking-removed.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation( "Watch GitHub issue dependency blocking removed", () => { const event = github.onIssueDependencyBlockingRemoved() }, ) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `issue_dependencies` payloads with `action: "blocking_removed"`. Requires Issues read permission and repository access. # On GitHub issue edited Source: https://docs.automate.ax/reference/integrations/github/triggers/on-issue-edited Run an automation when a GitHub issue edited. `github.onIssueEdited` emits issue events with action `"edited"`. ```ts automations/watch-github-issue-edited.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub issue edited", () => { const event = github.onIssueEdited() // Sync the GitHub issue to the external tracker. }) ``` Optional static `account` defaults to the project binding. Returns the typed GitHub issue webhook payload with `action: "edited"`. The installation needs Issues read permission and repository access. # On GitHub issue event Source: https://docs.automate.ax/reference/integrations/github/triggers/on-issue-event Run an automation for any GitHub issue webhook action. `github.onIssueEvent` exposes the broad GitHub `issues` webhook family. Use it for actions that don't have a semantic trigger. ```ts automations/watch-github-issues.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub issues", () => { const event = github.onIssueEvent() // Route the GitHub issue event by action. }) ``` Optional static `account` defaults to the project's GitHub App installation binding and can't be a signal. The installation receives events only for repositories it can access and needs Issues read permission. Returns `Signal`, GitHub's issue webhook union, with `action`, `issue`, `repository`, `sender`, `installation`, and action-specific fields. Prefer [On GitHub issue opened](/reference/integrations/github/triggers/on-issue-opened), reopened, or closed for those cases. # On GitHub issue field added Source: https://docs.automate.ax/reference/integrations/github/triggers/on-issue-field-added Run an automation when a GitHub issue has a field value set or updated. `github.onIssueFieldAdded` emits issue events with action `"field_added"`. ```ts automations/watch-github-issue-field-added.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub issue field added", () => { const event = github.onIssueFieldAdded() // Sync the GitHub issue fields to the project tracker. }) ``` Optional static `account` defaults to the project binding. Returns the typed GitHub issue webhook payload with `action: "field_added"`, the required `issue_field`, the optional new `issue_field_value`, and the optional previous value under `changes.issue_field_value.from`. The installation needs Issues read permission and repository access. # On GitHub issue field removed Source: https://docs.automate.ax/reference/integrations/github/triggers/on-issue-field-removed Run an automation when a GitHub issue has a field value cleared. `github.onIssueFieldRemoved` emits issue events with action `"field_removed"`. ```ts automations/watch-github-issue-field-removed.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub issue field removed", () => { const event = github.onIssueFieldRemoved() // Sync the GitHub issue fields to the project tracker. }) ``` Optional static `account` defaults to the project binding. Returns the typed GitHub issue webhook payload with `action: "field_removed"`, the required `issue_field`, and the optional cleared `issue_field_value`. The installation needs Issues read permission and repository access. # On GitHub issue labeled Source: https://docs.automate.ax/reference/integrations/github/triggers/on-issue-labeled Run an automation when a GitHub issue is labeled. `github.onIssueLabeled` emits issue events with action `"labeled"`. ```ts automations/watch-github-issue-labeled.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub issue labeled", () => { const event = github.onIssueLabeled() // Sync the GitHub issue to the external tracker. }) ``` Optional static `account` defaults to the project binding. Returns the typed GitHub issue webhook payload with `action: "labeled"`. The installation needs Issues read permission and repository access. # On GitHub issue locked Source: https://docs.automate.ax/reference/integrations/github/triggers/on-issue-locked Run an automation when a GitHub issue has its conversation locked. `github.onIssueLocked` emits issue events with action `"locked"`. ```ts automations/watch-github-issue-locked.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub issue locked", () => { const event = github.onIssueLocked() // Sync the GitHub issue to the external tracker. }) ``` Optional static `account` defaults to the project binding. Returns the typed GitHub issue webhook payload with `action: "locked"`. The installation needs Issues read permission and repository access. # On GitHub issue added to milestone Source: https://docs.automate.ax/reference/integrations/github/triggers/on-issue-milestoned Run an automation when a GitHub issue is added to a milestone. `github.onIssueMilestoned` emits issue events with action `"milestoned"`. ```ts automations/watch-github-issue-milestoned.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub issue milestoned", () => { const event = github.onIssueMilestoned() // Sync the GitHub issue to the external tracker. }) ``` Optional static `account` defaults to the project binding. Returns the typed GitHub issue webhook payload with `action: "milestoned"`. The installation needs Issues read permission and repository access. # On GitHub issue opened Source: https://docs.automate.ax/reference/integrations/github/triggers/on-issue-opened Run an automation when a GitHub issue opens. `github.onIssueOpened` emits issue events with action `"opened"`. ```ts automations/welcome-github-issues.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Welcome GitHub issues", () => { const event = github.onIssueOpened() github.createIssueComment({ owner: event.repository.owner.login, repository: event.repository.name, issueNumber: event.issue.number, body: "Thanks for opening this issue.", }) }) ``` Optional static `account` defaults to the project binding. Returns `Signal` with `action: "opened"` and GitHub's full issue webhook payload. The installation needs Issues read permission and repository access. # On GitHub issue pinned Source: https://docs.automate.ax/reference/integrations/github/triggers/on-issue-pinned Run an automation when a GitHub issue is pinned. `github.onIssuePinned` emits issue events with action `"pinned"`. ```ts automations/watch-github-issue-pinned.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub issue pinned", () => { const event = github.onIssuePinned() // Sync the GitHub issue to the external tracker. }) ``` Optional static `account` defaults to the project binding. Returns the typed GitHub issue webhook payload with `action: "pinned"`. The installation needs Issues read permission and repository access. # On GitHub issue reopened Source: https://docs.automate.ax/reference/integrations/github/triggers/on-issue-reopened Run an automation when a GitHub issue reopens. `github.onIssueReopened` emits issue events with action `"reopened"`. ```ts automations/watch-reopened-github-issues.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch reopened GitHub issues", () => { const event = github.onIssueReopened() // Sync the GitHub issue to the external tracker. }) ``` Optional static `account` defaults to the project binding. Returns `Signal` with `action: "reopened"` and GitHub's full issue webhook payload. The installation needs Issues read permission and repository access. # On GitHub issue transferred Source: https://docs.automate.ax/reference/integrations/github/triggers/on-issue-transferred Run an automation when a GitHub issue is transferred. `github.onIssueTransferred` emits issue events with action `"transferred"`. ```ts automations/watch-github-issue-transferred.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub issue transferred", () => { const event = github.onIssueTransferred() // Sync the GitHub issue to the external tracker. }) ``` Optional static `account` defaults to the project binding. Returns the typed GitHub issue webhook payload with `action: "transferred"`. The installation needs Issues read permission and repository access. # On GitHub issue typed Source: https://docs.automate.ax/reference/integrations/github/triggers/on-issue-typed Run an automation when a GitHub issue has an issue type added or changed. `github.onIssueTyped` emits issue events with action `"typed"`. ```ts automations/watch-github-issue-typed.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub issue typed", () => { const event = github.onIssueTyped() // Sync the GitHub issue to the external tracker. }) ``` Optional static `account` defaults to the project binding. Returns the typed GitHub issue webhook payload with `action: "typed"`. The installation needs Issues read permission and repository access. # On GitHub issue unassigned Source: https://docs.automate.ax/reference/integrations/github/triggers/on-issue-unassigned Run an automation when a GitHub issue is unassigned. `github.onIssueUnassigned` emits issue events with action `"unassigned"`. ```ts automations/watch-github-issue-unassigned.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub issue unassigned", () => { const event = github.onIssueUnassigned() // Sync the GitHub issue to the external tracker. }) ``` Optional static `account` defaults to the project binding. Returns the typed GitHub issue webhook payload with `action: "unassigned"`. The installation needs Issues read permission and repository access. # On GitHub issue unlabeled Source: https://docs.automate.ax/reference/integrations/github/triggers/on-issue-unlabeled Run an automation when a GitHub issue has a label removed. `github.onIssueUnlabeled` emits issue events with action `"unlabeled"`. ```ts automations/watch-github-issue-unlabeled.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub issue unlabeled", () => { const event = github.onIssueUnlabeled() // Sync the GitHub issue to the external tracker. }) ``` Optional static `account` defaults to the project binding. Returns the typed GitHub issue webhook payload with `action: "unlabeled"`. The installation needs Issues read permission and repository access. # On GitHub issue unlocked Source: https://docs.automate.ax/reference/integrations/github/triggers/on-issue-unlocked Run an automation when a GitHub issue has its conversation unlocked. `github.onIssueUnlocked` emits issue events with action `"unlocked"`. ```ts automations/watch-github-issue-unlocked.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub issue unlocked", () => { const event = github.onIssueUnlocked() // Sync the GitHub issue to the external tracker. }) ``` Optional static `account` defaults to the project binding. Returns the typed GitHub issue webhook payload with `action: "unlocked"`. The installation needs Issues read permission and repository access. # On GitHub issue unpinned Source: https://docs.automate.ax/reference/integrations/github/triggers/on-issue-unpinned Run an automation when a GitHub issue is unpinned. `github.onIssueUnpinned` emits issue events with action `"unpinned"`. ```ts automations/watch-github-issue-unpinned.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub issue unpinned", () => { const event = github.onIssueUnpinned() // Sync the GitHub issue to the external tracker. }) ``` Optional static `account` defaults to the project binding. Returns the typed GitHub issue webhook payload with `action: "unpinned"`. The installation needs Issues read permission and repository access. # On GitHub issue type removed Source: https://docs.automate.ax/reference/integrations/github/triggers/on-issue-untyped Run an automation when a GitHub issue has its issue type removed. `github.onIssueUntyped` emits issue events with action `"untyped"`. ```ts automations/watch-github-issue-untyped.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub issue untyped", () => { const event = github.onIssueUntyped() // Sync the GitHub issue to the external tracker. }) ``` Optional static `account` defaults to the project binding. Returns the typed GitHub issue webhook payload with `action: "untyped"`. The installation needs Issues read permission and repository access. # On GitHub merge group checks requested Source: https://docs.automate.ax/reference/integrations/github/triggers/on-merge-group-checks-requested Run when checks are requested for a merge group. `github.onMergeGroupChecksRequested` subscribes to merge-group check requests. ```ts automations/watch-github-merge-group-checks-requested.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub merge group checks requested", () => { const event = github.onMergeGroupChecksRequested() // Update the GitHub merge queue. }) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `merge_group` payloads with `action: "checks_requested"`. Requires Merge queues read permission and repository access. # On GitHub merge group destroyed Source: https://docs.automate.ax/reference/integrations/github/triggers/on-merge-group-destroyed Run when a merge group is destroyed. `github.onMergeGroupDestroyed` subscribes to destroyed merge groups. ```ts automations/watch-github-merge-group-destroyed.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub merge group destroyed", () => { const event = github.onMergeGroupDestroyed() // Update the GitHub merge queue. }) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `merge_group` payloads with `action: "destroyed"`. Requires Merge queues read permission and repository access. # On GitHub merge group event Source: https://docs.automate.ax/reference/integrations/github/triggers/on-merge-group-event Run for GitHub merge queue group activity. `github.onMergeGroupEvent` subscribes to merge-group activity. ```ts automations/watch-github-merge-group-event.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub merge group event", () => { const event = github.onMergeGroupEvent() // Update the GitHub merge queue. }) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `merge_group` payloads. Requires Merge queues read permission and repository access. # On GitHub parent issue added Source: https://docs.automate.ax/reference/integrations/github/triggers/on-parent-issue-added Run when a parent is added to an issue. `github.onParentIssueAdded` subscribes to added parent-issue relationships. ```ts automations/watch-github-parent-issue-added.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub parent issue added", () => { const event = github.onParentIssueAdded() // Sync the GitHub issue hierarchy to the project plan. }) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `sub_issues` payloads with `action: "parent_issue_added"`. Requires Issues read permission and repository access. # On GitHub parent issue removed Source: https://docs.automate.ax/reference/integrations/github/triggers/on-parent-issue-removed Run when a parent is removed from an issue. `github.onParentIssueRemoved` subscribes to removed parent-issue relationships. ```ts automations/watch-github-parent-issue-removed.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub parent issue removed", () => { const event = github.onParentIssueRemoved() // Sync the GitHub issue hierarchy to the project plan. }) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `sub_issues` payloads with `action: "parent_issue_removed"`. Requires Issues read permission and repository access. # On GitHub pull request assigned Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-assigned Start an automation when a GitHub pull request is assigned. `github.onPullRequestAssigned` emits pull request events with `action: "assigned"`. ```ts automations/github-pull-request-assigned.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("pull request assigned", () => { const event = github.onPullRequestAssigned() // Update the GitHub pull request in the review dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `action: "assigned"`. Requires Pull requests read permission. # On GitHub pull request auto-merge disabled Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-auto-merge-disabled Start an automation when auto-merge is disabled for a GitHub pull request. `github.onPullRequestAutoMergeDisabled` emits pull request events with `action: "auto_merge_disabled"`. ```ts automations/github-pull-request-auto-merge-disabled.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("pull request auto-merge disabled", () => { const event = github.onPullRequestAutoMergeDisabled() // Update the GitHub pull request in the review dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `action: "auto_merge_disabled"`. Requires Pull requests read permission. # On GitHub pull request auto-merge enabled Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-auto-merge-enabled Start an automation when auto-merge is enabled for a GitHub pull request. `github.onPullRequestAutoMergeEnabled` emits pull request events with `action: "auto_merge_enabled"`. ```ts automations/github-pull-request-auto-merge-enabled.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("pull request auto-merge enabled", () => { const event = github.onPullRequestAutoMergeEnabled() // Update the GitHub pull request in the review dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `action: "auto_merge_enabled"`. Requires Pull requests read permission. # On GitHub pull request closed Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-closed Run an automation when a GitHub pull request closes without merging. `github.onPullRequestClosed` emits `"closed"` events only when `pull_request.merged` is `false`. ```ts automations/watch-closed-github-pull-requests.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch closed GitHub pull requests", () => { const event = github.onPullRequestClosed() // Update the GitHub pull request in the review dashboard. }) ``` Optional static `account` defaults to the project binding. Returns `Signal` with `action: "closed"` and `pull_request.merged: false`. Merged pull requests emit [On GitHub pull request merged](/reference/integrations/github/triggers/on-pull-request-merged) instead. # On GitHub pull request converted to draft Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-converted-to-draft Start an automation when a GitHub pull request is converted to draft. `github.onPullRequestConvertedToDraft` emits pull request events with `action: "converted_to_draft"`. ```ts automations/github-pull-request-converted-to-draft.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("pull request converted to draft", () => { const event = github.onPullRequestConvertedToDraft() // Update the GitHub pull request in the review dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `action: "converted_to_draft"`. Requires Pull requests read permission. # On GitHub pull request removed from milestone Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-demilestoned Start an automation when a GitHub pull request is removed from a milestone. `github.onPullRequestDemilestoned` emits pull request events with `action: "demilestoned"`. ```ts automations/github-pull-request-demilestoned.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("pull request removed from milestone", () => { const event = github.onPullRequestDemilestoned() // Update the GitHub pull request in the review dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `action: "demilestoned"`. Requires Pull requests read permission. # On GitHub pull request left merge queue Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-dequeued Start an automation when a GitHub pull request leaves the merge queue. `github.onPullRequestDequeued` emits pull request events with `action: "dequeued"`. ```ts automations/github-pull-request-dequeued.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("pull request dequeued", () => { const event = github.onPullRequestDequeued() // Update the GitHub pull request in the review dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `action: "dequeued"`. Requires Pull requests read permission. # On GitHub pull request edited Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-edited Start an automation when a GitHub pull request is edited. `github.onPullRequestEdited` emits pull request events with `action: "edited"`. ```ts automations/github-pull-request-edited.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("pull request edited", () => { const event = github.onPullRequestEdited() // Update the GitHub pull request in the review dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `action: "edited"`. Requires Pull requests read permission. # On GitHub pull request entered merge queue Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-enqueued Start an automation when a GitHub pull request enters the merge queue. `github.onPullRequestEnqueued` emits pull request events with `action: "enqueued"`. ```ts automations/github-pull-request-enqueued.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("pull request enqueued", () => { const event = github.onPullRequestEnqueued() // Update the GitHub pull request in the review dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `action: "enqueued"`. Requires Pull requests read permission. # On GitHub pull request event Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-event Run an automation for any GitHub pull request webhook action. `github.onPullRequestEvent` exposes the broad GitHub `pull_request` webhook family. Use it for actions not covered by a semantic trigger. ```ts automations/watch-github-pull-requests.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub pull requests", () => { const event = github.onPullRequestEvent() // Route the GitHub pull request event by action. }) ``` Optional static `account` defaults to the project binding. Returns `Signal`, GitHub's pull request webhook union with `action`, `pull_request`, `repository`, `sender`, `installation`, and action-specific fields. The installation needs Pull requests read permission and repository access. # On GitHub pull request labeled Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-labeled Start an automation when a GitHub pull request is labeled. `github.onPullRequestLabeled` emits pull request events with `action: "labeled"`. ```ts automations/github-pull-request-labeled.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("pull request labeled", () => { const event = github.onPullRequestLabeled() // Update the GitHub pull request in the review dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `action: "labeled"`. Requires Pull requests read permission. # On GitHub pull request locked Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-locked Start an automation when a GitHub pull request conversation is locked. `github.onPullRequestLocked` emits pull request events with `action: "locked"`. ```ts automations/github-pull-request-locked.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("pull request locked", () => { const event = github.onPullRequestLocked() // Update the GitHub pull request in the review dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `action: "locked"`. Requires Pull requests read permission. # On GitHub pull request merged Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-merged Run an automation when a GitHub pull request merges. `github.onPullRequestMerged` classifies GitHub's `"closed"` delivery when `pull_request.merged` is `true`. ```ts automations/watch-merged-github-pull-requests.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch merged GitHub pull requests", () => { const event = github.onPullRequestMerged() // Update the GitHub pull request in the review dashboard. }) ``` Optional static `account` defaults to the project binding. Returns `Signal` with `action: "closed"`, `pull_request.merged: true`, and GitHub's full payload. An unmerged close emits the separate closed trigger. # On GitHub pull request added to milestone Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-milestoned Start an automation when a GitHub pull request is added to a milestone. `github.onPullRequestMilestoned` emits pull request events with `action: "milestoned"`. ```ts automations/github-pull-request-milestoned.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("pull request added to milestone", () => { const event = github.onPullRequestMilestoned() // Update the GitHub pull request in the review dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `action: "milestoned"`. Requires Pull requests read permission. # On GitHub pull request opened Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-opened Run an automation when a GitHub pull request opens. `github.onPullRequestOpened` emits pull request events with action `"opened"`. ```ts automations/watch-opened-github-pull-requests.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch opened GitHub pull requests", () => { const event = github.onPullRequestOpened() // Update the GitHub pull request in the review dashboard. }) ``` Optional static `account` defaults to the project binding. Returns `Signal` with `action: "opened"` and GitHub's full pull request webhook payload. Draft pull requests also emit when opened. Use [On GitHub pull request ready for review](/reference/integrations/github/triggers/on-pull-request-ready-for-review) for the later transition. # On GitHub pull request ready for review Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-ready-for-review Run an automation when a draft GitHub pull request becomes ready for review. `github.onPullRequestReadyForReview` emits the `"ready_for_review"` transition from draft. ```ts automations/watch-reviewable-github-pull-requests.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch reviewable GitHub pull requests", () => { const event = github.onPullRequestReadyForReview() // Update the GitHub pull request in the review dashboard. }) ``` Optional static `account` defaults to the project binding. Returns `Signal` with `action: "ready_for_review"` and GitHub's full payload. Opening a pull request that was never a draft doesn't emit this trigger. # On GitHub pull request reopened Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-reopened Start an automation when a GitHub pull request is reopened. `github.onPullRequestReopened` emits pull request events with `action: "reopened"`. ```ts automations/github-pull-request-reopened.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("pull request reopened", () => { const event = github.onPullRequestReopened() // Update the GitHub pull request in the review dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `action: "reopened"`. Requires Pull requests read permission. # On GitHub pull request review approved Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-review-approved Run an automation when a GitHub pull request review approves changes. `github.onPullRequestReviewApproved` emits submitted reviews whose `review.state` is `"approved"`. ```ts automations/watch-github-approvals.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub approvals", () => { const event = github.onPullRequestReviewApproved() // Update GitHub pull request merge readiness. }) ``` Optional static `account` defaults to the project binding. Returns `Signal` with `action: "submitted"`, `review.state: "approved"`, and GitHub's full payload. A later dismissal emits the separate dismissed trigger. # On GitHub pull request review changes requested Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-review-changes-requested Run an automation when a GitHub review requests pull request changes. `github.onPullRequestReviewChangesRequested` emits submitted reviews whose `review.state` is `"changes_requested"`. ```ts automations/watch-github-change-requests.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub change requests", () => { const event = github.onPullRequestReviewChangesRequested() // Update GitHub pull request merge readiness. }) ``` Optional static `account` defaults to the project binding. Returns `Signal` with `action: "submitted"`, `review.state: "changes_requested"`, and GitHub's full payload. # On GitHub pull request review comment created Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-review-comment-created Run when an inline GitHub pull request review comment is created. `github.onPullRequestReviewCommentCreated` emits inline review comments with `action: "created"`. ```ts automations/github-review-comment-created.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub review comment created", () => { const event = github.onPullRequestReviewCommentCreated() // Send the GitHub review comment to the pull request author. }) ``` Returns the comment's body, path, diff coordinates, commit IDs, reply relationship, pull request, repository, and sender. Requires Pull requests read permission. # On GitHub pull request review comment deleted Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-review-comment-deleted Run when an inline GitHub pull request review comment is deleted. `github.onPullRequestReviewCommentDeleted` emits inline review comments with `action: "deleted"`. ```ts automations/github-review-comment-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub review comment deleted", () => { const event = github.onPullRequestReviewCommentDeleted() // Send the GitHub review comment to the pull request author. }) ``` Returns GitHub's deleted-comment snapshot with its pull request context. Requires Pull requests read permission. # On GitHub pull request review comment edited Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-review-comment-edited Run when an inline GitHub pull request review comment is edited. `github.onPullRequestReviewCommentEdited` emits inline review comments with `action: "edited"`. ```ts automations/github-review-comment-edited.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub review comment edited", () => { const event = github.onPullRequestReviewCommentEdited() // Send the GitHub review comment to the pull request author. }) ``` Returns the edited comment and previous body in `changes` when GitHub supplies it. Requires Pull requests read permission. # On GitHub pull request review comment event Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-review-comment-event Run for created, edited, or deleted inline GitHub review comments. `github.onPullRequestReviewCommentEvent` handles broad inline diff-comment activity. ```ts automations/watch-github-review-comments.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub review comments", () => { const event = github.onPullRequestReviewCommentEvent() // Send the GitHub review comment to the pull request author. }) ``` Returns GitHub's full `pull_request_review_comment` payload with `action` equal to `"created"`, `"edited"`, or `"deleted"`. Conversation comments use the issue-comment triggers. Requires Pull requests read permission. # On GitHub pull request review dismissed Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-review-dismissed Run an automation when someone dismisses a GitHub pull request review. `github.onPullRequestReviewDismissed` emits review events with action `"dismissed"`. ```ts automations/watch-dismissed-github-reviews.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch dismissed GitHub reviews", () => { const event = github.onPullRequestReviewDismissed() // Update GitHub pull request merge readiness. }) ``` Optional static `account` defaults to the project binding. Returns `Signal` with `action: "dismissed"`, GitHub's dismissal changes, and its full review payload. # On GitHub pull request review edited Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-review-edited Run an automation when someone edits a GitHub pull request review. `github.onPullRequestReviewEdited` emits review events with action `"edited"`. ```ts automations/watch-edited-github-reviews.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch edited GitHub reviews", () => { const event = github.onPullRequestReviewEdited() // Update GitHub pull request merge readiness. }) ``` Optional static `account` defaults to the project binding. Returns the typed GitHub pull request review webhook payload with `action: "edited"`. The installation needs Pull requests read permission and repository access. # On GitHub pull request review event Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-review-event Run an automation for any GitHub pull request review action. `github.onPullRequestReviewEvent` exposes the broad `pull_request_review` webhook family for submitted, edited, and dismissed reviews. ```ts automations/watch-github-reviews.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub reviews", () => { const event = github.onPullRequestReviewEvent() // Route the GitHub pull request review by action. }) ``` Optional static `account` defaults to the project binding. Returns `Signal`, GitHub's review webhook union with `action`, `review`, `pull_request`, `repository`, and `sender`. The installation needs Pull requests read permission and repository access. Comments on individual diff lines use another webhook family and don't emit this trigger. # On GitHub pull request review request removed Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-review-request-removed Start an automation when a requested GitHub pull request reviewer is removed. `github.onPullRequestReviewRequestRemoved` emits pull request events with `action: "review_request_removed"`. ```ts automations/github-pull-request-review-request-removed.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("pull request review request removed", () => { const event = github.onPullRequestReviewRequestRemoved() // Update the GitHub pull request reviewer assignments. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `action: "review_request_removed"`. Requires Pull requests read permission. # On GitHub pull request review requested Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-review-requested Start an automation when a GitHub pull request review is requested. `github.onPullRequestReviewRequested` emits pull request events with `action: "review_requested"`. ```ts automations/github-pull-request-review-requested.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("pull request review requested", () => { const event = github.onPullRequestReviewRequested() // Update GitHub pull request merge readiness. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `action: "review_requested"`. Requires Pull requests read permission. # On GitHub pull request review submitted Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-review-submitted Run an automation when someone submits any GitHub pull request review. `github.onPullRequestReviewSubmitted` emits approvals, comments, and change requests when their action is `"submitted"`. ```ts automations/watch-submitted-github-reviews.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch submitted GitHub reviews", () => { const event = github.onPullRequestReviewSubmitted() // Update GitHub pull request merge readiness. }) ``` Optional static `account` defaults to the project binding. Returns `Signal` with `action: "submitted"` and GitHub's full review payload. Approvals and change requests also emit their narrower triggers when subscribed. # On GitHub pull request review thread event Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-review-thread-event Run for GitHub pull request review-thread changes. `github.onPullRequestReviewThreadEvent` subscribes to review-thread activity. ```ts automations/watch-github-pull-request-review-thread-event.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation( "Watch GitHub pull request review thread event", () => { const event = github.onPullRequestReviewThreadEvent() }, ) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `pull_request_review_thread` payloads. Requires Pull requests read permission and repository access. # On GitHub pull request review thread resolved Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-review-thread-resolved Run when a review thread is resolved. `github.onPullRequestReviewThreadResolved` subscribes to resolved review threads. ```ts automations/watch-github-pull-request-review-thread-resolved.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation( "Watch GitHub pull request review thread resolved", () => { const event = github.onPullRequestReviewThreadResolved() }, ) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `pull_request_review_thread` payloads with `action: "resolved"`. Requires Pull requests read permission and repository access. # On GitHub pull request review thread unresolved Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-review-thread-unresolved Run when a review thread is unresolved. `github.onPullRequestReviewThreadUnresolved` subscribes to unresolved review threads. ```ts automations/watch-github-pull-request-review-thread-unresolved.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation( "Watch GitHub pull request review thread unresolved", () => { const event = github.onPullRequestReviewThreadUnresolved() }, ) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `pull_request_review_thread` payloads with `action: "unresolved"`. Requires Pull requests read permission and repository access. # On GitHub pull request stacked Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-stacked Start an automation when a GitHub pull request is added to a stack. `github.onPullRequestStacked` emits pull request events with `action: "stacked"`. ```ts automations/github-pull-request-stacked.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("pull request stacked", () => { const event = github.onPullRequestStacked() // Update the GitHub pull request in the review dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `action: "stacked"`. Requires Pull requests read permission. # On GitHub pull request synchronized Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-synchronized Run an automation when commits update a GitHub pull request's head branch. `github.onPullRequestSynchronized` emits GitHub's `"synchronize"` action when someone pushes commits to a pull request's head or updates its branch. ```ts automations/watch-github-pull-request-commits.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub pull request commits", () => { const event = github.onPullRequestSynchronized() // Update the GitHub pull request in the review dashboard. }) ``` Optional static `account` defaults to the project binding. Returns `Signal` with `action: "synchronize"`, `before`, `after`, and GitHub's full pull request webhook payload. # On GitHub pull request unassigned Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-unassigned Start an automation when a GitHub pull request assignee is removed. `github.onPullRequestUnassigned` emits pull request events with `action: "unassigned"`. ```ts automations/github-pull-request-unassigned.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("pull request unassigned", () => { const event = github.onPullRequestUnassigned() // Update the GitHub pull request in the review dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `action: "unassigned"`. Requires Pull requests read permission. # On GitHub pull request unlabeled Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-unlabeled Start an automation when a label is removed from a GitHub pull request. `github.onPullRequestUnlabeled` emits pull request events with `action: "unlabeled"`. ```ts automations/github-pull-request-unlabeled.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("pull request unlabeled", () => { const event = github.onPullRequestUnlabeled() // Update the GitHub pull request in the review dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `action: "unlabeled"`. Requires Pull requests read permission. # On GitHub pull request unlocked Source: https://docs.automate.ax/reference/integrations/github/triggers/on-pull-request-unlocked Start an automation when a GitHub pull request conversation is unlocked. `github.onPullRequestUnlocked` emits pull request events with `action: "unlocked"`. ```ts automations/github-pull-request-unlocked.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("pull request unlocked", () => { const event = github.onPullRequestUnlocked() // Update the GitHub pull request in the review dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `action: "unlocked"`. Requires Pull requests read permission. # On GitHub push Source: https://docs.automate.ax/reference/integrations/github/triggers/on-push Run an automation when someone pushes commits or tags to a GitHub repository. `github.onPush` emits repository push events for branches and tags. ```ts automations/watch-github-pushes.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub pushes", () => { const event = github.onPush() // Start downstream release checks for the GitHub push. }) ``` Optional static `account` defaults to the project's GitHub App installation binding and can't be a signal. Returns `Signal` with `ref`, `before`, `after`, commits, pusher, repository, sender, installation, and created/deleted/forced flags. The installation needs Contents read permission and receives pushes only from accessible repositories. GitHub can omit individual commits from unusually large pushes while retaining range metadata. # On GitHub ref created Source: https://docs.automate.ax/reference/integrations/github/triggers/on-ref-created Start an automation when GitHub creates a branch or tag. `github.onRefCreated` starts an automation when a branch or tag is created. ```ts automations/github-ref-created.automation.ts theme={null} import { automation, t } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub ref created", () => { const event = github.onRefCreated() github.createIssue({ owner: event.repository.owner.login, repository: event.repository.name, title: t`Created ${event.ref_type}: ${event.ref}`, }) }) ``` Returns GitHub's typed `create` webhook payload. `ref` is the branch or tag name without a `refs/...` prefix, and `ref_type` is `"branch"` or `"tag"`. Use a semantic trigger when only one ref type matters. Requires Contents read permission. # On GitHub ref deleted Source: https://docs.automate.ax/reference/integrations/github/triggers/on-ref-deleted Start an automation when GitHub deletes a branch or tag. `github.onRefDeleted` starts an automation when a branch or tag is deleted. ```ts automations/github-ref-deleted.automation.ts theme={null} import { automation, t } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub ref deleted", () => { const event = github.onRefDeleted() github.createIssue({ owner: event.repository.owner.login, repository: event.repository.name, title: t`Deleted ${event.ref_type}: ${event.ref}`, }) }) ``` Returns GitHub's typed `delete` webhook payload. Use a semantic branch or tag trigger when only one ref type matters. Requires Contents read permission. # On GitHub release created Source: https://docs.automate.ax/reference/integrations/github/triggers/on-release-created Run an automation when a GitHub release is created. `github.onReleaseCreated` emits release events with action `"created"`. ```ts automations/watch-github-release-created.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub release created", () => { const event = github.onReleaseCreated() // Sync the GitHub release to the release record. }) ``` Optional static `account` defaults to the project binding. Returns the typed GitHub release webhook payload with `action: "created"`. The installation needs Contents read permission and repository access. # On GitHub release deleted Source: https://docs.automate.ax/reference/integrations/github/triggers/on-release-deleted Run an automation when a GitHub release is deleted. `github.onReleaseDeleted` emits release events with action `"deleted"`. ```ts automations/watch-github-release-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub release deleted", () => { const event = github.onReleaseDeleted() // Sync the GitHub release to the release record. }) ``` Optional static `account` defaults to the project binding. Returns the typed GitHub release webhook payload with `action: "deleted"`. The installation needs Contents read permission and repository access. # On GitHub release edited Source: https://docs.automate.ax/reference/integrations/github/triggers/on-release-edited Run an automation when a GitHub release is edited. `github.onReleaseEdited` emits release events with action `"edited"`. ```ts automations/watch-github-release-edited.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub release edited", () => { const event = github.onReleaseEdited() // Sync the GitHub release to the release record. }) ``` Optional static `account` defaults to the project binding. Returns the typed GitHub release webhook payload with `action: "edited"`. The installation needs Contents read permission and repository access. # On GitHub release event Source: https://docs.automate.ax/reference/integrations/github/triggers/on-release-event Run an automation for any GitHub release webhook action. `github.onReleaseEvent` exposes the broad GitHub `release` webhook family, including created, edited, deleted, prereleased, published, released, and unpublished actions. ```ts automations/watch-github-releases.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub releases", () => { const event = github.onReleaseEvent() // Sync the GitHub release to the release record. }) ``` Optional static `account` defaults to the project binding. Returns `Signal`, GitHub's release webhook union with `action`, `release`, `repository`, `sender`, `installation`, and action-specific fields. The installation needs Contents read permission and repository access. Use [On GitHub release published](/reference/integrations/github/triggers/on-release-published) when only publication matters. # On GitHub release prereleased Source: https://docs.automate.ax/reference/integrations/github/triggers/on-release-prereleased Run an automation when a GitHub release becomes a prerelease. `github.onReleasePrereleased` emits release events with action `"prereleased"`. ```ts automations/watch-github-release-prereleased.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub release prereleased", () => { const event = github.onReleasePrereleased() // Sync the GitHub release to the release record. }) ``` Optional static `account` defaults to the project binding. Returns the typed GitHub release webhook payload with `action: "prereleased"`. The installation needs Contents read permission and repository access. # On GitHub release published Source: https://docs.automate.ax/reference/integrations/github/triggers/on-release-published Run an automation when someone publishes a GitHub release. `github.onReleasePublished` emits release events with action `"published"`. ```ts automations/watch-published-github-releases.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch published GitHub releases", () => { const event = github.onReleasePublished() // Sync the GitHub release to the release record. }) ``` Optional static `account` defaults to the project binding. Returns `Signal` with `action: "published"` and GitHub's full release payload, including tag, target, draft and prerelease flags, author, assets, timestamps, and URLs. The installation needs Contents read permission and repository access. # On GitHub release released Source: https://docs.automate.ax/reference/integrations/github/triggers/on-release-released Run an automation when a GitHub release becomes a full release. `github.onReleaseReleased` emits release events with action `"released"`. ```ts automations/watch-github-release-released.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub release released", () => { const event = github.onReleaseReleased() // Sync the GitHub release to the release record. }) ``` Optional static `account` defaults to the project binding. Returns the typed GitHub release webhook payload with `action: "released"`. The installation needs Contents read permission and repository access. # On GitHub release unpublished Source: https://docs.automate.ax/reference/integrations/github/triggers/on-release-unpublished Run an automation when a GitHub release is unpublished. `github.onReleaseUnpublished` emits release events with action `"unpublished"`. ```ts automations/watch-github-release-unpublished.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub release unpublished", () => { const event = github.onReleaseUnpublished() // Sync the GitHub release to the release record. }) ``` Optional static `account` defaults to the project binding. Returns the typed GitHub release webhook payload with `action: "unpublished"`. The installation needs Contents read permission and repository access. # On GitHub repository archived Source: https://docs.automate.ax/reference/integrations/github/triggers/on-repository-archived Run when a GitHub repository is archived. `github.onRepositoryArchived` subscribes to archived repositories. ```ts automations/watch-github-repository-archived.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub repository archived", () => { const event = github.onRepositoryArchived() // Sync the GitHub repository to the asset inventory. }) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `repository` payloads with `action: "archived"`. Requires Metadata read permission and repository access. # On GitHub repository created Source: https://docs.automate.ax/reference/integrations/github/triggers/on-repository-created Run when a GitHub repository is created. `github.onRepositoryCreated` subscribes to created repositories. ```ts automations/watch-github-repository-created.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub repository created", () => { const event = github.onRepositoryCreated() // Sync the GitHub repository to the asset inventory. }) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `repository` payloads with `action: "created"`. Requires Metadata read permission and repository access. # On GitHub repository deleted Source: https://docs.automate.ax/reference/integrations/github/triggers/on-repository-deleted Run when a GitHub repository is deleted. `github.onRepositoryDeleted` subscribes to deleted repositories. ```ts automations/watch-github-repository-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub repository deleted", () => { const event = github.onRepositoryDeleted() // Sync the GitHub repository to the asset inventory. }) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `repository` payloads with `action: "deleted"`. Requires Metadata read permission and repository access. # On GitHub repository dispatch Source: https://docs.automate.ax/reference/integrations/github/triggers/on-repository-dispatch Run when a GitHub App sends a custom repository dispatch event. `github.onRepositoryDispatch` handles custom events sent through GitHub's repository dispatch endpoint. ```ts automations/on-github-repository-dispatch.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub repository dispatch", () => { const event = github.onRepositoryDispatch() // Sync the GitHub repository to the asset inventory. }) ``` Returns the custom `action` (the sender's `eventType`), `client_payload`, default `branch`, repository, sender, and installation. Event types are user-defined, so inspect `event.action` when one automation handles several. Requires Contents read permission. # On GitHub repository edited Source: https://docs.automate.ax/reference/integrations/github/triggers/on-repository-edited Run when a GitHub repository is edited. `github.onRepositoryEdited` subscribes to edited repositories. ```ts automations/watch-github-repository-edited.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub repository edited", () => { const event = github.onRepositoryEdited() // Sync the GitHub repository to the asset inventory. }) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `repository` payloads with `action: "edited"`. Requires Metadata read permission and repository access. # On GitHub repository event Source: https://docs.automate.ax/reference/integrations/github/triggers/on-repository-event Run for GitHub repository lifecycle activity. `github.onRepositoryEvent` subscribes to repository lifecycle activity. ```ts automations/watch-github-repository-event.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub repository event", () => { const event = github.onRepositoryEvent() // Sync the GitHub repository to the asset inventory. }) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `repository` payloads. Requires Metadata read permission and repository access. # On GitHub repository privatized Source: https://docs.automate.ax/reference/integrations/github/triggers/on-repository-privatized Run when a GitHub repository becomes private. `github.onRepositoryPrivatized` subscribes to privatized repositories. ```ts automations/watch-github-repository-privatized.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub repository privatized", () => { const event = github.onRepositoryPrivatized() // Sync the GitHub repository to the asset inventory. }) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `repository` payloads with `action: "privatized"`. Requires Metadata read permission and repository access. # On GitHub repository publicized Source: https://docs.automate.ax/reference/integrations/github/triggers/on-repository-publicized Run when a GitHub repository becomes public. `github.onRepositoryPublicized` subscribes to publicized repositories. ```ts automations/watch-github-repository-publicized.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub repository publicized", () => { const event = github.onRepositoryPublicized() // Sync the GitHub repository to the asset inventory. }) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `repository` payloads with `action: "publicized"`. Requires Metadata read permission and repository access. # On GitHub repository renamed Source: https://docs.automate.ax/reference/integrations/github/triggers/on-repository-renamed Run when a GitHub repository is renamed. `github.onRepositoryRenamed` subscribes to renamed repositories. ```ts automations/watch-github-repository-renamed.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub repository renamed", () => { const event = github.onRepositoryRenamed() // Sync the GitHub repository to the asset inventory. }) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `repository` payloads with `action: "renamed"`. Requires Metadata read permission and repository access. # On GitHub repository transferred Source: https://docs.automate.ax/reference/integrations/github/triggers/on-repository-transferred Run when a GitHub repository is transferred. `github.onRepositoryTransferred` subscribes to transferred repositories. ```ts automations/watch-github-repository-transferred.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub repository transferred", () => { const event = github.onRepositoryTransferred() // Sync the GitHub repository to the asset inventory. }) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `repository` payloads with `action: "transferred"`. Requires Metadata read permission and repository access. # On GitHub repository unarchived Source: https://docs.automate.ax/reference/integrations/github/triggers/on-repository-unarchived Run when a GitHub repository is unarchived. `github.onRepositoryUnarchived` subscribes to unarchived repositories. ```ts automations/watch-github-repository-unarchived.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub repository unarchived", () => { const event = github.onRepositoryUnarchived() // Sync the GitHub repository to the asset inventory. }) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `repository` payloads with `action: "unarchived"`. Requires Metadata read permission and repository access. # On GitHub status errored Source: https://docs.automate.ax/reference/integrations/github/triggers/on-status-errored Run when a GitHub commit status reports an error. `github.onStatusErrored` emits commit statuses with `state: "error"`. ```ts automations/github-status-errored.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub status errored", () => { const event = github.onStatusErrored() // Update the GitHub commit status in the CI dashboard. }) ``` Returns the typed commit-status payload. Requires Commit statuses read permission. # On GitHub status event Source: https://docs.automate.ax/reference/integrations/github/triggers/on-status-event Run for broad GitHub commit status changes. `github.onStatusEvent` handles changes to commit-status contexts. ```ts automations/watch-github-status.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub status", () => { const event = github.onStatusEvent() // Update the GitHub commit status in the CI dashboard. }) ``` Returns the status `state`, `context`, `sha`, description, target URL, affected branches, commit, repository, and sender. Check runs are a separate GitHub feature and do not emit this event. Requires Commit statuses read permission. # On GitHub status failed Source: https://docs.automate.ax/reference/integrations/github/triggers/on-status-failed Run when a GitHub commit status fails. `github.onStatusFailed` emits commit statuses with `state: "failure"`. ```ts automations/github-status-failed.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub status failed", () => { const event = github.onStatusFailed() // Update the GitHub commit status in the CI dashboard. }) ``` Returns the typed commit-status payload, including its description and target URL. Requires Commit statuses read permission. # On GitHub status pending Source: https://docs.automate.ax/reference/integrations/github/triggers/on-status-pending Run when a GitHub commit status becomes pending. `github.onStatusPending` emits commit statuses with `state: "pending"`. ```ts automations/github-status-pending.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub status pending", () => { const event = github.onStatusPending() // Update the GitHub commit status in the CI dashboard. }) ``` Returns the typed commit-status payload. Requires Commit statuses read permission. # On GitHub status succeeded Source: https://docs.automate.ax/reference/integrations/github/triggers/on-status-succeeded Run when a GitHub commit status succeeds. `github.onStatusSucceeded` emits commit statuses with `state: "success"`. ```ts automations/github-status-succeeded.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub status succeeded", () => { const event = github.onStatusSucceeded() // Update the GitHub commit status in the CI dashboard. }) ``` Returns the typed commit-status payload. Requires Commit statuses read permission. # On GitHub sub issue added Source: https://docs.automate.ax/reference/integrations/github/triggers/on-sub-issue-added Run when a sub-issue is added. `github.onSubIssueAdded` subscribes to added sub-issue relationships. ```ts automations/watch-github-sub-issue-added.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub sub issue added", () => { const event = github.onSubIssueAdded() // Sync the GitHub issue hierarchy to the project plan. }) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `sub_issues` payloads with `action: "sub_issue_added"`. Requires Issues read permission and repository access. # On GitHub sub issue removed Source: https://docs.automate.ax/reference/integrations/github/triggers/on-sub-issue-removed Run when a sub-issue is removed. `github.onSubIssueRemoved` subscribes to removed sub-issue relationships. ```ts automations/watch-github-sub-issue-removed.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub sub issue removed", () => { const event = github.onSubIssueRemoved() // Sync the GitHub issue hierarchy to the project plan. }) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `sub_issues` payloads with `action: "sub_issue_removed"`. Requires Issues read permission and repository access. # On GitHub sub issues event Source: https://docs.automate.ax/reference/integrations/github/triggers/on-sub-issues-event Run for GitHub sub-issue relationship changes. `github.onSubIssuesEvent` subscribes to sub-issue relationship activity. ```ts automations/watch-github-sub-issues-event.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub sub issues event", () => { const event = github.onSubIssuesEvent() // Sync the GitHub issue hierarchy to the project plan. }) ``` Optional static `account` defaults to the project binding. Returns typed GitHub `sub_issues` payloads. Requires Issues read permission and repository access. # On GitHub tag created Source: https://docs.automate.ax/reference/integrations/github/triggers/on-tag-created Start an automation when GitHub creates a tag. `github.onTagCreated` starts an automation when a repository tag is created. ```ts automations/github-tag-created.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub tag created", () => { const event = github.onTagCreated() github.createRelease({ owner: event.repository.owner.login, repository: event.repository.name, tagName: event.ref, }) }) ``` Returns the typed `create` payload with `ref_type: "tag"`. GitHub does not deliver this event when more than three tags are created at once. Requires Contents read permission. # On GitHub tag deleted Source: https://docs.automate.ax/reference/integrations/github/triggers/on-tag-deleted Start an automation when GitHub deletes a tag. `github.onTagDeleted` starts an automation when a repository tag is deleted. ```ts automations/github-tag-deleted.automation.ts theme={null} import { automation, t } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub tag deleted", () => { const event = github.onTagDeleted() github.createIssue({ owner: event.repository.owner.login, repository: event.repository.name, title: t`Tag deleted: ${event.ref}`, }) }) ``` Returns the typed `delete` payload with `ref_type: "tag"`. GitHub does not deliver this event when more than three tags are deleted at once. Requires Contents read permission. # On GitHub workflow dispatch Source: https://docs.automate.ax/reference/integrations/github/triggers/on-workflow-dispatch Run when a GitHub Actions workflow is manually dispatched. `github.onWorkflowDispatch` handles manual or API-driven `workflow_dispatch` activity. ```ts automations/on-github-workflow-dispatch.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub workflow dispatched", () => { const event = github.onWorkflowDispatch() // Update the GitHub workflow in the CI dashboard. }) ``` Returns the workflow path, ref, declared inputs, repository, sender, and installation. Use workflow-run triggers to observe the resulting run lifecycle. Requires Contents read permission. # On GitHub workflow job action required Source: https://docs.automate.ax/reference/integrations/github/triggers/on-workflow-job-action-required Start an automation when a GitHub Actions workflow job requires action. `github.onWorkflowJobActionRequired` emits workflow job events with `workflow_job.conclusion: "action_required"`. ```ts automations/github-workflow-job-action-required.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("workflow job action required", () => { const event = github.onWorkflowJobActionRequired() // Update the GitHub workflow in the CI dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `workflow_job.conclusion: "action_required"`. Requires Actions read permission. # On GitHub workflow job cancelled Source: https://docs.automate.ax/reference/integrations/github/triggers/on-workflow-job-cancelled Run when a GitHub Actions workflow job is cancelled. `github.onWorkflowJobCancelled` emits completed jobs with `conclusion: "cancelled"`. ```ts automations/github-workflow-job-cancelled.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub workflow job cancelled", () => { const event = github.onWorkflowJobCancelled() // Update the GitHub workflow in the CI dashboard. }) ``` Returns the typed completed-job payload. Requires Actions read permission. # On GitHub workflow job completed Source: https://docs.automate.ax/reference/integrations/github/triggers/on-workflow-job-completed Run when a GitHub Actions workflow job completes. `github.onWorkflowJobCompleted` emits every completed workflow job regardless of conclusion. ```ts automations/github-workflow-job-completed.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub workflow job completed", () => { const event = github.onWorkflowJobCompleted() // Update the GitHub workflow in the CI dashboard. }) ``` Returns `action: "completed"` and the final job conclusion, steps, runner, and timestamps. Use the conclusion-specific triggers when one outcome matters. Requires Actions read permission. # On GitHub workflow job event Source: https://docs.automate.ax/reference/integrations/github/triggers/on-workflow-job-event Run for broad GitHub Actions workflow job activity. `github.onWorkflowJobEvent` handles queued, waiting, in-progress, and completed workflow jobs. ```ts automations/watch-github-workflow-jobs.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub workflow jobs", () => { const event = github.onWorkflowJobEvent() // Update the GitHub workflow in the CI dashboard. }) ``` Returns GitHub's full `workflow_job` payload, including run and attempt IDs, job name, status, conclusion, runner and group, labels, steps, ref, repository, and deployment when present. Requires Actions read permission. # On GitHub workflow job failed Source: https://docs.automate.ax/reference/integrations/github/triggers/on-workflow-job-failed Run when a GitHub Actions workflow job fails. `github.onWorkflowJobFailed` emits completed jobs with `conclusion: "failure"`. ```ts automations/github-workflow-job-failed.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub workflow job failed", () => { const event = github.onWorkflowJobFailed() // Update the GitHub workflow in the CI dashboard. }) ``` Returns the failed job, its steps, run and attempt IDs, runner, and URLs. Requires Actions read permission. # On GitHub workflow job neutral Source: https://docs.automate.ax/reference/integrations/github/triggers/on-workflow-job-neutral Start an automation when a GitHub Actions workflow job completes neutrally. `github.onWorkflowJobNeutral` emits workflow job events with `workflow_job.conclusion: "neutral"`. ```ts automations/github-workflow-job-neutral.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("workflow job neutral", () => { const event = github.onWorkflowJobNeutral() // Update the GitHub workflow in the CI dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `workflow_job.conclusion: "neutral"`. Requires Actions read permission. # On GitHub workflow job queued Source: https://docs.automate.ax/reference/integrations/github/triggers/on-workflow-job-queued Run when a GitHub Actions workflow job is queued. `github.onWorkflowJobQueued` emits workflow jobs with `action: "queued"`. ```ts automations/github-workflow-job-queued.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub workflow job queued", () => { const event = github.onWorkflowJobQueued() // Update the GitHub workflow in the CI dashboard. }) ``` Returns the queued job with its required runner labels; runner identity remains null until assignment. Requires Actions read permission. # On GitHub workflow job skipped Source: https://docs.automate.ax/reference/integrations/github/triggers/on-workflow-job-skipped Start an automation when a GitHub Actions workflow job is skipped. `github.onWorkflowJobSkipped` emits workflow job events with `workflow_job.conclusion: "skipped"`. ```ts automations/github-workflow-job-skipped.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("workflow job skipped", () => { const event = github.onWorkflowJobSkipped() // Update the GitHub workflow in the CI dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `workflow_job.conclusion: "skipped"`. Requires Actions read permission. # On GitHub workflow job started Source: https://docs.automate.ax/reference/integrations/github/triggers/on-workflow-job-started Run when a GitHub Actions workflow job starts. `github.onWorkflowJobStarted` emits workflow jobs with `action: "in_progress"`. ```ts automations/github-workflow-job-started.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub workflow job started", () => { const event = github.onWorkflowJobStarted() // Update the GitHub workflow in the CI dashboard. }) ``` Returns the started job with assigned runner and group details when available. Requires Actions read permission. # On GitHub workflow job succeeded Source: https://docs.automate.ax/reference/integrations/github/triggers/on-workflow-job-succeeded Run when a GitHub Actions workflow job succeeds. `github.onWorkflowJobSucceeded` emits completed jobs with `conclusion: "success"`. ```ts automations/github-workflow-job-succeeded.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub workflow job succeeded", () => { const event = github.onWorkflowJobSucceeded() // Update the GitHub workflow in the CI dashboard. }) ``` Returns the typed completed-job payload. Requires Actions read permission. # On GitHub workflow job timed out Source: https://docs.automate.ax/reference/integrations/github/triggers/on-workflow-job-timed-out Run when a GitHub Actions workflow job times out. `github.onWorkflowJobTimedOut` emits completed jobs with `conclusion: "timed_out"`. ```ts automations/github-workflow-job-timed-out.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub workflow job timed out", () => { const event = github.onWorkflowJobTimedOut() // Update the GitHub workflow in the CI dashboard. }) ``` Returns the timed-out job, its steps, runner, and timestamps. Requires Actions read permission. # On GitHub workflow job waiting Source: https://docs.automate.ax/reference/integrations/github/triggers/on-workflow-job-waiting Run when a GitHub Actions workflow job waits for protection. `github.onWorkflowJobWaiting` emits workflow jobs with `action: "waiting"`. ```ts automations/github-workflow-job-waiting.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("GitHub workflow job waiting", () => { const event = github.onWorkflowJobWaiting() // Update the GitHub workflow in the CI dashboard. }) ``` Waiting jobs are commonly blocked by environment protection or approval. Returns the job and associated deployment when GitHub supplies it. Requires Actions read permission. # On GitHub workflow run action required Source: https://docs.automate.ax/reference/integrations/github/triggers/on-workflow-run-action-required Start an automation when a GitHub Actions workflow run requires action. `github.onWorkflowRunActionRequired` emits workflow run events with `workflow_run.conclusion: "action_required"`. ```ts automations/github-workflow-run-action-required.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("workflow run action required", () => { const event = github.onWorkflowRunActionRequired() // Update the GitHub workflow in the CI dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `workflow_run.conclusion: "action_required"`. Requires Actions read permission. # On GitHub workflow run cancelled Source: https://docs.automate.ax/reference/integrations/github/triggers/on-workflow-run-cancelled Run an automation when someone cancels a GitHub workflow run. `github.onWorkflowRunCancelled` emits completed workflow runs whose conclusion is `"cancelled"`. ```ts automations/watch-cancelled-github-workflows.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch cancelled GitHub workflows", () => { const event = github.onWorkflowRunCancelled() // Update the GitHub workflow in the CI dashboard. }) ``` Optional static `account` defaults to the project binding. Returns `Signal` with `action: "completed"`, `workflow_run.conclusion: "cancelled"`, and GitHub's full payload. # On GitHub workflow run completed Source: https://docs.automate.ax/reference/integrations/github/triggers/on-workflow-run-completed Run an automation when a GitHub workflow run completes. `github.onWorkflowRunCompleted` emits every `"completed"` workflow run, regardless of conclusion. ```ts automations/watch-completed-github-workflows.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch completed GitHub workflows", () => { const event = github.onWorkflowRunCompleted() // Update the GitHub workflow in the CI dashboard. }) ``` Optional static `account` defaults to the project binding. Returns `Signal` with `action: "completed"`, GitHub's conclusion, and full run data. Successful, failed, and cancelled runs also emit their narrower triggers when subscribed. # On GitHub workflow run event Source: https://docs.automate.ax/reference/integrations/github/triggers/on-workflow-run-event Run an automation for any GitHub Actions workflow-run event. `github.onWorkflowRunEvent` exposes the broad GitHub `workflow_run` webhook family. Use a semantic trigger when you care about one lifecycle stage or conclusion. ```ts automations/watch-github-workflows.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch GitHub workflows", () => { const event = github.onWorkflowRunEvent() // Update the GitHub workflow in the CI dashboard. }) ``` Optional static `account` defaults to the project binding. Returns `Signal`, GitHub's requested, in-progress, and completed webhook union. The installation needs Actions read permission and repository access. Workflow job events belong to another webhook family and don't emit this trigger. # On GitHub workflow run failed Source: https://docs.automate.ax/reference/integrations/github/triggers/on-workflow-run-failed Run an automation when a GitHub workflow run fails. `github.onWorkflowRunFailed` emits completed workflow runs with conclusion `"failure"`. ```ts automations/watch-failed-github-workflows.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch failed GitHub workflows", () => { const event = github.onWorkflowRunFailed() // Update the GitHub workflow in the CI dashboard. }) ``` Optional static `account` defaults to the project binding. Returns `Signal` with `action: "completed"`, `workflow_run.conclusion: "failure"`, and GitHub's full payload. Other unsuccessful conclusions such as `timed_out`, `startup_failure`, or `action_required` emit the completed and broad triggers, not this one. # On GitHub workflow run neutral Source: https://docs.automate.ax/reference/integrations/github/triggers/on-workflow-run-neutral Start an automation when a GitHub Actions workflow run completes neutrally. `github.onWorkflowRunNeutral` emits workflow run events with `workflow_run.conclusion: "neutral"`. ```ts automations/github-workflow-run-neutral.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("workflow run neutral", () => { const event = github.onWorkflowRunNeutral() // Update the GitHub workflow in the CI dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `workflow_run.conclusion: "neutral"`. Requires Actions read permission. # On GitHub workflow run requested Source: https://docs.automate.ax/reference/integrations/github/triggers/on-workflow-run-requested Run an automation when GitHub requests a workflow run. `github.onWorkflowRunRequested` emits workflow-run events with action `"requested"`. ```ts automations/watch-requested-github-workflows.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch requested GitHub workflows", () => { const event = github.onWorkflowRunRequested() // Update the GitHub workflow in the CI dashboard. }) ``` Optional static `account` defaults to the project binding. Returns `Signal` with `action: "requested"` and GitHub's full workflow and run data. The installation needs Actions read permission. # On GitHub workflow run skipped Source: https://docs.automate.ax/reference/integrations/github/triggers/on-workflow-run-skipped Start an automation when a GitHub Actions workflow run is skipped. `github.onWorkflowRunSkipped` emits workflow run events with `workflow_run.conclusion: "skipped"`. ```ts automations/github-workflow-run-skipped.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("workflow run skipped", () => { const event = github.onWorkflowRunSkipped() // Update the GitHub workflow in the CI dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `workflow_run.conclusion: "skipped"`. Requires Actions read permission. # On GitHub workflow run stale Source: https://docs.automate.ax/reference/integrations/github/triggers/on-workflow-run-stale Start an automation when a GitHub Actions workflow run becomes stale. `github.onWorkflowRunStale` emits workflow run events with `workflow_run.conclusion: "stale"`. ```ts automations/github-workflow-run-stale.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("workflow run stale", () => { const event = github.onWorkflowRunStale() // Update the GitHub workflow in the CI dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `workflow_run.conclusion: "stale"`. Requires Actions read permission. # On GitHub workflow run started Source: https://docs.automate.ax/reference/integrations/github/triggers/on-workflow-run-started Run an automation when a GitHub Actions workflow run starts. `github.onWorkflowRunStarted` maps GitHub's `"in_progress"` action to “started.” ```ts automations/watch-started-github-workflows.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch started GitHub workflows", () => { const event = github.onWorkflowRunStarted() // Update the GitHub workflow in the CI dashboard. }) ``` Optional static `account` defaults to the project binding. Returns `Signal` with `action: "in_progress"` and GitHub's full workflow-run payload. The installation needs Actions read permission. # On GitHub workflow run startup failed Source: https://docs.automate.ax/reference/integrations/github/triggers/on-workflow-run-startup-failed Start an automation when a GitHub Actions workflow run fails during startup. `github.onWorkflowRunStartupFailed` emits workflow run events with `workflow_run.conclusion: "startup_failure"`. ```ts automations/github-workflow-run-startup-failed.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("workflow run startup failed", () => { const event = github.onWorkflowRunStartupFailed() // Update the GitHub workflow in the CI dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `workflow_run.conclusion: "startup_failure"`. Requires Actions read permission. # On GitHub workflow run succeeded Source: https://docs.automate.ax/reference/integrations/github/triggers/on-workflow-run-succeeded Run an automation when a GitHub workflow run succeeds. `github.onWorkflowRunSucceeded` emits completed workflow runs whose conclusion is `"success"`. ```ts automations/watch-successful-github-workflows.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("Watch successful GitHub workflows", () => { const event = github.onWorkflowRunSucceeded() // Update the GitHub workflow in the CI dashboard. }) ``` Optional static `account` defaults to the project binding. Returns `Signal` with `action: "completed"`, `workflow_run.conclusion: "success"`, and GitHub's full payload. # On GitHub workflow run timed out Source: https://docs.automate.ax/reference/integrations/github/triggers/on-workflow-run-timed-out Start an automation when a GitHub Actions workflow run times out. `github.onWorkflowRunTimedOut` emits workflow run events with `workflow_run.conclusion: "timed_out"`. ```ts automations/github-workflow-run-timed-out.automation.ts theme={null} import { automation } from "automate.ax" import { github } from "automate.ax/github" export default automation("workflow run timed out", () => { const event = github.onWorkflowRunTimedOut() // Update the GitHub workflow in the CI dashboard. }) ``` Optional static `account` defaults to the project binding. Returns the complete typed GitHub webhook payload narrowed to `workflow_run.conclusion: "timed_out"`. Requires Actions read permission. # Add label Source: https://docs.automate.ax/reference/integrations/gmail/actions/add-label Apply existing Gmail labels to messages. `gmail.addLabel` applies user or system labels to Gmail messages. System labels can change message state or placement. ## Example Apply the `Processed` label to each newly received message: ```ts theme={null} import { automation } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Label processed Gmail messages", () => { const email = gmail.onNewEmail() gmail.addLabel({ labels: ["Processed", "Reviewed"], messageIds: email.messageId, }) }) ``` Each label must already exist in the selected Gmail account. ## Inputs | Name | Type | Required | Description | | - | - | - | - | | `labels` | `string \| string[]` | Yes | One or more label display names or immutable Gmail label IDs. | | `messageIds` | `string \| string[]` | Yes | One or up to 1,000 immutable Gmail message IDs. | | Second argument: `{ account }` | `string \| Google account reference` | No | Google Account binding. Defaults to the project binding. | Inputs accept compatible signals. Label IDs must match exactly. The action matches display names after trimming surrounding whitespace and ignoring capitalization. If any label doesn't exist in the selected account, the action fails without modifying the messages. ## Output Returns a `Signal` with the modified message IDs in input order. > [!NOTE] > > This action updates messages, not entire threads, and does not create the > label. Prefer dedicated actions such as `gmail.archiveMessages`, > `gmail.markMessagesAsSpam`, and `gmail.markMessagesAsRead` when they express > the system-label change you need. # Archive Source: https://docs.automate.ax/reference/integrations/gmail/actions/archive Archive Gmail messages without deleting them. `gmail.archiveMessages` removes Gmail's `INBOX` label while keeping the messages available. ## Example Archive each new message after applying a record-keeping label: ```ts theme={null} import { automation } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Archive processed Gmail messages", () => { const email = gmail.onNewEmail() const labeledMessageIds = gmail.addLabel({ labels: ["Processed"], messageIds: email.messageId, }) gmail.archiveMessages({ messageIds: labeledMessageIds }) }) ``` ## Inputs | Name | Type | Required | Description | | - | - | - | - | | `messageIds` | `string \| string[]` | Yes | One or up to 1,000 immutable Gmail message IDs. | | Second argument: `{ account }` | `string \| Google account reference` | No | Google Account binding. Defaults to the project binding. | Inputs accept compatible signals. ## Output Returns a `Signal` with the modified message IDs in input order. Gmail doesn't have a separate Archive folder. Archiving removes `INBOX`. It doesn't trash or delete the messages, and other labels remain applied. The action changes the supplied messages rather than every message in their threads. # Create label Source: https://docs.automate.ax/reference/integrations/gmail/actions/create-label Create a Gmail label with optional visibility and color. `gmail.createLabel` creates a user-owned label and returns its metadata. ## Example ```ts automations/create-follow-up-label.automation.ts theme={null} import { automation } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Create a Gmail follow-up label", () => { gmail.createLabel({ color: { backgroundColor: "#0b804b", textColor: "#ffffff", }, name: "Automate.ax/Follow up", labelListVisibility: "labelShow", messageListVisibility: "show", }) }) ``` ## Inputs | Property | Type | Required | Description | | - | - | - | - | | `name` | `string` | Yes | Human-readable label name. Nested names can use Gmail's `/` convention. | | `labelListVisibility` | `"labelHide" \| "labelShow" \| "labelShowIfUnread"` | No | Visibility in Gmail's label list. | | `messageListVisibility` | `"hide" \| "show"` | No | Visibility beside messages in Gmail's message list. | | `color` | `{ backgroundColor: Gmail label color; textColor: Gmail label color }` | No | Hex colors from Gmail's supported label-color palette. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"google">` | No | Google Account binding. Defaults to the project binding. | Inputs accept compatible signals. ## Output Returns `Signal`: ```ts theme={null} interface GmailLabel { labelId: string name: string type?: "system" | "user" labelListVisibility?: "labelHide" | "labelShow" | "labelShowIfUnread" messageListVisibility?: "hide" | "show" color?: { backgroundColor: string textColor: string } messagesTotal?: number messagesUnread?: number threadsTotal?: number threadsUnread?: number } ``` Keep the returned `labelId` when later actions need an immutable identifier. A label's display name can change. > [!NOTE] > > Both color fields must use values from Gmail's [official label-color > palette](https://developers.google.com/workspace/gmail/api/reference/rest/v1/users.labels#Color). # Delete a draft Source: https://docs.automate.ax/reference/integrations/gmail/actions/delete-draft Permanently delete a Gmail draft. `gmail.deleteDraft` permanently removes an unsent draft. ## Example ```ts automations/delete-expired-draft.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Delete an expired Gmail draft", () => { onDashboardRun({ title: "Delete an expired Gmail draft" }) gmail.deleteDraft({ draftId: "r1234567890", }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `draftId` | `string` | Yes | None | Immutable Gmail draft ID to delete permanently. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"google">` | No | Project default | Connected Google Account that owns the draft. | Inputs accept compatible signals. > [!WARNING] > > Gmail does not provide a way to restore a draft deleted by this action. Pass > the `draftId` returned by a draft action, not the draft's `messageId`. The action fails if the draft was already sent or deleted, or belongs to a different connected account. ## Output Returns the deleted `draftId` as a `Signal`. # Delete label Source: https://docs.automate.ax/reference/integrations/gmail/actions/delete-label Permanently delete a Gmail label by name or ID. `gmail.deleteLabel` permanently deletes a user-owned label without deleting labeled messages or threads. Use an immutable label ID when possible. The action resolves display names case-insensitively against the connected mailbox. ## Example ```ts automations/delete-old-label.automation.ts theme={null} import { automation } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Delete an obsolete Gmail label", () => { gmail.deleteLabel({ label: "Automate.ax/Old", }) }) ``` ## Inputs | Property | Type | Required | Description | | - | - | - | - | | `label` | `string` | Yes | Gmail label display name or immutable label ID. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"google">` | No | Google Account binding. Defaults to the project binding. | Inputs accept compatible signals. ## Output Returns the deleted label's immutable ID as a `Signal`. > [!WARNING] > > Deletion cannot be undone. Gmail system labels such as `INBOX`, `SPAM`, and > `TRASH` cannot be deleted. The action fails before deletion when no label in the connected mailbox matches the supplied name or ID. # Draft email Source: https://docs.automate.ax/reference/integrations/gmail/actions/draft-email Create an unsent Gmail draft. `gmail.draftEmail` creates a message for review or later completion without sending it. ## Example ```ts automations/draft-follow-up.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Draft a customer follow-up", () => { onDashboardRun({ title: "Draft a customer follow-up" }) gmail.draftEmail({ to: "customer@example.com", subject: "Following up", text: "Hi! I drafted this message for review before it is sent.", }) }) ``` Recipients, subject, and body are all optional, so the action can create an incomplete draft. ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `to` | `Recipient \| Recipient[]` | No | None | Primary recipients. | | `subject` | `string` | No | `""` | Draft subject. | | `html` | `string` | No | None | HTML body. | | `text` | `string` | No | Derived from `html` | Plain-text body. | | `cc` | `Recipient \| Recipient[]` | No | None | Carbon-copy recipients. | | `bcc` | `Recipient \| Recipient[]` | No | None | Blind-copy recipients. | | `from` | `Recipient` | No | Gmail account address | Sender address or configured Gmail send-as alias. | | `replyTo` | `Recipient \| Recipient[]` | No | None | Addresses that should receive replies. | | `attachments` | `Attachment[]` | No | `[]` | Files and inline message parts. | | `headers` | `Record` | No | None | Additional `RFC 5322` headers. | | `priority` | `"high" \| "normal" \| "low"` | No | Not set | Importance encoded in standard message headers. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"google">` | No | Project default | Connected Google Account that owns the draft. | `Recipient` is an email string or `{ address: string; name?: string }`. `Attachment` is a `File` or an object containing `file` with optional `filename`, `contentId`, and `disposition: "attachment" | "inline"`. Inputs accept compatible signals. The draft carries an authenticated automation origin. If it's sent later, Gmail triggers don't wake the automation that created it, while other automations watching the mailbox still receive the event. ## Output Returns `Signal`: | Property | Type | Description | | - | - | - | | `draftId` | `string` | Immutable Gmail draft ID. Use this with draft actions. | | `messageId` | `string` | Immutable ID of the message stored inside the draft. | | `threadId` | `string` | Immutable Gmail thread ID containing the draft. | | `historyId` | `string \| undefined` | Most recent mailbox history record affecting the draft message, when supplied. | | `labelIds` | `string[]` | Labels applied to the draft message. | `draftId` and `messageId` are different identifiers. Pass `draftId` to `gmail.getDraft`, `gmail.updateDraft`, `gmail.sendDraft`, or `gmail.deleteDraft`. # Draft reply Source: https://docs.automate.ax/reference/integrations/gmail/actions/draft-reply Draft a reply in an existing Gmail conversation. `gmail.draftReply` derives a reply's recipient, subject, and conversation headers from a Gmail message and saves it in the same thread. ## Example ```ts automations/draft-inbox-reply.automation.ts theme={null} import { automation } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Draft replies to new email", () => { const email = gmail.onNewEmail() gmail.draftReply({ messageId: email.messageId, text: "Thanks for your message. A teammate will review this reply.", }) }) ``` The `messageId` must identify the message you want to answer, not merely another message in the same thread. ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `messageId` | `string` | Yes | None | Immutable Gmail ID of the message receiving the reply. | | `replyAll` | `boolean` | No | `false` | Include the original To and Cc recipients. Omit the connected account and primary reply address. | | `html` | `string` | No | None | HTML reply body. | | `text` | `string` | No | Derived from `html` | Plain-text reply body. | | `to` | `Recipient \| Recipient[]` | No | None | Additional primary recipients appended to the derived recipient. | | `cc` | `Recipient \| Recipient[]` | No | None | Additional carbon-copy recipients. | | `bcc` | `Recipient \| Recipient[]` | No | None | Additional blind-copy recipients. | | `from` | `Recipient` | No | Gmail account address | Sender address or configured Gmail send-as alias. | | `replyTo` | `Recipient \| Recipient[]` | No | None | Addresses that should receive replies to this draft. | | `attachments` | `Attachment[]` | No | `[]` | Files and inline message parts attached to the reply. | | `headers` | `Record` | No | None | Additional `RFC 5322` headers. | | `priority` | `"high" \| "normal" \| "low"` | No | Not set | Importance encoded in standard message headers. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"google">` | No | Project default | Connected Google Account that owns the draft. | `Recipient` is an email string or `{ address: string; name?: string }`. `Attachment` is a `File` or an object containing `file` with optional `filename`, `contentId`, and `disposition: "attachment" | "inline"`. Inputs accept compatible signals. > [!WARNING] > > `replyAll: true` may add every original To and Cc recipient. Review the draft > before sending when the conversation contains sensitive recipients. Gmail must return the source message's thread ID, subject, standard Message-ID, and either `Reply-To` or `From` header. The action fails if those reply headers are missing. The draft carries an authenticated automation origin. If it's sent later, Gmail triggers don't wake the automation that created it, while other automations watching the mailbox still receive the event. ## Output Returns `Signal`: | Property | Type | Description | | - | - | - | | `draftId` | `string` | Immutable Gmail draft ID. Use this with draft actions. | | `messageId` | `string` | Immutable ID of the reply message stored in the draft. | | `threadId` | `string` | Gmail thread containing the original message and reply draft. | | `historyId` | `string \| undefined` | Most recent mailbox history record affecting the draft message, when supplied. | | `labelIds` | `string[]` | Labels applied to the draft message. | # Forward a message Source: https://docs.automate.ax/reference/integrations/gmail/actions/forward Forward a Gmail message with an optional introduction and attachments. `gmail.forwardMessage` sends a message to new recipients, builds a forwarded-message block from its headers, and preserves attachments by default. ## Example ```ts automations/forward-invoices.automation.ts theme={null} import { automation } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Forward new invoices", () => { const email = gmail.onNewEmail() gmail.forwardMessage({ messageId: email.messageId, to: "accounting@example.com", text: "A new invoice arrived in the shared mailbox.", }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `messageId` | `string` | Yes | None | Immutable Gmail ID of the message to forward. | | `to` | `Recipient \| Recipient[]` | Yes | None | One or more primary recipients. | | `subject` | `string` | No | Original subject prefixed with `Fwd: ` | Subject override. An existing exact `Fwd:` prefix isn't repeated. | | `html` | `string` | No | None | HTML introduction placed before the forwarded message. | | `text` | `string` | No | Derived from `html` | Plain-text introduction placed before the forwarded message. | | `includeAttachments` | `boolean` | No | `true` | Preserve the original message's attachments. | | `attachments` | `Attachment[]` | No | `[]` | Additional files and inline message parts. | | `cc` | `Recipient \| Recipient[]` | No | None | Carbon-copy recipients. | | `bcc` | `Recipient \| Recipient[]` | No | None | Blind-copy recipients. | | `from` | `Recipient` | No | Gmail account address | Sender address or configured Gmail send-as alias. | | `replyTo` | `Recipient \| Recipient[]` | No | None | Addresses that should receive replies. | | `headers` | `Record` | No | None | Additional `RFC 5322` headers. | | `priority` | `"high" \| "normal" \| "low"` | No | Not set | Importance encoded in standard message headers. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"google">` | No | Project default | Connected Google Account that reads and sends the message. | `Recipient` is an email string or `{ address: string; name?: string }`. `Attachment` is a `File` or an object containing `file` with optional `filename`, `contentId`, and `disposition: "attachment" | "inline"`. Inputs accept compatible signals. > [!NOTE] > > Preserving original attachments requires the automation to download and upload > those files. Set `includeAttachments: false` when you only need the message > content, especially for large messages. The action fails if Gmail doesn't return the source message's raw content. The forwarded message carries an authenticated automation origin. Gmail triggers don't wake the automation that sent it, while other automations watching the mailbox still receive the event. ## Output Returns `Signal`: | Property | Type | Description | | - | - | - | | `messageId` | `string` | Immutable Gmail ID of the forwarded message. | | `threadId` | `string` | Immutable Gmail thread ID assigned to the forwarded message. | | `historyId` | `string \| undefined` | Most recent mailbox history record affecting the message, when supplied. | | `labelIds` | `string[]` | Labels applied to the forwarded message. | # Get a draft Source: https://docs.automate.ax/reference/integrations/gmail/actions/get-draft Get a Gmail draft with its parsed message and attachments. `gmail.getDraft` returns a draft with its parsed message for review, update, or sending. ## Example ```ts automations/load-draft.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Load a Gmail draft", () => { onDashboardRun({ title: "Load a Gmail draft" }) gmail.getDraft({ draftId: "r1234567890", }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `draftId` | `string` | Yes | None | Immutable Gmail draft ID. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"google">` | No | Project default | Connected Google Account that owns the draft. | Inputs accept compatible signals. Pass the `draftId` returned by `gmail.draftEmail`, `gmail.draftReply`, `gmail.searchDrafts`, or `gmail.updateDraft`. A draft's `messageId` isn't accepted here. The action fails if Gmail returns an incomplete draft or message. ## Output Returns `Signal`: | Property | Type | Description | | - | - | - | | `draftId` | `string` | Immutable Gmail draft ID. | | `message` | `GmailMessage` | Fully parsed message stored inside the draft. | ### Message | Property | Type | Description | | - | - | - | | `messageId` | `string` | Immutable Gmail message ID. | | `threadId` | `string` | Immutable Gmail thread ID containing the draft. | | `historyId` | `string \| undefined` | Most recent mailbox history record affecting the message, when supplied. | | `labelIds` | `string[]` | Gmail system and user label IDs applied to the message. | | `subject` | `string` | Decoded message subject. Empty when the draft has no subject. | | `text` | `string \| undefined` | Plain-text body, derived from HTML when no text alternative exists. | | `html` | `string \| undefined` | HTML body, when present. | | `from` | `Mailbox \| undefined` | Parsed From address. | | `sender` | `Mailbox \| undefined` | `Sender` header when distinct from `From`. | | `to` | `Mailbox[]` | Primary recipients. | | `cc` | `Mailbox[]` | Carbon-copy recipients. | | `bcc` | `Mailbox[]` | Blind-copy recipients retained in the raw draft, when available. | | `replyTo` | `Mailbox[]` | Addresses from the `Reply-To` header. | | `deliveredTo` | `string \| undefined` | Address recorded by Delivered-To. | | `returnPath` | `string \| undefined` | Address recorded by Return-Path. | | `headers` | `MessageHeader[]` | Decoded `RFC 5322` headers with duplicates and original name casing preserved. | | `rfc822MessageId` | `string \| undefined` | `RFC 5322` Message-ID from the message headers. | | `inReplyTo` | `string \| undefined` | Message-ID of the message this draft replies to. | | `references` | `string[]` | Message-IDs in the conversation ancestry. | | `receivedAt` | `Date \| null` | Gmail mailbox time. `null` when Gmail supplies none. | | `sentAt` | `Date \| undefined` | Date from the message headers when valid. | | `sizeEstimate` | `number \| undefined` | Estimated raw message size in bytes. | | `snippet` | `string \| undefined` | Short preview generated by Gmail. | | `attachments` | `GmailAttachment[]` | Parsed attachments and inline message parts. | `Mailbox` is `{ address: string; name?: string }`. `MessageHeader` is `{ name: string; value: string }`. Each `GmailAttachment` contains: | Property | Type | Description | | - | - | - | | `file` | `File` | Parsed attachment contents and metadata. | | `filename` | `string` | Filename presented by the sender. | | `mimeType` | `string` | Media type. | | `disposition` | `"attachment" \| "inline" \| undefined` | How the message presents the part. | | `contentId` | `string \| undefined` | Content-ID referenced by related HTML. | | `description` | `string \| undefined` | Human-readable part description, when present. | | `related` | `boolean` | Whether the attachment belongs to a multipart/related body. | # Get message Source: https://docs.automate.ax/reference/integrations/gmail/actions/get-message Get a Gmail message with its headers, bodies, labels, and attachments. `gmail.getMessage` returns a complete message by immutable Gmail message ID. Attachments are always downloaded and returned as `File` objects. If you only need identifiers, use [Search messages](/reference/integrations/gmail/actions/search-messages) instead. ## Example ```ts automations/read-message.automation.ts theme={null} import { automation } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Read a Gmail message", () => { gmail.getMessage({ messageId: "18f2c7a9b4d12345", }) }) ``` ## Inputs | Property | Type | Required | Description | | - | - | - | - | | `messageId` | `string` | Yes | Immutable Gmail message ID. This isn't the `Message-ID` header defined by `RFC 5322`. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"google">` | No | Google Account binding. Defaults to the project binding. | Inputs accept compatible signals. ## Output Returns `Signal`: ```ts theme={null} interface Message { messageId: string threadId: string historyId?: string labelIds: string[] attachments: Attachment[] bcc: Mailbox[] cc: Mailbox[] deliveredTo?: string from?: Mailbox headers: { name: string; value: string }[] html?: string inReplyTo?: string receivedAt: Date | null references: string[] replyTo: Mailbox[] returnPath?: string rfc822MessageId?: string sender?: Mailbox sentAt?: Date sizeEstimate?: number snippet?: string subject: string text?: string to: Mailbox[] } interface Mailbox { address: string name?: string } interface Attachment { contentId?: string description?: string disposition?: "attachment" | "inline" file: File filename: string mimeType: string related: boolean } ``` Automate.ax derives `text` from `html` when the source message has no plain-text alternative. `receivedAt` is Gmail's mailbox timestamp. `sentAt` comes from the sender-supplied `Date` header. > [!NOTE] > > Keep `messageId` and `rfc822MessageId` separate. Gmail actions expect the > immutable Gmail `messageId`; `rfc822MessageId` is the value from the email's > `Message-ID` header. # Get messages Source: https://docs.automate.ax/reference/integrations/gmail/actions/get-messages Get and parse up to 100 Gmail messages. `gmail.getMessages` returns complete messages for up to 100 immutable Gmail message IDs. The action fetches messages concurrently and returns them in the same order as `messageIds`. It returns every attachment as a `File`. ## Example ```ts automations/read-messages.automation.ts theme={null} import { automation } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Read Gmail messages", () => { gmail.getMessages({ messageIds: ["18f2c7a9b4d12345", "18f2c7a9b4d67890"], }) }) ``` ## Inputs | Property | Type | Required | Description | | - | - | - | - | | `messageIds` | `string[]` | Yes | One to 100 immutable Gmail message IDs. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"google">` | No | Google Account binding. Defaults to the project binding. | Inputs accept compatible signals. Limit or partition searches with more than 100 matches before passing their IDs here. ## Output Returns `Signal`. Each message contains: ```ts theme={null} interface Message { messageId: string threadId: string historyId?: string labelIds: string[] attachments: Attachment[] bcc: Mailbox[] cc: Mailbox[] deliveredTo?: string from?: Mailbox headers: { name: string; value: string }[] html?: string inReplyTo?: string receivedAt: Date | null references: string[] replyTo: Mailbox[] returnPath?: string rfc822MessageId?: string sender?: Mailbox sentAt?: Date sizeEstimate?: number snippet?: string subject: string text?: string to: Mailbox[] } interface Mailbox { address: string name?: string } interface Attachment { contentId?: string description?: string disposition?: "attachment" | "inline" file: File filename: string mimeType: string related: boolean } ``` The action fails if Gmail can't retrieve any requested message, so use IDs from the same connected mailbox. # Get profile Source: https://docs.automate.ax/reference/integrations/gmail/actions/get-profile Get the connected Gmail address and mailbox totals. `gmail.getProfile` returns the connected account's address and mailbox-wide message and thread totals. ## Example ```ts automations/get-gmail-profile.automation.ts theme={null} import { automation } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Get Gmail profile", () => { gmail.getProfile() }) ``` ## Inputs | Property | Type | Required | Description | | - | - | - | - | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"google">` | No | Google Account binding. Defaults to the project binding. | Second argument `{ account }` accepts a compatible signal. ## Output Returns `Signal`: ```ts theme={null} interface GmailProfile { emailAddress: string historyId?: string messagesTotal?: number threadsTotal?: number } ``` | Property | Description | | - | - | | `emailAddress` | Primary email address of the authenticated Gmail account. | | `historyId` | Current Gmail mailbox-history record ID, when supplied by Gmail. | | `messagesTotal` | Total number of messages in the mailbox, when supplied by Gmail. | | `threadsTotal` | Total number of threads in the mailbox, when supplied by Gmail. | The totals describe the entire mailbox. They're not counts for a search query or label. # Get raw message Source: https://docs.automate.ax/reference/integrations/gmail/actions/get-raw-message Get a Gmail message's base64url-encoded Internet Message Format source. `gmail.getRawMessage` returns Gmail's raw `RFC 5322` source for protocols, signature verification, or specialized parsing. Most automations should use [Get message](/reference/integrations/gmail/actions/get-message). ## Example ```ts automations/get-raw-message.automation.ts theme={null} import { automation } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Get raw Gmail source", () => { gmail.getRawMessage({ messageId: "18f2c7a9b4d12345", }) }) ``` ## Inputs | Property | Type | Required | Description | | - | - | - | - | | `messageId` | `string` | Yes | Immutable Gmail message ID. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"google">` | No | Google Account binding. Defaults to the project binding. | Inputs accept compatible signals. ## Output Returns the base64url-encoded `RFC 5322` message as a `Signal`. Decode it before using a parser that expects raw bytes or text. ```ts theme={null} const source = Buffer.from(encodedMessage, "base64url") ``` > [!WARNING] > > The output can contain message bodies, recipient data, and attachment > contents. Treat it as sensitive mailbox data. # Get thread Source: https://docs.automate.ax/reference/integrations/gmail/actions/get-thread Get a Gmail thread with every message parsed. `gmail.getThread` returns a conversation with every message parsed. Pass the `threadId` returned by a message, trigger, or [thread search](/reference/integrations/gmail/actions/search-threads). A thread ID isn't interchangeable with a message ID. ## Example ```ts automations/read-thread.automation.ts theme={null} import { automation } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Read a Gmail thread", () => { gmail.getThread({ threadId: "18f2c7a9b4d12345", }) }) ``` ## Inputs | Property | Type | Required | Description | | - | - | - | - | | `threadId` | `string` | Yes | Immutable Gmail thread ID. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"google">` | No | Google Account binding. Defaults to the project binding. | Inputs accept compatible signals. ## Output Returns `Signal`: ```ts theme={null} interface GmailThread { threadId: string historyId?: string messages: Message[] } interface Message { messageId: string threadId: string historyId?: string labelIds: string[] attachments: Attachment[] bcc: Mailbox[] cc: Mailbox[] deliveredTo?: string from?: Mailbox headers: { name: string; value: string }[] html?: string inReplyTo?: string receivedAt: Date | null references: string[] replyTo: Mailbox[] returnPath?: string rfc822MessageId?: string sender?: Mailbox sentAt?: Date sizeEstimate?: number snippet?: string subject: string text?: string to: Mailbox[] } interface Mailbox { address: string name?: string } interface Attachment { contentId?: string description?: string disposition?: "attachment" | "inline" file: File filename: string mimeType: string related: boolean } ``` `messages` follows Gmail's returned message order. The action downloads attachments for every message as `File` objects. # Has label Source: https://docs.automate.ax/reference/integrations/gmail/actions/has-label Check whether a Gmail message has a label. `gmail.checkLabel` reports whether a message has an existing user or system label. ## Example Archive new messages that already carry the `Handled` label: ```ts theme={null} import { automation, branch } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Archive handled Gmail messages", () => { const email = gmail.onNewEmail() const handled = gmail.checkLabel({ label: "Handled", messageId: email.messageId, }) branch(handled, () => { gmail.archiveMessages({ messageIds: email.messageId }) }) }) ``` ## Inputs | Name | Type | Required | Description | | - | - | - | - | | `label` | `string` | Yes | Existing label display name or immutable Gmail label ID. | | `messageId` | `string` | Yes | Immutable Gmail message ID to inspect. | | Second argument: `{ account }` | `string \| Google account reference` | No | Google Account binding. Defaults to the project binding. | Inputs accept compatible signals. Label IDs must match exactly. The action matches display names after trimming surrounding whitespace and ignoring capitalization. ## Output Returns `Signal`: `true` when the message has the resolved label and `false` when that label exists but is absent. > [!WARNING] > > A missing label is an error, not a `false` result. Labels belong to a specific > Gmail account, so make sure `label`, `messageId`, and `account` refer to the > same mailbox. # Is important Source: https://docs.automate.ax/reference/integrations/gmail/actions/is-important Check whether Gmail marks a message important. `gmail.checkWhetherMessageIsImportant` checks whether a message has Gmail's `IMPORTANT` label. ## Example Remove the importance marker from newly received messages that Gmail considers important: ```ts theme={null} import { automation, branch } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Clear Gmail importance markers", () => { const email = gmail.onNewEmail() const important = gmail.checkWhetherMessageIsImportant({ messageId: email.messageId, }) branch(important, () => { gmail.unmarkMessagesAsImportant({ messageIds: email.messageId }) }) }) ``` ## Inputs | Name | Type | Required | Description | | - | - | - | - | | `messageId` | `string` | Yes | Immutable Gmail message ID to inspect. | | Second argument: `{ account }` | `string \| Google account reference` | No | Google Account binding. Defaults to the project binding. | Inputs accept compatible signals. ## Output Returns `Signal` indicating whether the message has `IMPORTANT`. Importance is message-level. Gmail can add or remove this label through its own importance classification, independently of your automation. # Check starred status Source: https://docs.automate.ax/reference/integrations/gmail/actions/is-starred Check whether Gmail marks a message as starred. `gmail.checkWhetherMessageIsStarred` checks whether a message has Gmail's `STARRED` label. ## Example Remove the star from newly received messages that are already starred: ```ts theme={null} import { automation, branch } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Clear stars from new Gmail messages", () => { const email = gmail.onNewEmail() const starred = gmail.checkWhetherMessageIsStarred({ messageId: email.messageId, }) branch(starred, () => { gmail.unstarMessages({ messageIds: email.messageId }) }) }) ``` ## Inputs | Name | Type | Required | Description | | - | - | - | - | | `messageId` | `string` | Yes | Immutable Gmail message ID to inspect. | | Second argument: `{ account }` | `string \| Google account reference` | No | Google Account binding. Defaults to the project binding. | Inputs accept compatible signals. ## Output Returns `Signal` indicating whether the message has `STARRED`. This checks Gmail's `STARRED` state but doesn't distinguish the visual star styles configured in Gmail. # Is unread Source: https://docs.automate.ax/reference/integrations/gmail/actions/is-unread Check whether Gmail marks a message unread. `gmail.checkWhetherMessageIsUnread` checks whether a message has Gmail's `UNREAD` label. ## Example Mark each newly received message as read only if it remains unread when the action runs: ```ts theme={null} import { automation, branch } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Read new Gmail messages", () => { const email = gmail.onNewEmail() const unread = gmail.checkWhetherMessageIsUnread({ messageId: email.messageId, }) branch(unread, () => { gmail.markMessagesAsRead({ messageIds: email.messageId }) }) }) ``` ## Inputs | Name | Type | Required | Description | | - | - | - | - | | `messageId` | `string` | Yes | Immutable Gmail message ID to inspect. | | Second argument: `{ account }` | `string \| Google account reference` | No | Google Account binding. Defaults to the project binding. | Inputs accept compatible signals. ## Output Returns `Signal` indicating whether the message has `UNREAD`. Read state is message-level. In a conversation, other messages in the same thread can have a different state. # List labels Source: https://docs.automate.ax/reference/integrations/gmail/actions/list-labels List Gmail system and user labels with their metadata. `gmail.listLabels` returns every label in the connected mailbox, including immutable IDs for later actions. ## Example ```ts automations/list-gmail-labels.automation.ts theme={null} import { automation } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("List Gmail labels", () => { gmail.listLabels() }) ``` ## Inputs | Property | Type | Required | Description | | - | - | - | - | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"google">` | No | Google Account binding. Defaults to the project binding. | Second argument `{ account }` accepts a compatible signal. ## Output Returns `Signal`. Each label contains: ```ts theme={null} interface GmailLabel { labelId: string name: string type?: "system" | "user" labelListVisibility?: "labelHide" | "labelShow" | "labelShowIfUnread" messageListVisibility?: "hide" | "show" color?: { backgroundColor: string textColor: string } messagesTotal?: number messagesUnread?: number threadsTotal?: number threadsUnread?: number } ``` Gmail doesn't supply every optional field for every label. For example, system labels and user labels can expose different visibility, color, and count metadata. > [!NOTE] > > Use `labelId` for durable references and for `labelIds` search filters. > Display names are intended for people and can be renamed. # Mark as important Source: https://docs.automate.ax/reference/integrations/gmail/actions/mark-as-important Mark Gmail messages important. `gmail.markMessagesAsImportant` adds Gmail's `IMPORTANT` label to messages, placing them in the Important view. ## Example Mark newly received messages from a billing system as important: ```ts theme={null} import { automation, filter } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Prioritize billing messages", () => { const email = filter( gmail.onNewEmail(), (message) => message.from?.address === "billing@example.com", ) gmail.markMessagesAsImportant({ messageIds: email.messageId }) }) ``` ## Inputs | Name | Type | Required | Description | | - | - | - | - | | `messageIds` | `string \| string[]` | Yes | One or up to 1,000 immutable Gmail message IDs. | | Second argument: `{ account }` | `string \| Google account reference` | No | Google Account binding. Defaults to the project binding. | Inputs accept compatible signals. ## Output Returns a `Signal` with the modified message IDs in input order. Gmail represents importance with the `IMPORTANT` system label. Gmail's own importance classifier can change this state later, and the action updates only the supplied messages, not every message in their threads. # Mark as not spam Source: https://docs.automate.ax/reference/integrations/gmail/actions/mark-as-not-spam Move Gmail messages from Spam to the inbox. `gmail.markMessagesAsNotSpam` removes `SPAM` and adds `INBOX` in one request. ## Example Restore up to 100 messages from a trusted sender: ```ts theme={null} import { automation, branch } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Restore trusted Gmail messages", () => { const messages = gmail.searchMessages({ includeSpamTrash: true, limit: 100, query: "in:spam from:billing@example.com", }) branch( messages.length.transform((length) => length > 0), () => { gmail.markMessagesAsNotSpam({ messageIds: messages.transform((results) => results.map((message) => message.messageId), ), }) }, ) }) ``` ## Inputs | Name | Type | Required | Description | | - | - | - | - | | `messageIds` | `string \| string[]` | Yes | One or up to 1,000 immutable Gmail message IDs. | | Second argument: `{ account }` | `string \| Google account reference` | No | Google Account binding. Defaults to the project binding. | Inputs accept compatible signals. ## Output Returns a `Signal` with the modified message IDs in input order. This action requests both state changes together: remove `SPAM` and add `INBOX`. Other system and user labels remain untouched. It operates on individual messages, even when Gmail displays them as a conversation. # Mark as read Source: https://docs.automate.ax/reference/integrations/gmail/actions/mark-as-read Mark Gmail messages as read. `gmail.markMessagesAsRead` removes Gmail's `UNREAD` label from messages. ## Example Mark each newly received automated receipt as read: ```ts theme={null} import { automation, filter } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Read automated receipts", () => { const receipt = filter(gmail.onNewEmail(), (message) => message.subject.toLowerCase().includes("receipt"), ) gmail.markMessagesAsRead({ messageIds: receipt.messageId }) }) ``` ## Inputs | Name | Type | Required | Description | | - | - | - | - | | `messageIds` | `string \| string[]` | Yes | One or up to 1,000 immutable Gmail message IDs. | | Second argument: `{ account }` | `string \| Google account reference` | No | Google Account binding. Defaults to the project binding. | Inputs accept compatible signals. ## Output Returns a `Signal` with the modified message IDs in input order. Gmail stores read state per message using `UNREAD`. Marking one message as read doesn't necessarily mark the other messages in its thread as read. # Mark as spam Source: https://docs.automate.ax/reference/integrations/gmail/actions/mark-as-spam Move Gmail messages to Spam. `gmail.markMessagesAsSpam` adds `SPAM` and removes `INBOX` in one request. ## Example Move newly received messages with a known unwanted subject marker to Spam: ```ts theme={null} import { automation, filter } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Move unwanted Gmail messages to Spam", () => { const unwanted = filter(gmail.onNewEmail(), (message) => message.subject.includes("[UNWANTED]"), ) gmail.markMessagesAsSpam({ messageIds: unwanted.messageId }) }) ``` ## Inputs | Name | Type | Required | Description | | - | - | - | - | | `messageIds` | `string \| string[]` | Yes | One or up to 1,000 immutable Gmail message IDs. | | Second argument: `{ account }` | `string \| Google account reference` | No | Google Account binding. Defaults to the project binding. | Inputs accept compatible signals. ## Output Returns a `Signal` with the modified message IDs in input order. This action requests both state changes together: add `SPAM` and remove `INBOX`. It doesn't delete the messages or remove unrelated labels. Use `gmail.markMessagesAsNotSpam` to reverse these two mailbox changes. # Mark as unread Source: https://docs.automate.ax/reference/integrations/gmail/actions/mark-as-unread Mark Gmail messages as unread. `gmail.markMessagesAsUnread` adds Gmail's `UNREAD` label to messages. ## Example Mark up to 100 read messages with the `Needs review` label as unread: ```ts theme={null} import { automation, branch } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Return Gmail messages for review", () => { const messages = gmail.searchMessages({ limit: 100, query: 'label:"Needs review" is:read', }) branch( messages.length.transform((length) => length > 0), () => { gmail.markMessagesAsUnread({ messageIds: messages.transform((results) => results.map((message) => message.messageId), ), }) }, ) }) ``` ## Inputs | Name | Type | Required | Description | | - | - | - | - | | `messageIds` | `string \| string[]` | Yes | One or up to 1,000 immutable Gmail message IDs. | | Second argument: `{ account }` | `string \| Google account reference` | No | Google Account binding. Defaults to the project binding. | Inputs accept compatible signals. ## Output Returns a `Signal` with the modified message IDs in input order. Gmail stores unread state per message. Adding `UNREAD` to one message can make its conversation appear unread in Gmail even though other messages in the thread remain read. # Modify labels Source: https://docs.automate.ax/reference/integrations/gmail/actions/modify-labels Add and remove Gmail labels in one request. `gmail.modifyLabels` atomically adds and removes labels across messages in one Gmail request. ## Example Move new messages from a `Triage` label to a `Processed` label: ```ts theme={null} import { automation } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Update Gmail workflow labels", () => { const email = gmail.onNewEmail() gmail.modifyLabels({ add: ["Processed"], messageIds: email.messageId, remove: ["Triage"], }) }) ``` Both labels must already exist in the selected Gmail account. ## Inputs | Name | Type | Required | Description | | - | - | - | - | | `add` | `string \| string[]` | No | Existing label display names or immutable IDs to add. | | `messageIds` | `string \| string[]` | Yes | One or up to 1,000 immutable Gmail message IDs. | | `remove` | `string \| string[]` | No | Existing label display names or immutable IDs to remove. | | Second argument: `{ account }` | `string \| Google account reference` | No | Google Account binding. Defaults to the project binding. | Provide at least one non-empty `add` or `remove` list. Inputs accept compatible signals. Label IDs must match exactly. The action matches display names after trimming surrounding whitespace and ignoring capitalization. You may mix names and IDs in either list. If the action can't resolve a requested label, it fails before modifying messages. ## Output Returns a `Signal` with the modified message IDs in input order. > [!NOTE] > > The action changes labels on individual messages. Supplying Gmail system > labels such as `INBOX`, `UNREAD`, or `STARRED` changes the corresponding Gmail > state. # Move to inbox Source: https://docs.automate.ax/reference/integrations/gmail/actions/move-to-inbox Move Gmail messages to the inbox. `gmail.moveMessagesToInbox` adds Gmail's `INBOX` label to messages. ## Example Return up to 100 archived messages with the `Needs review` label to the inbox: ```ts theme={null} import { automation, branch } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Return Gmail messages to the inbox", () => { const messages = gmail.searchMessages({ limit: 100, query: 'label:"Needs review" -in:inbox', }) branch( messages.length.transform((length) => length > 0), () => { gmail.moveMessagesToInbox({ messageIds: messages.transform((results) => results.map((message) => message.messageId), ), }) }, ) }) ``` ## Inputs | Name | Type | Required | Description | | - | - | - | - | | `messageIds` | `string \| string[]` | Yes | One or up to 1,000 immutable Gmail message IDs. | | Second argument: `{ account }` | `string \| Google account reference` | No | Google Account binding. Defaults to the project binding. | Inputs accept compatible signals. ## Output Returns a `Signal` with the modified message IDs in input order. This action only adds `INBOX`. It doesn't explicitly remove `SPAM` or restore a message from Trash. Use `gmail.markMessagesAsNotSpam` for Spam and `gmail.untrashMessages` for Trash. Other labels remain applied. # Remove label Source: https://docs.automate.ax/reference/integrations/gmail/actions/remove-label Remove existing Gmail labels from messages. `gmail.removeLabel` removes labels from messages without deleting the labels. ## Example Remove the `Triage` label from each newly received message: ```ts theme={null} import { automation } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Clear Gmail triage labels", () => { const email = gmail.onNewEmail() gmail.removeLabel({ labels: ["Triage", "Needs review"], messageIds: email.messageId, }) }) ``` Each label must exist in the selected Gmail account. ## Inputs | Name | Type | Required | Description | | - | - | - | - | | `labels` | `string \| string[]` | Yes | One or more label display names or immutable Gmail label IDs. | | `messageIds` | `string \| string[]` | Yes | One or up to 1,000 immutable Gmail message IDs. | | Second argument: `{ account }` | `string \| Google account reference` | No | Google Account binding. Defaults to the project binding. | Inputs accept compatible signals. Label IDs must match exactly. The action matches display names after trimming surrounding whitespace and ignoring capitalization. If any label doesn't exist in the selected account, the action fails without modifying the messages. ## Output Returns a `Signal` with the modified message IDs in input order. Removing a Gmail system label changes the corresponding state: for example, removing `INBOX` archives a message and removing `UNREAD` marks it as read. The action affects only the supplied messages. It doesn't affect the label resource or other messages in their threads. # Reply to a message Source: https://docs.automate.ax/reference/integrations/gmail/actions/reply Reply to a Gmail message. `gmail.replyToMessage` replies to a message in its conversation, using that message's recipient and conversation headers. ## Example ```ts automations/acknowledge-email.automation.ts theme={null} import { automation } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Acknowledge new email", () => { const email = gmail.onNewEmail() gmail.replyToMessage({ messageId: email.messageId, text: "Thanks for reaching out. We received your message.", }) }) ``` Gmail sends the reply to the source message's `Reply-To` address when present, otherwise to its `From` address. The action preserves the source subject and standard conversation headers automatically. ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `messageId` | `string` | Yes | None | Immutable Gmail ID of the message receiving the reply. | | `replyAll` | `boolean` | No | `false` | Include original To and Cc recipients. Omit the connected account and primary reply address. | | `html` | `string` | No | None | HTML reply body. | | `text` | `string` | No | Derived from `html` | Plain-text reply body. | | `to` | `Recipient \| Recipient[]` | No | None | Additional primary recipients appended to the derived recipient. | | `cc` | `Recipient \| Recipient[]` | No | None | Additional carbon-copy recipients. | | `bcc` | `Recipient \| Recipient[]` | No | None | Additional blind-copy recipients. | | `from` | `Recipient` | No | Gmail account address | Sender address or configured Gmail send-as alias. | | `replyTo` | `Recipient \| Recipient[]` | No | None | Addresses that should receive replies to the outgoing reply. | | `attachments` | `Attachment[]` | No | `[]` | Files and inline message parts attached to the reply. | | `headers` | `Record` | No | None | Additional `RFC 5322` headers. | | `priority` | `"high" \| "normal" \| "low"` | No | Not set | Importance encoded in standard message headers. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"google">` | No | Project default | Connected Google Account used to send the reply. | `Recipient` is an email string or `{ address: string; name?: string }`. `Attachment` is a `File` or an object containing `file` with optional `filename`, `contentId`, and `disposition: "attachment" | "inline"`. Inputs accept compatible signals. > [!WARNING] > > `replyAll: true` may notify every original To and Cc recipient. Leave it off > for a private reply. The action fails when the source message lacks a Gmail thread ID, subject, standard Message-ID, or both `Reply-To` and `From` headers. The reply carries an authenticated automation origin. Gmail triggers don't wake the automation that sent it, while other automations watching the mailbox still receive the event. ## Output Returns `Signal`: | Property | Type | Description | | - | - | - | | `messageId` | `string` | Immutable Gmail ID of the sent reply. | | `threadId` | `string` | Gmail thread containing the source message and reply. | | `historyId` | `string \| undefined` | Most recent mailbox history record affecting the reply, when supplied. | | `labelIds` | `string[]` | Labels applied to the sent reply. | # Reply to a thread Source: https://docs.automate.ax/reference/integrations/gmail/actions/reply-thread Reply to a Gmail thread's most recently received message. `gmail.replyToThread` replies to the most recently received message when you have a `threadId` instead of the exact message ID. ## Example ```ts automations/continue-conversation.automation.ts theme={null} import { automation } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Continue a Gmail conversation", () => { const email = gmail.onNewEmail() gmail.replyToThread({ threadId: email.threadId, text: "Thanks for the update. We will follow up shortly.", }) }) ``` The action ignores messages carrying Gmail's `SENT` label. This lets it target the most recently received message even after Gmail archives the conversation. ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `threadId` | `string` | Yes | None | Immutable Gmail ID of the thread receiving the reply. | | `replyAll` | `boolean` | No | `false` | Include original To and Cc recipients. Omit the connected account and primary reply address. | | `html` | `string` | No | None | HTML reply body. | | `text` | `string` | No | Derived from `html` | Plain-text reply body. | | `to` | `Recipient \| Recipient[]` | No | None | Additional primary recipients appended to the derived recipient. | | `cc` | `Recipient \| Recipient[]` | No | None | Additional carbon-copy recipients. | | `bcc` | `Recipient \| Recipient[]` | No | None | Additional blind-copy recipients. | | `from` | `Recipient` | No | Gmail account address | Sender address or configured Gmail send-as alias. | | `replyTo` | `Recipient \| Recipient[]` | No | None | Addresses that should receive replies to the outgoing reply. | | `attachments` | `Attachment[]` | No | `[]` | Files and inline message parts attached to the reply. | | `headers` | `Record` | No | None | Additional `RFC 5322` headers. | | `priority` | `"high" \| "normal" \| "low"` | No | Not set | Importance encoded in standard message headers. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"google">` | No | Project default | Connected Google Account used to send the reply. | `Recipient` is an email string or `{ address: string; name?: string }`. `Attachment` is a `File` or an object containing `file` with optional `filename`, `contentId`, and `disposition: "attachment" | "inline"`. Inputs accept compatible signals. > [!WARNING] > > `replyAll: true` may notify every To and Cc recipient on the selected message. The action fails if the thread contains no message without the `SENT` label. The selected message must also contain the headers required for a reply. The reply carries an authenticated automation origin. Gmail triggers don't wake the automation that sent it, while other automations watching the mailbox still receive the event. ## Output Returns `Signal`: | Property | Type | Description | | - | - | - | | `messageId` | `string` | Immutable Gmail ID of the sent reply. | | `threadId` | `string` | Gmail thread containing the reply. | | `historyId` | `string \| undefined` | Most recent mailbox history record affecting the reply, when supplied. | | `labelIds` | `string[]` | Labels applied to the sent reply. | # Search drafts Source: https://docs.automate.ax/reference/integrations/gmail/actions/search-drafts Find drafts with Gmail search syntax. `gmail.searchDrafts` returns draft and message IDs from the connected account using Gmail search-box syntax. ## Example ```ts automations/find-review-drafts.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Find drafts awaiting review", () => { onDashboardRun({ title: "Find drafts awaiting review" }) gmail.searchDrafts({ query: "to:customer@example.com subject:proposal", limit: 25, }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `query` | `string` | No | All drafts | Standard Gmail search-box query. | | `limit` | `number` | No | `100` | Maximum total results. Must be an integer from 1 through 10,000. | | `includeSpamTrash` | `boolean` | No | `false` | Allow drafts in Spam and Trash to match. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"google">` | No | Project default | Connected Google Account to search. | Inputs accept compatible signals. Automate.ax fetches additional Gmail pages internally until it reaches `limit` or Gmail has no more results. ## Output Returns `Signal`. Each item contains: | Property | Type | Description | | - | - | - | | `draftId` | `string` | Immutable Gmail draft ID. Use this with draft actions. | | `messageId` | `string` | Immutable ID of the message stored inside the draft. | | `threadId` | `string` | Gmail thread containing the draft. | | `historyId` | `string \| undefined` | Most recent mailbox history record affecting the draft message, when supplied. | | `labelIds` | `string[]` | Labels applied to the draft message. | Use `draftId`, not `messageId`, with `gmail.getDraft`, `gmail.updateDraft`, `gmail.sendDraft`, and `gmail.deleteDraft`. # Search messages Source: https://docs.automate.ax/reference/integrations/gmail/actions/search-messages Find message and thread IDs with Gmail search syntax. `gmail.searchMessages` returns only IDs, keeping broad mailbox searches lightweight. Use [Get message](/reference/integrations/gmail/actions/get-message) or [Get messages](/reference/integrations/gmail/actions/get-messages) for bodies, headers, or attachments. ## Example ```ts automations/find-unread-invoices.automation.ts theme={null} import { automation } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Find unread Gmail invoices", () => { gmail.searchMessages({ query: "is:unread subject:invoice has:attachment", limit: 25, }) }) ``` ## Inputs | Property | Type | Required | Default | Description | | - | - | - | - | - | | `query` | `string` | No | None | Query using Gmail search-box syntax, such as `from:billing@example.com newer_than:30d`. An omitted or empty query doesn't filter by query text. | | `labelIds` | `string[]` | No | None | Gmail label IDs that every returned message must carry. These are IDs, not display names. | | `includeSpamTrash` | `boolean` | No | `false` | Whether messages in Spam and Trash may match. | | `limit` | `number` | No | `100` | Maximum total results. Must be an integer from 1 to 10,000. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"google">` | No | Project default | Google Account binding to search. | Inputs accept compatible signals. ## Output Returns `Signal`: ```ts theme={null} interface MessageIdentifier { messageId: string threadId: string } ``` `messageId` identifies the individual email. `threadId` identifies the Gmail conversation containing it. Multiple results can share a `threadId`. The action fetches additional Gmail result pages internally until it reaches `limit` or exhausts the search. > [!NOTE] > > Test complex queries in Gmail's search box first. `labelIds` uses provider IDs > such as `INBOX` or IDs returned by [List > labels](/reference/integrations/gmail/actions/list-labels); label names belong > in `query`, for example `label:Receipts`. # Search threads Source: https://docs.automate.ax/reference/integrations/gmail/actions/search-threads Find thread IDs with Gmail search syntax. `gmail.searchThreads` returns each matching conversation once, even when several messages match the Gmail search query. The action returns identifiers only. Pass a result to [Get thread](/reference/integrations/gmail/actions/get-thread) to retrieve and parse every message in the conversation. ## Example ```ts automations/find-customer-threads.automation.ts theme={null} import { automation } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Find recent customer threads", () => { gmail.searchThreads({ query: "from:customer@example.com newer_than:90d", limit: 50, }) }) ``` ## Inputs | Property | Type | Required | Default | Description | | - | - | - | - | - | | `query` | `string` | No | None | Query using Gmail search-box syntax. An omitted or empty query doesn't filter by query text. | | `labelIds` | `string[]` | No | None | Gmail label IDs that every returned thread must carry. These are IDs, not display names. | | `includeSpamTrash` | `boolean` | No | `false` | Whether threads in Spam and Trash may match. | | `limit` | `number` | No | `100` | Maximum total results. Must be an integer from 1 to 10,000. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"google">` | No | Project default | Google Account binding to search. | Inputs accept compatible signals. ## Output Returns `Signal`: ```ts theme={null} interface ThreadIdentifier { threadId: string } ``` The action fetches additional Gmail result pages internally until it reaches `limit` or exhausts the search. > [!NOTE] > > Choose [Search > messages](/reference/integrations/gmail/actions/search-messages) when you need > a separate result for each matching email. Choose `gmail.searchThreads` when > you need one result per conversation. # Send a draft Source: https://docs.automate.ax/reference/integrations/gmail/actions/send-draft Send a Gmail draft by ID. `gmail.sendDraft` sends a draft created by `gmail.draftEmail`, `gmail.draftReply`, or a person. ## Example ```ts automations/send-approved-draft.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Send an approved Gmail draft", () => { onDashboardRun({ title: "Send an approved Gmail draft" }) gmail.sendDraft({ draftId: "r1234567890", }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `draftId` | `string` | Yes | None | Immutable Gmail draft ID to send. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"google">` | No | Project default | Connected Google Account that owns the draft. | Inputs accept compatible signals. Pass the `draftId` returned by `gmail.draftEmail`, `gmail.draftReply`, `gmail.getDraft`, `gmail.searchDrafts`, or `gmail.updateDraft`. A draft's `messageId` isn't accepted here. After Gmail sends the draft, that draft no longer exists as an editable draft. The sent draft carries an authenticated automation origin, including drafts originally created by a person. Gmail triggers don't wake the automation that sent it, while other automations watching the mailbox still receive the event. ## Output Returns `Signal`: | Property | Type | Description | | - | - | - | | `messageId` | `string` | Immutable Gmail ID of the sent message. | | `threadId` | `string` | Gmail thread containing the sent message. | | `historyId` | `string \| undefined` | Most recent mailbox history record affecting the sent message, when supplied. | | `labelIds` | `string[]` | Labels applied to the sent message. | The output describes the sent message, not the now-consumed draft. # Send email Source: https://docs.automate.ax/reference/integrations/gmail/actions/send-email Send a plain-text, Markdown, or HTML message through Gmail. `gmail.sendEmail` sends a message to known recipients. It can start a conversation or add a follow-up to an existing thread, including when nobody has replied yet. ## Example ```ts automations/send-report.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Send the weekly report", () => { onDashboardRun({ title: "Send the weekly report" }) gmail.sendEmail({ to: { address: "reader@example.com", name: "Report reader" }, subject: "Your weekly report", markdown: "# Weekly report\n\nThe report is **ready**.", }) }) ``` Provide at least one of `text`, `markdown`, or `html`. Automate.ax preserves supplied plain-text and HTML bodies. Markdown generates either missing alternative. Otherwise, HTML generates plain text, and plain text generates HTML. ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `to` | `Recipient \| Recipient[]` | Yes | None | One or more primary recipients. | | `subject` | `string` | Yes | None | Message subject. | | `threadId` | `string` | No | New conversation | Existing Gmail thread. Also supply its matching subject and `In-Reply-To` and `References` headers. | | `text` | `string` | One body required | Derived when omitted | Plain-text body. | | `markdown` | `string` | One body required | None | Markdown body used to generate missing alternatives. | | `html` | `string` | One body required | Derived when omitted | HTML body. | | `cc` | `Recipient \| Recipient[]` | No | None | Carbon-copy recipients. | | `bcc` | `Recipient \| Recipient[]` | No | None | Blind-copy recipients. | | `from` | `Recipient` | No | Gmail account address | Sender address or configured Gmail send-as alias. | | `replyTo` | `Recipient \| Recipient[]` | No | None | Addresses that should receive replies. | | `attachments` | `Attachment[]` | No | `[]` | Files and inline message parts. | | `headers` | `Record` | No | None | Additional `RFC 5322` headers. | | `priority` | `"high" \| "normal" \| "low"` | No | Not set | Importance encoded in standard message headers. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"google">` | No | Project default | Connected Google Account used to send the message. | `Recipient` is an email string or `{ address: string; name?: string }`. `Attachment` is a `File` or an object containing `file` with optional `filename`, `contentId`, and `disposition: "attachment" | "inline"`. Inputs accept compatible signals. > [!NOTE] > > Gmail may reject or replace a `from` address that is not configured as a > send-as alias on the connected account. The message carries an authenticated automation origin. Gmail triggers don't wake the automation that sent it, while other automations watching the mailbox still receive the event. ## Output Returns `Signal`: | Property | Type | Description | | - | - | - | | `messageId` | `string` | Immutable Gmail ID of the sent message. | | `threadId` | `string` | Immutable Gmail ID of its conversation. | | `historyId` | `string \| undefined` | Most recent mailbox history record affecting the message, when Gmail supplies it. | | `labelIds` | `string[]` | Gmail system and user label IDs applied to the message. | Keep `messageId` for actions that operate on one message and `threadId` for actions that operate on the conversation. For a follow-up, read the conversation with `gmail.getThread`. Pass its `threadId`, preserve the subject, and set `headers["In-Reply-To"]` to the preceding message's `rfc822MessageId`. Set `headers.References` to that message's `references` followed by its `rfc822MessageId`, joined with spaces. Keep `to` set to your intended recipients. These are [Gmail's threading requirements](https://developers.google.com/workspace/gmail/api/guides/threads#adding_drafts_and_messages_to_threads). # Star Source: https://docs.automate.ax/reference/integrations/gmail/actions/star Star Gmail messages. `gmail.starMessages` adds Gmail's `STARRED` label to messages, placing them in the Starred view. ## Example Star newly received messages from a high-priority sender: ```ts theme={null} import { automation, filter } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Star VIP Gmail messages", () => { const email = filter( gmail.onNewEmail(), (message) => message.from?.address === "vip@example.com", ) gmail.starMessages({ messageIds: email.messageId }) }) ``` ## Inputs | Name | Type | Required | Description | | - | - | - | - | | `messageIds` | `string \| string[]` | Yes | One or up to 1,000 immutable Gmail message IDs. | | Second argument: `{ account }` | `string \| Google account reference` | No | Google Account binding. Defaults to the project binding. | Inputs accept compatible signals. ## Output Returns a `Signal` with the modified message IDs in input order. The action applies Gmail's `STARRED` label to individual messages. It doesn't select among the visual star styles configured in Gmail. # Trash Source: https://docs.automate.ax/reference/integrations/gmail/actions/trash Move Gmail messages to Trash. `gmail.trashMessages` moves messages to Trash, where they remain recoverable while Gmail retains them. ## Example Trash newly received messages with a known test marker: ```ts theme={null} import { automation, filter } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Trash Gmail test messages", () => { const testMessage = filter(gmail.onNewEmail(), (message) => message.subject.includes("[TEST]"), ) gmail.trashMessages({ messageIds: testMessage.messageId }) }) ``` ## Inputs | Name | Type | Required | Description | | - | - | - | - | | `messageIds` | `string \| string[]` | Yes | One or up to 1,000 immutable Gmail message IDs. | | Second argument: `{ account }` | `string \| Google account reference` | No | Google Account binding. Defaults to the project binding. | Inputs accept compatible signals. ## Output Returns a `Signal>` with each message's updated metadata in input order. | Field | Type | Description | | - | - | - | | `messageId` | `string` | Immutable Gmail message ID. | | `threadId` | `string` | Immutable ID of the thread containing the message. | | `historyId` | `string \| undefined` | Most recent mailbox history record affecting the message, when Gmail supplies it. | | `labelIds` | `string[]` | Gmail system and user label IDs applied after the operation. | > [!WARNING] > > Trashing is not permanent deletion, but Gmail can permanently delete retained > Trash contents. `gmail.untrashMessages` can restore a message only while Gmail > still has it. The action operates on individual message IDs. Trashing one message doesn't explicitly trash every message in its thread. # Unmark as important Source: https://docs.automate.ax/reference/integrations/gmail/actions/unmark-as-important Remove Gmail's Important marker from messages. `gmail.unmarkMessagesAsImportant` removes Gmail's `IMPORTANT` label from messages. ## Example Clear the importance marker from newly received automated reports: ```ts theme={null} import { automation, filter } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Deprioritize automated reports", () => { const report = filter(gmail.onNewEmail(), (message) => message.subject.startsWith("Automated report:"), ) gmail.unmarkMessagesAsImportant({ messageIds: report.messageId }) }) ``` ## Inputs | Name | Type | Required | Description | | - | - | - | - | | `messageIds` | `string \| string[]` | Yes | One or up to 1,000 immutable Gmail message IDs. | | Second argument: `{ account }` | `string \| Google account reference` | No | Google Account binding. Defaults to the project binding. | Inputs accept compatible signals. ## Output Returns a `Signal` with the modified message IDs in input order. Gmail's own importance classifier can add `IMPORTANT` again later. This action changes only the supplied messages, not the other messages in their threads. # Unstar Source: https://docs.automate.ax/reference/integrations/gmail/actions/unstar Remove Gmail's star from messages. `gmail.unstarMessages` removes Gmail's `STARRED` label from messages. ## Example Remove the star from messages after applying a `Completed` label: ```ts theme={null} import { automation } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Complete starred Gmail work", () => { const email = gmail.onNewEmail() const completedMessageIds = gmail.addLabel({ labels: ["Completed"], messageIds: email.messageId, }) gmail.unstarMessages({ messageIds: completedMessageIds }) }) ``` The `Completed` label must already exist in the selected Gmail account. ## Inputs | Name | Type | Required | Description | | - | - | - | - | | `messageIds` | `string \| string[]` | Yes | One or up to 1,000 immutable Gmail message IDs. | | Second argument: `{ account }` | `string \| Google account reference` | No | Google Account binding. Defaults to the project binding. | Inputs accept compatible signals. ## Output Returns a `Signal` with the modified message IDs in input order. This removes the standard `STARRED` label from individual messages. It doesn't change unrelated labels or other messages in the same thread. # Untrash Source: https://docs.automate.ax/reference/integrations/gmail/actions/untrash Restore Gmail messages from Trash. `gmail.untrashMessages` restores messages still present in Trash. ## Example Restore up to 100 trashed messages from a trusted sender: ```ts theme={null} import { automation, branch } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Restore trusted trashed Gmail messages", () => { const messages = gmail.searchMessages({ includeSpamTrash: true, limit: 100, query: "in:trash from:billing@example.com", }) branch( messages.length.transform((length) => length > 0), () => { gmail.untrashMessages({ messageIds: messages.transform((results) => results.map((message) => message.messageId), ), }) }, ) }) ``` ## Inputs | Name | Type | Required | Description | | - | - | - | - | | `messageIds` | `string \| string[]` | Yes | One or up to 1,000 immutable Gmail message IDs. | | Second argument: `{ account }` | `string \| Google account reference` | No | Google Account binding. Defaults to the project binding. | Inputs accept compatible signals. ## Output Returns a `Signal>` with each message's updated metadata in input order. | Field | Type | Description | | - | - | - | | `messageId` | `string` | Immutable Gmail message ID. | | `threadId` | `string` | Immutable ID of the thread containing the message. | | `historyId` | `string \| undefined` | Most recent mailbox history record affecting the message, when Gmail supplies it. | | `labelIds` | `string[]` | Gmail system and user label IDs applied after the operation. | The returned `labelIds` are the source of truth for the message's placement after Gmail restores it. The action can't recover a message that Gmail has already deleted permanently. # Update a draft Source: https://docs.automate.ax/reference/integrations/gmail/actions/update-draft Update selected fields in a Gmail draft. `gmail.updateDraft` changes content, recipients, or attachments without sending the draft or moving it to another thread. ## Example ```ts automations/update-approved-draft.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Update an approved Gmail draft", () => { onDashboardRun({ title: "Update an approved Gmail draft" }) gmail.updateDraft({ draftId: "r1234567890", subject: "Approved proposal", html: "

The proposal has been approved and is ready to send.

", }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `draftId` | `string` | Yes | None | Immutable Gmail draft ID to update. | | `to` | `Recipient \| Recipient[]` | No | Existing value | Replacement primary recipients. | | `subject` | `string` | No | Existing value | Replacement subject. | | `html` | `string` | No | Existing body | Replacement HTML body. | | `text` | `string` | No | Existing body or derived from replacement `html` | Replacement plain-text body. | | `cc` | `Recipient \| Recipient[]` | No | Existing value | Replacement carbon-copy recipients. | | `bcc` | `Recipient \| Recipient[]` | No | Existing value | Replacement blind-copy recipients. | | `from` | `Recipient` | No | Existing value | Replacement sender or configured Gmail send-as alias. | | `replyTo` | `Recipient \| Recipient[]` | No | Existing value | Replacement reply addresses. | | `attachments` | `Attachment[]` | No | Existing attachments | Complete replacement attachment list. | | `headers` | `Record` | No | None | Additional `RFC 5322` headers on the replacement message. | | `priority` | `"high" \| "normal" \| "low"` | No | Not set | Importance encoded in standard message headers. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"google">` | No | Project default | Connected Google Account that owns the draft. | `Recipient` is an email string or `{ address: string; name?: string }`. `Attachment` is a `File` or an object containing `file` with optional `filename`, `contentId`, and `disposition: "attachment" | "inline"`. Inputs accept compatible signals. Supplying either `html` or `text` replaces both body alternatives. If you supply only `html`, Automate.ax derives replacement plain text. Supplying `attachments` replaces the complete attachment list. Use `[]` to remove all attachments. > [!NOTE] > > Omitted recipients, sender, reply addresses, subject, body, and attachments > are preserved. Custom headers and priority are applied only when supplied; > existing arbitrary headers and priority are not copied forward. The updated draft carries an authenticated automation origin. If it's sent later, Gmail triggers don't wake the automation that updated it, while other automations watching the mailbox still receive the event. ## Output Returns `Signal`: | Property | Type | Description | | - | - | - | | `draftId` | `string` | Immutable Gmail draft ID. | | `messageId` | `string` | Immutable ID of the message stored inside the draft. | | `threadId` | `string` | Gmail thread containing the updated draft. | | `historyId` | `string \| undefined` | Most recent mailbox history record affecting the draft message, when supplied. | | `labelIds` | `string[]` | Labels applied to the updated draft message. | # Update label Source: https://docs.automate.ax/reference/integrations/gmail/actions/update-label Rename a Gmail label or change its visibility and color. `gmail.updateLabel` changes a user-owned label selected by display name or immutable ID. ## Example ```ts automations/update-follow-up-label.automation.ts theme={null} import { automation } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Update a Gmail label", () => { gmail.updateLabel({ color: { backgroundColor: "#cc3a21", textColor: "#ffffff", }, label: "Automate.ax/Follow up", name: "Automate.ax/Needs reply", labelListVisibility: "labelShowIfUnread", }) }) ``` ## Inputs | Property | Type | Required | Description | | - | - | - | - | | `label` | `string` | Yes | Gmail label display name or immutable label ID. | | `name` | `string` | No | Replacement label name. | | `labelListVisibility` | `"labelHide" \| "labelShow" \| "labelShowIfUnread"` | No | Visibility in Gmail's label list. | | `messageListVisibility` | `"hide" \| "show"` | No | Visibility beside messages in Gmail's message list. | | `color` | `{ backgroundColor: Gmail label color; textColor: Gmail label color }` | No | Hex colors from Gmail's supported label-color palette. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"google">` | No | Google Account binding. Defaults to the project binding. | Provide at least one of `name`, `labelListVisibility`, `messageListVisibility`, or `color`. Inputs accept compatible signals. ## Output Returns `Signal` with the updated metadata: ```ts theme={null} interface GmailLabel { labelId: string name: string type?: "system" | "user" labelListVisibility?: "labelHide" | "labelShow" | "labelShowIfUnread" messageListVisibility?: "hide" | "show" color?: { backgroundColor: string textColor: string } messagesTotal?: number messagesUnread?: number threadsTotal?: number threadsUnread?: number } ``` The action resolves display names case-insensitively. Use `labelId` to avoid ambiguity when names may change. > [!WARNING] > > Gmail system labels cannot be renamed or restyled. Both color fields must use > values from Gmail's [official label-color > palette](https://developers.google.com/workspace/gmail/api/reference/rest/v1/users.labels#Color). # Gmail Source: https://docs.automate.ax/reference/integrations/gmail/index Send, search, label, draft, and reply to Gmail messages, or react to mailbox and message changes. ## Exports ```ts theme={null} import { gmail, googleAccount, getGmailApi } from "automate.ax/gmail" ``` * `gmail` contains the packaged Gmail actions and triggers. * `googleAccount("name")` selects a named Google connection. * `getGmailApi` creates the authenticated Gmail API helper for a custom account-backed action. ## Triggers * [On mailbox changed](/reference/integrations/gmail/triggers/on-mailbox-changed) * [On message added](/reference/integrations/gmail/triggers/on-message-added) * [On message deleted](/reference/integrations/gmail/triggers/on-message-deleted) * [On new email](/reference/integrations/gmail/triggers/on-new-email) * [On email sent](/reference/integrations/gmail/triggers/on-email-sent) * [On label added](/reference/integrations/gmail/triggers/on-label-added) * [On label removed](/reference/integrations/gmail/triggers/on-label-removed) ## Actions * [Send email](/reference/integrations/gmail/actions/send-email) * [Forward a message](/reference/integrations/gmail/actions/forward) * [Reply to a message](/reference/integrations/gmail/actions/reply) * [Reply to a thread](/reference/integrations/gmail/actions/reply-thread) * [Draft email](/reference/integrations/gmail/actions/draft-email) * [Draft reply](/reference/integrations/gmail/actions/draft-reply) * [Get a draft](/reference/integrations/gmail/actions/get-draft) * [Search drafts](/reference/integrations/gmail/actions/search-drafts) * [Update a draft](/reference/integrations/gmail/actions/update-draft) * [Send a draft](/reference/integrations/gmail/actions/send-draft) * [Delete a draft](/reference/integrations/gmail/actions/delete-draft) * [Get message](/reference/integrations/gmail/actions/get-message) * [Get messages](/reference/integrations/gmail/actions/get-messages) * [Get raw message](/reference/integrations/gmail/actions/get-raw-message) * [Get thread](/reference/integrations/gmail/actions/get-thread) * [Search messages](/reference/integrations/gmail/actions/search-messages) * [Search threads](/reference/integrations/gmail/actions/search-threads) * [Get profile](/reference/integrations/gmail/actions/get-profile) * [Add label](/reference/integrations/gmail/actions/add-label) * [Remove label](/reference/integrations/gmail/actions/remove-label) * [Modify labels](/reference/integrations/gmail/actions/modify-labels) * [Create label](/reference/integrations/gmail/actions/create-label) * [Update label](/reference/integrations/gmail/actions/update-label) * [Delete label](/reference/integrations/gmail/actions/delete-label) * [List labels](/reference/integrations/gmail/actions/list-labels) * [Has label](/reference/integrations/gmail/actions/has-label) * [Archive](/reference/integrations/gmail/actions/archive) * [Move to inbox](/reference/integrations/gmail/actions/move-to-inbox) * [Trash](/reference/integrations/gmail/actions/trash) * [Untrash](/reference/integrations/gmail/actions/untrash) * [Mark as spam](/reference/integrations/gmail/actions/mark-as-spam) * [Mark as not spam](/reference/integrations/gmail/actions/mark-as-not-spam) * [Mark as read](/reference/integrations/gmail/actions/mark-as-read) * [Mark as unread](/reference/integrations/gmail/actions/mark-as-unread) * [Is unread](/reference/integrations/gmail/actions/is-unread) * [Mark as important](/reference/integrations/gmail/actions/mark-as-important) * [Unmark as important](/reference/integrations/gmail/actions/unmark-as-important) * [Is important](/reference/integrations/gmail/actions/is-important) * [Star](/reference/integrations/gmail/actions/star) * [Unstar](/reference/integrations/gmail/actions/unstar) * [Check starred status](/reference/integrations/gmail/actions/is-starred) # On email sent Source: https://docs.automate.ax/reference/integrations/gmail/triggers/on-email-sent Run an automation when Gmail sends a message. `gmail.onEmailSent` handles messages sent from the connected mailbox. Trigger data matches [Get message](/reference/integrations/gmail/actions/get-message), including headers, message bodies, labels, and attachment `File` objects. ## Example ```ts automations/track-sent-email.automation.ts theme={null} import { automation } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Track sent Gmail messages", () => { const message = gmail.onEmailSent() // Archive the sent Gmail message in the CRM. }) ``` ## Options | Property | Type | Required | Description | | - | - | - | - | | `account` | `string \| IntegrationAccountReference<"google">` | No | Static Google Account binding. Defaults to the project binding. | Call `gmail.onEmailSent()` without options to use the project binding. The watched account can't change at runtime. ## Trigger data Returns `Signal` for each qualifying message. See [Get message](/reference/integrations/gmail/actions/get-message#output) for all fields. ## Behavior * Only messages newly added to Gmail's `SENT` collection qualify. Existing sent messages aren't replayed when you deploy the trigger. * The parsed `from.address` must match the watched mailbox. A different send-as alias doesn't qualify. * An authenticated Automate.ax message doesn't wake the automation that sent it. Other automations watching the mailbox still receive the event. * Gmail message IDs provide idempotency, so repeated notifications for the same sent message don't create duplicate events. # On label added Source: https://docs.automate.ax/reference/integrations/gmail/triggers/on-label-added Run an automation when Gmail adds a label to a message. `gmail.onLabelAdded` handles user and system label additions in the connected mailbox. ## Example ```ts automations/prioritize-customer-email.automation.ts theme={null} import { automation, filter } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Prioritize customer email", () => { const customerEmail = filter(gmail.onLabelAdded(), ({ labels }) => labels.some(({ name }) => name === "Customer"), ) gmail.markMessagesAsImportant({ messageIds: customerEmail.message.messageId, }) }) ``` ## Options | Property | Type | Required | Description | | - | - | - | - | | `account` | `string \| IntegrationAccountReference<"google">` | No | Static Google Account binding. Defaults to the project binding. | The watched account can't change at runtime. Call `gmail.onLabelAdded()` without options to use the project binding. ## Trigger data Returns `Signal` for each Gmail history change: ```ts theme={null} interface GmailLabelChange { labels: { labelId: string name?: string }[] message: Message } ``` `message` contains the same parsed fields as [Get message](/reference/integrations/gmail/actions/get-message). One event can contain several labels from the same Gmail history change. Use `labelId` as the stable identity. `name` is the current label name when available. # On label removed Source: https://docs.automate.ax/reference/integrations/gmail/triggers/on-label-removed Run an automation when Gmail removes a label from a message. `gmail.onLabelRemoved` handles user and system label removals in the connected mailbox. ## Example ```ts automations/archive-resolved-email.automation.ts theme={null} import { automation, filter } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Archive resolved email", () => { const resolved = filter(gmail.onLabelRemoved(), ({ labels }) => labels.some(({ name }) => name === "Needs reply"), ) gmail.archiveMessages({ messageIds: resolved.message.messageId, }) }) ``` ## Options | Property | Type | Required | Description | | - | - | - | - | | `account` | `string \| IntegrationAccountReference<"google">` | No | Static Google Account binding. Defaults to the project binding. | The watched account can't change at runtime. Call `gmail.onLabelRemoved()` without options to use the project binding. ## Trigger data Returns `Signal` with the parsed `message` and labels removed in the same Gmail history change: ```ts theme={null} interface GmailLabelChange { labels: { labelId: string name?: string }[] message: Message } ``` See [Get message](/reference/integrations/gmail/actions/get-message) for all `Message` fields. Use `labelId` as the stable identity. Gmail omits `name` when it can no longer resolve a removed label, such as after the user deletes it. # On mailbox changed Source: https://docs.automate.ax/reference/integrations/gmail/triggers/on-mailbox-changed Run an automation for any normalized Gmail mailbox history change. `gmail.onMailboxChanged` is the broad Gmail history trigger. Use it when one automation must handle message additions, permanent deletions, label additions, and label removals. ## Example ```ts automations/audit-mailbox.automation.ts theme={null} import { automation } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Audit Gmail changes", () => { const change = gmail.onMailboxChanged() // Route the Gmail mailbox change by type. }) ``` ## Options `account` is a static Google Account binding and defaults to the project binding. It can't change at runtime. ## Trigger data Returns a discriminated union with `changeType`: ```ts theme={null} type GmailMailboxChange = | { changeType: "messageAdded" historyId: string message: Message } | { changeType: "messageDeleted" historyId: string messageId: string threadId: string } | { changeType: "labelAdded" | "labelRemoved" historyId: string labels: { labelId: string; name?: string }[] message: Message } ``` Added messages and label changes contain the parsed message shape from [Get message](/reference/integrations/gmail/actions/get-message). Permanently deleted messages contain stable IDs because Gmail can no longer return the message. Moving a message to Trash is a label change, not a permanent deletion. Use the dedicated semantic triggers when one lifecycle is sufficient. # On message added Source: https://docs.automate.ax/reference/integrations/gmail/triggers/on-message-added Run an automation when Gmail adds any message. `gmail.onMessageAdded` handles every message Gmail adds to the mailbox, including received, sent, inserted, imported, and draft messages. ## Example ```ts automations/inspect-added-message.automation.ts theme={null} import { automation } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Inspect added Gmail messages", () => { const message = gmail.onMessageAdded() // Route the Gmail message by its labels. }) ``` ## Options `account` is a static Google Account binding and defaults to the project binding. It can't change at runtime. ## Trigger data Returns the complete parsed `Message` documented by [Get message](/reference/integrations/gmail/actions/get-message). Use [On new email](/reference/integrations/gmail/triggers/on-new-email) for the `INBOX` subset or [On email sent](/reference/integrations/gmail/triggers/on-email-sent) for messages sent by the watched mailbox. Existing messages establish the watch cursor and aren't replayed when you deploy the trigger. Automate.ax deduplicates repeated Gmail notifications and suppresses recursive delivery to the automation that originated an authenticated message. # On message deleted Source: https://docs.automate.ax/reference/integrations/gmail/triggers/on-message-deleted Run an automation when Gmail permanently deletes a message. `gmail.onMessageDeleted` handles permanent Gmail message deletion. Moving a message to Trash doesn't qualify. ## Example ```ts automations/record-deleted-message.automation.ts theme={null} import { automation } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Record deleted Gmail messages", () => { const deletion = gmail.onMessageDeleted() // Remove the deleted Gmail message from the CRM. }) ``` ## Options `account` is a static Google Account binding and defaults to the project binding. It can't change at runtime. ## Trigger data ```ts theme={null} interface GmailMessageDeleted { historyId: string messageId: string threadId: string } ``` Gmail reports only stable identifiers after permanent deletion because the message resource is no longer available. `historyId` identifies the mailbox history record that reported the lifecycle. # On new email Source: https://docs.automate.ax/reference/integrations/gmail/triggers/on-new-email Run an automation when a message arrives in a Gmail inbox. `gmail.onNewEmail` handles new inbox messages for triage, routing, attachment processing, or reply preparation. Trigger data matches [Get message](/reference/integrations/gmail/actions/get-message), including headers, message bodies, labels, and attachment `File` objects. ## Example ```ts automations/read-new-email.automation.ts theme={null} import { automation } from "automate.ax" import { gmail } from "automate.ax/gmail" export default automation("Mark new Gmail messages as read", () => { const email = gmail.onNewEmail() gmail.markMessagesAsRead({ messageIds: email.messageId, }) }) ``` ## Options | Property | Type | Required | Description | | - | - | - | - | | `account` | `string \| IntegrationAccountReference<"google">` | No | Static Google Account binding. Defaults to the project binding. | Call `gmail.onNewEmail()` without options to use the project binding. The watched account can't change at runtime. ## Trigger data Returns `Signal` for each qualifying message: ```ts theme={null} interface Message { messageId: string threadId: string historyId?: string labelIds: string[] attachments: Attachment[] bcc: Mailbox[] cc: Mailbox[] deliveredTo?: string from?: Mailbox headers: { name: string; value: string }[] html?: string inReplyTo?: string receivedAt: Date | null references: string[] replyTo: Mailbox[] returnPath?: string rfc822MessageId?: string sender?: Mailbox sentAt?: Date sizeEstimate?: number snippet?: string subject: string text?: string to: Mailbox[] } interface Mailbox { address: string name?: string } interface Attachment { contentId?: string description?: string disposition?: "attachment" | "inline" file: File filename: string mimeType: string related: boolean } ``` Pass properties such as `email.messageId` to actions. Use `email.transform(...)` to derive other values. ## Behavior * Only messages newly added to Gmail's `INBOX` qualify. Existing inbox messages aren't replayed when you deploy the trigger. * Automate.ax parses the complete raw message before starting the automation. It includes attachments and inline message parts as `File` objects. * Automate.ax derives `text` from `html` when the message has no plain-text alternative. * An authenticated Automate.ax message doesn't wake the automation that sent it. Other automations watching the mailbox still receive the event. * Automate.ax uses Gmail message IDs for idempotency, so repeated provider notifications for the same message don't create duplicate events. > [!NOTE] > > Email formats vary. `html`, `text`, `from`, and sender-supplied date fields > can be absent, while `receivedAt` can be `null`. Handle optional fields when > your automation accepts mail from varied senders. # Create ad group Source: https://docs.automate.ax/reference/integrations/google-ads/actions/create-ad-group Create a Google Ads ad group inside an existing campaign. Use `googleAds.createAdGroup` to create a Google Ads ad group inside an existing campaign. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Create ad group", () => { onDashboardRun({ title: "Create ad group" }) googleAds.createAdGroup({ customerId: "1234567890", campaign: "customers/1234567890/campaigns/111", name: "Brand search", status: "PAUSED", }) }) ``` ## Inputs Set `customerId`, a campaign resource name, and `name`. Optional fields set status, type, CPC bid micros, and target CPA micros. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns the created ad-group resource name. Creation is not replay-safe. # Create asset Source: https://docs.automate.ax/reference/integrations/google-ads/actions/create-asset Create a reusable Google Ads creative asset. Use `googleAds.createAsset` to create a reusable Google Ads creative asset. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Create asset", () => { onDashboardRun({ title: "Create asset" }) googleAds.createAsset({ customerId: "1234567890", name: "Free consultation", asset: { type: "callout", calloutText: "Free consultation" }, }) }) ``` ## Inputs Set `customerId` and one typed asset: text, base64 image data, YouTube video, call-out, site link, call, or structured snippet. `name` is optional. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google Account binding. ## Output Returns the created asset resource name. # Create audience Source: https://docs.automate.ax/reference/integrations/google-ads/actions/create-audience Create a reusable Google Ads audience from demographic or segment dimensions. Use `googleAds.createAudience` to create a reusable Google Ads audience from demographic or segment dimensions. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Create audience", () => { onDashboardRun({ title: "Create audience" }) googleAds.createAudience({ customerId: "1234567890", name: "Existing customers", dimensions: [ { audienceSegments: { segments: [ { userList: { userList: "customers/1234567890/userLists/111" } }, ], }, }, ], }) }) ``` ## Inputs Set `customerId`, a unique `name`, and at least one audience dimension. Dimensions support user lists, age ranges, gender, household income, and parental status. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns the created audience resource name. # Create campaign Source: https://docs.automate.ax/reference/integrations/google-ads/actions/create-campaign Create a Google Ads campaign with an existing budget and bidding strategy. Use `googleAds.createCampaign` to create a Google Ads campaign with an existing budget and bidding strategy. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Create campaign", () => { onDashboardRun({ title: "Create campaign" }) googleAds.createCampaign({ customerId: "1234567890", name: "Brand search", campaignBudget: "customers/1234567890/campaignBudgets/111", advertisingChannelType: "SEARCH", biddingStrategy: { type: "manualCpc" }, containsEuPoliticalAdvertising: "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING", status: "PAUSED", }) }) ``` ## Inputs Set `customerId`, `name`, a campaign-budget resource name, channel type, bidding strategy, and the required EU political-advertising declaration. Search, Display, Video, Demand Gen, and Performance Max campaigns accept the standard bidding strategies. Shopping campaigns also require `shoppingSetting` with `merchantId` and `campaignPriority`, and accept `manualCpc`, `targetSpend`, or `targetRoas` bidding. An optional feed label uses only uppercase letters, digits, hyphens, and underscores. Hotel campaigns require `hotelSetting.hotelCenterId` and `percentCpc` bidding. Optional `startDateTime` and `endDateTime` values use `YYYY-MM-DD HH:mm:ss` in the customer account's time zone. Status defaults to Google's enabled state, so use `PAUSED` when staging. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns the created campaign resource name. Creation is not replay-safe. # Create campaign budget Source: https://docs.automate.ax/reference/integrations/google-ads/actions/create-campaign-budget Create a shared Google Ads campaign budget. Use `googleAds.createCampaignBudget` to create a shared Google Ads campaign budget. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Create campaign budget", () => { onDashboardRun({ title: "Create campaign budget" }) googleAds.createCampaignBudget({ customerId: "1234567890", name: "Brand daily budget", amountMicros: "50000000", }) }) ``` ## Inputs Set `customerId`, `name`, and either `amountMicros` for a daily budget or `totalAmountMicros` with `period: "CUSTOM_PERIOD"` and `explicitlyShared: false`. Micros are strings; one million equals one account currency unit. `deliveryMethod` defaults to `STANDARD`. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns the created campaign-budget resource name. # Create conversion action Source: https://docs.automate.ax/reference/integrations/google-ads/actions/create-conversion-action Create a Google Ads conversion action used for measurement and uploads. Use `googleAds.createConversionAction` to create a Google Ads conversion action used for measurement and uploads. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Create conversion action", () => { onDashboardRun({ title: "Create conversion action" }) googleAds.createConversionAction({ customerId: "1234567890", name: "Qualified lead", type: "UPLOAD_CLICKS", category: "QUALIFIED_LEAD", }) }) ``` ## Inputs Set `customerId`, `name`, and a supported conversion type. Optional fields configure category, counting, goal priority, look-back window, and default value. Click-through look-back windows can be up to 60 days for `AD_CALL` and `WEBSITE_CALL`, and up to 30 days for other supported types. Call conversions can't set `alwaysUseDefaultValue` to `false`. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google Account binding. ## Output Returns the created conversion-action resource name. # Create responsive search ad Source: https://docs.automate.ax/reference/integrations/google-ads/actions/create-responsive-search-ad Create a responsive search ad in an existing ad group. Use `googleAds.createResponsiveSearchAd` to create a responsive search ad in an existing ad group. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Create responsive search ad", () => { onDashboardRun({ title: "Create responsive search ad" }) googleAds.createResponsiveSearchAd({ customerId: "1234567890", adGroup: "111", headlines: ["Book today", "Trusted local team", "Get a quote"], descriptions: ["Fast, dependable service.", "Request your quote today."], finalUrls: ["https://example.com"], status: "PAUSED", }) }) ``` ## Inputs Set the customer and ad-group ID or resource name, 3–15 headlines, 2–4 descriptions, and at least one final URL. Optional paths are capped at 15 characters. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns the created ad-group-ad resource name. # Create user list Source: https://docs.automate.ax/reference/integrations/google-ads/actions/create-user-list Create a Customer Match user list in Google Ads. Use `googleAds.createUserList` to create a Customer Match user list in Google Ads. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Create user list", () => { onDashboardRun({ title: "Create user list" }) googleAds.createUserList({ customerId: "1234567890", name: "Qualified leads", membershipLifeSpan: 90, }) }) ``` ## Inputs Set `customerId` and a unique `name`. Membership life span is optional from 0–540 days; status can be `OPEN` or `CLOSED`. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns the created user-list resource name. # Get ad-group performance Source: https://docs.automate.ax/reference/integrations/google-ads/actions/get-ad-group-performance Report common performance metrics by Google Ads ad group. Use `googleAds.getAdGroupPerformance` to report common performance metrics by Google Ads ad group. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Get ad-group performance", () => { onDashboardRun({ title: "Get ad-group performance" }) googleAds.getAdGroupPerformance({ customerId: "1234567890", dateFrom: "2026-08-01", dateTo: "2026-08-31", }) }) ``` ## Inputs Set the customer and inclusive ISO date range. `pageToken` continues the same report; use the same inputs on every page. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns a GAQL page with campaign and ad-group dimensions plus impressions, clicks, interactions, cost micros, conversions, and conversion value. # Get ad performance Source: https://docs.automate.ax/reference/integrations/google-ads/actions/get-ad-performance Report common performance metrics by Google Ads ad. Use `googleAds.getAdPerformance` to report common performance metrics by Google Ads ad. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Get ad performance", () => { onDashboardRun({ title: "Get ad performance" }) googleAds.getAdPerformance({ customerId: "1234567890", dateFrom: "2026-08-01", dateTo: "2026-08-31", }) }) ``` ## Inputs Set the customer and inclusive ISO date range. `pageToken` continues the same report. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns a GAQL page with campaign, ad-group, and ad dimensions plus common performance metrics. # Get campaign performance Source: https://docs.automate.ax/reference/integrations/google-ads/actions/get-campaign-performance Report common performance metrics by Google Ads campaign. Use `googleAds.getCampaignPerformance` to report common performance metrics by Google Ads campaign. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Get campaign performance", () => { onDashboardRun({ title: "Get campaign performance" }) googleAds.getCampaignPerformance({ customerId: "1234567890", dateFrom: "2026-08-01", dateTo: "2026-08-31", }) }) ``` ## Inputs Set the customer and inclusive ISO date range. `pageToken` continues the same report. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns a GAQL page with campaign dimensions plus common performance metrics. # Get conversion performance Source: https://docs.automate.ax/reference/integrations/google-ads/actions/get-conversion-performance Report conversion metrics grouped by Google Ads conversion action. Use `googleAds.getConversionPerformance` to report conversion metrics grouped by Google Ads conversion action. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Get conversion performance", () => { onDashboardRun({ title: "Get conversion performance" }) googleAds.getConversionPerformance({ customerId: "1234567890", dateFrom: "2026-08-01", dateTo: "2026-08-31", }) }) ``` ## Inputs Set the customer and inclusive ISO date range. `pageToken` continues the same report. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns a GAQL page grouped by conversion action with common performance metrics. # Get customer Source: https://docs.automate.ax/reference/integrations/google-ads/actions/get-customer Get identity, locale, manager, and test-account metadata for a Google Ads customer. Use `googleAds.getCustomer` to get identity, locale, manager, and test-account metadata for a Google Ads customer. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Get customer", () => { onDashboardRun({ title: "Get customer" }) googleAds.getCustomer({ customerId: "1234567890" }) }) ``` ## Inputs Set `customerId`. Add `loginCustomerId` when accessing the customer through a manager account. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns the normalized customer resource, including currency, time zone, manager state, and test-account state. # Link ad-group asset Source: https://docs.automate.ax/reference/integrations/google-ads/actions/link-ad-group-asset Link a reusable asset to a Google Ads ad group. Use `googleAds.linkAdGroupAsset` to link a reusable asset to a Google Ads ad group. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Link ad-group asset", () => { onDashboardRun({ title: "Link ad-group asset" }) googleAds.linkAdGroupAsset({ customerId: "1234567890", owner: "111", asset: "222", fieldType: "CALLOUT", }) }) ``` ## Inputs Set customer, ad-group ID or resource name in `owner`, asset ID or resource name, and a provider-valid asset field type. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns the created ad-group-asset link resource name. # Link campaign asset Source: https://docs.automate.ax/reference/integrations/google-ads/actions/link-campaign-asset Link a reusable asset to a Google Ads campaign. Use `googleAds.linkCampaignAsset` to link a reusable asset to a Google Ads campaign. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Link campaign asset", () => { onDashboardRun({ title: "Link campaign asset" }) googleAds.linkCampaignAsset({ customerId: "1234567890", owner: "111", asset: "222", fieldType: "CALLOUT", }) }) ``` ## Inputs Set customer, campaign ID or resource name in `owner`, asset ID or resource name, and a provider-valid field type. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns the created campaign-asset link resource name. # List accessible customers Source: https://docs.automate.ax/reference/integrations/google-ads/actions/list-accessible-customers List Google Ads customer resource names directly accessible to the connected Google identity. Use `googleAds.listAccessibleCustomers` to list Google Ads customer resource names directly accessible to the connected Google identity. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("List accessible customers", () => { onDashboardRun({ title: "List accessible customers" }) googleAds.listAccessibleCustomers({}) }) ``` ## Inputs No customer ID is required. Select a named Google binding through the normal action account option when needed. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns `{ resourceNames }`. Manager-linked client accounts are not necessarily direct; use `listCustomerClients` to traverse a manager hierarchy. # List ad-group ads Source: https://docs.automate.ax/reference/integrations/google-ads/actions/list-ad-group-ads List Google Ads ad-group ads and responsive-search creative. Use `googleAds.listAdGroupAds` to list Google Ads ad-group ads and responsive-search creative. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("List ad-group ads", () => { onDashboardRun({ title: "List ad-group ads" }) googleAds.listAdGroupAds({ customerId: "1234567890" }) }) ``` ## Inputs Set `customerId`; optionally set `loginCustomerId` and `pageToken`. Google fixes search pages at 10,000 rows. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns `{ items, nextPageToken?, totalResultsCount? }` with ad status, URLs, headlines, and descriptions. # List ad groups Source: https://docs.automate.ax/reference/integrations/google-ads/actions/list-ad-groups List Google Ads ad groups with campaign, bids, type, and status. Use `googleAds.listAdGroups` to list Google Ads ad groups with campaign, bids, type, and status. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("List ad groups", () => { onDashboardRun({ title: "List ad groups" }) googleAds.listAdGroups({ customerId: "1234567890" }) }) ``` ## Inputs Set `customerId`; optionally set `loginCustomerId` and `pageToken`. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns `{ items, nextPageToken?, totalResultsCount? }`. # List assets Source: https://docs.automate.ax/reference/integrations/google-ads/actions/list-assets List reusable Google Ads account assets. Use `googleAds.listAssets` to list reusable Google Ads account assets. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("List assets", () => { onDashboardRun({ title: "List assets" }) googleAds.listAssets({ customerId: "1234567890" }) }) ``` ## Inputs Set `customerId`; optionally set `loginCustomerId` and `pageToken`. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns normalized assets with resource name, ID, name, status, and type. # List audiences Source: https://docs.automate.ax/reference/integrations/google-ads/actions/list-audiences List reusable Google Ads audience definitions. Use `googleAds.listAudiences` to list reusable Google Ads audience definitions. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("List audiences", () => { onDashboardRun({ title: "List audiences" }) googleAds.listAudiences({ customerId: "1234567890" }) }) ``` ## Inputs Set `customerId`; optionally set `loginCustomerId` and `pageToken`. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns audience definitions and their dimensions. # List campaign budgets Source: https://docs.automate.ax/reference/integrations/google-ads/actions/list-campaign-budgets List Google Ads campaign budgets and delivery settings. Use `googleAds.listCampaignBudgets` to list Google Ads campaign budgets and delivery settings. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("List campaign budgets", () => { onDashboardRun({ title: "List campaign budgets" }) googleAds.listCampaignBudgets({ customerId: "1234567890" }) }) ``` ## Inputs Set `customerId`; optionally set `loginCustomerId` and `pageToken`. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns normalized budgets, including daily or total micros and sharing state. # List campaigns Source: https://docs.automate.ax/reference/integrations/google-ads/actions/list-campaigns List Google Ads campaigns with status, channel, dates, and budget. Use `googleAds.listCampaigns` to list Google Ads campaigns with status, channel, dates, and budget. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("List campaigns", () => { onDashboardRun({ title: "List campaigns" }) googleAds.listCampaigns({ customerId: "1234567890" }) }) ``` ## Inputs Set `customerId`; optionally set `loginCustomerId` and `pageToken`. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns normalized campaigns and provider pagination metadata. # List conversion actions Source: https://docs.automate.ax/reference/integrations/google-ads/actions/list-conversion-actions List Google Ads conversion actions and attribution settings. Use `googleAds.listConversionActions` to list Google Ads conversion actions and attribution settings. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("List conversion actions", () => { onDashboardRun({ title: "List conversion actions" }) googleAds.listConversionActions({ customerId: "1234567890" }) }) ``` ## Inputs Set `customerId`; optionally set `loginCustomerId` and `pageToken`. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns normalized conversion actions and provider pagination metadata. # List customer clients Source: https://docs.automate.ax/reference/integrations/google-ads/actions/list-customer-clients List the customer hierarchy visible from a Google Ads manager account. Use `googleAds.listCustomerClients` to list the customer hierarchy visible from a Google Ads manager account. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("List customer clients", () => { onDashboardRun({ title: "List customer clients" }) googleAds.listCustomerClients({ customerId: "1234567890" }) }) ``` ## Inputs Set `customerId` to the manager ID. Set `loginCustomerId` when a higher-level manager authorizes access. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns client customer IDs, names, levels, locale, manager flags, and test-account flags. # List user lists Source: https://docs.automate.ax/reference/integrations/google-ads/actions/list-user-lists List Google Ads audience and Customer Match user lists. Use `googleAds.listUserLists` to list Google Ads audience and Customer Match user lists. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("List user lists", () => { onDashboardRun({ title: "List user lists" }) googleAds.listUserLists({ customerId: "1234567890" }) }) ``` ## Inputs Set `customerId`; optionally set `loginCustomerId` and `pageToken`. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns list metadata and display/search sizes. # Query report Source: https://docs.automate.ax/reference/integrations/google-ads/actions/query-report Run one page of a Google Ads Query Language report. Use `googleAds.queryReport` to run one page of a Google Ads Query Language report. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Query report", () => { onDashboardRun({ title: "Query report" }) googleAds.queryReport({ customerId: "1234567890", query: "SELECT campaign.id, metrics.clicks FROM campaign WHERE segments.date DURING LAST_30_DAYS", }) }) ``` ## Inputs Set `customerId` and a GAQL query. Pass `nextPageToken` with the identical query to continue. Google fixes search pages at 10,000 rows. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns raw camelCase GAQL rows, pagination metadata, field mask, and optional summary row. # Remove ad group Source: https://docs.automate.ax/reference/integrations/google-ads/actions/remove-ad-group Remove a Google Ads ad group. Use `googleAds.removeAdGroup` to remove a Google Ads ad group. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Remove ad group", () => { onDashboardRun({ title: "Remove ad group" }) googleAds.removeAdGroup({ customerId: "1234567890", resourceName: "customers/1234567890/adGroups/111", }) }) ``` ## Inputs Set customer and canonical ad-group resource name. Add `loginCustomerId` for manager access. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns the removed resource name. Google preserves historical reporting. # Remove ad-group ad Source: https://docs.automate.ax/reference/integrations/google-ads/actions/remove-ad-group-ad Remove a Google Ads ad-group ad. Use `googleAds.removeAdGroupAd` to remove a Google Ads ad-group ad. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Remove ad-group ad", () => { onDashboardRun({ title: "Remove ad-group ad" }) googleAds.removeAdGroupAd({ customerId: "1234567890", resourceName: "customers/1234567890/adGroupAds/111~222", }) }) ``` ## Inputs Set customer and canonical ad-group-ad resource name. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns the removed resource name. # Remove campaign Source: https://docs.automate.ax/reference/integrations/google-ads/actions/remove-campaign Remove a Google Ads campaign while retaining its reporting history. Use `googleAds.removeCampaign` to remove a Google Ads campaign while retaining its reporting history. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Remove campaign", () => { onDashboardRun({ title: "Remove campaign" }) googleAds.removeCampaign({ customerId: "1234567890", resourceName: "customers/1234567890/campaigns/111", }) }) ``` ## Inputs Set customer and canonical campaign resource name. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns the removed resource name. # Remove campaign budget Source: https://docs.automate.ax/reference/integrations/google-ads/actions/remove-campaign-budget Remove an unused Google Ads campaign budget. Use `googleAds.removeCampaignBudget` to remove an unused Google Ads campaign budget. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Remove campaign budget", () => { onDashboardRun({ title: "Remove campaign budget" }) googleAds.removeCampaignBudget({ customerId: "1234567890", resourceName: "customers/1234567890/campaignBudgets/111", }) }) ``` ## Inputs Set customer and canonical budget resource name. Google rejects removal while the budget remains in use. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns the removed resource name. # Remove conversion action Source: https://docs.automate.ax/reference/integrations/google-ads/actions/remove-conversion-action Remove a Google Ads conversion action. Use `googleAds.removeConversionAction` to remove a Google Ads conversion action. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Remove conversion action", () => { onDashboardRun({ title: "Remove conversion action" }) googleAds.removeConversionAction({ customerId: "1234567890", resourceName: "customers/1234567890/conversionActions/111", }) }) ``` ## Inputs Set customer and canonical conversion-action resource name. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns the removed resource name. # Remove user list Source: https://docs.automate.ax/reference/integrations/google-ads/actions/remove-user-list Remove a Google Ads user list. Use `googleAds.removeUserList` to remove a Google Ads user list. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Remove user list", () => { onDashboardRun({ title: "Remove user list" }) googleAds.removeUserList({ customerId: "1234567890", resourceName: "customers/1234567890/userLists/111", }) }) ``` ## Inputs Set customer and canonical user-list resource name. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns the removed resource name. # Unlink ad-group asset Source: https://docs.automate.ax/reference/integrations/google-ads/actions/unlink-ad-group-asset Remove an ad-group asset link without deleting the asset. Use `googleAds.unlinkAdGroupAsset` to remove an ad-group asset link without deleting the asset. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Unlink ad-group asset", () => { onDashboardRun({ title: "Unlink ad-group asset" }) googleAds.unlinkAdGroupAsset({ customerId: "1234567890", resourceName: "customers/1234567890/adGroupAssets/111~222~CALLOUT", }) }) ``` ## Inputs Set customer and canonical ad-group-asset resource name. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns the removed link resource name. # Unlink campaign asset Source: https://docs.automate.ax/reference/integrations/google-ads/actions/unlink-campaign-asset Remove a campaign asset link without deleting the asset. Use `googleAds.unlinkCampaignAsset` to remove a campaign asset link without deleting the asset. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Unlink campaign asset", () => { onDashboardRun({ title: "Unlink campaign asset" }) googleAds.unlinkCampaignAsset({ customerId: "1234567890", resourceName: "customers/1234567890/campaignAssets/111~222~CALLOUT", }) }) ``` ## Inputs Set customer and canonical campaign-asset resource name. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns the removed link resource name. # Update ad group Source: https://docs.automate.ax/reference/integrations/google-ads/actions/update-ad-group Update selected Google Ads ad-group fields. Use `googleAds.updateAdGroup` to update selected Google Ads ad-group fields. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Update ad group", () => { onDashboardRun({ title: "Update ad group" }) googleAds.updateAdGroup({ customerId: "1234567890", resourceName: "customers/1234567890/adGroups/111", status: "PAUSED", }) }) ``` ## Inputs Set customer, canonical resource name, and at least one of name, status, CPC bid micros, or target CPA micros. Only provided fields enter the update mask. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns the updated resource name. # Update ad-group ad status Source: https://docs.automate.ax/reference/integrations/google-ads/actions/update-ad-group-ad-status Enable or pause a Google Ads ad-group ad. Use `googleAds.updateAdGroupAdStatus` to enable or pause a Google Ads ad-group ad. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Update ad-group ad status", () => { onDashboardRun({ title: "Update ad-group ad status" }) googleAds.updateAdGroupAdStatus({ customerId: "1234567890", resourceName: "customers/1234567890/adGroupAds/111~222", status: "PAUSED", }) }) ``` ## Inputs Set customer, canonical resource name, and `ENABLED` or `PAUSED`. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns the updated resource name. # Update ad-group asset Source: https://docs.automate.ax/reference/integrations/google-ads/actions/update-ad-group-asset Enable or pause a Google Ads ad-group asset link. Use `googleAds.updateAdGroupAsset` to enable or pause an asset link without changing the underlying asset. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Update ad-group asset", () => { onDashboardRun({ title: "Update ad-group asset" }) googleAds.updateAdGroupAsset({ customerId: "1234567890", resourceName: "customers/1234567890/adGroupAssets/111~222~CALLOUT", status: "PAUSED", }) }) ``` ## Inputs Set customer, canonical ad-group asset resource name, and `ENABLED` or `PAUSED`. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns the updated ad-group asset resource name. # Update asset name Source: https://docs.automate.ax/reference/integrations/google-ads/actions/update-asset-name Update the optional name of a Google Ads asset. Use `googleAds.updateAssetName` to update the optional name of a Google Ads asset. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Update asset name", () => { onDashboardRun({ title: "Update asset name" }) googleAds.updateAssetName({ customerId: "1234567890", resourceName: "customers/1234567890/assets/111", name: "Summer callout", }) }) ``` ## Inputs Set customer, canonical resource name, and non-empty name. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns the updated resource name. # Update audience Source: https://docs.automate.ax/reference/integrations/google-ads/actions/update-audience Update selected fields on a Google Ads audience. Use `googleAds.updateAudience` to update selected fields on a Google Ads audience. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Update audience", () => { onDashboardRun({ title: "Update audience" }) googleAds.updateAudience({ customerId: "1234567890", resourceName: "customers/1234567890/audiences/111", description: "Current customers", }) }) ``` ## Inputs Set customer, canonical resource name, and at least one of name, description, or dimensions. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns the updated resource name. # Update campaign Source: https://docs.automate.ax/reference/integrations/google-ads/actions/update-campaign Update selected Google Ads campaign fields. Use `googleAds.updateCampaign` to update selected Google Ads campaign fields. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Update campaign", () => { onDashboardRun({ title: "Update campaign" }) googleAds.updateCampaign({ customerId: "1234567890", resourceName: "customers/1234567890/campaigns/111", status: "PAUSED", }) }) ``` ## Inputs Set customer, canonical resource name, and at least one mutable field: name, status, date-time, or campaign budget. Date-time values use `YYYY-MM-DD HH:mm:ss` in the customer account's time zone. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns the updated resource name. # Update campaign asset Source: https://docs.automate.ax/reference/integrations/google-ads/actions/update-campaign-asset Enable or pause a Google Ads campaign asset link. Use `googleAds.updateCampaignAsset` to enable or pause an asset link without changing the underlying asset. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Update campaign asset", () => { onDashboardRun({ title: "Update campaign asset" }) googleAds.updateCampaignAsset({ customerId: "1234567890", resourceName: "customers/1234567890/campaignAssets/111~222~CALLOUT", status: "ENABLED", }) }) ``` ## Inputs Set customer, canonical campaign asset resource name, and `ENABLED` or `PAUSED`. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns the updated campaign asset resource name. # Update campaign budget Source: https://docs.automate.ax/reference/integrations/google-ads/actions/update-campaign-budget Update selected Google Ads campaign-budget fields. Use `googleAds.updateCampaignBudget` to update selected Google Ads campaign-budget fields. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Update campaign budget", () => { onDashboardRun({ title: "Update campaign budget" }) googleAds.updateCampaignBudget({ customerId: "1234567890", resourceName: "customers/1234567890/campaignBudgets/111", amountMicros: "75000000", }) }) ``` ## Inputs Set customer, canonical resource name, and at least one mutable budget field. Micros are decimal strings. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns the updated resource name. # Update conversion action Source: https://docs.automate.ax/reference/integrations/google-ads/actions/update-conversion-action Update selected Google Ads conversion-action settings. Use `googleAds.updateConversionAction` to update selected Google Ads conversion-action settings. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Update conversion action", () => { onDashboardRun({ title: "Update conversion action" }) googleAds.updateConversionAction({ customerId: "1234567890", resourceName: "customers/1234567890/conversionActions/111", primaryForGoal: true, }) }) ``` ## Inputs Set customer, canonical resource name, and at least one mutable field. Updates accept click-through look-back windows up to 30 days and only allow enabling the default-value setting because the action doesn't fetch the conversion type first. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns the updated resource name. # Update user list Source: https://docs.automate.ax/reference/integrations/google-ads/actions/update-user-list Update Google Ads user-list metadata. Use `googleAds.updateUserList` to update Google Ads user-list metadata. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Update user list", () => { onDashboardRun({ title: "Update user list" }) googleAds.updateUserList({ customerId: "1234567890", resourceName: "customers/1234567890/userLists/111", membershipLifeSpan: 120, }) }) ``` ## Inputs Set customer, canonical resource name, and at least one mutable field. Membership life span ranges from 0–540 days. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns the updated resource name. # Upload call conversions Source: https://docs.automate.ax/reference/integrations/google-ads/actions/upload-call-conversions Upload offline call conversions to Google Ads. Use `googleAds.uploadCallConversions` to upload offline call conversions to Google Ads. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Upload call conversions", () => { onDashboardRun({ title: "Upload call conversions" }) googleAds.uploadCallConversions({ customerId: "1234567890", items: [ { conversionAction: "customers/1234567890/conversionActions/111", callerId: "+14155550123", callStartDateTime: "2026-08-10 10:00:00-07:00", conversionDateTime: "2026-08-10 10:05:00-07:00", }, ], }) }) ``` ## Inputs Upload 1–2,000 records. Each requires a conversion-action resource name, caller ID, call start, and conversion time. `partialFailure` is always `true`; `validateOnly` checks without applying. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns per-record results and any partial-failure error. # Upload click conversions Source: https://docs.automate.ax/reference/integrations/google-ads/actions/upload-click-conversions Upload offline click conversions to Google Ads. Use `googleAds.uploadClickConversions` to upload offline click conversions through Google's Data Manager API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Upload click conversions", () => { onDashboardRun({ title: "Upload click conversions" }) googleAds.uploadClickConversions({ customerId: "1234567890", items: [ { conversionAction: "customers/1234567890/conversionActions/111", conversionDateTime: "2026-08-10 10:05:00-07:00", gclid: "click-id", }, ], }) }) ``` ## Inputs Upload 1–2,000 records. Each must contain exactly one of `gclid`, `gbraid`, or `wbraid`, plus the conversion action and a time with a UTC offset. `eventSource` defaults to `WEB`; set it to `APP`, `IN_STORE`, `MESSAGE`, `OTHER`, or `PHONE` when appropriate. Optional value, currency, and order ID support revenue and deduplication. Set `validateOnly` to check a request without applying it. This action requests Google's Data Manager OAuth scope. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns the Data Manager request ID. Use it when diagnosing asynchronous processing results with Google support. # Upload conversion adjustments Source: https://docs.automate.ax/reference/integrations/google-ads/actions/upload-conversion-adjustments Retract, restate, or enhance uploaded Google Ads conversions. Use `googleAds.uploadConversionAdjustments` to retract, restate, or enhance uploaded Google Ads conversions. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Upload conversion adjustments", () => { onDashboardRun({ title: "Upload conversion adjustments" }) googleAds.uploadConversionAdjustments({ customerId: "1234567890", items: [ { adjustmentType: "RETRACTION", adjustmentDateTime: "2026-08-11 09:00:00-07:00", conversionAction: "customers/1234567890/conversionActions/111", orderId: "order-123", }, ], }) }) ``` ## Inputs Upload 1–2,000 retractions or restatements. Every item needs its type, adjustment time, conversion action, and order ID. Restatements require the adjusted value and currency. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns per-record results and any partial-failure error. # Upload user-list members Source: https://docs.automate.ax/reference/integrations/google-ads/actions/upload-user-list-members Add or remove Customer Match identifiers through Google Data Manager. Use `googleAds.uploadUserListMembers` to add or remove Customer Match identifiers through Google's Data Manager API. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("Upload user-list members", () => { onDashboardRun({ title: "Upload user-list members" }) googleAds.uploadUserListMembers({ customerId: "1234567890", customerMatchTermsAccepted: true, userList: "customers/1234567890/userLists/111", operation: "create", identifiers: [ { type: "hashedEmail", hashedEmail: "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef", }, ], }) }) ``` ## Inputs Set customer, user-list resource name, operation, and 1–10,000 identifiers. Emails and phones must already be normalized and SHA-256 hashed. Send contact information, mobile IDs, and user IDs in separate requests. Adding members requires `customerMatchTermsAccepted: true`; you may also provide consent and use `validateOnly`. This action requests Google's Data Manager OAuth scope. All customer-scoped actions accept optional `loginCustomerId` for manager-account access and a named Google account binding. ## Output Returns the Data Manager request ID and any immediate field warnings. # Google Ads Source: https://docs.automate.ax/reference/integrations/google-ads/index Manage and report on Google Ads customers, campaigns, creative, conversions, audiences, and change events. Use the Google Ads integration to operate paid campaigns and turn account changes into typed automation inputs. Automate.ax handles OAuth, the platform developer token, manager headers, pagination, retries, and polling. ## Exports ```ts theme={null} import { googleAds, googleAccount } from "automate.ax/google-ads" ``` * `googleAds` contains the packaged actions and triggers. * `googleAccount("name")` selects a named Google connection. ## Account hierarchy Use `listAccessibleCustomers` to find accounts directly available to the OAuth identity. Use `listCustomerClients` to traverse a manager account. For calls to a managed client, set `customerId` to the client and `loginCustomerId` to the manager. Customer IDs accept the displayed dashed form or 10 digits. ## Triggers * [On change](/reference/integrations/google-ads/triggers/on-change) * [On campaign created](/reference/integrations/google-ads/triggers/on-campaign-created) * [On campaign updated](/reference/integrations/google-ads/triggers/on-campaign-updated) * [On campaign removed](/reference/integrations/google-ads/triggers/on-campaign-removed) * [On campaign budget created](/reference/integrations/google-ads/triggers/on-campaign-budget-created) * [On campaign budget updated](/reference/integrations/google-ads/triggers/on-campaign-budget-updated) * [On campaign budget removed](/reference/integrations/google-ads/triggers/on-campaign-budget-removed) * [On ad group created](/reference/integrations/google-ads/triggers/on-ad-group-created) * [On ad group updated](/reference/integrations/google-ads/triggers/on-ad-group-updated) * [On ad group removed](/reference/integrations/google-ads/triggers/on-ad-group-removed) * [On ad created](/reference/integrations/google-ads/triggers/on-ad-group-ad-created) * [On ad updated](/reference/integrations/google-ads/triggers/on-ad-group-ad-updated) * [On ad removed](/reference/integrations/google-ads/triggers/on-ad-group-ad-removed) * [On ad-group asset linked](/reference/integrations/google-ads/triggers/on-ad-group-asset-created) * [On ad-group asset updated](/reference/integrations/google-ads/triggers/on-ad-group-asset-updated) * [On ad-group asset unlinked](/reference/integrations/google-ads/triggers/on-ad-group-asset-removed) * [On asset created](/reference/integrations/google-ads/triggers/on-asset-created) * [On asset updated](/reference/integrations/google-ads/triggers/on-asset-updated) * [On asset removed](/reference/integrations/google-ads/triggers/on-asset-removed) * [On campaign asset linked](/reference/integrations/google-ads/triggers/on-campaign-asset-created) * [On campaign asset updated](/reference/integrations/google-ads/triggers/on-campaign-asset-updated) * [On campaign asset unlinked](/reference/integrations/google-ads/triggers/on-campaign-asset-removed) ## Actions * [Create Ad Group](/reference/integrations/google-ads/actions/create-ad-group) * [Create Audience](/reference/integrations/google-ads/actions/create-audience) * [Create Campaign](/reference/integrations/google-ads/actions/create-campaign) * [Create Campaign Budget](/reference/integrations/google-ads/actions/create-campaign-budget) * [Create Conversion Action](/reference/integrations/google-ads/actions/create-conversion-action) * [Create Asset](/reference/integrations/google-ads/actions/create-asset) * [Create Responsive Search Ad](/reference/integrations/google-ads/actions/create-responsive-search-ad) * [Create User List](/reference/integrations/google-ads/actions/create-user-list) * [Get Ad Group Performance](/reference/integrations/google-ads/actions/get-ad-group-performance) * [Get Ad Performance](/reference/integrations/google-ads/actions/get-ad-performance) * [Get Campaign Performance](/reference/integrations/google-ads/actions/get-campaign-performance) * [Get Conversion Performance](/reference/integrations/google-ads/actions/get-conversion-performance) * [Get Customer](/reference/integrations/google-ads/actions/get-customer) * [Link Ad Group Asset](/reference/integrations/google-ads/actions/link-ad-group-asset) * [Link Campaign Asset](/reference/integrations/google-ads/actions/link-campaign-asset) * [List Accessible Customers](/reference/integrations/google-ads/actions/list-accessible-customers) * [List Ad Group Ads](/reference/integrations/google-ads/actions/list-ad-group-ads) * [List Ad Groups](/reference/integrations/google-ads/actions/list-ad-groups) * [List Assets](/reference/integrations/google-ads/actions/list-assets) * [List Audiences](/reference/integrations/google-ads/actions/list-audiences) * [List Campaign Budgets](/reference/integrations/google-ads/actions/list-campaign-budgets) * [List Campaigns](/reference/integrations/google-ads/actions/list-campaigns) * [List Conversion Actions](/reference/integrations/google-ads/actions/list-conversion-actions) * [List Customer Clients](/reference/integrations/google-ads/actions/list-customer-clients) * [List User Lists](/reference/integrations/google-ads/actions/list-user-lists) * [Query Report](/reference/integrations/google-ads/actions/query-report) * [Remove Ad Group](/reference/integrations/google-ads/actions/remove-ad-group) * [Remove Ad Group Ad](/reference/integrations/google-ads/actions/remove-ad-group-ad) * [Remove Campaign](/reference/integrations/google-ads/actions/remove-campaign) * [Remove Campaign Budget](/reference/integrations/google-ads/actions/remove-campaign-budget) * [Remove Conversion Action](/reference/integrations/google-ads/actions/remove-conversion-action) * [Remove User List](/reference/integrations/google-ads/actions/remove-user-list) * [Unlink Ad Group Asset](/reference/integrations/google-ads/actions/unlink-ad-group-asset) * [Unlink Campaign Asset](/reference/integrations/google-ads/actions/unlink-campaign-asset) * [Update Ad Group](/reference/integrations/google-ads/actions/update-ad-group) * [Update Ad Group Ad Status](/reference/integrations/google-ads/actions/update-ad-group-ad-status) * [Update Ad Group Asset](/reference/integrations/google-ads/actions/update-ad-group-asset) * [Update Asset Name](/reference/integrations/google-ads/actions/update-asset-name) * [Update Audience](/reference/integrations/google-ads/actions/update-audience) * [Update Campaign](/reference/integrations/google-ads/actions/update-campaign) * [Update Campaign Asset](/reference/integrations/google-ads/actions/update-campaign-asset) * [Update Campaign Budget](/reference/integrations/google-ads/actions/update-campaign-budget) * [Update Conversion Action](/reference/integrations/google-ads/actions/update-conversion-action) * [Update User List](/reference/integrations/google-ads/actions/update-user-list) * [Upload Call Conversions](/reference/integrations/google-ads/actions/upload-call-conversions) * [Upload Click Conversions](/reference/integrations/google-ads/actions/upload-click-conversions) * [Upload Conversion Adjustments](/reference/integrations/google-ads/actions/upload-conversion-adjustments) * [Upload User List Members](/reference/integrations/google-ads/actions/upload-user-list-members) ## Provider behavior Google Ads reports use GAQL. Search responses contain fixed 10,000-row pages; continue with `nextPageToken` and the identical query. Mutations return resource names. Provider quotas and access levels apply, and errors include Google's request ID when available. Change triggers don't form a complete audit log. Google omits Ads Editor and criterion-level changes, and some rows visible in Change History have no ChangeEvent. Use Google's change-status reporting when you need those changes. # On ad created Source: https://docs.automate.ax/reference/integrations/google-ads/triggers/on-ad-group-ad-created Run an automation when an ad-group ad is created in Google Ads. `googleAds.onAdGroupAdCreated` emits changes observed after the trigger establishes its baseline. Existing changes aren't replayed. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("On ad created", () => { const change = googleAds.onAdGroupAdCreated({ customerId: "1234567890" }) googleAds.getCustomer({ customerId: change.customerId }) }) ``` ## Options Set the static `customerId` to the 10-digit Google Ads customer, with or without dashes. Set `loginCustomerId` when a manager account authorizes the client. `account` selects a named Google connection. Signals can't select these values at runtime. ## Trigger data Returns `{ customerId, event }`. The event includes its stable resource name, changed resource name and type, operation, change time, changed-field mask, and available campaign, ad-group, asset, user, and client metadata. Automate.ax polls once per minute. Google can delay change events, so delivery is not immediate. Google only exposes change history from the previous 30 days and caps a query at 10,000 rows. # On ad removed Source: https://docs.automate.ax/reference/integrations/google-ads/triggers/on-ad-group-ad-removed Run an automation when an ad-group ad is removed in Google Ads. `googleAds.onAdGroupAdRemoved` emits changes observed after the trigger establishes its baseline. Existing changes aren't replayed. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("On ad removed", () => { const change = googleAds.onAdGroupAdRemoved({ customerId: "1234567890" }) googleAds.getCustomer({ customerId: change.customerId }) }) ``` ## Options Set the static `customerId` to the 10-digit Google Ads customer, with or without dashes. Set `loginCustomerId` when a manager account authorizes the client. `account` selects a named Google connection. Signals can't select these values at runtime. ## Trigger data Returns `{ customerId, event }`. The event includes its stable resource name, changed resource name and type, operation, change time, changed-field mask, and available campaign, ad-group, asset, user, and client metadata. Automate.ax polls once per minute. Google can delay change events, so delivery is not immediate. Google only exposes change history from the previous 30 days and caps a query at 10,000 rows. # On ad updated Source: https://docs.automate.ax/reference/integrations/google-ads/triggers/on-ad-group-ad-updated Run an automation when an ad-group ad is updated in Google Ads. `googleAds.onAdGroupAdUpdated` emits changes observed after the trigger establishes its baseline. Existing changes aren't replayed. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("On ad updated", () => { const change = googleAds.onAdGroupAdUpdated({ customerId: "1234567890" }) googleAds.getCustomer({ customerId: change.customerId }) }) ``` ## Options Set the static `customerId` to the 10-digit Google Ads customer, with or without dashes. Set `loginCustomerId` when a manager account authorizes the client. `account` selects a named Google connection. Signals can't select these values at runtime. ## Trigger data Returns `{ customerId, event }`. The event includes its stable resource name, changed resource name and type, operation, change time, changed-field mask, and available campaign, ad-group, asset, user, and client metadata. `oldResource` and `newResource` contain the changed fields Google provides. Automate.ax polls once per minute. Google can delay change events, so delivery is not immediate. Google only exposes change history from the previous 30 days and caps a query at 10,000 rows. # On ad-group asset linked Source: https://docs.automate.ax/reference/integrations/google-ads/triggers/on-ad-group-asset-created Run an automation when an asset is linked to a Google Ads ad group. `googleAds.onAdGroupAssetCreated` emits changes observed after the trigger establishes its baseline. Existing changes aren't replayed. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("On ad-group asset linked", () => { const change = googleAds.onAdGroupAssetCreated({ customerId: "1234567890" }) googleAds.getCustomer({ customerId: change.customerId }) }) ``` ## Options Set the static `customerId` to the 10-digit Google Ads customer, with or without dashes. Set `loginCustomerId` when a manager account authorizes the client. `account` selects a named Google connection. Signals can't select these values at runtime. ## Trigger data Returns `{ customerId, event }`. The event identifies the asset-link resource, operation, change time, changed-field mask, and available campaign, ad-group, asset, user, and client metadata. Automate.ax polls once per minute. Google can delay change events, so delivery is not immediate. Google only exposes change history from the previous 30 days and caps a query at 10,000 rows. # On ad-group asset unlinked Source: https://docs.automate.ax/reference/integrations/google-ads/triggers/on-ad-group-asset-removed Run an automation when an asset is unlinked from a Google Ads ad group. `googleAds.onAdGroupAssetRemoved` emits changes observed after the trigger establishes its baseline. Existing changes aren't replayed. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("On ad-group asset unlinked", () => { const change = googleAds.onAdGroupAssetRemoved({ customerId: "1234567890" }) googleAds.getCustomer({ customerId: change.customerId }) }) ``` ## Options Set the static `customerId` to the 10-digit Google Ads customer, with or without dashes. Set `loginCustomerId` when a manager account authorizes the client. `account` selects a named Google connection. Signals can't select these values at runtime. ## Trigger data Returns `{ customerId, event }`. The event identifies the asset-link resource, operation, change time, changed-field mask, and available campaign, ad-group, asset, user, and client metadata. Automate.ax polls once per minute. Google can delay change events, so delivery is not immediate. Google only exposes change history from the previous 30 days and caps a query at 10,000 rows. # On ad-group asset updated Source: https://docs.automate.ax/reference/integrations/google-ads/triggers/on-ad-group-asset-updated Run an automation when a Google Ads ad-group asset link is updated. `googleAds.onAdGroupAssetUpdated` emits link changes observed after the trigger establishes its baseline. Existing changes aren't replayed. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("On ad-group asset updated", () => { const change = googleAds.onAdGroupAssetUpdated({ customerId: "1234567890" }) googleAds.getCustomer({ customerId: change.customerId }) }) ``` ## Options Set the static `customerId` to the 10-digit Google Ads customer, with or without dashes. Set `loginCustomerId` when a manager account authorizes the client. `account` selects a named Google connection. Signals can't select these values at runtime. ## Trigger data Returns `{ customerId, event }`. The event identifies the asset-link resource, operation, change time, changed-field mask, and available metadata. `oldResource` and `newResource` contain the changed fields Google provides. Automate.ax polls once per minute. Google can delay change events, so delivery is not immediate. Google only exposes change history from the previous 30 days and caps a query at 10,000 rows. # On ad group created Source: https://docs.automate.ax/reference/integrations/google-ads/triggers/on-ad-group-created Run an automation when an ad group is created in Google Ads. `googleAds.onAdGroupCreated` emits changes observed after the trigger establishes its baseline. Existing changes aren't replayed. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("On ad group created", () => { const change = googleAds.onAdGroupCreated({ customerId: "1234567890" }) googleAds.getCustomer({ customerId: change.customerId }) }) ``` ## Options Set the static `customerId` to the 10-digit Google Ads customer, with or without dashes. Set `loginCustomerId` when a manager account authorizes the client. `account` selects a named Google connection. Signals can't select these values at runtime. ## Trigger data Returns `{ customerId, event }`. The event includes its stable resource name, changed resource name and type, operation, change time, changed-field mask, and available campaign, ad-group, asset, user, and client metadata. Automate.ax polls once per minute. Google can delay change events, so delivery is not immediate. Google only exposes change history from the previous 30 days and caps a query at 10,000 rows. # On ad group removed Source: https://docs.automate.ax/reference/integrations/google-ads/triggers/on-ad-group-removed Run an automation when an ad group is removed in Google Ads. `googleAds.onAdGroupRemoved` emits changes observed after the trigger establishes its baseline. Existing changes aren't replayed. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("On ad group removed", () => { const change = googleAds.onAdGroupRemoved({ customerId: "1234567890" }) googleAds.getCustomer({ customerId: change.customerId }) }) ``` ## Options Set the static `customerId` to the 10-digit Google Ads customer, with or without dashes. Set `loginCustomerId` when a manager account authorizes the client. `account` selects a named Google connection. Signals can't select these values at runtime. ## Trigger data Returns `{ customerId, event }`. The event includes its stable resource name, changed resource name and type, operation, change time, changed-field mask, and available campaign, ad-group, asset, user, and client metadata. Automate.ax polls once per minute. Google can delay change events, so delivery is not immediate. Google only exposes change history from the previous 30 days and caps a query at 10,000 rows. # On ad group updated Source: https://docs.automate.ax/reference/integrations/google-ads/triggers/on-ad-group-updated Run an automation when an ad group is updated in Google Ads. `googleAds.onAdGroupUpdated` emits changes observed after the trigger establishes its baseline. Existing changes aren't replayed. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("On ad group updated", () => { const change = googleAds.onAdGroupUpdated({ customerId: "1234567890" }) googleAds.getCustomer({ customerId: change.customerId }) }) ``` ## Options Set the static `customerId` to the 10-digit Google Ads customer, with or without dashes. Set `loginCustomerId` when a manager account authorizes the client. `account` selects a named Google connection. Signals can't select these values at runtime. ## Trigger data Returns `{ customerId, event }`. The event includes its stable resource name, changed resource name and type, operation, change time, changed-field mask, and available campaign, ad-group, asset, user, and client metadata. `oldResource` and `newResource` contain the changed fields Google provides. Automate.ax polls once per minute. Google can delay change events, so delivery is not immediate. Google only exposes change history from the previous 30 days and caps a query at 10,000 rows. # On asset created Source: https://docs.automate.ax/reference/integrations/google-ads/triggers/on-asset-created Run an automation when an asset is created in Google Ads. `googleAds.onAssetCreated` emits changes observed after the trigger establishes its baseline. Existing changes aren't replayed. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("On asset created", () => { const change = googleAds.onAssetCreated({ customerId: "1234567890" }) googleAds.getCustomer({ customerId: change.customerId }) }) ``` ## Options Set the static `customerId` to the 10-digit Google Ads customer, with or without dashes. Set `loginCustomerId` when a manager account authorizes the client. `account` selects a named Google connection. Signals can't select these values at runtime. ## Trigger data Returns `{ customerId, event }`. The event includes its stable resource name, changed resource name and type, operation, change time, changed-field mask, and available campaign, ad-group, asset, user, and client metadata. Automate.ax polls once per minute. Google can delay change events, so delivery is not immediate. Google only exposes change history from the previous 30 days and caps a query at 10,000 rows. # On asset removed Source: https://docs.automate.ax/reference/integrations/google-ads/triggers/on-asset-removed Run an automation when an asset is removed in Google Ads. `googleAds.onAssetRemoved` emits changes observed after the trigger establishes its baseline. Existing changes aren't replayed. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("On asset removed", () => { const change = googleAds.onAssetRemoved({ customerId: "1234567890" }) googleAds.getCustomer({ customerId: change.customerId }) }) ``` ## Options Set the static `customerId` to the 10-digit Google Ads customer, with or without dashes. Set `loginCustomerId` when a manager account authorizes the client. `account` selects a named Google connection. Signals can't select these values at runtime. ## Trigger data Returns `{ customerId, event }`. The event includes its stable resource name, changed resource name and type, operation, change time, changed-field mask, and available campaign, ad-group, asset, user, and client metadata. Automate.ax polls once per minute. Google can delay change events, so delivery is not immediate. Google only exposes change history from the previous 30 days and caps a query at 10,000 rows. # On asset updated Source: https://docs.automate.ax/reference/integrations/google-ads/triggers/on-asset-updated Run an automation when an asset is updated in Google Ads. `googleAds.onAssetUpdated` emits changes observed after the trigger establishes its baseline. Existing changes aren't replayed. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("On asset updated", () => { const change = googleAds.onAssetUpdated({ customerId: "1234567890" }) googleAds.getCustomer({ customerId: change.customerId }) }) ``` ## Options Set the static `customerId` to the 10-digit Google Ads customer, with or without dashes. Set `loginCustomerId` when a manager account authorizes the client. `account` selects a named Google connection. Signals can't select these values at runtime. ## Trigger data Returns `{ customerId, event }`. The event includes its stable resource name, changed resource name and type, operation, change time, changed-field mask, and available campaign, ad-group, asset, user, and client metadata. `oldResource` and `newResource` contain the changed fields Google provides. Automate.ax polls once per minute. Google can delay change events, so delivery is not immediate. Google only exposes change history from the previous 30 days and caps a query at 10,000 rows. # On campaign asset linked Source: https://docs.automate.ax/reference/integrations/google-ads/triggers/on-campaign-asset-created Run an automation when an asset is linked to a Google Ads campaign. `googleAds.onCampaignAssetCreated` emits changes observed after the trigger establishes its baseline. Existing changes aren't replayed. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("On campaign asset linked", () => { const change = googleAds.onCampaignAssetCreated({ customerId: "1234567890" }) googleAds.getCustomer({ customerId: change.customerId }) }) ``` ## Options Set the static `customerId` to the 10-digit Google Ads customer, with or without dashes. Set `loginCustomerId` when a manager account authorizes the client. `account` selects a named Google connection. Signals can't select these values at runtime. ## Trigger data Returns `{ customerId, event }`. The event identifies the asset-link resource, operation, change time, changed-field mask, and available campaign, ad-group, asset, user, and client metadata. Automate.ax polls once per minute. Google can delay change events, so delivery is not immediate. Google only exposes change history from the previous 30 days and caps a query at 10,000 rows. # On campaign asset unlinked Source: https://docs.automate.ax/reference/integrations/google-ads/triggers/on-campaign-asset-removed Run an automation when an asset is unlinked from a Google Ads campaign. `googleAds.onCampaignAssetRemoved` emits changes observed after the trigger establishes its baseline. Existing changes aren't replayed. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("On campaign asset unlinked", () => { const change = googleAds.onCampaignAssetRemoved({ customerId: "1234567890" }) googleAds.getCustomer({ customerId: change.customerId }) }) ``` ## Options Set the static `customerId` to the 10-digit Google Ads customer, with or without dashes. Set `loginCustomerId` when a manager account authorizes the client. `account` selects a named Google connection. Signals can't select these values at runtime. ## Trigger data Returns `{ customerId, event }`. The event identifies the asset-link resource, operation, change time, changed-field mask, and available campaign, ad-group, asset, user, and client metadata. Automate.ax polls once per minute. Google can delay change events, so delivery is not immediate. Google only exposes change history from the previous 30 days and caps a query at 10,000 rows. # On campaign asset updated Source: https://docs.automate.ax/reference/integrations/google-ads/triggers/on-campaign-asset-updated Run an automation when a Google Ads campaign asset link is updated. `googleAds.onCampaignAssetUpdated` emits link changes observed after the trigger establishes its baseline. Existing changes aren't replayed. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("On campaign asset updated", () => { const change = googleAds.onCampaignAssetUpdated({ customerId: "1234567890", }) googleAds.getCustomer({ customerId: change.customerId }) }) ``` ## Options Set the static `customerId` to the 10-digit Google Ads customer, with or without dashes. Set `loginCustomerId` when a manager account authorizes the client. `account` selects a named Google connection. Signals can't select these values at runtime. ## Trigger data Returns `{ customerId, event }`. The event identifies the asset-link resource, operation, change time, changed-field mask, and available metadata. `oldResource` and `newResource` contain the changed fields Google provides. Automate.ax polls once per minute. Google can delay change events, so delivery is not immediate. Google only exposes change history from the previous 30 days and caps a query at 10,000 rows. # On campaign budget created Source: https://docs.automate.ax/reference/integrations/google-ads/triggers/on-campaign-budget-created Run an automation when a campaign budget is created in Google Ads. `googleAds.onCampaignBudgetCreated` emits changes observed after the trigger establishes its baseline. Existing changes aren't replayed. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("On campaign budget created", () => { const change = googleAds.onCampaignBudgetCreated({ customerId: "1234567890" }) googleAds.getCustomer({ customerId: change.customerId }) }) ``` ## Options Set the static `customerId` to the 10-digit Google Ads customer, with or without dashes. Set `loginCustomerId` when a manager account authorizes the client. `account` selects a named Google connection. Signals can't select these values at runtime. ## Trigger data Returns `{ customerId, event }`. The event includes its stable resource name, changed resource name and type, operation, change time, changed-field mask, and available campaign, ad-group, asset, user, and client metadata. Automate.ax polls once per minute. Google can delay change events, so delivery is not immediate. Google only exposes change history from the previous 30 days and caps a query at 10,000 rows. # On campaign budget removed Source: https://docs.automate.ax/reference/integrations/google-ads/triggers/on-campaign-budget-removed Run an automation when a campaign budget is removed in Google Ads. `googleAds.onCampaignBudgetRemoved` emits changes observed after the trigger establishes its baseline. Existing changes aren't replayed. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("On campaign budget removed", () => { const change = googleAds.onCampaignBudgetRemoved({ customerId: "1234567890" }) googleAds.getCustomer({ customerId: change.customerId }) }) ``` ## Options Set the static `customerId` to the 10-digit Google Ads customer, with or without dashes. Set `loginCustomerId` when a manager account authorizes the client. `account` selects a named Google connection. Signals can't select these values at runtime. ## Trigger data Returns `{ customerId, event }`. The event includes its stable resource name, changed resource name and type, operation, change time, changed-field mask, and available campaign, ad-group, asset, user, and client metadata. Automate.ax polls once per minute. Google can delay change events, so delivery is not immediate. Google only exposes change history from the previous 30 days and caps a query at 10,000 rows. # On campaign budget updated Source: https://docs.automate.ax/reference/integrations/google-ads/triggers/on-campaign-budget-updated Run an automation when a campaign budget is updated in Google Ads. `googleAds.onCampaignBudgetUpdated` emits changes observed after the trigger establishes its baseline. Existing changes aren't replayed. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("On campaign budget updated", () => { const change = googleAds.onCampaignBudgetUpdated({ customerId: "1234567890" }) googleAds.getCustomer({ customerId: change.customerId }) }) ``` ## Options Set the static `customerId` to the 10-digit Google Ads customer, with or without dashes. Set `loginCustomerId` when a manager account authorizes the client. `account` selects a named Google connection. Signals can't select these values at runtime. ## Trigger data Returns `{ customerId, event }`. The event includes its stable resource name, changed resource name and type, operation, change time, changed-field mask, and available campaign, ad-group, asset, user, and client metadata. `oldResource` and `newResource` contain the changed fields Google provides. Automate.ax polls once per minute. Google can delay change events, so delivery is not immediate. Google only exposes change history from the previous 30 days and caps a query at 10,000 rows. # On campaign created Source: https://docs.automate.ax/reference/integrations/google-ads/triggers/on-campaign-created Run an automation when a campaign is created in Google Ads. `googleAds.onCampaignCreated` emits changes observed after the trigger establishes its baseline. Existing changes aren't replayed. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("On campaign created", () => { const change = googleAds.onCampaignCreated({ customerId: "1234567890" }) googleAds.getCustomer({ customerId: change.customerId }) }) ``` ## Options Set the static `customerId` to the 10-digit Google Ads customer, with or without dashes. Set `loginCustomerId` when a manager account authorizes the client. `account` selects a named Google connection. Signals can't select these values at runtime. ## Trigger data Returns `{ customerId, event }`. The event includes its stable resource name, changed resource name and type, operation, change time, changed-field mask, and available campaign, ad-group, asset, user, and client metadata. Automate.ax polls once per minute. Google can delay change events, so delivery is not immediate. Google only exposes change history from the previous 30 days and caps a query at 10,000 rows. # On campaign removed Source: https://docs.automate.ax/reference/integrations/google-ads/triggers/on-campaign-removed Run an automation when a campaign is removed in Google Ads. `googleAds.onCampaignRemoved` emits changes observed after the trigger establishes its baseline. Existing changes aren't replayed. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("On campaign removed", () => { const change = googleAds.onCampaignRemoved({ customerId: "1234567890" }) googleAds.getCustomer({ customerId: change.customerId }) }) ``` ## Options Set the static `customerId` to the 10-digit Google Ads customer, with or without dashes. Set `loginCustomerId` when a manager account authorizes the client. `account` selects a named Google connection. Signals can't select these values at runtime. ## Trigger data Returns `{ customerId, event }`. The event includes its stable resource name, changed resource name and type, operation, change time, changed-field mask, and available campaign, ad-group, asset, user, and client metadata. Automate.ax polls once per minute. Google can delay change events, so delivery is not immediate. Google only exposes change history from the previous 30 days and caps a query at 10,000 rows. # On campaign updated Source: https://docs.automate.ax/reference/integrations/google-ads/triggers/on-campaign-updated Run an automation when a campaign is updated in Google Ads. `googleAds.onCampaignUpdated` emits changes observed after the trigger establishes its baseline. Existing changes aren't replayed. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("On campaign updated", () => { const change = googleAds.onCampaignUpdated({ customerId: "1234567890" }) googleAds.getCustomer({ customerId: change.customerId }) }) ``` ## Options Set the static `customerId` to the 10-digit Google Ads customer, with or without dashes. Set `loginCustomerId` when a manager account authorizes the client. `account` selects a named Google connection. Signals can't select these values at runtime. ## Trigger data Returns `{ customerId, event }`. The event includes its stable resource name, changed resource name and type, operation, change time, changed-field mask, and available campaign, ad-group, asset, user, and client metadata. `oldResource` and `newResource` contain the changed fields Google provides. Automate.ax polls once per minute. Google can delay change events, so delivery is not immediate. Google only exposes change history from the previous 30 days and caps a query at 10,000 rows. # On change Source: https://docs.automate.ax/reference/integrations/google-ads/triggers/on-change Run an automation when any supported campaign, budget, ad-group, ad, or asset change in Google Ads. `googleAds.onChange` emits changes observed after the trigger establishes its baseline. Existing changes aren't replayed. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleAds } from "automate.ax/google-ads" export default automation("On change", () => { const change = googleAds.onChange({ customerId: "1234567890" }) googleAds.getCustomer({ customerId: change.customerId }) }) ``` ## Options Set the static `customerId` to the 10-digit Google Ads customer, with or without dashes. Set `loginCustomerId` when a manager account authorizes the client. `account` selects a named Google connection. Signals can't select these values at runtime. ## Trigger data Returns `{ customerId, event }`. The event includes its stable resource name, changed resource name and type, operation, change time, changed-field mask, and available campaign, ad-group, asset, user, and client metadata. Update events include `oldResource` and `newResource` snapshots containing the changed fields Google provides. Automate.ax polls once per minute. Google can delay change events, so delivery is not immediate. Google only exposes change history from the previous 30 days and caps a query at 10,000 rows. This trigger isn't a complete audit log. Google omits Ads Editor and criterion-level changes, and some rows visible in Change History have no ChangeEvent. # Add calendar to list Source: https://docs.automate.ax/reference/integrations/google-calendar/actions/add-calendar-to-list Add an accessible calendar to the connected user's calendar list. `googleCalendar.addToCalendarList` adds an existing calendar and can set its initial display preferences. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("Subscribe to a team calendar", () => { onDashboardRun({ title: "Subscribe to a team calendar" }) googleCalendar.addToCalendarList({ calendar: "team@example.com", selected: true, summaryOverride: "Launch team", backgroundColor: "#1A73E8", }) }) ``` ## Inputs Provide the accessible calendar ID in `calendar` even when the calendar isn't in the user's list. Optional `backgroundColor` and `foregroundColor` require `#RRGGBB`. `hidden`, `selected`, and `summaryOverride` set user preferences. `notifications` is an array of `{ type }` where type is `eventCreation`, `eventChange`, `eventCancellation`, `eventResponse`, or `agenda`. Second argument `{ account }` selects the Google Account. ## Output Returns the new calendar-list `Calendar`. See [Get calendar-list entry](/reference/integrations/google-calendar/actions/get-calendar-list-entry#output). The action subscribes to an existing calendar. It doesn't create or share one. # Clear primary calendar Source: https://docs.automate.ax/reference/integrations/google-calendar/actions/clear-primary-calendar Permanently remove every event from the connected user's primary calendar. `googleCalendar.clearPrimaryCalendar` deletes every event from the primary calendar. It can't target a secondary calendar. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("Reset the primary calendar", () => { onDashboardRun({ title: "Reset the primary calendar" }) googleCalendar.clearPrimaryCalendar() }) ``` ## Inputs Optional second argument `{ account }` selects which connected Google Account owns the primary calendar to clear. ## Output Returns `Signal<"primary">` after Google accepts the operation. > [!WARNING] > > This permanently removes all primary-calendar events. It doesn't merely hide > or unsubscribe from the calendar. # Create calendar Source: https://docs.automate.ax/reference/integrations/google-calendar/actions/create-calendar Create a secondary Google Calendar owned by the connected user. `googleCalendar.createCalendar` creates a secondary calendar instead of a new or replacement primary calendar. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("Create a launch calendar", () => { onDashboardRun({ title: "Create a launch calendar" }) googleCalendar.createCalendar({ summary: "Product launch", description: "Launch milestones and reviews", timeZone: "America/Los_Angeles", }) }) ``` ## Inputs Provide `summary: string`. Optional `description` and `location` are strings. `timeZone` accepts a name from the `IANA` database. Second argument `{ account }` selects the Google Account. ## Output Returns the created `Calendar`. See [Get calendar](/reference/integrations/google-calendar/actions/get-calendar#output). Store `id` for stable references because display titles can change or collide. # Create calendar access rule Source: https://docs.automate.ax/reference/integrations/google-calendar/actions/create-calendar-access-rule Share a Google Calendar with a user, group, domain, or the public. `googleCalendar.createAccessRule` grants a calendar role to a principal or the public. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("Share a team calendar", () => { onDashboardRun({ title: "Share a team calendar" }) googleCalendar.createAccessRule({ calendar: "Team Calendar", scope: { type: "group", value: "launch@example.com" }, role: "writer", sendNotifications: true, }) }) ``` ## Inputs | Property | Type | Required | Default | Description | | - | - | - | - | - | | `scope` | `{ type: "user" \| "group" \| "domain"; value: string } \| { type: "default" }` | Yes | None | Recipient or public scope. `default` means public and must not include a value. | | `role` | `"none" \| "freeBusyReader" \| "reader" \| "writerWithoutPrivateAccess" \| "writer" \| "owner"` | Yes | None | Permission to grant. | | `calendar` | `string` | No | `"primary"` | Exact title or ID. | | `sendNotifications` | `boolean` | No | Google default | Whether Google emails the recipient. | | Second argument: `{ account }` | Google Account reference | No | Project default | Connected account. | ## Output Returns the created `{ id, role, scope }`. Preserve `id` for updates or deletion. > [!WARNING] > > A `default` scope can make the calendar public. Grant `owner` only when > transferring owner-level control is intended and supported by Google. # Create event Source: https://docs.automate.ax/reference/integrations/google-calendar/actions/create-event Create a timed or all-day Google Calendar event with optional attendees and Google Meet. Use `googleCalendar.createEvent` for explicit control over dates, guests, recurrence, and notifications. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("Schedule weekly planning", () => { onDashboardRun({ title: "Schedule weekly planning" }) googleCalendar.createEvent({ calendar: "Team Calendar", summary: "Weekly planning", schedule: { start: "2026-08-10T09:00:00-07:00", end: "2026-08-10T09:45:00-07:00", timeZone: "America/Los_Angeles", }, attendees: [{ email: "ada@example.com" }], recurrence: ["RRULE:FREQ=WEEKLY;BYDAY=MO"], createMeet: true, sendUpdates: "all", }) }) ``` ## Inputs | Property | Type | Required | Default | Description | | - | - | - | - | - | | `summary` | `string` | Yes | None | Event title. | | `schedule` | `{ start: string; end: string; timeZone?: string } \| { startDate: string; endDate?: string }` | Yes | None | Timed interval in `RFC 3339` format or all-day dates in `ISO 8601` format. The all-day end is exclusive and defaults to the next day. | | `calendar` | `string` | No | `"primary"` | Exact calendar title or ID. | | `description`, `location`, `colorId` | `string` | No | None | Display details and Calendar color ID. | | `attendees` | `EventAttendeeInput[]` | No | `[]` | Guest emails plus optional name, response, resource, optional-attendance, comment, and additional-guest fields. | | `attachments` | `{ fileUrl: string; fileId?: string; title?: string; mimeType?: string }[]` | No | `[]` | Up to 25 event attachments. | | `recurrence` | `string[]` | No | `[]` | Lines in `RFC 5545` format, such as `RRULE:FREQ=WEEKLY;BYDAY=MO`. | | `reminders` | `{ useDefault: true } \| { useDefault: false; overrides: Reminder[] }` | No | Calendar defaults | Up to five event-specific email or popup reminders. | | `extendedProperties` | `{ private?: Record; shared?: Record }` | No | None | Properties defined by the app. | | `transparency` | `"opaque" \| "transparent"` | No | Provider default | Whether the event blocks time. | | `visibility` | `"default" \| "public" \| "private" \| "confidential"` | No | `"default"` | Event visibility. | | `guestsCanInviteOthers`, `guestsCanModify`, `guestsCanSeeOtherGuests` | `boolean` | No | Google defaults | Guest permissions. | | `createMeet` | `boolean` | No | `false` | Create and attach a new Google Meet. | | `sendUpdates` | `"all" \| "externalOnly" \| "none"` | No | Google default | Guest notification behavior. | | Second argument: `{ account }` | Google Account reference | No | Project default | Connected Google Account. | ## Output Returns the created `CalendarEvent`. See [Get event](/reference/integrations/google-calendar/actions/get-event#output). Keep `id` and `calendarId` for later updates, moves, or deletion. Meet creation may initially report `conference.creationStatus: "pending"`. > [!WARNING] > > `sendUpdates: "all"` can email every guest. Use `"none"` deliberately when > testing, but Google recommends notifications for material guest changes. # Delete calendar Source: https://docs.automate.ax/reference/integrations/google-calendar/actions/delete-calendar Permanently delete an owned secondary Google Calendar. `googleCalendar.deleteCalendar` deletes a secondary calendar owned by the connected account. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("Delete an obsolete calendar", () => { onDashboardRun({ title: "Delete an obsolete calendar" }) googleCalendar.deleteCalendar({ calendar: "Obsolete project" }) }) ``` ## Inputs Provide an exact title or ID in `calendar: string`. Second argument `{ account }` selects the Google Account. ## Output Returns the immutable deleted calendar ID. Google Calendar won't let you delete the primary calendar. To stop displaying a shared calendar without destroying it, use [Remove calendar from list](/reference/integrations/google-calendar/actions/remove-calendar-from-list). # Delete calendar access rule Source: https://docs.automate.ax/reference/integrations/google-calendar/actions/delete-calendar-access-rule Remove one Google Calendar sharing or access-control rule. `googleCalendar.deleteAccessRule` revokes access by the immutable ID of a calendar access rule. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("Revoke calendar access", () => { onDashboardRun({ title: "Revoke calendar access" }) googleCalendar.deleteAccessRule({ calendar: "Team Calendar", ruleId: "user:former@example.com", }) }) ``` ## Inputs Provide `ruleId: string`. `calendar` defaults to primary and second argument `{ account }` selects the Google Account. ## Output Returns `Signal<{ calendarId: string; ruleId: string }>` after deletion. Revoking a rule can immediately remove the principal's calendar and event access. # Delete event Source: https://docs.automate.ax/reference/integrations/google-calendar/actions/delete-event Delete or cancel one Google Calendar event. `googleCalendar.deleteEvent` removes an event from its calendar. To decline an invitation, use `googleCalendar.respondToInvitation` instead. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("Cancel a planning event", () => { onDashboardRun({ title: "Cancel a planning event" }) googleCalendar.deleteEvent({ calendar: "Team Calendar", event: "event-id", sendUpdates: "all", }) }) ``` ## Inputs | Property | Type | Required | Default | Description | | - | - | - | - | - | | `event` | `string` | Yes | None | Event ID or standard Calendar event URL. | | `calendar` | `string` | No | `"primary"` | Exact calendar title or ID. | | `sendUpdates` | `"all" \| "externalOnly" \| "none"` | No | Google default | Guest cancellation notification behavior. | | Second argument: `{ account }` | Google Account reference | No | Project default | Connected Google Account. | ## Output Returns `Signal<{ calendarId: string; eventId: string }>` identifying the deleted event. Delete an organizer-owned event to cancel it. Use [Respond to invitation](/reference/integrations/google-calendar/actions/respond-to-invitation) when the authenticated user is an attendee. # Find availability Source: https://docs.automate.ax/reference/integrations/google-calendar/actions/find-availability Find fixed-duration times when every selected Google calendar is free. `googleCalendar.findAvailability` turns free/busy data into available time slots. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("Find interview slots", () => { onDashboardRun({ title: "Find interview slots" }) googleCalendar.findAvailability({ calendars: ["recruiter@example.com", "room-1@example.com"], timeMin: "2026-08-10T09:00:00-07:00", timeMax: "2026-08-10T17:00:00-07:00", durationMinutes: 45, stepMinutes: 15, limit: 10, }) }) ``` ## Inputs Provide 1–50 entries in `calendars`, `timeMin` and `timeMax` as `RFC 3339` timestamps, and `durationMinutes` from 1–1,440. `stepMinutes` controls the candidate-start increment and defaults to `15`. `limit` defaults to `20` and accepts 1–1,000. `timeZone` is optional. Optional second argument `{ account }` selects the Google Account. ## Output Returns `Signal>` in chronological order. Times are timestamps in `ISO 8601` format. The action merges overlapping busy periods from all calendars before testing candidates. The action can return overlapping candidates when `stepMinutes` is shorter than `durationMinutes`. # Get calendar Source: https://docs.automate.ax/reference/integrations/google-calendar/actions/get-calendar Retrieve metadata for an accessible Google Calendar. `googleCalendar.getCalendar` returns shared metadata such as title, timezone, location, owner, conference support, and defaults. Use `googleCalendar.getCalendarListEntry` for the connected user's display and subscription settings. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("Inspect the team calendar", () => { onDashboardRun({ title: "Inspect the team calendar" }) googleCalendar.getCalendar({ calendar: "Team Calendar" }) }) ``` ## Inputs `calendar?: string` accepts an exact visible title or ID and defaults to `"primary"`. Second argument `{ account }` selects the Google Account. ## Output Returns `Signal` with `id`, `summary`, optional `description`, `location`, `timeZone`, `dataOwner`, `accessRole`, colors, list visibility, selection and deletion flags, `primary`, `autoAcceptInvitations`, `conferenceSolutionTypes`, `defaultReminders`, `notifications`, and optional `summaryOverride`. `accessRole` is `"freeBusyReader"`, `"reader"`, `"writerWithoutPrivateAccess"`, `"writer"`, or `"owner"`. List-only fields use neutral defaults when the provider's calendar resource doesn't supply them. # Get calendar access rule Source: https://docs.automate.ax/reference/integrations/google-calendar/actions/get-calendar-access-rule Retrieve one Google Calendar sharing rule by immutable ID. `googleCalendar.getAccessRule` loads the current scope and role for a calendar access rule. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("Inspect a sharing rule", () => { onDashboardRun({ title: "Inspect a sharing rule" }) googleCalendar.getAccessRule({ calendar: "Team Calendar", ruleId: "user:ada@example.com", }) }) ``` ## Inputs Provide `ruleId: string`. `calendar` defaults to primary and second argument `{ account }` selects the Google Account. ## Output Returns `{ id, role, scope }` with the shape documented by [List calendar access rules](/reference/integrations/google-calendar/actions/list-calendar-access-rules#output). Rule IDs belong to one calendar. Use the same calendar in follow-up update and delete actions. # Get calendar colors Source: https://docs.automate.ax/reference/integrations/google-calendar/actions/get-calendar-colors Get Google Calendar color IDs and values. `googleCalendar.getColors` returns the connected user's palette. Use its IDs for event and calendar-list colors. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("Load Calendar colors", () => { onDashboardRun({ title: "Load Calendar colors" }) googleCalendar.getColors() }) ``` ## Inputs Optional second argument `{ account }` selects the Google Account. ## Output Returns `{ calendars: Record; events: Record; updatedAt?: string }`. Keys are provider color IDs. Palettes can vary by account and change over time, so don't infer IDs from hex values. # Get calendar-list entry Source: https://docs.automate.ax/reference/integrations/google-calendar/actions/get-calendar-list-entry Get user-specific display and subscription settings for a Google Calendar. `googleCalendar.getCalendarListEntry` returns a calendar's colors, visibility, reminders, and notifications for the connected user. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("Inspect a calendar subscription", () => { onDashboardRun({ title: "Inspect a calendar subscription" }) googleCalendar.getCalendarListEntry({ calendar: "Team Calendar" }) }) ``` ## Inputs Provide `calendar: string`. Second argument `{ account }` selects the Google Account. ## Output Returns a `Calendar` including list-specific `backgroundColor`, `foregroundColor`, `colorId`, `hidden`, `selected`, `summaryOverride`, `defaultReminders`, `notifications`, `accessRole`, `primary`, and `deleted`, in addition to the metadata described by [Get calendar](/reference/integrations/google-calendar/actions/get-calendar#output). # Get event Source: https://docs.automate.ax/reference/integrations/google-calendar/actions/get-event Retrieve one Google Calendar event by ID or event URL. `googleCalendar.getEvent` returns an event's schedule, attendees, conferencing, recurrence, and metadata by ID or Calendar URL. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("Load a planning event", () => { onDashboardRun({ title: "Load a planning event" }) googleCalendar.getEvent({ calendar: "Team Calendar", event: "https://calendar.google.com/calendar/event?eid=...", timeZone: "America/Los_Angeles", }) }) ``` ## Inputs | Property | Type | Required | Default | Description | | - | - | - | - | - | | `event` | `string` | Yes | None | Immutable event ID or standard Google Calendar event URL. | | `calendar` | `string` | No | `"primary"` | Exact visible calendar title or ID containing the event. | | `maxAttendees` | `number` | No | Provider default | Maximum attendees returned. | | `timeZone` | `string` | No | Calendar default | Response time zone from the `IANA` database. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"google">` | No | Project default | Google Account binding to use. | Every action input accepts a compatible `Signal`. ## Output Returns a `Signal`: ```ts theme={null} interface CalendarEvent { id: string calendarId: string summary: string description?: string location?: string status: "confirmed" | "tentative" | "cancelled" start?: { date?: string; dateTime?: string; timeZone?: string } end?: { date?: string; dateTime?: string; timeZone?: string } attendees: Array<{ email: string displayName?: string responseStatus?: "needsAction" | "declined" | "tentative" | "accepted" optional?: boolean resource?: boolean organizer: boolean self: boolean }> attendeesOmitted: boolean attachments: Array<{ fileUrl: string fileId?: string title?: string mimeType?: string iconLink?: string }> conference?: { conferenceId?: string creationStatus?: "pending" | "success" | "failure" name?: string entryPoints: Array<{ type: string uri: string label?: string passcode?: string }> } hangoutLink?: string htmlLink?: string creator?: { email?: string; displayName?: string; self: boolean } organizer?: { email?: string; displayName?: string; self: boolean } recurrence: string[] recurringEventId?: string originalStart?: { date?: string; dateTime?: string; timeZone?: string } reminders: { useDefault: boolean overrides: Array<{ method: "email" | "popup"; minutes: number }> } extendedProperties: { private: Record shared: Record } colorId?: string createdAt?: string updatedAt?: string iCalUID?: string sequence: number transparency: "opaque" | "transparent" visibility: "default" | "public" | "private" | "confidential" type: | "birthday" | "default" | "focusTime" | "fromGmail" | "outOfOffice" | "workingLocation" guestsCanInviteOthers: boolean guestsCanModify: boolean guestsCanSeeOtherGuests: boolean } ``` All-day events populate `start.date` and `end.date`, with an exclusive end date. `attendeesOmitted` is true when Google returns a partial attendee list, such as when you set `maxAttendees`. The action decodes a URL to its provider event ID. Unrelated URLs fail. # Import event Source: https://docs.automate.ax/reference/integrations/google-calendar/actions/import-event Import an externally identified event into Google Calendar without sending invitations. `googleCalendar.importEvent` preserves an iCalendar unique identifier during migration or synchronization. It imports silently and doesn't invite guests. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("Import a legacy event", () => { onDashboardRun({ title: "Import a legacy event" }) googleCalendar.importEvent({ calendar: "Imported Events", iCalUID: "legacy-42@example.com", summary: "Legacy planning session", schedule: { startDate: "2026-08-10" }, }) }) ``` ## Inputs Provide `iCalUID`, `summary`, and `schedule`. You can use all event-detail fields from [Create event](/reference/integrations/google-calendar/actions/create-event#inputs) except `createMeet` and `sendUpdates`. `calendar` defaults to primary and second argument `{ account }` selects the Google Account. ## Output Returns the imported `CalendarEvent`. See [Get event](/reference/integrations/google-calendar/actions/get-event#output). Google doesn't send invitations for imported attendee data. The `iCalUID` is a cross-calendar identity, while later Calendar actions use the returned provider `id`. # List calendar access rules Source: https://docs.automate.ax/reference/integrations/google-calendar/actions/list-calendar-access-rules List one page of Google Calendar access rules. `googleCalendar.listAccessRules` returns who can access a calendar and at what role, with Google's page and sync tokens. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("Audit calendar sharing", () => { onDashboardRun({ title: "Audit calendar sharing" }) googleCalendar.listAccessRules({ calendar: "Team Calendar", maxResults: 250 }) }) ``` ## Inputs `calendar` defaults to primary. Optional `includeDeleted`, `pageToken`, and `syncToken` control the page. `maxResults` accepts 1–250. Second argument `{ account }` selects the Google Account. ## Output ```ts theme={null} interface AccessRulePage { rules: Array<{ id: string role: | "none" | "freeBusyReader" | "reader" | "writerWithoutPrivateAccess" | "writer" | "owner" scope: { type: "default" | "user" | "group" | "domain"; value?: string } }> nextPageToken?: string nextSyncToken?: string } ``` Follow all `nextPageToken` pages before storing `nextSyncToken`. Do not set `includeDeleted: false` with `syncToken`; Google always includes deleted rules during incremental sync. # List calendars Source: https://docs.automate.ax/reference/integrations/google-calendar/actions/list-calendars List one page of calendars visible to a Google Account. `googleCalendar.listCalendars` returns the connected user's calendar list with Google page and sync tokens. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("Inventory visible calendars", () => { onDashboardRun({ title: "Inventory visible calendars" }) googleCalendar.listCalendars({ includeHidden: true, maxResults: 250 }) }) ``` ## Inputs Optional `includeDeleted` and `includeHidden` booleans control list entries. `minAccessRole` accepts `"freeBusyReader"`, `"reader"`, `"writerWithoutPrivateAccess"`, `"writer"`, or `"owner"`. Set `showOwnOrganizationOnly: true` to return only calendars owned by the connected Google Workspace organization. `maxResults` accepts 1–250. Use `pageToken` from a prior page or `syncToken` from a completed prior listing. Second argument `{ account }` selects the Google Account. ## Output Returns `{ calendars: Calendar[]; nextPageToken?: string; nextSyncToken?: string }`. See [Get calendar](/reference/integrations/google-calendar/actions/get-calendar#output). Follow every page before persisting `nextSyncToken`. Access and organization filters cannot be combined with `syncToken`; explicitly excluding deleted or hidden entries is also invalid during sync. # List event instances Source: https://docs.automate.ax/reference/integrations/google-calendar/actions/list-event-instances List one page of occurrences from a recurring Google Calendar event. `googleCalendar.listEventInstances` expands one recurring parent event into its individual occurrences. Use the parent series ID, not an occurrence ID. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("List planning occurrences", () => { onDashboardRun({ title: "List planning occurrences" }) googleCalendar.listEventInstances({ calendar: "Team Calendar", event: "recurring-parent-id", timeMin: "2026-08-01T00:00:00Z", maxResults: 100, }) }) ``` ## Inputs Provide `event`. `calendar` defaults to primary. Optional `pageToken`, `includeDeleted`, `timeMin`, and `timeMax` constrain the page. `originalStart` selects the occurrence identified by its original schedule, even if it moved; use an `RFC 3339` timestamp for timed events or `YYYY-MM-DD` for all-day events. `maxResults` accepts 1–2,500, `maxAttendees` limits attendees returned per occurrence, and `timeZone` selects the response timezone. Second argument `{ account }` selects the Google Account. ## Output Returns the same event page as [List events](/reference/integrations/google-calendar/actions/list-events#output). Each occurrence normally includes `recurringEventId` and `originalStart`. Use `nextPageToken` to continue. # List events Source: https://docs.automate.ax/reference/integrations/google-calendar/actions/list-events List a filtered page of Google Calendar events with sync tokens. `googleCalendar.listEvents` returns one Google page with page and sync tokens. Use it for explicit pagination or to maintain a sync cursor. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("List this week's events", () => { onDashboardRun({ title: "List this week's events" }) googleCalendar.listEvents({ calendar: "Team Calendar", timeMin: "2026-08-10T00:00:00-07:00", timeMax: "2026-08-17T00:00:00-07:00", singleEvents: true, maxResults: 250, }) }) ``` ## Inputs | Property | Type | Required | Description | | - | - | - | - | | `calendar` | `string` | No | Exact title or ID. Defaults to primary. | | `maxResults` | `number` | No | Page size from 1 to 2,500. | | `pageToken` | `string` | No | `nextPageToken` from the previous page. | | `query` | `string` | No | Google's free-text event search. | | `iCalUID` | `string` | No | Match one cross-calendar iCalendar UID. | | `timeMin`, `timeMax`, `updatedMin` | `string` | No | Exclusive event-end lower bound, exclusive event-start upper bound, and minimum update time in `RFC 3339` format. | | `singleEvents` | `boolean` | No | Expand recurring series into instances. | | `orderBy` | `"startTime" \| "updated"` | No | Sort by start time or last update. `"startTime"` requires `singleEvents: true`; expanded events without `syncToken` default to start-time order. | | `includeDeleted` | `boolean` | No | Include cancelled/deleted representations. | | `includeHiddenInvitations` | `boolean` | No | Include invitations hidden from the connected user's calendar. | | `eventTypes` | `("birthday" \| "default" \| "focusTime" \| "fromGmail" \| "outOfOffice" \| "workingLocation")[]` | No | Event types to include. | | `maxAttendees` | `number` | No | Maximum attendees returned per event. | | `privateExtendedProperty`, `sharedExtendedProperty` | `string[]` | No | `name=value` extended-property filters. | | `syncToken` | `string` | No | Token from a completed earlier listing. | | `timeZone` | `string` | No | `IANA` response timezone. | | Second argument: `{ account }` | Google Account reference | No | Connected account. Defaults to the project binding. | ## Output Returns `{ events: CalendarEvent[]; nextPageToken?: string; nextSyncToken?: string; timeZone?: string; updatedAt?: string }`. See [Get event](/reference/integrations/google-calendar/actions/get-event#output) for each event. Follow `nextPageToken` until absent. Only then persist `nextSyncToken`. Automate.ax rejects filters that Google doesn't allow with `syncToken`. An expired token causes the provider request to fail so you can perform a full resync. # Move event Source: https://docs.automate.ax/reference/integrations/google-calendar/actions/move-event Move an organizer-owned Google Calendar event between calendars. `googleCalendar.moveEvent` transfers an organizer-owned event between calendars visible to the connected account. It can't move attendee copies. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("Move an approved event", () => { onDashboardRun({ title: "Move an approved event" }) googleCalendar.moveEvent({ sourceCalendar: "Intake", destinationCalendar: "Confirmed", event: "event-id", sendUpdates: "all", }) }) ``` ## Inputs Provide `destinationCalendar` and `event`. `sourceCalendar` defaults to primary. Calendar values accept exact visible titles or IDs. `event` accepts an ID or standard event URL. `sendUpdates` is `"all"`, `"externalOnly"`, or `"none"`. Second argument `{ account }` selects the Google Account. ## Output Returns the moved `CalendarEvent` with `calendarId` set to the destination. See [Get event](/reference/integrations/google-calendar/actions/get-event#output). Follow-up actions must use that destination calendar. # Query free/busy Source: https://docs.automate.ax/reference/integrations/google-calendar/actions/query-free-busy Query busy periods across up to 50 Google calendars or groups. `googleCalendar.queryFreeBusy` returns busy intervals without event details for people, rooms, or Google Groups. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("Check team conflicts", () => { onDashboardRun({ title: "Check team conflicts" }) googleCalendar.queryFreeBusy({ calendars: ["Team Calendar", "room-1@example.com"], timeMin: "2026-08-10T09:00:00-07:00", timeMax: "2026-08-10T17:00:00-07:00", timeZone: "America/Los_Angeles", }) }) ``` ## Inputs Provide `calendars` as an array of 1–50 exact calendar titles, IDs, or Google Group IDs. You must also provide `timeMin` and `timeMax` in `RFC 3339` format, and the end must follow the start. `timeZone` optionally controls the response timezone. Second argument `{ account }` selects the Google Account. ## Output ```ts theme={null} interface FreeBusyResult { timeMin: string timeMax: string calendars: Array<{ calendarId: string busy: Array<{ start: string; end: string }> errors: Array<{ domain?: string; reason?: string }> }> } ``` Busy starts are inclusive and ends are exclusive. Inspect each calendar's `errors`. Google can return partial results when it can't access a calendar or expand a group. # Quick-add event Source: https://docs.automate.ax/reference/integrations/google-calendar/actions/quick-add-event Create a Google Calendar event from natural-language text. `googleCalendar.quickAddEvent` asks Google to interpret natural-language event details. Use `googleCalendar.createEvent` when the schedule and fields must be exact. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("Quick-add lunch", () => { onDashboardRun({ title: "Quick-add lunch" }) googleCalendar.quickAddEvent({ calendar: "Personal", text: "Lunch with Ada next Tuesday at noon", }) }) ``` ## Inputs Provide `text: string`. `calendar?: string` defaults to primary. `sendUpdates?: "all" | "externalOnly" | "none"` controls guest notifications. Second argument `{ account }` selects the Google Account. All fields accept compatible signals. ## Output Returns Google's parsed `CalendarEvent`. See [Get event](/reference/integrations/google-calendar/actions/get-event#output). Parsing follows the account's locale and timezone and can be ambiguous. Inspect `start` and `end` before relying on the result. # Remove calendar from list Source: https://docs.automate.ax/reference/integrations/google-calendar/actions/remove-calendar-from-list Unsubscribe a Google Account from a calendar without deleting it. `googleCalendar.removeFromCalendarList` removes a calendar from the connected user's Calendar list. The calendar and its events continue to exist. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("Unsubscribe from a calendar", () => { onDashboardRun({ title: "Unsubscribe from a calendar" }) googleCalendar.removeFromCalendarList({ calendar: "Former project" }) }) ``` ## Inputs Provide `calendar: string`. Second argument `{ account }` selects the Google Account. ## Output Returns the removed calendar ID. Use [Delete calendar](/reference/integrations/google-calendar/actions/delete-calendar) only when you own a secondary calendar and intend to permanently destroy it. # Respond to invitation Source: https://docs.automate.ax/reference/integrations/google-calendar/actions/respond-to-invitation Accept, decline, or tentatively accept a Google Calendar invitation. `googleCalendar.respondToInvitation` updates the connected account's own attendee entry while leaving all other attendees intact. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("Accept a calendar invitation", () => { onDashboardRun({ title: "Accept a calendar invitation" }) googleCalendar.respondToInvitation({ event: "event-id", response: "accepted", comment: "Looking forward to it", sendUpdates: "all", }) }) ``` ## Inputs | Property | Type | Required | Default | Description | | - | - | - | - | - | | `event` | `string` | Yes | None | Invitation event ID or URL. | | `response` | `"accepted" \| "declined" \| "tentative"` | Yes | None | New invitation-response status. | | `calendar` | `string` | No | `"primary"` | Calendar containing the attendee copy. | | `comment` | `string` | No | None | Optional response comment. | | `sendUpdates` | `"all" \| "externalOnly" \| "none"` | No | Google default | Notification behavior. | | Second argument: `{ account }` | Google Account reference | No | Project default | Account whose invitation response changes. | ## Output Returns the updated `CalendarEvent`. See [Get event](/reference/integrations/google-calendar/actions/get-event#output). The action first finds the attendee marked `self`. It fails when the authenticated user isn't an attendee. # Search events Source: https://docs.automate.ax/reference/integrations/google-calendar/actions/search-events Search Google Calendar event text across pages. `googleCalendar.searchEvents` runs Google's free-text search across pages, up to a limit. Use `googleCalendar.listEvents` when you need page or sync tokens. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("Find customer reviews", () => { onDashboardRun({ title: "Find customer reviews" }) googleCalendar.searchEvents({ calendar: "Customer Meetings", query: "quarterly review", timeMin: "2026-08-01T00:00:00Z", singleEvents: true, limit: 50, }) }) ``` ## Inputs Provide `query`. `limit` defaults to `100` and accepts 1–10,000. The optional `calendar`, `eventTypes`, `iCalUID`, `includeDeleted`, `includeHiddenInvitations`, `maxAttendees`, `orderBy`, `privateExtendedProperty`, `sharedExtendedProperty`, `singleEvents`, `timeMin`, `timeMax`, `timeZone`, and `updatedMin` filters match [List events](/reference/integrations/google-calendar/actions/list-events#inputs). Second argument `{ account }` selects the Google Account. ## Output Returns `Signal`, capped at `limit`. See [Get event](/reference/integrations/google-calendar/actions/get-event#output). Search uses Google's event-field text matching rather than exact title matching. # Update calendar Source: https://docs.automate.ax/reference/integrations/google-calendar/actions/update-calendar Update metadata on an owned Google Calendar. `googleCalendar.updateCalendar` patches an owned calendar's shared metadata. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("Rename a launch calendar", () => { onDashboardRun({ title: "Rename a launch calendar" }) googleCalendar.updateCalendar({ calendar: "Product launch", summary: "2026 product launch", }) }) ``` ## Inputs `calendar` defaults to primary. Provide at least one of `summary`, `description`, `location`, or `timeZone`. Pass an empty string to clear a description or location. Second argument `{ account }` selects the Google Account. ## Output Returns the updated `Calendar`. See [Get calendar](/reference/integrations/google-calendar/actions/get-calendar#output). This changes calendar-wide metadata, not the connected user's `summaryOverride` or display settings. # Update calendar access rule Source: https://docs.automate.ax/reference/integrations/google-calendar/actions/update-calendar-access-rule Change the role of an existing Google Calendar access rule. `googleCalendar.updateAccessRule` changes a rule's role while preserving its scope. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("Make a calendar read-only", () => { onDashboardRun({ title: "Make a calendar read-only" }) googleCalendar.updateAccessRule({ calendar: "Team Calendar", ruleId: "group:launch@example.com", role: "reader", sendNotifications: true, }) }) ``` ## Inputs Provide `ruleId` and `role`. Roles are `none`, `freeBusyReader`, `reader`, `writerWithoutPrivateAccess`, `writer`, or `owner`. `calendar` defaults to primary, `sendNotifications` is optional, and second argument `{ account }` selects the Google Account. ## Output Returns the updated `{ id, role, scope }`. The action first reads the existing rule so its principal can't accidentally change. Create a new rule to change scope. # Update calendar-list entry Source: https://docs.automate.ax/reference/integrations/google-calendar/actions/update-calendar-list-entry Update a user's display, reminder, and notification settings for a Google Calendar. `googleCalendar.updateCalendarListEntry` changes only the connected user's view of a calendar. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("Configure team calendar", () => { onDashboardRun({ title: "Configure team calendar" }) googleCalendar.updateCalendarListEntry({ calendar: "Launch team", selected: true, defaultReminders: [{ method: "popup", minutes: 15 }], notifications: [{ type: "eventChange" }], }) }) ``` ## Inputs Provide `calendar` and at least one setting. `backgroundColor` and `foregroundColor` accept `#RRGGBB`. Other settings include `hidden`, `selected`, `summaryOverride`, up to five `defaultReminders` objects with `method` and `minutes`, or replacement `notifications` using the types listed on [Add calendar to list](/reference/integrations/google-calendar/actions/add-calendar-to-list#inputs). Second argument `{ account }` selects the Google Account. ## Output Returns the updated calendar-list `Calendar`. Arrays replace their respective settings. Pass `[]` to remove all custom reminders or notifications. # Update event Source: https://docs.automate.ax/reference/integrations/google-calendar/actions/update-event Patch selected fields on an existing Google Calendar event. `googleCalendar.updateEvent` changes only the provided fields, preserving unrelated metadata. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("Reschedule planning", () => { onDashboardRun({ title: "Reschedule planning" }) googleCalendar.updateEvent({ calendar: "Team Calendar", event: "event-id", schedule: { start: "2026-08-10T10:00:00-07:00", end: "2026-08-10T10:45:00-07:00", }, sendUpdates: "all", }) }) ``` ## Inputs Provide `event` as an event ID or Calendar event URL. `calendar` defaults to `"primary"`. Provide at least one mutable field: `summary`, `schedule`, `description`, `location`, `colorId`, `attendees`, `attachments`, `recurrence`, `reminders`, `extendedProperties`, `transparency`, `visibility`, the three `guestsCan...` permissions, or `createMeet: true`. These fields use the same types as [Create event](/reference/integrations/google-calendar/actions/create-event#inputs). `sendUpdates` accepts `"all"`, `"externalOnly"`, or `"none"`. Second argument `{ account }` selects the Google Account. Arrays and objects supplied to a patch are provider replacements for those fields. For example, `attendees: []` removes the attendee list and `attachments: []` removes attachments. ## Output Returns the updated `CalendarEvent`. See [Get event](/reference/integrations/google-calendar/actions/get-event#output). The action fails if the event isn't in the selected calendar or the account can't edit it. # Google Calendar Source: https://docs.automate.ax/reference/integrations/google-calendar/index Manage Google calendars, events, access rules, availability, and invitations, or react to event changes. ## Exports ```ts theme={null} import { googleCalendar, googleAccount, getGoogleCalendarApi, } from "automate.ax/google-calendar" ``` * `googleCalendar` contains the packaged Google Calendar actions and triggers. * `googleAccount("name")` selects a named Google connection. * `getGoogleCalendarApi` creates the authenticated Google Calendar API helper for a custom account-backed action. ## Triggers * [On event changed](/reference/integrations/google-calendar/triggers/on-event-changed) * [On event created](/reference/integrations/google-calendar/triggers/on-event-created) * [On event deleted](/reference/integrations/google-calendar/triggers/on-event-deleted) * [On event updated](/reference/integrations/google-calendar/triggers/on-event-updated) ## Actions * [Add calendar to list](/reference/integrations/google-calendar/actions/add-calendar-to-list) * [Clear primary calendar](/reference/integrations/google-calendar/actions/clear-primary-calendar) * [Create calendar access rule](/reference/integrations/google-calendar/actions/create-calendar-access-rule) * [Create calendar](/reference/integrations/google-calendar/actions/create-calendar) * [Create event](/reference/integrations/google-calendar/actions/create-event) * [Delete calendar access rule](/reference/integrations/google-calendar/actions/delete-calendar-access-rule) * [Delete calendar](/reference/integrations/google-calendar/actions/delete-calendar) * [Delete event](/reference/integrations/google-calendar/actions/delete-event) * [Find availability](/reference/integrations/google-calendar/actions/find-availability) * [Get calendar access rule](/reference/integrations/google-calendar/actions/get-calendar-access-rule) * [Get calendar colors](/reference/integrations/google-calendar/actions/get-calendar-colors) * [Get calendar-list entry](/reference/integrations/google-calendar/actions/get-calendar-list-entry) * [Get calendar](/reference/integrations/google-calendar/actions/get-calendar) * [Get event](/reference/integrations/google-calendar/actions/get-event) * [Import event](/reference/integrations/google-calendar/actions/import-event) * [List calendar access rules](/reference/integrations/google-calendar/actions/list-calendar-access-rules) * [List calendars](/reference/integrations/google-calendar/actions/list-calendars) * [List event instances](/reference/integrations/google-calendar/actions/list-event-instances) * [List events](/reference/integrations/google-calendar/actions/list-events) * [Move event](/reference/integrations/google-calendar/actions/move-event) * [Query free/busy](/reference/integrations/google-calendar/actions/query-free-busy) * [Quick-add event](/reference/integrations/google-calendar/actions/quick-add-event) * [Remove calendar from list](/reference/integrations/google-calendar/actions/remove-calendar-from-list) * [Respond to invitation](/reference/integrations/google-calendar/actions/respond-to-invitation) * [Search events](/reference/integrations/google-calendar/actions/search-events) * [Update calendar access rule](/reference/integrations/google-calendar/actions/update-calendar-access-rule) * [Update calendar-list entry](/reference/integrations/google-calendar/actions/update-calendar-list-entry) * [Update calendar](/reference/integrations/google-calendar/actions/update-calendar) * [Update event](/reference/integrations/google-calendar/actions/update-event) # On event changed Source: https://docs.automate.ax/reference/integrations/google-calendar/triggers/on-event-changed Run an automation for any Google Calendar event lifecycle change. `googleCalendar.onEventChanged` is the broad Google Calendar event trigger. Use it when one automation handles created, updated, and deleted events. ## Example ```ts automations/audit-calendar.automation.ts theme={null} import { automation } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("Audit calendar changes", () => { const change = googleCalendar.onEventChanged({ calendarId: "primary" }) // Route the Google Calendar change by type. }) ``` ## Options `calendarId?: string` is a static immutable calendar ID and defaults to `"primary"`. Unlike action calendar references, triggers don't resolve display titles. `account` is a static Google Account binding and defaults to the project binding. Signals can't select either value at runtime. ## Trigger data ```ts theme={null} type GoogleCalendarEventChange = | { changeType: "created" | "updated"; event: CalendarEvent } | { changeType: "deleted" calendarId: string event?: CalendarEvent eventId: string } ``` `CalendarEvent` matches [Get event](/reference/integrations/google-calendar/actions/get-event#output). A deletion includes the last synchronized event when available. Google's webhook contains no event body. Automate.ax incrementally synchronizes the calendar, classifies each lifecycle against its durable baseline, and deduplicates unchanged provider state. Existing events establish the initial baseline and aren't replayed. # On event created Source: https://docs.automate.ax/reference/integrations/google-calendar/triggers/on-event-created Run an automation when a new event appears in a Google Calendar. `googleCalendar.onEventCreated` emits events created after the initial calendar sync. Existing events establish the baseline and aren't replayed. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("Handle new calendar events", () => { const event = googleCalendar.onEventCreated({ calendarId: "team@example.com", }) // Add the new Google Calendar event to the scheduling dashboard. }) ``` ## Options `calendarId?: string` is a static immutable calendar ID and defaults to `"primary"`. Unlike action calendar references, triggers don't resolve display titles. `account` is a static Google Account binding and defaults to the project binding. Signals can't select either value at runtime. ## Trigger data Returns one `CalendarEvent` for each new event. See [Get event](/reference/integrations/google-calendar/actions/get-event#output). Google's notifications contain no event body, so Automate.ax incrementally syncs the calendar. It deduplicates notifications when the event ID and returned state match the previous notification. # On event deleted Source: https://docs.automate.ax/reference/integrations/google-calendar/triggers/on-event-deleted Run an automation after a Google Calendar event deletion or cancellation. `googleCalendar.onEventDeleted` emits an event identity when calendar sync reports it as cancelled or deleted. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("Handle cancelled events", () => { const deletion = googleCalendar.onEventDeleted({ calendarId: "primary" }) // Remove the deleted Google Calendar event from the scheduling dashboard. }) ``` ## Options `calendarId` defaults to `"primary"` and must be a static calendar ID. `account` is an optional static Google Account binding. ## Trigger data Returns: ```ts theme={null} interface CalendarEventDeleted { calendarId: string eventId: string event?: CalendarEvent } ``` `event` is the last known event from the sync baseline and can be absent. Use top-level `eventId` and `calendarId` as the reliable deletion identity. # On event updated Source: https://docs.automate.ax/reference/integrations/google-calendar/triggers/on-event-updated Run an automation when an existing Google Calendar event changes. `googleCalendar.onEventUpdated` emits the current event when its synchronized state changes. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleCalendar } from "automate.ax/google-calendar" export default automation("Handle changed events", () => { const event = googleCalendar.onEventUpdated({ calendarId: "primary" }) // Sync the updated Google Calendar event to the scheduling dashboard. }) ``` ## Options `calendarId` defaults to `"primary"` and must be a static calendar ID. `account` is an optional static Google Account binding. ## Trigger data Returns a `CalendarEvent`. See [Get event](/reference/integrations/google-calendar/actions/get-event#output). Google only reports that the collection changed, so Automate.ax syncs and classifies the changed events. Updates include attendee responses, schedule changes, and other metadata. # Append text Source: https://docs.automate.ax/reference/integrations/google-docs/actions/append-text Append text to the end of a document or tab. `googleDocs.appendText` append text to the end of a document or tab. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDocs } from "automate.ax/google-docs" export default automation("Append text", () => { onDashboardRun({ title: "Append text" }) googleDocs.appendText({ document: "document-id", text: "Next steps\n" }) }) ``` ## Inputs Provide `document` and non-empty `text`. `tabId` selects a tab. Revision controls are optional. A second argument with `account` selects a Google Account. ## Output Returns the document ID and resulting revision ID when Google provides it. # Create document Source: https://docs.automate.ax/reference/integrations/google-docs/actions/create-document Create a new Google Docs document. `googleDocs.createDocument` create a new Google Docs document. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDocs } from "automate.ax/google-docs" export default automation("Create document", () => { onDashboardRun({ title: "Create document" }) googleDocs.createDocument({ title: "Project brief" }) }) ``` ## Inputs Provide `title`. A second argument with `account` selects a Google Account. ## Output Returns `documentId`, `title`, editor `url`, revision ID when available, and normalized tabs. # Delete content Source: https://docs.automate.ax/reference/integrations/google-docs/actions/delete-content Delete content in a document range. `googleDocs.deleteContent` delete content in a document range. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDocs } from "automate.ax/google-docs" export default automation("Delete content", () => { onDashboardRun({ title: "Delete content" }) googleDocs.deleteContent({ document: "document-id", startIndex: 10, endIndex: 20, }) }) ``` ## Inputs Provide `document`, a `startIndex` of 1 or greater, and a greater `endIndex`. `tabId` and revision controls are optional. A second argument with `account` selects a Google Account. ## Output Returns the document ID and resulting revision ID. # Format paragraph Source: https://docs.automate.ax/reference/integrations/google-docs/actions/format-paragraph Apply paragraph formatting to a document range. `googleDocs.formatParagraph` apply paragraph formatting to a document range. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDocs } from "automate.ax/google-docs" export default automation("Format paragraph", () => { onDashboardRun({ title: "Format paragraph" }) googleDocs.formatParagraph({ document: "document-id", startIndex: 1, endIndex: 30, namedStyle: "heading1", }) }) ``` ## Inputs Provide a range that starts at index 1 or later and at least one paragraph style: alignment, direction, line spacing, named style, keep-with-next, or keep-lines-together. A second argument with `account` selects a Google Account. ## Output Returns the document ID and resulting revision ID. # Format text Source: https://docs.automate.ax/reference/integrations/google-docs/actions/format-text Apply text formatting to a document range. `googleDocs.formatText` apply text formatting to a document range. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDocs } from "automate.ax/google-docs" export default automation("Format text", () => { onDashboardRun({ title: "Format text" }) googleDocs.formatText({ document: "document-id", startIndex: 1, endIndex: 12, bold: true, foregroundColor: "#1A73E8", }) }) ``` ## Inputs Provide a range that starts at index 1 or later and at least one style: colors, bold, italic, underline, `strikethrough`, font family, font size, or `linkUrl`. Set `linkUrl: null` to remove a link. A second argument with `account` selects a Google Account. ## Output Returns the document ID and resulting revision ID. # Get document Source: https://docs.automate.ax/reference/integrations/google-docs/actions/get-document Read document metadata, tabs, and plain text. `googleDocs.getDocument` read document metadata, tabs, and plain text. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDocs } from "automate.ax/google-docs" export default automation("Get document", () => { onDashboardRun({ title: "Get document" }) googleDocs.getDocument({ document: "document-id" }) }) ``` ## Inputs `document` accepts an ID or standard Google Docs URL. `includeTabs` defaults to true. `suggestionsViewMode` controls how suggestions appear. A second argument with `account` selects a Google Account. ## Output Returns `documentId`, `title`, `url`, revision ID, and recursive tabs with their plain text. # Insert image Source: https://docs.automate.ax/reference/integrations/google-docs/actions/insert-image Insert an inline image from a public URL. `googleDocs.insertImage` insert an inline image from a public URL. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDocs } from "automate.ax/google-docs" export default automation("Insert image", () => { onDashboardRun({ title: "Insert image" }) googleDocs.insertImage({ document: "document-id", imageUrl: "https://example.com/chart.png", width: 320, }) }) ``` ## Inputs Provide `document` and `imageUrl`. The public HTTP(S) image URL must be shorter than 2 KB. Set `index` to insert at a location; otherwise Google appends to the segment. `width` and `height` use points. A second argument with `account` selects a Google Account. ## Output Returns the document ID and resulting revision ID. Google must be able to fetch the image as a PNG, JPEG, or GIF smaller than 50 MB and no larger than 25 megapixels. # Insert page break Source: https://docs.automate.ax/reference/integrations/google-docs/actions/insert-page-break Insert a page break into a document. `googleDocs.insertPageBreak` insert a page break into a document. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDocs } from "automate.ax/google-docs" export default automation("Insert page break", () => { onDashboardRun({ title: "Insert page break" }) googleDocs.insertPageBreak({ document: "document-id", index: 20 }) }) ``` ## Inputs Provide `document`. Set `index` to insert at a location; otherwise Google appends to the segment. `tabId` and revision controls are optional. A second argument with `account` selects a Google Account. ## Output Returns the document ID and resulting revision ID. # Insert table Source: https://docs.automate.ax/reference/integrations/google-docs/actions/insert-table Insert a table into a document. `googleDocs.insertTable` insert a table into a document. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDocs } from "automate.ax/google-docs" export default automation("Insert table", () => { onDashboardRun({ title: "Insert table" }) googleDocs.insertTable({ document: "document-id", rows: 3, columns: 4 }) }) ``` ## Inputs Provide `document`, `rows`, and `columns` from 1 through 20. Set `index` to insert at a location; otherwise Google appends to the segment. A second argument with `account` selects a Google Account. ## Output Returns the document ID and resulting revision ID. # Insert text Source: https://docs.automate.ax/reference/integrations/google-docs/actions/insert-text Insert text at a document index. `googleDocs.insertText` insert text at a document index. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDocs } from "automate.ax/google-docs" export default automation("Insert text", () => { onDashboardRun({ title: "Insert text" }) googleDocs.insertText({ document: "document-id", index: 1, text: "Executive summary\n", }) }) ``` ## Inputs Provide `document`, a positive `index`, and non-empty `text`. `tabId` and revision controls are optional. A second argument with `account` selects a Google Account. ## Output Returns the document ID and resulting revision ID when Google provides it. # Replace text Source: https://docs.automate.ax/reference/integrations/google-docs/actions/replace-text Replace matching text throughout selected document tabs. `googleDocs.replaceText` replace matching text throughout selected document tabs. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDocs } from "automate.ax/google-docs" export default automation("Replace text", () => { onDashboardRun({ title: "Replace text" }) googleDocs.replaceText({ document: "document-id", searchText: "Draft", replaceText: "Final", }) }) ``` ## Inputs Provide `document`, `searchText`, and `replaceText`. `matchCase`, `tabIds`, and revision controls are optional. A second argument with `account` selects a Google Account. ## Output Returns the document ID and resulting revision ID. Google replaces every match in the selected tabs. # Google Docs Source: https://docs.automate.ax/reference/integrations/google-docs/index Create Google Docs files, read tabs and plain text, and reject or merge stale writes by revision ID. Use `googleDocs` to create documents; read tabs and plain text; and insert, replace, delete, or format document content through the Google Docs API. ## Create a project brief ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDocs } from "automate.ax/google-docs" export default automation("Create a project brief", () => { onDashboardRun({ title: "Create project brief" }) const document = googleDocs.createDocument({ title: "Project brief" }) googleDocs.appendText({ document: document.documentId, text: "Goals\n\n", }) }) ``` Actions accept a document ID or standard Google Docs URL. Optional write controls prevent conflicting edits: `requiredRevisionId` rejects stale writes, while `targetRevisionId` lets Google merge changes against a recent revision. Choose at most one write control for each update. Read actions request Google's native `documents.readonly` scope. Create and edit actions request `documents`, so they can access existing documents by ID or URL without a prior per-file grant. ## Exports ```ts theme={null} import { googleDocs, googleAccount, getGoogleDocsApi, } from "automate.ax/google-docs" ``` * `googleDocs` contains the packaged Google Docs actions. * `googleAccount("name")` selects a named Google connection. * `getGoogleDocsApi` creates the authenticated Google Docs API helper for a custom account-backed action. ## Actions * [Append text](/reference/integrations/google-docs/actions/append-text) * [Create document](/reference/integrations/google-docs/actions/create-document) * [Delete content](/reference/integrations/google-docs/actions/delete-content) * [Format paragraph](/reference/integrations/google-docs/actions/format-paragraph) * [Format text](/reference/integrations/google-docs/actions/format-text) * [Get document](/reference/integrations/google-docs/actions/get-document) * [Insert image](/reference/integrations/google-docs/actions/insert-image) * [Insert page break](/reference/integrations/google-docs/actions/insert-page-break) * [Insert table](/reference/integrations/google-docs/actions/insert-table) * [Insert text](/reference/integrations/google-docs/actions/insert-text) * [Replace text](/reference/integrations/google-docs/actions/replace-text) # Copy file Source: https://docs.automate.ax/reference/integrations/google-drive/actions/copy-file Copy a Drive file with optional new metadata. `googleDrive.copyFile` copy a Drive file with optional new metadata. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Copy file", () => { onDashboardRun({ title: "Copy file" }) googleDrive.copyFile({ fileId: "file-id", name: "Copy", parentId: "folder-id", }) }) ``` ## Inputs Provide `fileId`. `name`, `description`, and `parentId` are optional. A second argument with `account` selects a Google Account. ## Output Returns normalized metadata for the copy. # Create comment Source: https://docs.automate.ax/reference/integrations/google-drive/actions/create-comment Add a comment to a Drive file. `googleDrive.createComment` add a comment to a Drive file. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Create comment", () => { onDashboardRun({ title: "Create comment" }) googleDrive.createComment({ fileId: "file-id", content: "Please review this section.", }) }) ``` ## Inputs Provide `fileId` and `content`. `anchor` can attach provider-specific context. A second argument with `account` selects a Google Account. ## Output Returns the created comment and normalized replies. # Create folder Source: https://docs.automate.ax/reference/integrations/google-drive/actions/create-folder Create a folder in My Drive or a shared drive. `googleDrive.createFolder` create a folder in My Drive or a shared drive. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Create folder", () => { onDashboardRun({ title: "Create folder" }) googleDrive.createFolder({ name: "Invoices", parentId: "folder-id" }) }) ``` ## Inputs Provide `name`. `parentId` and `description` are optional. A second argument with `account` selects a Google Account. ## Output Returns normalized metadata for the new folder. # Create permission Source: https://docs.automate.ax/reference/integrations/google-drive/actions/create-permission Share a Drive file with a user, group, domain, or anyone. `googleDrive.createPermission` shares a Drive file with a user, group, domain, or anyone. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Create permission", () => { onDashboardRun({ title: "Create permission" }) googleDrive.createPermission({ fileId: "file-id", type: "user", role: "writer", emailAddress: "ada@example.com", }) }) ``` ## Inputs Provide `fileId`, `type`, and `role`. Roles can be `organizer`, `fileOrganizer`, `writer`, `commenter`, or `reader`. User and group permissions require `emailAddress`; domain permissions require `domain`. `expirationTime` is optional for user and group permissions and unavailable for domain and anyone permissions. Google requires an expiration in the future and no more than one year away. Notification fields are optional. A second argument with `account` selects a Google Account. ## Output Returns the created normalized permission. # Create reply Source: https://docs.automate.ax/reference/integrations/google-drive/actions/create-reply Reply to a Drive comment. `googleDrive.createReply` reply to a Drive comment. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Create reply", () => { onDashboardRun({ title: "Create reply" }) googleDrive.createReply({ fileId: "file-id", commentId: "comment-id", content: "Done.", }) }) ``` ## Inputs Provide `fileId`, `commentId`, and `content`. A second argument with `account` selects a Google Account. ## Output Returns the created normalized reply. # Create shared drive Source: https://docs.automate.ax/reference/integrations/google-drive/actions/create-shared-drive Create a Google shared drive. `googleDrive.createSharedDrive` create a Google shared drive. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Create shared drive", () => { onDashboardRun({ title: "Create shared drive" }) googleDrive.createSharedDrive({ name: "Operations" }) }) ``` ## Inputs Provide `name`. Supply a stable UUID as `requestId` when the caller needs provider idempotency; otherwise Automate.ax creates one for the request. A second argument with `account` selects a Google Account. ## Output Returns normalized shared-drive metadata. This action requires full Drive scope and Workspace privileges. # Delete comment Source: https://docs.automate.ax/reference/integrations/google-drive/actions/delete-comment Delete a comment from a Drive file. `googleDrive.deleteComment` delete a comment from a Drive file. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Delete comment", () => { onDashboardRun({ title: "Delete comment" }) googleDrive.deleteComment({ fileId: "file-id", commentId: "comment-id" }) }) ``` ## Inputs Provide `fileId` and `commentId`. A second argument with `account` selects a Google Account. ## Output Returns the supplied IDs after Google accepts the deletion. # Delete file Source: https://docs.automate.ax/reference/integrations/google-drive/actions/delete-file Permanently delete a Drive file. `googleDrive.deleteFile` permanently delete a Drive file. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Delete file", () => { onDashboardRun({ title: "Delete file" }) googleDrive.deleteFile({ fileId: "file-id" }) }) ``` ## Inputs Provide `fileId`. The connected account must own or be allowed to delete the file. A second argument with `account` selects a Google Account. ## Output Returns `{ fileId }` after Google accepts the deletion. # Delete permission Source: https://docs.automate.ax/reference/integrations/google-drive/actions/delete-permission Remove a permission from a Drive file. `googleDrive.deletePermission` remove a permission from a Drive file. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Delete permission", () => { onDashboardRun({ title: "Delete permission" }) googleDrive.deletePermission({ fileId: "file-id", permissionId: "permission-id", }) }) ``` ## Inputs Provide `fileId` and `permissionId`. A second argument with `account` selects a Google Account. ## Output Returns the supplied IDs after Google accepts the deletion. # Delete reply Source: https://docs.automate.ax/reference/integrations/google-drive/actions/delete-reply Delete a reply from a Drive comment. `googleDrive.deleteReply` delete a reply from a Drive comment. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Delete reply", () => { onDashboardRun({ title: "Delete reply" }) googleDrive.deleteReply({ fileId: "file-id", commentId: "comment-id", replyId: "reply-id", }) }) ``` ## Inputs Provide `fileId`, `commentId`, and `replyId`. A second argument with `account` selects a Google Account. ## Output Returns the supplied IDs after Google accepts the deletion. # Delete shared drive Source: https://docs.automate.ax/reference/integrations/google-drive/actions/delete-shared-drive Permanently delete an empty shared drive. `googleDrive.deleteSharedDrive` permanently delete an empty shared drive. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Delete shared drive", () => { onDashboardRun({ title: "Delete shared drive" }) googleDrive.deleteSharedDrive({ driveId: "drive-id" }) }) ``` ## Inputs Provide `driveId`. The drive must be empty and the account must have applicable Workspace privileges. A second argument with `account` selects a Google Account. ## Output Returns `{ driveId }` after Google accepts the deletion. # Download file Source: https://docs.automate.ax/reference/integrations/google-drive/actions/download-file Download a stored file's binary content. `googleDrive.downloadFile` download a stored file's binary content. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Download file", () => { onDashboardRun({ title: "Download file" }) googleDrive.downloadFile({ fileId: "file-id", name: "report.pdf" }) }) ``` ## Inputs Provide `fileId`. `name` overrides the returned filename. A second argument with `account` selects a Google Account. ## Output Returns a `File` containing the downloaded bytes. Use `exportFile` for Google Workspace editor files. # Export file Source: https://docs.automate.ax/reference/integrations/google-drive/actions/export-file Export a Google Workspace file to another format. `googleDrive.exportFile` export a Google Workspace file to another format. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Export file", () => { onDashboardRun({ title: "Export file" }) googleDrive.exportFile({ fileId: "document-id", mimeType: "application/pdf", name: "report.pdf", }) }) ``` ## Inputs Provide `fileId` and the destination `mimeType`. `name` is optional. A second argument with `account` selects a Google Account. ## Output Returns a `File` containing the exported bytes. Google limits available formats by source file type and caps exported content at 10 MB. If an export exceeds that limit, try a more compact supported format or split the source into smaller files before retrying. # Get account Source: https://docs.automate.ax/reference/integrations/google-drive/actions/get-about Read the connected Drive user and storage quota. `googleDrive.getAbout` read the connected Drive user and storage quota. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Get account", () => { onDashboardRun({ title: "Get account" }) googleDrive.getAbout({}) }) ``` ## Inputs No fields are required. Pass an optional second argument with `account` to select a Google Account. A second argument with `account` selects a Google Account. ## Output Returns the connected user plus `storageLimit` and `storageUsage` when Google reports them. # Get comment Source: https://docs.automate.ax/reference/integrations/google-drive/actions/get-comment Read a Drive comment and its replies. `googleDrive.getComment` read a Drive comment and its replies. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Get comment", () => { onDashboardRun({ title: "Get comment" }) googleDrive.getComment({ fileId: "file-id", commentId: "comment-id" }) }) ``` ## Inputs Provide `fileId` and `commentId`. Deleted comments are included when Google retains their metadata. A second argument with `account` selects a Google Account. ## Output Returns the normalized comment and replies. # Get file Source: https://docs.automate.ax/reference/integrations/google-drive/actions/get-file Read metadata for one Drive file or folder. `googleDrive.getFile` read metadata for one Drive file or folder. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Get file", () => { onDashboardRun({ title: "Get file" }) googleDrive.getFile({ fileId: "file-id" }) }) ``` ## Inputs Provide `fileId`. A second argument with `account` selects a Google Account. ## Output Returns normalized file metadata, including IDs, parents, ownership, links, MIME type, times, and state. # Get permission Source: https://docs.automate.ax/reference/integrations/google-drive/actions/get-permission Read one Drive permission. `googleDrive.getPermission` read one Drive permission. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Get permission", () => { onDashboardRun({ title: "Get permission" }) googleDrive.getPermission({ fileId: "file-id", permissionId: "permission-id", }) }) ``` ## Inputs Provide `fileId` and `permissionId`. A second argument with `account` selects a Google Account. ## Output Returns the normalized permission. # Get reply Source: https://docs.automate.ax/reference/integrations/google-drive/actions/get-reply Read one reply on a Drive comment. `googleDrive.getReply` read one reply on a Drive comment. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Get reply", () => { onDashboardRun({ title: "Get reply" }) googleDrive.getReply({ fileId: "file-id", commentId: "comment-id", replyId: "reply-id", }) }) ``` ## Inputs Provide `fileId`, `commentId`, and `replyId`. A second argument with `account` selects a Google Account. ## Output Returns the normalized reply. # Get shared drive Source: https://docs.automate.ax/reference/integrations/google-drive/actions/get-shared-drive Read metadata for one shared drive. `googleDrive.getSharedDrive` read metadata for one shared drive. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Get shared drive", () => { onDashboardRun({ title: "Get shared drive" }) googleDrive.getSharedDrive({ driveId: "drive-id" }) }) ``` ## Inputs Provide `driveId`. A second argument with `account` selects a Google Account. ## Output Returns normalized shared-drive metadata. # Hide shared drive Source: https://docs.automate.ax/reference/integrations/google-drive/actions/hide-shared-drive Hide a shared drive from the connected user's default view. `googleDrive.hideSharedDrive` hide a shared drive from the connected user's default view. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Hide shared drive", () => { onDashboardRun({ title: "Hide shared drive" }) googleDrive.hideSharedDrive({ driveId: "drive-id" }) }) ``` ## Inputs Provide `driveId`. A second argument with `account` selects a Google Account. ## Output Returns the shared-drive metadata after hiding it. # List comments Source: https://docs.automate.ax/reference/integrations/google-drive/actions/list-comments List comments and replies on a Drive file. `googleDrive.listComments` list comments and replies on a Drive file. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("List comments", () => { onDashboardRun({ title: "List comments" }) googleDrive.listComments({ fileId: "file-id", pageSize: 100 }) }) ``` ## Inputs Provide `fileId`. Optionally set `includeDeleted`, `startModifiedAt`, `pageSize`, or `pageToken`. `pageSize` accepts 1 through 100. A second argument with `account` selects a Google Account. ## Output Returns `comments` and an optional `nextPageToken`. # List files Source: https://docs.automate.ax/reference/integrations/google-drive/actions/list-files Search files with Google Drive query syntax. `googleDrive.listFiles` search files with Google Drive query syntax. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("List files", () => { onDashboardRun({ title: "List files" }) googleDrive.listFiles({ query: "name contains 'invoice'", orderBy: "modifiedTime desc", }) }) ``` ## Inputs Use `query`, `orderBy`, `corpus`, `driveId`, `pageSize`, and `pageToken` to narrow or page results. `pageSize` accepts 1 through 1,000. Providing `driveId` selects that shared drive's corpus when you omit `corpus`. If you set `corpus` explicitly, provide `driveId` exactly when `corpus` is `"drive"`. Trashed files are excluded unless `includeTrashed` is true. A second argument with `account` selects a Google Account. ## Output Returns `files`, `incompleteSearch`, and an optional `nextPageToken`. When `incompleteSearch` is true, Google could not search every requested corpus; narrow the corpus or retry the request. # List permissions Source: https://docs.automate.ax/reference/integrations/google-drive/actions/list-permissions List permissions on a file or shared drive. `googleDrive.listPermissions` list permissions on a file or shared drive. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("List permissions", () => { onDashboardRun({ title: "List permissions" }) googleDrive.listPermissions({ fileId: "file-id", pageSize: 100 }) }) ``` ## Inputs Provide `fileId`. `pageSize` and `pageToken` are optional. `pageSize` accepts 1 through 100. A second argument with `account` selects a Google Account. ## Output Returns `permissions` and an optional `nextPageToken`. # List replies Source: https://docs.automate.ax/reference/integrations/google-drive/actions/list-replies List replies on a Drive comment. `googleDrive.listReplies` list replies on a Drive comment. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("List replies", () => { onDashboardRun({ title: "List replies" }) googleDrive.listReplies({ fileId: "file-id", commentId: "comment-id", pageSize: 100, }) }) ``` ## Inputs Provide `fileId` and `commentId`. `includeDeleted`, `pageSize`, and `pageToken` are optional. `pageSize` accepts 1 through 100. A second argument with `account` selects a Google Account. ## Output Returns `replies` and an optional `nextPageToken`. # List shared drives Source: https://docs.automate.ax/reference/integrations/google-drive/actions/list-shared-drives List shared drives available to the connected account. `googleDrive.listSharedDrives` list shared drives available to the connected account. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("List shared drives", () => { onDashboardRun({ title: "List shared drives" }) googleDrive.listSharedDrives({ pageSize: 100 }) }) ``` ## Inputs Use `query`, `useDomainAdminAccess`, `pageSize`, and `pageToken` to filter or page results. `pageSize` accepts 1 through 100. A second argument with `account` selects a Google Account. ## Output Returns `drives` and an optional `nextPageToken`. # Move file Source: https://docs.automate.ax/reference/integrations/google-drive/actions/move-file Add or remove parent folders for a Drive file. `googleDrive.moveFile` add or remove parent folders for a Drive file. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Move file", () => { onDashboardRun({ title: "Move file" }) googleDrive.moveFile({ fileId: "file-id", addParentIds: ["destination-id"], removeParentIds: ["source-id"], }) }) ``` ## Inputs Provide `fileId` and at least one value in `addParentIds` or `removeParentIds`. A second argument with `account` selects a Google Account. ## Output Returns the updated file metadata. # Reopen comment Source: https://docs.automate.ax/reference/integrations/google-drive/actions/reopen-comment Reopen a resolved Drive comment thread. `googleDrive.reopenComment` reopen a resolved Drive comment thread. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Reopen comment", () => { onDashboardRun({ title: "Reopen comment" }) googleDrive.reopenComment({ fileId: "file-id", commentId: "comment-id" }) }) ``` ## Inputs Provide `fileId` and `commentId`. Google records the state change as a special reply. A second argument with `account` selects a Google Account. ## Output Returns the normalized reply created by Google. # Resolve comment Source: https://docs.automate.ax/reference/integrations/google-drive/actions/resolve-comment Resolve a Drive comment thread. `googleDrive.resolveComment` resolve a Drive comment thread. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Resolve comment", () => { onDashboardRun({ title: "Resolve comment" }) googleDrive.resolveComment({ fileId: "file-id", commentId: "comment-id" }) }) ``` ## Inputs Provide `fileId` and `commentId`. Google records the state change as a special reply. A second argument with `account` selects a Google Account. ## Output Returns the normalized reply created by Google. # Restore file Source: https://docs.automate.ax/reference/integrations/google-drive/actions/restore-file Restore a Drive file from the trash. `googleDrive.restoreFile` restore a Drive file from the trash. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Restore file", () => { onDashboardRun({ title: "Restore file" }) googleDrive.restoreFile({ fileId: "file-id" }) }) ``` ## Inputs Provide `fileId`. A second argument with `account` selects a Google Account. ## Output Returns the restored file metadata. # Trash file Source: https://docs.automate.ax/reference/integrations/google-drive/actions/trash-file Move a Drive file to the trash. `googleDrive.trashFile` move a Drive file to the trash. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Trash file", () => { onDashboardRun({ title: "Trash file" }) googleDrive.trashFile({ fileId: "file-id" }) }) ``` ## Inputs Provide `fileId`. A second argument with `account` selects a Google Account. ## Output Returns the trashed file metadata. # Restore hidden shared drive Source: https://docs.automate.ax/reference/integrations/google-drive/actions/unhide-shared-drive Restore a hidden shared drive to the connected user's default view. `googleDrive.unhideSharedDrive` restores a hidden shared drive to the connected user's default view. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Restore hidden shared drive", () => { onDashboardRun({ title: "Restore hidden shared drive" }) googleDrive.unhideSharedDrive({ driveId: "drive-id" }) }) ``` ## Inputs Provide `driveId`. A second argument with `account` selects a Google Account. ## Output Returns the shared-drive metadata after restoring it. # Update comment Source: https://docs.automate.ax/reference/integrations/google-drive/actions/update-comment Replace a Drive comment's content. `googleDrive.updateComment` replace a Drive comment's content. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Update comment", () => { onDashboardRun({ title: "Update comment" }) googleDrive.updateComment({ fileId: "file-id", commentId: "comment-id", content: "Approved.", }) }) ``` ## Inputs Provide `fileId`, `commentId`, and `content`. A second argument with `account` selects a Google Account. ## Output Returns the updated normalized comment. # Update file Source: https://docs.automate.ax/reference/integrations/google-drive/actions/update-file Change a file's name, description, or starred state. `googleDrive.updateFile` change a file's name, description, or starred state. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Update file", () => { onDashboardRun({ title: "Update file" }) googleDrive.updateFile({ fileId: "file-id", starred: true }) }) ``` ## Inputs Provide `fileId` and at least one of `name`, `description`, or `starred`. A second argument with `account` selects a Google Account. ## Output Returns the updated file metadata. # Update permission Source: https://docs.automate.ax/reference/integrations/google-drive/actions/update-permission Change a Drive permission's role or expiration. `googleDrive.updatePermission` change a Drive permission's role or expiration. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Update permission", () => { onDashboardRun({ title: "Update permission" }) googleDrive.updatePermission({ fileId: "file-id", permissionId: "permission-id", role: "reader", }) }) ``` ## Inputs Provide `fileId`, `permissionId`, and at least one of `role` or `expirationTime`. Set `expirationTime: null` to remove an expiration. A new expiration must be in the future and no more than one year away. The action verifies that the existing permission belongs to a user or group before setting an expiration. A second argument with `account` selects a Google Account. ## Output Returns the updated normalized permission. # Update reply Source: https://docs.automate.ax/reference/integrations/google-drive/actions/update-reply Replace a Drive comment reply's content. `googleDrive.updateReply` replace a Drive comment reply's content. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Update reply", () => { onDashboardRun({ title: "Update reply" }) googleDrive.updateReply({ fileId: "file-id", commentId: "comment-id", replyId: "reply-id", content: "Updated.", }) }) ``` ## Inputs Provide `fileId`, `commentId`, `replyId`, and `content`. A second argument with `account` selects a Google Account. ## Output Returns the updated normalized reply. # Update shared drive Source: https://docs.automate.ax/reference/integrations/google-drive/actions/update-shared-drive Change a shared drive's name, theme, or color. `googleDrive.updateSharedDrive` change a shared drive's name, theme, or color. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Update shared drive", () => { onDashboardRun({ title: "Update shared drive" }) googleDrive.updateSharedDrive({ driveId: "drive-id", name: "Operations" }) }) ``` ## Inputs Provide `driveId` and at least one of `name`, `themeId`, or six-digit `colorRgb`. Choose either `themeId` or `colorRgb`; Google doesn't accept both in one update. A second argument with `account` selects a Google Account. ## Output Returns updated shared-drive metadata. This action requires full Drive scope and applicable Workspace privileges. # Upload file Source: https://docs.automate.ax/reference/integrations/google-drive/actions/upload-file Upload binary content to My Drive or a shared drive. `googleDrive.uploadFile` upload binary content to My Drive or a shared drive. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Upload file", () => { onDashboardRun({ title: "Upload file" }) googleDrive.uploadFile({ file: new File(["hello"], "hello.txt"), parentId: "folder-id", }) }) ``` ## Inputs Provide a `File`. Override `name` or `mimeType`, and optionally set `parentId` or `description`. A second argument with `account` selects a Google Account. ## Output Returns normalized metadata for the uploaded file. # Google Drive Source: https://docs.automate.ax/reference/integrations/google-drive/index Create, organize, share, and react to files in Google Drive. Use `googleDrive` to manage files, folders, permissions, comments, replies, and shared drives. Drive triggers monitor one file, folder, or shared drive through Google Workspace Events. ## Connect Google Connect a Google Account when you deploy. Automate.ax requests the narrowest scope that satisfies each callable. Google may require app approval for access outside files created or explicitly opened with the app. File renaming, description and starred-state updates, folder moves, trashing, and restoring also accept `drive.metadata`. Use this permission for metadata operations on existing files without granting file-content access. These actions continue to request `drive.file` by default for app-authorized files. Downloading, exporting, uploading, and permanently deleting files require their own content or file-management permissions. ## Create the routing folders once Add this temporary setup automation, deploy it, and select **Create routing folders** from the dashboard. Copy the two folder IDs from the run's action results, then remove the setup automation. ```ts automations/setup-drive-routing.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("Create Drive routing folders", () => { onDashboardRun({ title: "Create routing folders" }) googleDrive.createFolder({ name: "Automation inbox" }) googleDrive.createFolder({ name: "Automation review" }) }) ``` ## Move new Drive files Replace both constants with the IDs returned by the setup run before deploying this automation. ```ts theme={null} import { automation } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" const incomingFolderId = "PASTE_AUTOMATION_INBOX_FOLDER_ID" const reviewFolderId = "PASTE_AUTOMATION_REVIEW_FOLDER_ID" export default automation("Route new Drive files", () => { const file = googleDrive.onFileCreated({ resource: incomingFolderId, includeDescendants: true, }) googleDrive.moveFile({ fileId: file.fileId, addParentIds: [reviewFolderId], }) }) ``` Use a Drive resource ID or standard Drive, Docs, or Slides URL as `resource`. Set `resourceType: "drive"` for a shared-drive ID or a shared-drive URL copied from Google Drive; copied shared-drive URLs use the same `/folders/` path as folder URLs. Only URLs containing `/drives/` identify shared drives automatically. Shared-drive subscriptions always include descendants. Subscriptions that include resource data expire after four hours; Automate.ax renews them automatically. ## Exports ```ts theme={null} import { googleDrive, googleAccount, getGoogleDriveApi, } from "automate.ax/google-drive" ``` * `googleDrive` contains the packaged Google Drive actions and triggers. * `googleAccount("name")` selects a named Google connection. * `getGoogleDriveApi` creates the authenticated Google Drive API helper for a custom account-backed action. ## Triggers * [On access proposal created](/reference/integrations/google-drive/triggers/on-access-proposal-created) * [On access proposal resolved](/reference/integrations/google-drive/triggers/on-access-proposal-resolved) * [On approval cancelled](/reference/integrations/google-drive/triggers/on-approval-cancelled) * [On approval completed](/reference/integrations/google-drive/triggers/on-approval-completed) * [On approval created](/reference/integrations/google-drive/triggers/on-approval-created) * [On approval reset](/reference/integrations/google-drive/triggers/on-approval-reset) * [On approval reviewer responded](/reference/integrations/google-drive/triggers/on-approval-reviewer-responded) * [On approval reviewers changed](/reference/integrations/google-drive/triggers/on-approval-reviewers-changed) * [On comment created](/reference/integrations/google-drive/triggers/on-comment-created) * [On comment deleted](/reference/integrations/google-drive/triggers/on-comment-deleted) * [On comment edited](/reference/integrations/google-drive/triggers/on-comment-edited) * [On comment reopened](/reference/integrations/google-drive/triggers/on-comment-reopened) * [On comment resolved](/reference/integrations/google-drive/triggers/on-comment-resolved) * [On Drive event](/reference/integrations/google-drive/triggers/on-event) * [On file content changed](/reference/integrations/google-drive/triggers/on-file-content-changed) * [On file created](/reference/integrations/google-drive/triggers/on-file-created) * [On file deleted](/reference/integrations/google-drive/triggers/on-file-deleted) * [On file moved](/reference/integrations/google-drive/triggers/on-file-moved) * [On file renamed](/reference/integrations/google-drive/triggers/on-file-renamed) * [On file trashed](/reference/integrations/google-drive/triggers/on-file-trashed) * [On file restored from trash](/reference/integrations/google-drive/triggers/on-file-untrashed) * [On permission created](/reference/integrations/google-drive/triggers/on-permission-created) * [On permission deleted](/reference/integrations/google-drive/triggers/on-permission-deleted) * [On permission edited](/reference/integrations/google-drive/triggers/on-permission-edited) * [On reply created](/reference/integrations/google-drive/triggers/on-reply-created) * [On reply deleted](/reference/integrations/google-drive/triggers/on-reply-deleted) * [On reply edited](/reference/integrations/google-drive/triggers/on-reply-edited) ## Actions * [Copy file](/reference/integrations/google-drive/actions/copy-file) * [Create comment](/reference/integrations/google-drive/actions/create-comment) * [Create folder](/reference/integrations/google-drive/actions/create-folder) * [Create permission](/reference/integrations/google-drive/actions/create-permission) * [Create reply](/reference/integrations/google-drive/actions/create-reply) * [Create shared drive](/reference/integrations/google-drive/actions/create-shared-drive) * [Delete comment](/reference/integrations/google-drive/actions/delete-comment) * [Delete file](/reference/integrations/google-drive/actions/delete-file) * [Delete permission](/reference/integrations/google-drive/actions/delete-permission) * [Delete reply](/reference/integrations/google-drive/actions/delete-reply) * [Delete shared drive](/reference/integrations/google-drive/actions/delete-shared-drive) * [Download file](/reference/integrations/google-drive/actions/download-file) * [Export file](/reference/integrations/google-drive/actions/export-file) * [Get account](/reference/integrations/google-drive/actions/get-about) * [Get comment](/reference/integrations/google-drive/actions/get-comment) * [Get file](/reference/integrations/google-drive/actions/get-file) * [Get permission](/reference/integrations/google-drive/actions/get-permission) * [Get reply](/reference/integrations/google-drive/actions/get-reply) * [Get shared drive](/reference/integrations/google-drive/actions/get-shared-drive) * [Hide shared drive](/reference/integrations/google-drive/actions/hide-shared-drive) * [List comments](/reference/integrations/google-drive/actions/list-comments) * [List files](/reference/integrations/google-drive/actions/list-files) * [List permissions](/reference/integrations/google-drive/actions/list-permissions) * [List replies](/reference/integrations/google-drive/actions/list-replies) * [List shared drives](/reference/integrations/google-drive/actions/list-shared-drives) * [Move file](/reference/integrations/google-drive/actions/move-file) * [Reopen comment](/reference/integrations/google-drive/actions/reopen-comment) * [Resolve comment](/reference/integrations/google-drive/actions/resolve-comment) * [Restore file](/reference/integrations/google-drive/actions/restore-file) * [Trash file](/reference/integrations/google-drive/actions/trash-file) * [Restore hidden shared drive](/reference/integrations/google-drive/actions/unhide-shared-drive) * [Update comment](/reference/integrations/google-drive/actions/update-comment) * [Update file](/reference/integrations/google-drive/actions/update-file) * [Update permission](/reference/integrations/google-drive/actions/update-permission) * [Update reply](/reference/integrations/google-drive/actions/update-reply) * [Update shared drive](/reference/integrations/google-drive/actions/update-shared-drive) * [Upload file](/reference/integrations/google-drive/actions/upload-file) # On access proposal created Source: https://docs.automate.ax/reference/integrations/google-drive/triggers/on-access-proposal-created Run an automation when an access proposal is created in Google Drive. `googleDrive.onAccessProposalCreated` starts an automation when an access proposal is created on the selected Drive resource. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("On access proposal created", () => { const event = googleDrive.onAccessProposalCreated({ resource: "folder-id", includeDescendants: true, }) // Open an access-request task for the Google Drive file. }) ``` ## Options `resource` accepts a file, folder, or shared-drive ID or a standard Drive, Docs, or Slides URL. Set `resourceType: "drive"` for a shared-drive ID or a shared-drive URL copied from Google Drive; only URLs containing `/drives/` identify shared drives automatically. `includeDescendants` includes nested files for folders and is always enabled for shared drives. `account` optionally selects a Google Account. ## Trigger data Returns the semantic `eventType`, `action`, `resourceType`, provider `eventId`, and `occurredAt`. Resource-specific fields can include `fileId`, `resourceId`, `resourceIds`, parent IDs, MIME type, version, status, due time, and participant email addresses. Deleted resources can contain only identifiers. # On access proposal resolved Source: https://docs.automate.ax/reference/integrations/google-drive/triggers/on-access-proposal-resolved Run an automation when an access proposal is resolved in Google Drive. `googleDrive.onAccessProposalResolved` starts an automation when an access proposal is resolved on the selected Drive resource. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("On access proposal resolved", () => { const event = googleDrive.onAccessProposalResolved({ resource: "folder-id", includeDescendants: true, }) // Close the access-request task for the Google Drive file. }) ``` ## Options `resource` accepts a file, folder, or shared-drive ID or a standard Drive, Docs, or Slides URL. Set `resourceType: "drive"` for a shared-drive ID or a shared-drive URL copied from Google Drive; only URLs containing `/drives/` identify shared drives automatically. `includeDescendants` includes nested files for folders and is always enabled for shared drives. `account` optionally selects a Google Account. ## Trigger data Returns the semantic `eventType`, `action`, `resourceType`, provider `eventId`, and `occurredAt`. Resource-specific fields can include `fileId`, `resourceId`, `resourceIds`, parent IDs, MIME type, version, status, due time, and participant email addresses. Deleted resources can contain only identifiers. # On approval cancelled Source: https://docs.automate.ax/reference/integrations/google-drive/triggers/on-approval-cancelled Run an automation when an approval is cancelled in Google Drive. `googleDrive.onApprovalCancelled` starts an automation when an approval is cancelled on the selected Drive resource. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("On approval cancelled", () => { const event = googleDrive.onApprovalCancelled({ resource: "folder-id", includeDescendants: true, }) // Cancel the approval task for the Google Drive file. }) ``` ## Options `resource` accepts a file, folder, or shared-drive ID or a standard Drive, Docs, or Slides URL. Set `resourceType: "drive"` for a shared-drive ID or a shared-drive URL copied from Google Drive; only URLs containing `/drives/` identify shared drives automatically. `includeDescendants` includes nested files for folders and is always enabled for shared drives. `account` optionally selects a Google Account. ## Trigger data Returns the semantic `eventType`, `action`, `resourceType`, provider `eventId`, and `occurredAt`. Resource-specific fields can include `fileId`, `resourceId`, `resourceIds`, parent IDs, MIME type, version, status, due time, and participant email addresses. Deleted resources can contain only identifiers. # On approval completed Source: https://docs.automate.ax/reference/integrations/google-drive/triggers/on-approval-completed Run an automation when an approval is completed in Google Drive. `googleDrive.onApprovalCompleted` starts an automation when an approval is completed on the selected Drive resource. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("On approval completed", () => { const event = googleDrive.onApprovalCompleted({ resource: "folder-id", includeDescendants: true, }) // Close the approval task for the Google Drive file. }) ``` ## Options `resource` accepts a file, folder, or shared-drive ID or a standard Drive, Docs, or Slides URL. Set `resourceType: "drive"` for a shared-drive ID or a shared-drive URL copied from Google Drive; only URLs containing `/drives/` identify shared drives automatically. `includeDescendants` includes nested files for folders and is always enabled for shared drives. `account` optionally selects a Google Account. ## Trigger data Returns the semantic `eventType`, `action`, `resourceType`, provider `eventId`, and `occurredAt`. Resource-specific fields can include `fileId`, `resourceId`, `resourceIds`, parent IDs, MIME type, version, status, due time, and participant email addresses. Deleted resources can contain only identifiers. # On approval created Source: https://docs.automate.ax/reference/integrations/google-drive/triggers/on-approval-created Run an automation when an approval is created in Google Drive. `googleDrive.onApprovalCreated` starts an automation when an approval is created on the selected Drive resource. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("On approval created", () => { const event = googleDrive.onApprovalCreated({ resource: "folder-id", includeDescendants: true, }) // Open an approval task for the Google Drive file. }) ``` ## Options `resource` accepts a file, folder, or shared-drive ID or a standard Drive, Docs, or Slides URL. Set `resourceType: "drive"` for a shared-drive ID or a shared-drive URL copied from Google Drive; only URLs containing `/drives/` identify shared drives automatically. `includeDescendants` includes nested files for folders and is always enabled for shared drives. `account` optionally selects a Google Account. ## Trigger data Returns the semantic `eventType`, `action`, `resourceType`, provider `eventId`, and `occurredAt`. Resource-specific fields can include `fileId`, `resourceId`, `resourceIds`, parent IDs, MIME type, version, status, due time, and participant email addresses. Deleted resources can contain only identifiers. # On approval reset Source: https://docs.automate.ax/reference/integrations/google-drive/triggers/on-approval-reset Run an automation when an approval is reset in Google Drive. `googleDrive.onApprovalReset` starts an automation when an approval is reset on the selected Drive resource. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("On approval reset", () => { const event = googleDrive.onApprovalReset({ resource: "folder-id", includeDescendants: true, }) // Reopen the approval task for the Google Drive file. }) ``` ## Options `resource` accepts a file, folder, or shared-drive ID or a standard Drive, Docs, or Slides URL. Set `resourceType: "drive"` for a shared-drive ID or a shared-drive URL copied from Google Drive; only URLs containing `/drives/` identify shared drives automatically. `includeDescendants` includes nested files for folders and is always enabled for shared drives. `account` optionally selects a Google Account. ## Trigger data Returns the semantic `eventType`, `action`, `resourceType`, provider `eventId`, and `occurredAt`. Resource-specific fields can include `fileId`, `resourceId`, `resourceIds`, parent IDs, MIME type, version, status, due time, and participant email addresses. Deleted resources can contain only identifiers. # On approval reviewer responded Source: https://docs.automate.ax/reference/integrations/google-drive/triggers/on-approval-reviewer-responded Run an automation when a reviewer responds to an approval in Google Drive. `googleDrive.onApprovalReviewerResponded` starts an automation when a reviewer responds to an approval on the selected Drive resource. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("On approval reviewer responded", () => { const event = googleDrive.onApprovalReviewerResponded({ resource: "folder-id", includeDescendants: true, }) // Record the Google Drive reviewer's approval response. }) ``` ## Options `resource` accepts a file, folder, or shared-drive ID or a standard Drive, Docs, or Slides URL. Set `resourceType: "drive"` for a shared-drive ID or a shared-drive URL copied from Google Drive; only URLs containing `/drives/` identify shared drives automatically. `includeDescendants` includes nested files for folders and is always enabled for shared drives. `account` optionally selects a Google Account. ## Trigger data Returns the semantic `eventType`, `action`, `resourceType`, provider `eventId`, and `occurredAt`. `reviewerResponse` contains the reviewer decision, while `status` contains the overall approval status. Other resource-specific fields can include `fileId`, approval IDs, due time, and participant email addresses. # On approval reviewers changed Source: https://docs.automate.ax/reference/integrations/google-drive/triggers/on-approval-reviewers-changed Run an automation when an approval's reviewers change in Google Drive. `googleDrive.onApprovalReviewersChanged` starts an automation when an approval's reviewers change on the selected Drive resource. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("On approval reviewers changed", () => { const event = googleDrive.onApprovalReviewersChanged({ resource: "folder-id", includeDescendants: true, }) // Sync the Google Drive file's approval reviewers. }) ``` ## Options `resource` accepts a file, folder, or shared-drive ID or a standard Drive, Docs, or Slides URL. Set `resourceType: "drive"` for a shared-drive ID or a shared-drive URL copied from Google Drive; only URLs containing `/drives/` identify shared drives automatically. `includeDescendants` includes nested files for folders and is always enabled for shared drives. `account` optionally selects a Google Account. ## Trigger data Returns the semantic `eventType`, `action`, `resourceType`, provider `eventId`, and `occurredAt`. Resource-specific fields can include `fileId`, `resourceId`, `resourceIds`, parent IDs, MIME type, version, status, due time, and participant email addresses. Deleted resources can contain only identifiers. # On comment created Source: https://docs.automate.ax/reference/integrations/google-drive/triggers/on-comment-created Run an automation when a comment is created in Google Drive. `googleDrive.onCommentCreated` starts an automation when a comment is created on the selected Drive resource. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("On comment created", () => { const event = googleDrive.onCommentCreated({ resource: "folder-id", includeDescendants: true, }) // Notify the file owner about the new Google Drive comment. }) ``` ## Options `resource` accepts a file, folder, or shared-drive ID or a standard Drive, Docs, or Slides URL. Set `resourceType: "drive"` for a shared-drive ID or a shared-drive URL copied from Google Drive; only URLs containing `/drives/` identify shared drives automatically. `includeDescendants` includes nested files for folders and is always enabled for shared drives. `account` optionally selects a Google Account. ## Trigger data Returns the semantic `eventType`, `action`, `resourceType`, provider `eventId`, and `occurredAt`. Resource-specific fields can include `fileId`, `resourceId`, `resourceIds`, parent IDs, MIME type, version, status, due time, and participant email addresses. Deleted resources can contain only identifiers. # On comment deleted Source: https://docs.automate.ax/reference/integrations/google-drive/triggers/on-comment-deleted Run an automation when a comment is deleted in Google Drive. `googleDrive.onCommentDeleted` starts an automation when a comment is deleted on the selected Drive resource. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("On comment deleted", () => { const event = googleDrive.onCommentDeleted({ resource: "folder-id", includeDescendants: true, }) // Remove the deleted Google Drive comment from the review inbox. }) ``` ## Options `resource` accepts a file, folder, or shared-drive ID or a standard Drive, Docs, or Slides URL. Set `resourceType: "drive"` for a shared-drive ID or a shared-drive URL copied from Google Drive; only URLs containing `/drives/` identify shared drives automatically. `includeDescendants` includes nested files for folders and is always enabled for shared drives. `account` optionally selects a Google Account. ## Trigger data Returns the semantic `eventType`, `action`, `resourceType`, provider `eventId`, and `occurredAt`. Resource-specific fields can include `fileId`, `resourceId`, `resourceIds`, parent IDs, MIME type, version, status, due time, and participant email addresses. Deleted resources can contain only identifiers. # On comment edited Source: https://docs.automate.ax/reference/integrations/google-drive/triggers/on-comment-edited Run an automation when a comment is edited in Google Drive. `googleDrive.onCommentEdited` starts an automation when a comment is edited on the selected Drive resource. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("On comment edited", () => { const event = googleDrive.onCommentEdited({ resource: "folder-id", includeDescendants: true, }) // Update the Google Drive comment in the review inbox. }) ``` ## Options `resource` accepts a file, folder, or shared-drive ID or a standard Drive, Docs, or Slides URL. Set `resourceType: "drive"` for a shared-drive ID or a shared-drive URL copied from Google Drive; only URLs containing `/drives/` identify shared drives automatically. `includeDescendants` includes nested files for folders and is always enabled for shared drives. `account` optionally selects a Google Account. ## Trigger data Returns the semantic `eventType`, `action`, `resourceType`, provider `eventId`, and `occurredAt`. Resource-specific fields can include `fileId`, `resourceId`, `resourceIds`, parent IDs, MIME type, version, status, due time, and participant email addresses. Deleted resources can contain only identifiers. # On comment reopened Source: https://docs.automate.ax/reference/integrations/google-drive/triggers/on-comment-reopened Run an automation when a comment is reopened in Google Drive. `googleDrive.onCommentReopened` starts an automation when a comment is reopened on the selected Drive resource. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("On comment reopened", () => { const event = googleDrive.onCommentReopened({ resource: "folder-id", includeDescendants: true, }) // Reopen the review task for the Google Drive comment. }) ``` ## Options `resource` accepts a file, folder, or shared-drive ID or a standard Drive, Docs, or Slides URL. Set `resourceType: "drive"` for a shared-drive ID or a shared-drive URL copied from Google Drive; only URLs containing `/drives/` identify shared drives automatically. `includeDescendants` includes nested files for folders and is always enabled for shared drives. `account` optionally selects a Google Account. ## Trigger data Returns the semantic `eventType`, `action`, `resourceType`, provider `eventId`, and `occurredAt`. Resource-specific fields can include `fileId`, `resourceId`, `resourceIds`, parent IDs, MIME type, version, status, due time, and participant email addresses. Deleted resources can contain only identifiers. # On comment resolved Source: https://docs.automate.ax/reference/integrations/google-drive/triggers/on-comment-resolved Run an automation when a comment is resolved in Google Drive. `googleDrive.onCommentResolved` starts an automation when a comment is resolved on the selected Drive resource. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("On comment resolved", () => { const event = googleDrive.onCommentResolved({ resource: "folder-id", includeDescendants: true, }) // Close the review task for the resolved Google Drive comment. }) ``` ## Options `resource` accepts a file, folder, or shared-drive ID or a standard Drive, Docs, or Slides URL. Set `resourceType: "drive"` for a shared-drive ID or a shared-drive URL copied from Google Drive; only URLs containing `/drives/` identify shared drives automatically. `includeDescendants` includes nested files for folders and is always enabled for shared drives. `account` optionally selects a Google Account. ## Trigger data Returns the semantic `eventType`, `action`, `resourceType`, provider `eventId`, and `occurredAt`. Resource-specific fields can include `fileId`, `resourceId`, `resourceIds`, parent IDs, MIME type, version, status, due time, and participant email addresses. Deleted resources can contain only identifiers. # On Drive event Source: https://docs.automate.ax/reference/integrations/google-drive/triggers/on-event Run an automation when any supported Drive event in Google Drive. `googleDrive.onEvent` starts an automation when any supported Drive event on the selected Drive resource. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("On Drive event", () => { const event = googleDrive.onEvent({ resource: "folder-id", includeDescendants: true, }) // Route the Google Drive change by resource and action. }) ``` ## Options `resource` accepts a file, folder, or shared-drive ID or a standard Drive, Docs, or Slides URL. Set `resourceType: "drive"` for a shared-drive ID or a shared-drive URL copied from Google Drive; only URLs containing `/drives/` identify shared drives automatically. `includeDescendants` includes nested files for folders and is always enabled for shared drives. `account` optionally selects a Google Account. The trigger subscribes only to events supported by the selected resource. For example, file-created events apply to folder and shared-drive targets, not an individual file target. ## Trigger data Returns the semantic `eventType`, `action`, `resourceType`, provider `eventId`, and `occurredAt`. Resource-specific fields can include `fileId`, `resourceId`, `resourceIds`, parent IDs, MIME type, version, status, due time, and participant email addresses. Deleted resources can contain only identifiers. # On file content changed Source: https://docs.automate.ax/reference/integrations/google-drive/triggers/on-file-content-changed Run an automation when file content changes or a revision is uploaded in Google Drive. `googleDrive.onFileContentChanged` starts an automation when file content changes or a revision is uploaded on the selected Drive resource. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("On file content changed", () => { const event = googleDrive.onFileContentChanged({ resource: "folder-id", includeDescendants: true, }) // Reindex the changed Google Drive file. }) ``` ## Options `resource` accepts a file, folder, or shared-drive ID or a standard Drive, Docs, or Slides URL. Set `resourceType: "drive"` for a shared-drive ID or a shared-drive URL copied from Google Drive; only URLs containing `/drives/` identify shared drives automatically. `includeDescendants` includes nested files for folders and is always enabled for shared drives. `account` optionally selects a Google Account. ## Trigger data Returns the semantic `eventType`, `action`, `resourceType`, provider `eventId`, and `occurredAt`. Resource-specific fields can include `fileId`, `resourceId`, `resourceIds`, parent IDs, MIME type, version, status, due time, and participant email addresses. Deleted resources can contain only identifiers. # On file created Source: https://docs.automate.ax/reference/integrations/google-drive/triggers/on-file-created Run an automation when a file is added in Google Drive. `googleDrive.onFileCreated` starts an automation when a file is added on the selected Drive resource. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("On file created", () => { const event = googleDrive.onFileCreated({ resource: "folder-id", includeDescendants: true, }) // Sync the new Google Drive file to the file index. }) ``` ## Options `resource` must identify a folder or shared drive. It accepts a folder or shared-drive ID or URL. Set `resourceType: "drive"` for a shared-drive ID or a shared-drive URL copied from Google Drive; only URLs containing `/drives/` identify shared drives automatically. `includeDescendants` includes nested folders and is always enabled for shared drives. `account` optionally selects a Google Account. ## Trigger data Returns the semantic `eventType`, `action`, `resourceType`, provider `eventId`, and `occurredAt`. Resource-specific fields can include `fileId`, `resourceId`, `resourceIds`, parent IDs, MIME type, version, status, due time, and participant email addresses. Deleted resources can contain only identifiers. # On file deleted Source: https://docs.automate.ax/reference/integrations/google-drive/triggers/on-file-deleted Run an automation when a file is permanently deleted in Google Drive. `googleDrive.onFileDeleted` starts an automation when a file is permanently deleted on the selected Drive resource. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("On file deleted", () => { const event = googleDrive.onFileDeleted({ resource: "folder-id", includeDescendants: true, }) // Remove the deleted Google Drive file from the file index. }) ``` ## Options `resource` accepts a file, folder, or shared-drive ID or a standard Drive, Docs, or Slides URL. Set `resourceType: "drive"` for a shared-drive ID or a shared-drive URL copied from Google Drive; only URLs containing `/drives/` identify shared drives automatically. `includeDescendants` includes nested files for folders and is always enabled for shared drives. `account` optionally selects a Google Account. ## Trigger data Returns the semantic `eventType`, `action`, `resourceType`, provider `eventId`, and `occurredAt`. Resource-specific fields can include `fileId`, `resourceId`, `resourceIds`, parent IDs, MIME type, version, status, due time, and participant email addresses. Deleted resources can contain only identifiers. # On file moved Source: https://docs.automate.ax/reference/integrations/google-drive/triggers/on-file-moved Run an automation when a file moves in Google Drive. `googleDrive.onFileMoved` starts an automation when a file moves on the selected Drive resource. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("On file moved", () => { const event = googleDrive.onFileMoved({ resource: "folder-id", includeDescendants: true, }) // Update the Google Drive file location in the file index. }) ``` ## Options `resource` accepts a file, folder, or shared-drive ID or a standard Drive, Docs, or Slides URL. Set `resourceType: "drive"` for a shared-drive ID or a shared-drive URL copied from Google Drive; only URLs containing `/drives/` identify shared drives automatically. `includeDescendants` includes nested files for folders and is always enabled for shared drives. `account` optionally selects a Google Account. ## Trigger data Returns the semantic `eventType`, `action`, `resourceType`, provider `eventId`, and `occurredAt`. Resource-specific fields can include `fileId`, `resourceId`, `resourceIds`, parent IDs, MIME type, version, status, due time, and participant email addresses. Deleted resources can contain only identifiers. # On file renamed Source: https://docs.automate.ax/reference/integrations/google-drive/triggers/on-file-renamed Run an automation when a file is renamed in Google Drive. `googleDrive.onFileRenamed` starts an automation when a file is renamed on the selected Drive resource. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("On file renamed", () => { const event = googleDrive.onFileRenamed({ resource: "folder-id", includeDescendants: true, }) // Update the Google Drive filename in the file index. }) ``` ## Options `resource` accepts a file, folder, or shared-drive ID or a standard Drive, Docs, or Slides URL. Set `resourceType: "drive"` for a shared-drive ID or a shared-drive URL copied from Google Drive; only URLs containing `/drives/` identify shared drives automatically. `includeDescendants` includes nested files for folders and is always enabled for shared drives. `account` optionally selects a Google Account. ## Trigger data Returns the semantic `eventType`, `action`, `resourceType`, provider `eventId`, and `occurredAt`. Resource-specific fields can include `fileId`, `resourceId`, `resourceIds`, parent IDs, MIME type, version, status, due time, and participant email addresses. Deleted resources can contain only identifiers. # On file trashed Source: https://docs.automate.ax/reference/integrations/google-drive/triggers/on-file-trashed Run an automation when a file is trashed in Google Drive. `googleDrive.onFileTrashed` starts an automation when a file is trashed on the selected Drive resource. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("On file trashed", () => { const event = googleDrive.onFileTrashed({ resource: "folder-id", includeDescendants: true, }) // Remove the trashed Google Drive file from active search. }) ``` ## Options `resource` accepts a file, folder, or shared-drive ID or a standard Drive, Docs, or Slides URL. Set `resourceType: "drive"` for a shared-drive ID or a shared-drive URL copied from Google Drive; only URLs containing `/drives/` identify shared drives automatically. `includeDescendants` includes nested files for folders and is always enabled for shared drives. `account` optionally selects a Google Account. ## Trigger data Returns the semantic `eventType`, `action`, `resourceType`, provider `eventId`, and `occurredAt`. Resource-specific fields can include `fileId`, `resourceId`, `resourceIds`, parent IDs, MIME type, version, status, due time, and participant email addresses. Deleted resources can contain only identifiers. # On file restored from trash Source: https://docs.automate.ax/reference/integrations/google-drive/triggers/on-file-untrashed Run an automation when a file is restored from trash in Google Drive. `googleDrive.onFileUntrashed` starts an automation when a file is restored from trash on the selected Drive resource. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("On file restored from trash", () => { const event = googleDrive.onFileUntrashed({ resource: "folder-id", includeDescendants: true, }) // Restore the Google Drive file to active search. }) ``` ## Options `resource` accepts a file, folder, or shared-drive ID or a standard Drive, Docs, or Slides URL. Set `resourceType: "drive"` for a shared-drive ID or a shared-drive URL copied from Google Drive; only URLs containing `/drives/` identify shared drives automatically. `includeDescendants` includes nested files for folders and is always enabled for shared drives. `account` optionally selects a Google Account. ## Trigger data Returns the semantic `eventType`, `action`, `resourceType`, provider `eventId`, and `occurredAt`. Resource-specific fields can include `fileId`, `resourceId`, `resourceIds`, parent IDs, MIME type, version, status, due time, and participant email addresses. Deleted resources can contain only identifiers. # On permission created Source: https://docs.automate.ax/reference/integrations/google-drive/triggers/on-permission-created Run an automation when a permission is created in Google Drive. `googleDrive.onPermissionCreated` starts an automation when a permission is created on the selected Drive resource. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("On permission created", () => { const event = googleDrive.onPermissionCreated({ resource: "folder-id", includeDescendants: true, }) // Update the access audit after Google Drive adds a permission. }) ``` ## Options `resource` accepts a file, folder, or shared-drive ID or a standard Drive, Docs, or Slides URL. Set `resourceType: "drive"` for a shared-drive ID or a shared-drive URL copied from Google Drive; only URLs containing `/drives/` identify shared drives automatically. `includeDescendants` includes nested files for folders and is always enabled for shared drives. `account` optionally selects a Google Account. ## Trigger data Returns the semantic `eventType`, `action`, `resourceType`, provider `eventId`, and `occurredAt`. Resource-specific fields can include `fileId`, `resourceId`, `resourceIds`, parent IDs, MIME type, version, status, due time, and participant email addresses. Deleted resources can contain only identifiers. # On permission deleted Source: https://docs.automate.ax/reference/integrations/google-drive/triggers/on-permission-deleted Run an automation when a permission is deleted in Google Drive. `googleDrive.onPermissionDeleted` starts an automation when a permission is deleted on the selected Drive resource. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("On permission deleted", () => { const event = googleDrive.onPermissionDeleted({ resource: "folder-id", includeDescendants: true, }) // Update the access audit after Google Drive removes a permission. }) ``` ## Options `resource` accepts a file, folder, or shared-drive ID or a standard Drive, Docs, or Slides URL. Set `resourceType: "drive"` for a shared-drive ID or a shared-drive URL copied from Google Drive; only URLs containing `/drives/` identify shared drives automatically. `includeDescendants` includes nested files for folders and is always enabled for shared drives. `account` optionally selects a Google Account. ## Trigger data Returns the semantic `eventType`, `action`, `resourceType`, provider `eventId`, and `occurredAt`. Resource-specific fields can include `fileId`, `resourceId`, `resourceIds`, parent IDs, MIME type, version, status, due time, and participant email addresses. Deleted resources can contain only identifiers. # On permission edited Source: https://docs.automate.ax/reference/integrations/google-drive/triggers/on-permission-edited Run an automation when a permission is edited in Google Drive. `googleDrive.onPermissionEdited` starts an automation when a permission is edited on the selected Drive resource. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("On permission edited", () => { const event = googleDrive.onPermissionEdited({ resource: "folder-id", includeDescendants: true, }) // Update the access audit after Google Drive changes a permission. }) ``` ## Options `resource` accepts a file, folder, or shared-drive ID or a standard Drive, Docs, or Slides URL. Set `resourceType: "drive"` for a shared-drive ID or a shared-drive URL copied from Google Drive; only URLs containing `/drives/` identify shared drives automatically. `includeDescendants` includes nested files for folders and is always enabled for shared drives. `account` optionally selects a Google Account. ## Trigger data Returns the semantic `eventType`, `action`, `resourceType`, provider `eventId`, and `occurredAt`. Resource-specific fields can include `fileId`, `resourceId`, `resourceIds`, parent IDs, MIME type, version, status, due time, and participant email addresses. Deleted resources can contain only identifiers. # On reply created Source: https://docs.automate.ax/reference/integrations/google-drive/triggers/on-reply-created Run an automation when a comment reply is created in Google Drive. `googleDrive.onReplyCreated` starts an automation when a comment reply is created on the selected Drive resource. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("On reply created", () => { const event = googleDrive.onReplyCreated({ resource: "folder-id", includeDescendants: true, }) // Notify the comment owner about the new Google Drive reply. }) ``` ## Options `resource` accepts a file, folder, or shared-drive ID or a standard Drive, Docs, or Slides URL. Set `resourceType: "drive"` for a shared-drive ID or a shared-drive URL copied from Google Drive; only URLs containing `/drives/` identify shared drives automatically. `includeDescendants` includes nested files for folders and is always enabled for shared drives. `account` optionally selects a Google Account. ## Trigger data Returns the semantic `eventType`, `action`, `resourceType`, provider `eventId`, and `occurredAt`. `fileId`, `commentId`, and `resourceId` identify the file, parent comment, and reply so you can pass them directly to reply actions. Other resource-specific fields can include parent IDs, MIME type, version, status, due time, and participant email addresses. # On reply deleted Source: https://docs.automate.ax/reference/integrations/google-drive/triggers/on-reply-deleted Run an automation when a comment reply is deleted in Google Drive. `googleDrive.onReplyDeleted` starts an automation when a comment reply is deleted on the selected Drive resource. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("On reply deleted", () => { const event = googleDrive.onReplyDeleted({ resource: "folder-id", includeDescendants: true, }) // Remove the deleted Google Drive reply from the review inbox. }) ``` ## Options `resource` accepts a file, folder, or shared-drive ID or a standard Drive, Docs, or Slides URL. Set `resourceType: "drive"` for a shared-drive ID or a shared-drive URL copied from Google Drive; only URLs containing `/drives/` identify shared drives automatically. `includeDescendants` includes nested files for folders and is always enabled for shared drives. `account` optionally selects a Google Account. ## Trigger data Returns the semantic `eventType`, `action`, `resourceType`, provider `eventId`, and `occurredAt`. `fileId`, `commentId`, and `resourceId` identify the file, parent comment, and reply so you can pass them directly to reply actions. Deleted replies can contain only those identifiers. # On reply edited Source: https://docs.automate.ax/reference/integrations/google-drive/triggers/on-reply-edited Run an automation when a comment reply is edited in Google Drive. `googleDrive.onReplyEdited` starts an automation when a comment reply is edited on the selected Drive resource. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleDrive } from "automate.ax/google-drive" export default automation("On reply edited", () => { const event = googleDrive.onReplyEdited({ resource: "folder-id", includeDescendants: true, }) // Update the Google Drive reply in the review inbox. }) ``` ## Options `resource` accepts a file, folder, or shared-drive ID or a standard Drive, Docs, or Slides URL. Set `resourceType: "drive"` for a shared-drive ID or a shared-drive URL copied from Google Drive; only URLs containing `/drives/` identify shared drives automatically. `includeDescendants` includes nested files for folders and is always enabled for shared drives. `account` optionally selects a Google Account. ## Trigger data Returns the semantic `eventType`, `action`, `resourceType`, provider `eventId`, and `occurredAt`. `fileId`, `commentId`, and `resourceId` identify the file, parent comment, and reply so you can pass them directly to reply actions. Other resource-specific fields can include parent IDs, MIME type, version, status, due time, and participant email addresses. # Add item Source: https://docs.automate.ax/reference/integrations/google-forms/actions/add-item Add a question, grid, section, text block, image, or video to a Google Form. `googleForms.addItem` appends or inserts any supported Forms item. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleForms } from "automate.ax/google-forms" export default automation("Add a survey section", () => { onDashboardRun({ title: "Add a survey section" }) googleForms.addItem({ form: "form-id", item: { type: "grid", title: "Rate the product", gridType: "multipleChoice", columns: ["Poor", "Good", "Excellent"], rows: [{ title: "Speed", required: true }, { title: "Reliability" }], }, }) }) ``` ## Inputs Provide `form` and `item`. `position` is a one-based insertion position. Omit it to append. `requiredRevisionId` enables optimistic concurrency. ## Item types * `question`: `title`, optional `description`/`grading`, and a `question` configuration from [Add question](/reference/integrations/google-forms/actions/add-question#inputs). * `grid`: `columns`, `gridType: "multipleChoice" | "checkbox"`, and rows with `title`, optional `required` and `questionId`. `shuffleRows` is optional. * `pageBreak` or `text`: optional `title` and `description`. * `image`: public `sourceUrl`, optional `altText`, `alignment`, `width` 1–740, title, and description. * `video`: a YouTube `youtubeUrl`, optional `caption`, `alignment`, `width` 1–740, title, and description. Second argument `{ account }` selects the Google Account binding. ## Output Returns the updated `Form`, including Google's generated IDs. Images must be reachable by Google and videos must use a YouTube watch or share URL. # Add question Source: https://docs.automate.ax/reference/integrations/google-forms/actions/add-question Add a question to a Google Form. `googleForms.addQuestion` adds one question. Use `googleForms.addItem` for grids, sections, text, images, or videos. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleForms } from "automate.ax/google-forms" export default automation("Add a satisfaction question", () => { onDashboardRun({ title: "Add a satisfaction question" }) googleForms.addQuestion({ form: "form-id", title: "How satisfied are you?", question: { type: "scale", low: 1, high: 5, lowLabel: "Not satisfied", highLabel: "Very satisfied", required: true, }, }) }) ``` ## Inputs Provide `form`, `title`, and `question`. `description`, optional quiz `grading`, one-based `position`, and `requiredRevisionId` are optional. Question types are `shortText`, `paragraph`, `multipleChoice`, `checkbox`, `dropdown`, `scale`, `date`, `time`, `duration`, and `rating`. Choice questions require `options`. Scale uses `low` 0 or 1 and `high` 2–10. Rating uses 3–10 `levels`, and `icon` accepts `star`, `heart`, or `thumbUp`. Every question can set `required`. Choices can set `shuffle`. Date can set `includeTime` and `includeYear`. `grading` is `{ correctAnswers: string[]; points: number; generalFeedback?: string; whenRight?: string; whenWrong?: string }`. Second argument `{ account }` selects the Google Account binding. ## Output Returns the updated `Form`. Omit `position` to append. A stale `requiredRevisionId` rejects the write instead of overwriting newer changes. # Batch update form Source: https://docs.automate.ax/reference/integrations/google-forms/actions/batch-update-form Run raw Google Forms API update requests atomically. Use `googleForms.batchUpdateForm` for Forms API features without a dedicated action. Prefer the item, metadata, settings, and publishing actions for common operations. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleForms } from "automate.ax/google-forms" export default automation("Create a raw Forms API item", () => { onDashboardRun({ title: "Create a raw Forms API item" }) googleForms.batchUpdateForm({ form: "form-id", includeForm: true, requests: [ { createItem: { item: { title: "Introduction", textItem: {} }, location: { index: 0 }, }, }, ], }) }) ``` ## Inputs Provide `form` and a non-empty `requests` array of Google Forms API `Request` objects. `includeForm` controls whether Google returns the updated form. Use either `requiredRevisionId` for a strict optimistic write or `targetRevisionId` to merge against a recent revision, never both. Second argument `{ account }` selects the Google Account. ## Output ```ts theme={null} interface FormBatchUpdateResult { form?: Form revisionId?: string replies: Array<{ createdItemId?: string createdQuestionIds: string[] }> } ``` Replies correspond one-to-one with requests. Raw request shapes follow the Google Forms API and can change independently of Automate.ax. # Create form Source: https://docs.automate.ax/reference/integrations/google-forms/actions/create-form Create a Google Form with optional settings and items. `googleForms.createForm` can add a description, settings, and initial items in display order. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleForms } from "automate.ax/google-forms" export default automation("Create a launch survey", () => { onDashboardRun({ title: "Create a launch survey" }) googleForms.createForm({ title: "Launch feedback", description: "Tell us what worked", settings: { emailCollection: "verified" }, items: [ { type: "question", title: "How did it go?", question: { type: "paragraph", required: true }, }, ], }) }) ``` ## Inputs Provide `title`. `documentTitle` defaults to `title`. `description` is optional. `settings` can set `isQuiz`, `emailCollection`, or both. `emailCollection` accepts `none`, `verified`, or `respondentInput`. `items` accepts the item definitions listed on [Add item](/reference/integrations/google-forms/actions/add-item#item-types). Set `unpublished: true` to create the form unpublished and not accepting responses. Second argument `{ account }` selects the Google Account. ## Output Returns the created `Form`. See [Get form](/reference/integrations/google-forms/actions/get-form#output). It includes Google's item and question IDs. # Delete item Source: https://docs.automate.ax/reference/integrations/google-forms/actions/delete-item Delete a question or other item from a Google Form. `googleForms.deleteItem` removes one item selected by stable ID or current display position. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleForms } from "automate.ax/google-forms" export default automation("Remove an obsolete question", () => { onDashboardRun({ title: "Remove an obsolete question" }) googleForms.deleteItem({ form: "form-id", itemReference: "item-id" }) }) ``` ## Inputs Provide `form` and `itemReference: string | number`. Numeric positions are one-based. `requiredRevisionId` is optional. Optional second argument `{ account }` selects the Google Account. ## Output Returns the form after deletion. Prefer immutable IDs when other edits can change item positions. Historical responses may still refer to a deleted question's ID. # Get form Source: https://docs.automate.ax/reference/integrations/google-forms/actions/get-form Retrieve a Google Form with all items and settings. `googleForms.getForm` returns metadata, publication state, settings, and every item. Use it to find stable item and question IDs before updating the form or routing answers. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleForms } from "automate.ax/google-forms" export default automation("Inspect an intake form", () => { onDashboardRun({ title: "Inspect an intake form" }) googleForms.getForm({ form: "https://docs.google.com/forms/d/form-id/edit" }) }) ``` ## Inputs Provide `form: string` as a form ID or standard Forms URL. Second argument `{ account }` selects the Google Account. Inputs accept compatible signals. ## Output ```ts theme={null} interface Form { formId: string title: string documentTitle?: string description?: string editUrl: string responderUrl?: string linkedSheetId?: string revisionId?: string settings: { emailCollection: "none" | "verified" | "respondentInput" isQuiz: boolean } publishSettings?: { isPublished: boolean isAcceptingResponses: boolean } items: Array<{ itemId: string index: number title: string description?: string type: | "question" | "grid" | "pageBreak" | "text" | "image" | "video" | "unknown" questions: Array<{ questionId: string type: | "shortText" | "paragraph" | "multipleChoice" | "checkbox" | "dropdown" | "scale" | "date" | "time" | "duration" | "rating" | "fileUpload" | "gridRow" | "unknown" required: boolean choices: string[] rowTitle?: string date?: { includeTime: boolean; includeYear: boolean } scale?: { low: number high: number lowLabel?: string highLabel?: string } rating?: { icon: string; levels: number } fileUpload?: { folderId?: string maxFileSizeBytes?: string maxFiles?: number types: string[] } grading?: Grading }> }> } ``` `index` is zero-based, while item positions accepted by editing actions are one-based. Keep immutable `itemId` and `questionId` values when order can change. # Get form response Source: https://docs.automate.ax/reference/integrations/google-forms/actions/get-form-response Retrieve one Google Form response with text, files, and quiz grades. `googleForms.getResponse` returns a response by immutable ID, with answers in form display order. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleForms } from "automate.ax/google-forms" export default automation("Load a survey response", () => { onDashboardRun({ title: "Load a survey response" }) googleForms.getResponse({ form: "form-id", responseId: "response-id", includeQuestionTitles: true, }) }) ``` ## Inputs Provide `form` and `responseId`. `includeQuestionTitles` defaults to `true`. Set it to `false` to avoid the additional form-metadata request. Second argument `{ account }` selects the Google Account. ## Output ```ts theme={null} interface FormResponse { formId: string responseId: string createTime?: string lastSubmittedTime?: string respondentEmail?: string totalScore?: number answers: Array<{ questionId: string questionTitle?: string values: string[] files: Array<{ fileId: string; fileName: string; mimeType: string }> grade?: { correct?: boolean score?: number points?: number correctAnswers: string[] feedback?: string whenRight?: string whenWrong?: string } }> } ``` Text answers can contain multiple values. File-upload answers use `files` and leave `values` empty. `respondentEmail` and quiz fields are present only when the form collects or grades them. # List form responses Source: https://docs.automate.ax/reference/integrations/google-forms/actions/list-form-responses List one page of Google Form responses, optionally filtered by time. `googleForms.listResponses` returns one Google page and can filter by submission time. Use it for backfills or explicit pagination. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleForms } from "automate.ax/google-forms" export default automation("List today's responses", () => { onDashboardRun({ title: "List today's responses" }) googleForms.listResponses({ form: "form-id", submittedAtOrAfter: "2026-08-05T00:00:00-07:00", pageSize: 500, }) }) ``` ## Inputs | Property | Type | Required | Default | Description | | - | - | - | - | - | | `form` | `string` | Yes | None | Form ID or standard Forms URL. | | `includeQuestionTitles` | `boolean` | No | `true` | Fetch form metadata to attach question titles and display ordering. | | `pageSize` | `number` | No | Provider default | Requested page size from 1–5,000. Google may return fewer. | | `pageToken` | `string` | No | None | Token from a previous page. | | `submittedAtOrAfter` | `string` | No | None | Inclusive submission boundary in `RFC 3339` format. | | `submittedAfter` | `string` | No | None | Exclusive submission boundary in `RFC 3339` format. | | Second argument: `{ account }` | Google Account reference | No | Project default | Connected account. | Use only one timestamp boundary. Automate.ax converts it to Coordinated Universal Time for Google's supported response filter syntax. ## Output Returns `{ responses: FormResponse[]; nextPageToken?: string }`. See [Get form response](/reference/integrations/google-forms/actions/get-form-response#output). Follow `nextPageToken` to retrieve all results. # Move item Source: https://docs.automate.ax/reference/integrations/google-forms/actions/move-item Move a Google Forms item to a new position. `googleForms.moveItem` reorders one item without replacing its content. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleForms } from "automate.ax/google-forms" export default automation("Move consent first", () => { onDashboardRun({ title: "Move consent first" }) googleForms.moveItem({ form: "form-id", itemReference: "consent-item-id", position: 1, }) }) ``` ## Inputs Provide `form`, a new one-based `position`, and an ID or current one-based position in `itemReference`. `requiredRevisionId` is optional. Optional second argument `{ account }` selects the Google Account. ## Output Returns the reordered `Form`. Use item IDs when moving multiple items because positions change after each move. # Set publish settings Source: https://docs.automate.ax/reference/integrations/google-forms/actions/set-publish-settings Publish, unpublish, open, or close a modern Google Form. `googleForms.setPublishing` controls whether respondents can see and submit a form. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleForms } from "automate.ax/google-forms" export default automation("Open form responses", () => { onDashboardRun({ title: "Open form responses" }) googleForms.setPublishing({ form: "form-id", isPublished: true, isAcceptingResponses: true, }) }) ``` ## Inputs Provide `form`, `isPublished`, and `isAcceptingResponses`. A form can't accept responses while unpublished. Second argument `{ account }` selects the Google Account. ## Output Returns `{ formId: string; publishSettings: { isPublished: boolean; isAcceptingResponses: boolean } }`. Google only supports this publishing API for modern forms that use explicit publication controls. # Update form Source: https://docs.automate.ax/reference/integrations/google-forms/actions/update-form Update a Google Form's respondent-facing title or description. `googleForms.updateForm` patches form metadata without changing items or settings. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleForms } from "automate.ax/google-forms" export default automation("Refresh form copy", () => { onDashboardRun({ title: "Refresh form copy" }) googleForms.updateForm({ form: "form-id", title: "2026 launch feedback", description: "Responses close Friday", }) }) ``` ## Inputs Provide `form`. Provide `title`, `description`, or both. An empty description clears it. `requiredRevisionId` is optional. Optional second argument `{ account }` selects the Google Account. ## Output Returns the updated `Form`. This doesn't change the separately stored Drive document title. # Update form settings Source: https://docs.automate.ax/reference/integrations/google-forms/actions/update-form-settings Update Google Forms quiz and email-collection behavior. `googleForms.updateSettings` changes quiz and email-collection settings. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleForms } from "automate.ax/google-forms" export default automation("Turn intake into a quiz", () => { onDashboardRun({ title: "Turn intake into a quiz" }) googleForms.updateSettings({ form: "form-id", settings: { isQuiz: true, emailCollection: "verified" }, }) }) ``` ## Inputs Provide `form` and `settings`. `settings` must provide `isQuiz`, `emailCollection`, or both. `emailCollection` accepts `none`, `verified`, or `respondentInput`. `requiredRevisionId` is optional. Optional second argument `{ account }` selects the Google Account. ## Output Returns the updated `Form`. `verified` uses the signed-in identity. `respondentInput` asks the respondent to enter an address. Google may restrict quizzes and existing question grading. # Update item Source: https://docs.automate.ax/reference/integrations/google-forms/actions/update-item Replace a Google Forms item while preserving generated IDs when possible. `googleForms.updateItem` replaces an item while preserving its ID, position, and question IDs where possible. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleForms } from "automate.ax/google-forms" export default automation("Update a section heading", () => { onDashboardRun({ title: "Update a section heading" }) googleForms.updateItem({ form: "form-id", itemReference: 2, item: { type: "pageBreak", title: "Contact details" }, }) }) ``` ## Inputs Provide `form`, a complete replacement `item`, and an immutable item ID or one-based position in `itemReference`. Item definitions match [Add item](/reference/integrations/google-forms/actions/add-item#item-types). `requiredRevisionId` is optional. Second argument `{ account }` selects the Google Account binding. ## Output Returns the updated `Form`. Because the update mask covers the whole item, it removes omitted fields. # Update question Source: https://docs.automate.ax/reference/integrations/google-forms/actions/update-question Replace one Google Forms question while preserving its generated IDs. `googleForms.updateQuestion` replaces a question item's title, description, question configuration, and optional grading without changing its item or question ID. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleForms } from "automate.ax/google-forms" export default automation("Require a form question", () => { onDashboardRun({ title: "Require a form question" }) googleForms.updateQuestion({ form: "form-id", itemReference: "item-id", title: "How satisfied are you?", question: { type: "scale", low: 1, high: 5, required: true }, }) }) ``` ## Inputs Provide `form`, `title`, and `question`, plus an item ID or one-based position in `itemReference`. `description`, `grading`, and `requiredRevisionId` are optional. Question and grading types match [Add question](/reference/integrations/google-forms/actions/add-question#inputs). Second argument `{ account }` selects the Google Account binding. ## Output Returns the updated `Form`. The action fails unless the selected item is a standalone question. Use `googleForms.updateItem` for grids and other item types. # Google Forms Source: https://docs.automate.ax/reference/integrations/google-forms/index Create and update Google Forms, read responses, and react to form or response changes. ## Exports ```ts theme={null} import { googleForms, googleAccount, getGoogleFormsApi, } from "automate.ax/google-forms" ``` * `googleForms` contains the packaged Google Forms actions and triggers. * `googleAccount("name")` selects a named Google connection. * `getGoogleFormsApi` creates the authenticated Google Forms API helper for a custom account-backed action. ## Triggers * [On form changed](/reference/integrations/google-forms/triggers/on-form-changed) * [On response submitted](/reference/integrations/google-forms/triggers/on-response-submitted) ## Actions * [Add item](/reference/integrations/google-forms/actions/add-item) * [Add question](/reference/integrations/google-forms/actions/add-question) * [Batch update form](/reference/integrations/google-forms/actions/batch-update-form) * [Create form](/reference/integrations/google-forms/actions/create-form) * [Delete item](/reference/integrations/google-forms/actions/delete-item) * [Get form response](/reference/integrations/google-forms/actions/get-form-response) * [Get form](/reference/integrations/google-forms/actions/get-form) * [List form responses](/reference/integrations/google-forms/actions/list-form-responses) * [Move item](/reference/integrations/google-forms/actions/move-item) * [Set publish settings](/reference/integrations/google-forms/actions/set-publish-settings) * [Update form settings](/reference/integrations/google-forms/actions/update-form-settings) * [Update form](/reference/integrations/google-forms/actions/update-form) * [Update item](/reference/integrations/google-forms/actions/update-item) * [Update question](/reference/integrations/google-forms/actions/update-question) # On form changed Source: https://docs.automate.ax/reference/integrations/google-forms/triggers/on-form-changed Run an automation when Google Form content or settings change. `googleForms.onFormChanged` emits the current form when its content or settings change. `event` contains Google's notification metadata. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleForms } from "automate.ax/google-forms" export default automation("Audit form changes", () => { const change = googleForms.onFormChanged({ form: "form-id" }) // Sync the new Google Forms revision to the form index. }) ``` ## Options Provide `form: string` as a static ID or standard Forms URL. `account` is an optional static Google Account binding. ## Trigger data ```ts theme={null} type FormChangedEvent = Form & { event: { eventType: "SCHEMA" formId: string messageId: string publishTime: string watchId: string } } ``` See [Get form](/reference/integrations/google-forms/actions/get-form#output) for the form fields. Google doesn't identify the changed fields. Compare the form or `revisionId` with stored state for a field-level diff. # On response submitted Source: https://docs.automate.ax/reference/integrations/google-forms/triggers/on-response-submitted Run an automation for each new or edited Google Form response. `googleForms.onResponseSubmitted` emits every new response version. Google also treats respondent edits as submissions. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleForms } from "automate.ax/google-forms" export default automation("Process intake responses", () => { const response = googleForms.onResponseSubmitted({ form: "form-id" }) // Send the Google Forms response to its destination system. }) ``` ## Options Provide `form: string` as a static ID or standard Forms URL. `account` is an optional static Google Account binding. Signals can't choose the watched form or account at runtime. ## Trigger data Returns a `FormResponse`. See [Get form response](/reference/integrations/google-forms/actions/get-form-response#output). Automate.ax sets its cursor when it creates the watch and doesn't intentionally replay older responses. It loads every response represented by a notification and deduplicates versions by `responseId` and `lastSubmittedTime`. # Create meeting space Source: https://docs.automate.ax/reference/integrations/google-meet/actions/create-space Create a reusable Google Meet space with typed settings. `googleMeet.createSpace` creates an app-owned meeting space and returns its join details. Use it when an automation needs a stable Meet link. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleMeet } from "automate.ax/google-meet" export default automation("Create a customer call", () => { onDashboardRun({ title: "Create a customer call" }) return googleMeet.createSpace({ config: { accessType: "trusted", artifacts: { recording: true, transcription: true }, }, }) }) ``` ## Inputs `config` is optional. It can set `accessType`, `entryPointAccess`, `moderation`, `attendanceReport`, automatic `artifacts`, and moderation restrictions. Second argument `{ account }` selects the Google Account. Inputs accept compatible signals. ## Output Returns a meeting space with `name`, `meetingCode`, `meetingUri`, `config`, phone and Session Initiation Protocol (SIP) entry points, and `activeConference` when a call is running. The `meetings.space.created` OAuth scope limits this action to spaces created by Automate.ax. # End active conference Source: https://docs.automate.ax/reference/integrations/google-meet/actions/end-conference End the active call in an app-created Google Meet space. `googleMeet.endConference` ends the active call in a meeting space. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleMeet } from "automate.ax/google-meet" export default automation("End a support room", () => { onDashboardRun({ title: "End a support room" }) return googleMeet.endConference({ space: "spaces/space-id" }) }) ``` ## Inputs Provide `space` as a resource name or opaque ID. Second argument `{ account }` selects the Google Account. Inputs accept compatible signals. ## Output Returns `{ space: string }` after Google accepts the request. The connected app must have created the space, and the space must have an active conference. # Get conference record Source: https://docs.automate.ax/reference/integrations/google-meet/actions/get-conference-record Retrieve timing and space metadata for one Google Meet conference. `googleMeet.getConferenceRecord` retrieves one active or completed conference record. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleMeet } from "automate.ax/google-meet" export default automation("Inspect a conference", () => { onDashboardRun({ title: "Inspect a conference" }) return googleMeet.getConferenceRecord({ conferenceRecord: "conferenceRecords/record-id", }) }) ``` ## Inputs Provide `conferenceRecord` as a resource name or raw record ID. Second argument `{ account }` selects the Google Account. Inputs accept compatible signals. ## Output Returns `{ name, space, startTime, endTime?, expireTime? }`. `endTime` is absent while the conference is active. # Get participant Source: https://docs.automate.ax/reference/integrations/google-meet/actions/get-participant Retrieve one Google Meet participant and identity. `googleMeet.getParticipant` retrieves one participant aggregated across their join sessions. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleMeet } from "automate.ax/google-meet" export default automation("Inspect a participant", () => { onDashboardRun({ title: "Inspect a participant" }) return googleMeet.getParticipant({ participant: "conferenceRecords/record-id/participants/participant-id", }) }) ``` ## Inputs Provide the full `participant` resource name returned by Meet. Second argument `{ account }` selects the Google Account. Inputs accept compatible signals. ## Output Returns `name`, optional `earliestStartTime` and `latestEndTime`, plus a discriminated `user` identity with type `signedIn`, `anonymous`, or `phone`. # Get participant session Source: https://docs.automate.ax/reference/integrations/google-meet/actions/get-participant-session Retrieve one device-level Google Meet join session. `googleMeet.getParticipantSession` retrieves the timing for one participant device joining a conference. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleMeet } from "automate.ax/google-meet" export default automation("Inspect a join session", () => { onDashboardRun({ title: "Inspect a join session" }) return googleMeet.getParticipantSession({ participantSession: "conferenceRecords/record-id/participants/participant-id/participantSessions/session-id", }) }) ``` ## Inputs Provide the full `participantSession` resource name returned by Meet. Second argument `{ account }` selects the Google Account. Inputs accept compatible signals. ## Output Returns `{ name, startTime, endTime? }`. `endTime` is absent while the device remains connected. # Get recording Source: https://docs.automate.ax/reference/integrations/google-meet/actions/get-recording Retrieve one Google Meet recording and its Drive destination. `googleMeet.getRecording` retrieves the state, timing, and generated file for one recording session. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleMeet } from "automate.ax/google-meet" export default automation("Inspect a recording", () => { onDashboardRun({ title: "Inspect a recording" }) return googleMeet.getRecording({ recording: "conferenceRecords/record-id/recordings/recording-id", }) }) ``` ## Inputs Provide the full `recording` resource name. Second argument `{ account }` selects the Google Account. Inputs accept compatible signals. ## Output Returns `name`, optional start/end times, and an optional Drive destination with `fileId` and `exportUri`. The `state` is `started`, `ended`, or `fileGenerated`. # Get smart note Source: https://docs.automate.ax/reference/integrations/google-meet/actions/get-smart-note Retrieve one Google Meet smart note and its Docs destination. `googleMeet.getSmartNote` retrieves the state, timing, and generated document for one Gemini smart-note session. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleMeet } from "automate.ax/google-meet" export default automation("Inspect meeting notes", () => { onDashboardRun({ title: "Inspect meeting notes" }) return googleMeet.getSmartNote({ smartNote: "conferenceRecords/record-id/smartNotes/smart-note-id", }) }) ``` ## Inputs Provide the full `smartNote` resource name. Second argument `{ account }` selects the Google Account. Inputs accept compatible signals. ## Output Returns `name`, optional start/end times, and an optional Docs destination with `documentId` and `exportUri`. The `state` is `started`, `ended`, or `fileGenerated`. # Get meeting space Source: https://docs.automate.ax/reference/integrations/google-meet/actions/get-space Retrieve current Google Meet join details and settings. `googleMeet.getSpace` retrieves one meeting space by resource name, opaque ID, meeting code, or Meet URL. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleMeet } from "automate.ax/google-meet" export default automation("Inspect a meeting", () => { onDashboardRun({ title: "Inspect a meeting" }) return googleMeet.getSpace({ space: "https://meet.google.com/abc-defg-hij" }) }) ``` ## Inputs Provide `space: string`. Second argument `{ account }` selects the Google Account. Inputs accept compatible signals. ## Output Returns `name`, `meetingCode`, `meetingUri`, current `config`, phone and Session Initiation Protocol (SIP) entry points, and an optional `activeConference` resource name. # Get transcript Source: https://docs.automate.ax/reference/integrations/google-meet/actions/get-transcript Retrieve one Google Meet transcript and its Docs destination. `googleMeet.getTranscript` retrieves the state, timing, and generated document for one transcript session. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleMeet } from "automate.ax/google-meet" export default automation("Inspect a transcript", () => { onDashboardRun({ title: "Inspect a transcript" }) return googleMeet.getTranscript({ transcript: "conferenceRecords/record-id/transcripts/transcript-id", }) }) ``` ## Inputs Provide the full `transcript` resource name. Second argument `{ account }` selects the Google Account. Inputs accept compatible signals. ## Output Returns `name`, optional start/end times, and an optional Docs destination with `documentId` and `exportUri`. The `state` is `started`, `ended`, or `fileGenerated`. # Get transcript entry Source: https://docs.automate.ax/reference/integrations/google-meet/actions/get-transcript-entry Retrieve one timed speaker segment from a Google Meet transcript. `googleMeet.getTranscriptEntry` retrieves one structured speech segment from a transcript. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleMeet } from "automate.ax/google-meet" export default automation("Inspect a transcript segment", () => { onDashboardRun({ title: "Inspect a transcript segment" }) return googleMeet.getTranscriptEntry({ transcriptEntry: "conferenceRecords/record-id/transcripts/transcript-id/entries/entry-id", }) }) ``` ## Inputs Provide the full `transcriptEntry` resource name. Second argument `{ account }` selects the Google Account. Inputs accept compatible signals. ## Output Returns `{ name, participant, text, languageCode, startTime, endTime }`. `participant` is the Meet participant resource name for the speaker. # List conference records Source: https://docs.automate.ax/reference/integrations/google-meet/actions/list-conference-records List Google Meet conferences with provider filtering and pagination. `googleMeet.listConferenceRecords` returns one page of active and completed conference records. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleMeet } from "automate.ax/google-meet" export default automation("List recent conferences", () => { onDashboardRun({ title: "List recent conferences" }) return googleMeet.listConferenceRecords({ filter: 'space.meeting_code = "abc-defg-hij"', pageSize: 25, }) }) ``` ## Inputs All inputs are optional: `filter`, `pageSize` from 1 to 100, and `pageToken`. Google filters can select by space, start time, or end time. Second argument `{ account }` selects the Google Account. Inputs accept compatible signals. ## Output Returns `{ conferenceRecords: ConferenceRecord[]; nextPageToken?: string }`. Pass `nextPageToken` into another call to retrieve the next page. # List participant sessions Source: https://docs.automate.ax/reference/integrations/google-meet/actions/list-participant-sessions List device-level join sessions for one Google Meet participant. `googleMeet.listParticipantSessions` returns the individual join intervals behind a participant's aggregate attendance. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleMeet } from "automate.ax/google-meet" export default automation("List join sessions", () => { onDashboardRun({ title: "List join sessions" }) return googleMeet.listParticipantSessions({ participant: "conferenceRecords/record-id/participants/participant-id", pageSize: 100, }) }) ``` ## Inputs Provide the full `participant` resource name. Optional `filter` selects by start or end time. `pageSize` accepts 1–250, and `pageToken` continues a previous request. Second argument `{ account }` selects the Google Account. Inputs accept compatible signals. ## Output Returns `{ participantSessions: ParticipantSession[]; nextPageToken?: string }`. # List participants Source: https://docs.automate.ax/reference/integrations/google-meet/actions/list-participants List participant identities and attendance intervals for a conference. `googleMeet.listParticipants` returns one page of participants in a conference record. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleMeet } from "automate.ax/google-meet" export default automation("List conference participants", () => { onDashboardRun({ title: "List conference participants" }) return googleMeet.listParticipants({ conferenceRecord: "conferenceRecords/record-id", pageSize: 100, }) }) ``` ## Inputs Provide `conferenceRecord`. Optional `filter` selects by the first start or final end time. `pageSize` accepts 1–250, and `pageToken` continues a previous request. Second argument `{ account }` selects the Google Account. Inputs accept compatible signals. ## Output Returns `{ participants, totalSize?, nextPageToken? }`. Each participant includes its identity variant and observed attendance interval. # List recordings Source: https://docs.automate.ax/reference/integrations/google-meet/actions/list-recordings List recording sessions and generated Drive files for a conference. `googleMeet.listRecordings` returns one page of recordings for a conference record. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleMeet } from "automate.ax/google-meet" export default automation("List conference recordings", () => { onDashboardRun({ title: "List conference recordings" }) return googleMeet.listRecordings({ conferenceRecord: "conferenceRecords/record-id", pageSize: 50, }) }) ``` ## Inputs Provide `conferenceRecord`. Optional `pageSize` accepts 1–100 and `pageToken` continues a previous request. Second argument `{ account }` selects the Google Account. Inputs accept compatible signals. ## Output Returns `{ recordings: Recording[]; nextPageToken?: string }`. See [Get recording](/reference/integrations/google-meet/actions/get-recording#output) for each recording shape. # List smart notes Source: https://docs.automate.ax/reference/integrations/google-meet/actions/list-smart-notes List Gemini smart-note sessions and generated Docs files for a conference. `googleMeet.listSmartNotes` returns one page of smart notes for a conference record. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleMeet } from "automate.ax/google-meet" export default automation("List meeting notes", () => { onDashboardRun({ title: "List meeting notes" }) return googleMeet.listSmartNotes({ conferenceRecord: "conferenceRecords/record-id", }) }) ``` ## Inputs Provide `conferenceRecord`. Optional `pageSize` accepts 1–100 and `pageToken` continues a previous request. Second argument `{ account }` selects the Google Account. Inputs accept compatible signals. ## Output Returns `{ smartNotes: SmartNote[]; nextPageToken?: string }`. See [Get smart note](/reference/integrations/google-meet/actions/get-smart-note#output) for each smart-note shape. # List transcript entries Source: https://docs.automate.ax/reference/integrations/google-meet/actions/list-transcript-entries List timed speaker segments from a Google Meet transcript. `googleMeet.listTranscriptEntries` returns structured transcript text in chronological provider order. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleMeet } from "automate.ax/google-meet" export default automation("Read a transcript", () => { onDashboardRun({ title: "Read a transcript" }) return googleMeet.listTranscriptEntries({ transcript: "conferenceRecords/record-id/transcripts/transcript-id", pageSize: 100, }) }) ``` ## Inputs Provide the full `transcript` resource name. Optional `pageSize` accepts 1–100 and `pageToken` continues a previous request. Second argument `{ account }` selects the Google Account. Inputs accept compatible signals. ## Output Returns `{ transcriptEntries: TranscriptEntry[]; nextPageToken?: string }`. See [Get transcript entry](/reference/integrations/google-meet/actions/get-transcript-entry#output) for each entry shape. # List transcripts Source: https://docs.automate.ax/reference/integrations/google-meet/actions/list-transcripts List transcript sessions and generated Docs files for a conference. `googleMeet.listTranscripts` returns one page of transcripts for a conference record. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleMeet } from "automate.ax/google-meet" export default automation("List conference transcripts", () => { onDashboardRun({ title: "List conference transcripts" }) return googleMeet.listTranscripts({ conferenceRecord: "conferenceRecords/record-id", }) }) ``` ## Inputs Provide `conferenceRecord`. Optional `pageSize` accepts 1–100 and `pageToken` continues a previous request. Second argument `{ account }` selects the Google Account. Inputs accept compatible signals. ## Output Returns `{ transcripts: Transcript[]; nextPageToken?: string }`. See [Get transcript](/reference/integrations/google-meet/actions/get-transcript#output) for each transcript shape. # Update meeting space Source: https://docs.automate.ax/reference/integrations/google-meet/actions/update-space Patch selected Google Meet access, moderation, and artifact settings. `googleMeet.updateSpace` changes only the settings you provide. Omitted settings remain unchanged. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleMeet } from "automate.ax/google-meet" export default automation("Secure a meeting", () => { onDashboardRun({ title: "Secure a meeting" }) return googleMeet.updateSpace({ space: "spaces/space-id", config: { accessType: "restricted", moderation: true, moderationRestrictions: { chat: "hostsOnly" }, }, }) }) ``` ## Inputs Provide `space` and a non-empty `config`. Settings include access, entry-point, moderation, attendance-report, and automatic-artifact behavior. Second argument `{ account }` selects the Google Account. Inputs accept compatible signals. ## Output Returns the updated meeting space. Google permits updates only when the connected account has access through `meetings.space.created` or `meetings.space.settings`. # Google Meet Source: https://docs.automate.ax/reference/integrations/google-meet/index Read Google Meet conferences, participants, recordings, transcripts, and smart notes, or react as those resources change. ## Exports ```ts theme={null} import { googleMeet, googleAccount, getGoogleMeetApi, } from "automate.ax/google-meet" ``` * `googleMeet` contains the packaged Google Meet actions and triggers. * `googleAccount("name")` selects a named Google connection. * `getGoogleMeetApi` creates the authenticated Google Meet API helper for a custom account-backed action. ## Triggers * [On conference started](/reference/integrations/google-meet/triggers/on-conference-started) * [On conference ended](/reference/integrations/google-meet/triggers/on-conference-ended) * [On participant joined](/reference/integrations/google-meet/triggers/on-participant-joined) * [On participant left](/reference/integrations/google-meet/triggers/on-participant-left) * [On recording started](/reference/integrations/google-meet/triggers/on-recording-started) * [On recording ended](/reference/integrations/google-meet/triggers/on-recording-ended) * [On recording generated](/reference/integrations/google-meet/triggers/on-recording-generated) * [On transcript started](/reference/integrations/google-meet/triggers/on-transcript-started) * [On transcript ended](/reference/integrations/google-meet/triggers/on-transcript-ended) * [On transcript generated](/reference/integrations/google-meet/triggers/on-transcript-generated) * [On smart note started](/reference/integrations/google-meet/triggers/on-smart-note-started) * [On smart note ended](/reference/integrations/google-meet/triggers/on-smart-note-ended) * [On smart note generated](/reference/integrations/google-meet/triggers/on-smart-note-generated) ## Actions * [Create meeting space](/reference/integrations/google-meet/actions/create-space) * [Get meeting space](/reference/integrations/google-meet/actions/get-space) * [Update meeting space](/reference/integrations/google-meet/actions/update-space) * [End active conference](/reference/integrations/google-meet/actions/end-conference) * [Get conference record](/reference/integrations/google-meet/actions/get-conference-record) * [List conference records](/reference/integrations/google-meet/actions/list-conference-records) * [Get participant](/reference/integrations/google-meet/actions/get-participant) * [List participants](/reference/integrations/google-meet/actions/list-participants) * [Get participant session](/reference/integrations/google-meet/actions/get-participant-session) * [List participant sessions](/reference/integrations/google-meet/actions/list-participant-sessions) * [Get recording](/reference/integrations/google-meet/actions/get-recording) * [List recordings](/reference/integrations/google-meet/actions/list-recordings) * [Get transcript](/reference/integrations/google-meet/actions/get-transcript) * [List transcripts](/reference/integrations/google-meet/actions/list-transcripts) * [Get transcript entry](/reference/integrations/google-meet/actions/get-transcript-entry) * [List transcript entries](/reference/integrations/google-meet/actions/list-transcript-entries) * [Get smart note](/reference/integrations/google-meet/actions/get-smart-note) * [List smart notes](/reference/integrations/google-meet/actions/list-smart-notes) # On conference ended Source: https://docs.automate.ax/reference/integrations/google-meet/triggers/on-conference-ended Run an automation when a Google Meet conference ends. `googleMeet.onConferenceEnded` emits the completed conference record when a call ends. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleMeet } from "automate.ax/google-meet" export default automation("Close finished calls", () => { const conference = googleMeet.onConferenceEnded() // Close the meeting record when the Google Meet conference ends. }) ``` ## Options `space` optionally limits the trigger to one static resource name, ID, code, or Meet URL. Omit it to watch owned meeting spaces. `account` optionally selects a static Google Account binding. ## Trigger data Returns `{ name, space, startTime, endTime, expireTime? }`. The connected user must own or organize the meeting for Google to deliver this event. # On conference started Source: https://docs.automate.ax/reference/integrations/google-meet/triggers/on-conference-started Run an automation when a Google Meet conference starts. `googleMeet.onConferenceStarted` emits the new conference record when a call starts. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleMeet } from "automate.ax/google-meet" export default automation("Track calls", () => { const conference = googleMeet.onConferenceStarted({ space: "https://meet.google.com/abc-defg-hij", }) // Open a meeting record when the Google Meet conference starts. }) ``` ## Options `space` accepts a static resource name, ID, code, or Meet URL. Omit it to watch all meeting spaces owned by the connected user. `account` optionally selects a static Google Account binding. ## Trigger data Returns `{ name, space, startTime, endTime?, expireTime? }`. Google limits invitees who don't own the space to conference-started and transcript-generated events. # On participant joined Source: https://docs.automate.ax/reference/integrations/google-meet/triggers/on-participant-joined Run an automation when a participant joins Google Meet. `googleMeet.onParticipantJoined` emits the device-level participant session that just joined. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleMeet } from "automate.ax/google-meet" export default automation("Track arrivals", () => { const session = googleMeet.onParticipantJoined({ space: "abc-defg-hij" }) // Add the Google Meet participant session to attendance. }) ``` ## Options `space` optionally limits the trigger to one static space. Omit it to watch owned meeting spaces. `account` optionally selects a static Google Account binding. ## Trigger data Returns `{ name, startTime, endTime? }`. Use the parent participant resource name embedded in `name` with `googleMeet.getParticipant` when you need identity details. The connected user must own or organize the meeting. # On participant left Source: https://docs.automate.ax/reference/integrations/google-meet/triggers/on-participant-left Run an automation when a participant leaves Google Meet. `googleMeet.onParticipantLeft` emits the completed device-level participant session. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleMeet } from "automate.ax/google-meet" export default automation("Track departures", () => { const session = googleMeet.onParticipantLeft() // Close the Google Meet participant session in attendance. }) ``` ## Options `space` optionally limits the trigger to one static space. Omit it to watch owned meeting spaces. `account` optionally selects a static Google Account binding. ## Trigger data Returns `{ name, startTime, endTime }`. Multiple devices and reconnects create separate sessions for the same participant. The connected user must own or organize the meeting. # On recording ended Source: https://docs.automate.ax/reference/integrations/google-meet/triggers/on-recording-ended Run an automation when Google Meet recording stops. `googleMeet.onRecordingEnded` emits a recording resource when capture stops. The Drive file might not be ready yet. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleMeet } from "automate.ax/google-meet" export default automation("Track recording completion", () => { const recording = googleMeet.onRecordingEnded({ space: "abc-defg-hij" }) // Send the completed Google Meet recording for processing. }) ``` ## Options `space` optionally limits the trigger to one static space. Omit it to watch owned meeting spaces. `account` optionally selects a static Google Account binding. ## Trigger data Returns a recording with `name`, `state: "ended"`, and timing. Use `googleMeet.onRecordingGenerated` when you need the Drive destination. The connected user must own or organize the meeting. # On recording generated Source: https://docs.automate.ax/reference/integrations/google-meet/triggers/on-recording-generated Run an automation when a Google Meet recording file is ready. `googleMeet.onRecordingGenerated` emits a recording after Google generates its Drive file. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleMeet } from "automate.ax/google-meet" export default automation("Publish meeting recordings", () => { const recording = googleMeet.onRecordingGenerated() recording.driveDestination?.exportUri }) ``` ## Options `space` optionally limits the trigger to one static space. Omit it to watch owned meeting spaces. `account` optionally selects a static Google Account binding. ## Trigger data Returns a recording with `state: "fileGenerated"` and `driveDestination` containing the generated file ID and export URL. The connected user must own or organize the meeting. # On recording started Source: https://docs.automate.ax/reference/integrations/google-meet/triggers/on-recording-started Run an automation when Google Meet recording starts. `googleMeet.onRecordingStarted` emits a recording resource when capture begins. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleMeet } from "automate.ax/google-meet" export default automation("Track recording", () => { const recording = googleMeet.onRecordingStarted() // Mark the Google Meet recording as in progress. }) ``` ## Options `space` optionally limits the trigger to one static resource name, ID, code, or Meet URL. Omit it to watch owned meeting spaces. `account` optionally selects a static Google Account binding. ## Trigger data Returns a recording with `name`, `state: "started"`, timing, and an optional Drive destination. The connected user must own or organize the meeting. # On smart note ended Source: https://docs.automate.ax/reference/integrations/google-meet/triggers/on-smart-note-ended Run an automation when Google Meet smart-note capture stops. `googleMeet.onSmartNoteEnded` emits a smart note when Gemini capture stops. The document might not be ready yet. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleMeet } from "automate.ax/google-meet" export default automation("Track smart-note completion", () => { const smartNote = googleMeet.onSmartNoteEnded({ space: "abc-defg-hij" }) // Publish the completed Google Meet smart notes. }) ``` ## Options `space` optionally limits the trigger to one static space. Omit it to watch owned meeting spaces. `account` optionally selects a static Google Account binding. ## Trigger data Returns a smart note with `name`, `state: "ended"`, and timing. Use `googleMeet.onSmartNoteGenerated` when you need the Docs destination. The connected user must own or organize the meeting. # On smart note generated Source: https://docs.automate.ax/reference/integrations/google-meet/triggers/on-smart-note-generated Run an automation when Google Meet smart notes are ready. `googleMeet.onSmartNoteGenerated` emits a smart note after Google generates its Docs file. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleMeet } from "automate.ax/google-meet" export default automation("Publish meeting notes", () => { const smartNote = googleMeet.onSmartNoteGenerated() smartNote.docsDestination?.exportUri }) ``` ## Options `space` optionally limits the trigger to one static space. Omit it to watch owned meeting spaces. `account` optionally selects a static Google Account binding. ## Trigger data Returns a smart note with `state: "fileGenerated"` and `docsDestination` containing the generated document ID and export URL. The connected user must own or organize the meeting. # On smart note started Source: https://docs.automate.ax/reference/integrations/google-meet/triggers/on-smart-note-started Run an automation when Google Meet smart-note capture starts. `googleMeet.onSmartNoteStarted` emits a Gemini smart-note resource when capture begins. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleMeet } from "automate.ax/google-meet" export default automation("Track smart notes", () => { const smartNote = googleMeet.onSmartNoteStarted() // Mark Google Meet smart-note generation as in progress. }) ``` ## Options `space` optionally limits the trigger to one static resource name, ID, code, or Meet URL. Omit it to watch owned meeting spaces. `account` optionally selects a static Google Account binding. ## Trigger data Returns a smart note with `name`, `state: "started"`, timing, and an optional Docs destination. The connected user must own or organize the meeting, and the Workspace edition must support smart notes. # On transcript ended Source: https://docs.automate.ax/reference/integrations/google-meet/triggers/on-transcript-ended Run an automation when Google Meet transcription stops. `googleMeet.onTranscriptEnded` emits a transcript when transcription stops. The document might not be ready yet. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleMeet } from "automate.ax/google-meet" export default automation("Track transcript completion", () => { const transcript = googleMeet.onTranscriptEnded({ space: "abc-defg-hij" }) // Send the completed Google Meet transcript for processing. }) ``` ## Options `space` optionally limits the trigger to one static space. Omit it to watch owned meeting spaces. `account` optionally selects a static Google Account binding. ## Trigger data Returns a transcript with `name`, `state: "ended"`, and timing. Use `googleMeet.onTranscriptGenerated` when you need the Docs destination. The connected user must own or organize the meeting. # On transcript generated Source: https://docs.automate.ax/reference/integrations/google-meet/triggers/on-transcript-generated Run an automation when a Google Meet transcript document is ready. `googleMeet.onTranscriptGenerated` emits a transcript after Google generates its Docs file. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleMeet } from "automate.ax/google-meet" export default automation("Publish meeting transcripts", () => { const transcript = googleMeet.onTranscriptGenerated() transcript.docsDestination?.exportUri }) ``` ## Options `space` optionally limits the trigger to one static space. Omit it to watch owned meeting spaces. `account` optionally selects a static Google Account binding. ## Trigger data Returns a transcript with `state: "fileGenerated"` and `docsDestination` containing the generated document ID and export URL. Google can deliver this event to invited participants as well as meeting owners. # On transcript started Source: https://docs.automate.ax/reference/integrations/google-meet/triggers/on-transcript-started Run an automation when Google Meet transcription starts. `googleMeet.onTranscriptStarted` emits a transcript resource when transcription begins. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleMeet } from "automate.ax/google-meet" export default automation("Track transcription", () => { const transcript = googleMeet.onTranscriptStarted() // Mark the Google Meet transcript as in progress. }) ``` ## Options `space` optionally limits the trigger to one static resource name, ID, code, or Meet URL. Omit it to watch owned meeting spaces. `account` optionally selects a static Google Account binding. ## Trigger data Returns a transcript with `name`, `state: "started"`, timing, and an optional Docs destination. The connected user must own or organize the meeting. # Append rows Source: https://docs.automate.ax/reference/integrations/google-sheets/actions/append-rows Append header-keyed records to a Google sheet or native table. `googleSheets.appendRows` orders each record by the source headers before appending it. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("Append new orders", () => { onDashboardRun({ title: "Append new orders" }) googleSheets.appendRows({ spreadsheet: "spreadsheet-id", source: { table: "OrdersTable" }, rows: [ { "Order ID": "A-1042", Status: "Open", Total: 125 }, { "Order ID": "A-1043", Status: "Open", Total: 80 }, ], }) }) ``` ## Inputs Provide `spreadsheet`, `source`, and one record or non-empty records array. See [List rows](/reference/integrations/google-sheets/actions/list-rows#inputs) for source syntax. Values are string, number, boolean, or null. Record keys must exactly match headers. Omitted columns become null. `inputMode` defaults to `userEntered`, which parses formula strings. `raw` stores them literally. Second argument `{ account }` selects the Google Account binding. ## Output Returns `{ affectedCells, rowNumbers, updatedRange? }`. `rowNumbers` is empty because Google append APIs don't reliably return row identities. Ordinary sheets can return `updatedRange`. Native-table appends don't. # Append values Source: https://docs.automate.ax/reference/integrations/google-sheets/actions/append-values Append a row- or column-major matrix after a detected Google Sheets table. `googleSheets.appendValues` uses an A1 range to detect a logical table and appends after its last data row or column. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("Append an order", () => { onDashboardRun({ title: "Append an order" }) googleSheets.appendValues({ spreadsheet: "spreadsheet-id", range: "Orders!A:D", values: [["A-1042", "Ada", 125, "Open"]], }) }) ``` ## Inputs Provide `spreadsheet`, detection `range`, and non-empty `values` matrix. `majorDimension` defaults to `rows`. `inputMode` defaults to `userEntered`. `insertMode` defaults to `googleSheets.insertRows`. `overwrite` can write over cells after the detected table. `includeValues` defaults false. Response render modes match [Write values](/reference/integrations/google-sheets/actions/write-values#inputs). Second argument `{ account }` selects the Google Account binding. ## Output Returns `spreadsheetId`, optional pre-append `tableRange`, `updatedRange`, update counts, and optional values. The detection range identifies a logical table, not necessarily the appended range. # Clear range formatting Source: https://docs.automate.ax/reference/integrations/google-sheets/actions/clear-range-formatting Clear all or selected cell formatting without changing Google Sheets values. `googleSheets.clearRangeFormatting()` removes formatting from a grid range or native-table section while preserving cell values. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("Reset order body styles", () => { onDashboardRun({ title: "Reset order body styles" }) googleSheets.clearRangeFormatting({ spreadsheet: "spreadsheet-id", range: { table: "OrdersTable", section: "body" }, properties: ["backgroundColor", "borders", "text.bold"], }) }) ``` ## Inputs Provide `spreadsheet` and `range`. A grid range takes `sheet` plus optional one-based inclusive row and column bounds. A table target takes `table` and optional `section`: `all`, `header`, `body`, or `footer`. Omit `properties` to clear all user-entered cell formatting. Otherwise provide one or more of `backgroundColor`, `borders`, `horizontalAlignment`, `hyperlinkDisplay`, `numberFormat`, `padding`, `rotation`, `text`, `text.bold`, `text.color`, `text.family`, `text.italic`, `text.link`, `text.size`, `text.strikethrough`, `text.underline`, `textDirection`, `verticalAlignment`, or `wrap`. Clearing `text` clears every text-format property. Use a `text.*` value for a narrower reset. This action doesn't remove [conditional-format rules](/reference/integrations/google-sheets/actions/delete-conditional-format-rule), [ordinary banding](/reference/integrations/google-sheets/actions/delete-banded-range), or [native-table styling](/reference/integrations/google-sheets/actions/update-table). Those separate layers can still make cleared cells look formatted. Second argument `{ account }` selects the Google Account. All action inputs accept compatible signals. ## Output Returns the resolved zero-based, end-exclusive grid range with numeric `sheetId`. # Clear values Source: https://docs.automate.ax/reference/integrations/google-sheets/actions/clear-values Clear values from one or more Google Sheets ranges without changing formatting. `googleSheets.clearValues` removes cell contents while preserving formatting, validation, comments, and other cell properties. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("Clear staging data", () => { onDashboardRun({ title: "Clear staging data" }) googleSheets.clearValues({ spreadsheet: "spreadsheet-id", ranges: ["Staging!A2:Z", "LastImport"], }) }) ``` ## Inputs Provide `spreadsheet` and one A1/named range or non-empty `ranges` array. Second argument `{ account }` selects the Google Account. ## Output Returns `{ spreadsheetId: string; clearedRanges: string[] }`. Google bounds unbounded input ranges to the actual cleared grid. This doesn't delete or shift rows. # Create banded range Source: https://docs.automate.ax/reference/integrations/google-sheets/actions/create-banded-range Add alternating row or column colors to an ordinary Google Sheets range. `googleSheets.createBandedRange()` adds ordinary alternating-color formatting to a grid range. It doesn't create a native table. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("Band an order report", () => { onDashboardRun({ title: "Band an order report" }) googleSheets.createBandedRange({ spreadsheet: "spreadsheet-id", range: { sheet: "Orders", startRow: 1, endRow: 100 }, rows: { headerColor: { theme: "accent1" }, firstBandColor: "#FFFFFF", secondBandColor: "#E8F0FE", }, }) }) ``` ## Inputs Provide `spreadsheet`, a structured one-based `range`, and at least one of `rows` or `columns`. Each banding object requires `firstBandColor` and `secondBandColor`, and optionally accepts `headerColor` and `footerColor`. A color is a six-digit hex string or `{ theme }`, where `theme` is `text`, `background`, `accent1` through `accent6`, or `link`. Optional `bandedRangeId` supplies an integer ID. Otherwise Google assigns one. Second argument `{ account }` selects the Google Account. All action inputs accept compatible signals. ## Output Returns the created banded range with its zero-based, end-exclusive `range`, row and column colors, and numeric `bandedRangeId` when supplied by Google. # Create conditional format rule Source: https://docs.automate.ax/reference/integrations/google-sheets/actions/create-conditional-format-rule Create a typed boolean or gradient conditional-format rule in Google Sheets. `googleSheets.createConditionalFormatRule()` inserts a boolean or gradient rule into one sheet's conditional-format priority list. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("Highlight large orders", () => { onDashboardRun({ title: "Highlight large orders" }) googleSheets.createConditionalFormatRule({ spreadsheet: "spreadsheet-id", ranges: [{ table: "OrdersTable", section: "body" }], rule: { type: "boolean", condition: { type: "numberGreaterThan", value: "1000" }, format: { backgroundColor: "#FCE8E6", bold: true, textColor: "#C5221F", }, }, }) }) ``` ## Inputs Provide `spreadsheet`, one or more `ranges` on the same sheet, and `rule`. A range can be a structured one-based grid range or a table target with optional `section`: `all`, `header`, `body`, or `footer`. The action resolves table targets to fixed grid ranges when it creates the rule. Later table resizing doesn't change those ranges automatically. Optional `index` is the zero-based insertion priority and defaults to `0`, the highest priority. Inserting, moving, or deleting rules can shift their per-sheet indexes. ### Define a boolean rule A boolean rule has `type: "boolean"`, a typed `condition`, and `format`. Conditions accept only these documented forms: * One `value`: `numberGreaterThan`, `numberGreaterThanOrEqual`, `numberLessThan`, `numberLessThanOrEqual`, `numberEqual`, `numberNotEqual`, `textContains`, `textNotContains`, `textStartsWith`, `textEndsWith`, `textEqual`, or `dateEqual` * Exactly two `values`: `numberBetween` or `numberNotBetween` * One literal or relative-date `value`: `dateBefore` or `dateAfter`. Relative dates are `{ relativeDate: "pastYear" | "pastMonth" | "pastWeek" | "yesterday" | "today" | "tomorrow" }` * No value: `blank` or `notBlank` * `customFormula` with `formula` starting with `=` or `+` Conditional formatting supports only `bold`, `italic`, `strikethrough`, `textColor`, and `backgroundColor`. Google doesn't accept borders, underline, alignment, or other cell-format properties for conditional rules. ### Define a gradient rule A gradient rule has `type: "gradient"`, required `min` and `max` interpolation points, and optional `midpoint`. Every point supplies `color`. The minimum accepts `type: "min"` without a value, the maximum accepts `type: "max"` without a value, and either extreme accepts `type: "number" | "percent" | "percentile"` with a string `value`. A midpoint accepts only one of those value-based types. All colors are either a six-digit hex string or `{ theme }`, where `theme` is `text`, `background`, `accent1` through `accent6`, or `link`. Second argument `{ account }` selects the Google Account. All action inputs accept compatible signals. ## Output Returns `{ index, ranges, rule }`. Ranges use zero-based, end-exclusive indexes and numeric `sheetId`. # Create sheet Source: https://docs.automate.ax/reference/integrations/google-sheets/actions/create-sheet Add a sheet with optional size and display settings. `googleSheets.createSheet` adds a tab to an existing spreadsheet. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("Add an archive sheet", () => { onDashboardRun({ title: "Add an archive sheet" }) googleSheets.createSheet({ spreadsheet: "spreadsheet-id", title: "Archive", rowCount: 2000, columnCount: 20, frozenRowCount: 1, }) }) ``` ## Inputs Provide `spreadsheet` and a unique `title`. Optional positive `rowCount` and `columnCount`, nonnegative `frozenRowCount` and `frozenColumnCount`, zero-based `index`, `hidden`, and `rightToLeft` set the initial sheet. Second argument `{ account }` selects the Google Account. ## Output Returns `Sheet` metadata with `sheetId`, title, zero-based index, grid counts, frozen counts, visibility, direction, type, and an empty `tables` array. # Create spreadsheet Source: https://docs.automate.ax/reference/integrations/google-sheets/actions/create-spreadsheet Create a Google spreadsheet with optional sheets and settings. `googleSheets.createSpreadsheet` creates a workbook owned by the connected account. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("Create an operations workbook", () => { onDashboardRun({ title: "Create an operations workbook" }) googleSheets.createSpreadsheet({ title: "Operations", locale: "en_US", timeZone: "America/Los_Angeles", sheets: [{ title: "Orders", frozenRowCount: 1 }], }) }) ``` ## Inputs Provide `title`. Optional `locale` and a `timeZone` from the `IANA` database set spreadsheet properties. `autoRecalc` accepts `onChange`, `minutely`, or `hourly`. `sheets` is a non-empty array of initial sheet definitions with `title` and optional `rowCount`, `columnCount`, frozen counts, and `hidden`. Omit it for Google's default sheet. Second argument `{ account }` selects the Google Account. ## Output Returns the created `Spreadsheet`. See [Get spreadsheet](/reference/integrations/google-sheets/actions/get-spreadsheet#output). Keep `spreadsheetId` or `url` for later actions. # Delete banded range Source: https://docs.automate.ax/reference/integrations/google-sheets/actions/delete-banded-range Remove ordinary alternating-color formatting while preserving Google Sheets values. `googleSheets.deleteBandedRange()` removes an ordinary banded range and preserves every cell value in its range. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("Remove report banding", () => { onDashboardRun({ title: "Remove report banding" }) googleSheets.deleteBandedRange({ spreadsheet: "spreadsheet-id", bandedRangeId: 184302910, }) }) ``` ## Inputs Provide `spreadsheet` and the integer `bandedRangeId`. You can obtain the ID from [`getSpreadsheet()`](/reference/integrations/google-sheets/actions/get-spreadsheet) or a banded-range action. Reference-only banded ranges can't use this action. Second argument `{ account }` selects the Google Account. This action removes formatting and preserves values. In contrast, [`deleteTable()`](/reference/integrations/google-sheets/actions/delete-table) also deletes cell contents. ## Output Returns the deleted banded range's former ID, zero-based range, and row or column colors. # Delete conditional format rule Source: https://docs.automate.ax/reference/integrations/google-sheets/actions/delete-conditional-format-rule Delete a Google Sheets conditional-format rule at a sheet index. `googleSheets.deleteConditionalFormatRule()` deletes one conditional-format rule from a sheet's priority list. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("Remove an obsolete formatting rule", () => { onDashboardRun({ title: "Remove an obsolete formatting rule" }) googleSheets.deleteConditionalFormatRule({ spreadsheet: "spreadsheet-id", sheet: "Orders", index: 0, }) }) ``` ## Inputs Provide `spreadsheet`, `sheet`, and the rule's zero-based `index`. Indexes are per sheet and are positions, not stable IDs. Deleting a rule shifts the indexes of lower-priority rules. Second argument `{ account }` selects the Google Account. All action inputs accept compatible signals. ## Output Returns the deleted rule's former `{ index, ranges, rule }` metadata. # Delete rows Source: https://docs.automate.ax/reference/integrations/google-sheets/actions/delete-rows Delete rows by number from a Google sheet or native table. `googleSheets.deleteRows` removes rows and shifts later rows upward. It deletes adjacent groups from bottom to top so shifting doesn't change remaining targets. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("Delete obsolete orders", () => { onDashboardRun({ title: "Delete obsolete orders" }) googleSheets.deleteRows({ spreadsheet: "spreadsheet-id", source: { sheet: "Orders" }, rowNumbers: [12, 18, 19], }) }) ``` ## Inputs Provide `spreadsheet`, `source`, and one row number or an array of up to 1,000. The action removes duplicates and sorts the numbers. Every row must belong to the source body. Second argument `{ account }` selects the Google Account binding. ## Output Returns `{ affectedCells, rowNumbers }`, where row numbers are the original one-based targets. Stored row numbers below a deletion can become stale because the sheet shifts upward. # Delete sheet Source: https://docs.automate.ax/reference/integrations/google-sheets/actions/delete-sheet Permanently delete one sheet from a Google spreadsheet. `googleSheets.deleteSheet` deletes a sheet and returns its identifying metadata. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("Delete a staging sheet", () => { onDashboardRun({ title: "Delete a staging sheet" }) googleSheets.deleteSheet({ spreadsheet: "spreadsheet-id", sheet: "Staging" }) }) ``` ## Inputs Provide `spreadsheet` and `sheet: string | number`. Strings match exact titles and numbers are immutable sheet IDs. Second argument `{ account }` selects the Google Account. ## Output Returns the deleted `Sheet` metadata. The operation permanently removes its values, formatting, tables, charts, and other sheet-owned content. Google won't let a spreadsheet have zero sheets. # Delete table Source: https://docs.automate.ax/reference/integrations/google-sheets/actions/delete-table Delete a native Google Sheets table and all cell contents in its range. `googleSheets.deleteTable()` deletes the table identified by name or immutable ID and all cell contents in its range. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("Delete a staging table", () => { onDashboardRun({ title: "Delete a staging table" }) googleSheets.deleteTable({ spreadsheet: "spreadsheet-id", table: "StagingTable", }) }) ``` ## Inputs Provide `spreadsheet` and `table`. Second argument `{ account }` selects the Google Account. > [!WARNING] > > Google deletes the table and its cell contents. Use > [`deleteBandedRange()`](/reference/integrations/google-sheets/actions/delete-banded-range) > when you only want to remove ordinary alternating-color formatting while > preserving values. ## Output Returns the deleted table's `{ tableId, name, range, columns, style }` metadata. # Duplicate sheet Source: https://docs.automate.ax/reference/integrations/google-sheets/actions/duplicate-sheet Copy a Google sheet, including its values and formatting. `googleSheets.duplicateSheet` copies one tab within the same spreadsheet. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("Create the August sheet", () => { onDashboardRun({ title: "Create the August sheet" }) googleSheets.duplicateSheet({ spreadsheet: "spreadsheet-id", sheet: "Template", newTitle: "August", }) }) ``` ## Inputs Provide `spreadsheet` and a sheet title or numeric ID in `sheet`. `newTitle` and zero-based insertion `index` are optional. Second argument `{ account }` selects the Google Account. ## Output Returns the new sheet's metadata. The copy includes cell values and formatting. Google rejects a duplicate `newTitle`. # Find and replace Source: https://docs.automate.ax/reference/integrations/google-sheets/actions/find-and-replace Replace text or regular-expression matches in Google Sheets. `googleSheets.findAndReplaceText` searches a structured range, one sheet, or the whole spreadsheet and replaces every match. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("Normalize status text", () => { onDashboardRun({ title: "Normalize status text" }) googleSheets.findAndReplaceText({ spreadsheet: "spreadsheet-id", sheet: "Orders", find: "^pending$", replacement: "Open", searchByRegex: true, matchCase: false, matchEntireCell: true, }) }) ``` ## Inputs Provide `spreadsheet`, non-empty `find`, and `replacement`. Supply either `sheet` as a title or numeric ID, or a structured `range`, but not both. Omit both for all sheets. A range uses `sheet` and optional one-based inclusive row/column bounds. `includeFormulas`, `matchCase`, `matchEntireCell`, and `searchByRegex` all default false. Regular expression syntax is Java-compatible and replacement can use supported capture references. Second argument `{ account }` selects the Google Account. ## Output Returns counts for `occurrencesChanged`, `rowsChanged`, `sheetsChanged`, `valuesChanged`, and `formulasChanged`. Zero occurrences is a successful no-op. # Find rows Source: https://docs.automate.ax/reference/integrations/google-sheets/actions/find-rows Find Google Sheets rows that match filters. `googleSheets.findRows` returns rows from a sheet or native table that satisfy every filter. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("Find large open orders", () => { onDashboardRun({ title: "Find large open orders" }) googleSheets.findRows({ spreadsheet: "spreadsheet-id", source: { sheet: "Orders" }, filters: [ { column: "Status", operator: "equals", value: "Open" }, { column: "Total", operator: "greaterThan", value: 1000 }, ], limit: 100, }) }) ``` ## Inputs Provide `spreadsheet`, `source`, and non-empty `filters`. `equals` and `notEquals` compare cell values. `contains` and `matchesRegex` accept a string and optional `caseSensitive`. Numeric operators are `greaterThan`, `greaterThanOrEqual`, `lessThan`, and `lessThanOrEqual`. Other operators are `empty`, `notEmpty`, `isTrue`, and `isFalse`. Column names must exactly match headers. `limit` defaults to 100 and accepts up to 10,000. `valueRender` determines both returned and compared values. Second argument `{ account }` selects the Google Account binding. ## Output Returns matching `SheetRow[]` in source order, capped at `limit`. Numeric comparisons only match actual numeric values. Formatted rendering can turn them into strings, so keep `unformatted` for numeric filters. # Format range Source: https://docs.automate.ax/reference/integrations/google-sheets/actions/format-range Apply cell, text, border, alignment, and number formatting to a Google Sheets range. `googleSheets.formatRange()` merges the format properties you provide into every cell in a grid range or native-table section. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("Format an order header", () => { onDashboardRun({ title: "Format an order header" }) googleSheets.formatRange({ spreadsheet: "spreadsheet-id", range: { table: "OrdersTable", section: "header" }, format: { backgroundColor: { theme: "accent1" }, borders: { bottom: { color: "#1A73E8", style: "solidThick" }, }, horizontalAlignment: "center", padding: { top: 4, right: 8, bottom: 4, left: 8 }, text: { bold: true, color: "#FFFFFF", size: 11 }, wrap: "wrap", }, }) }) ``` ## Inputs Provide `spreadsheet`, `range`, and `format`. A grid range takes `sheet` plus optional one-based inclusive `startRow`, `endRow`, `startColumn`, and `endColumn`. A table target takes `table` and optional `section`: `all`, `header`, `body`, or `footer`. The section defaults to `all`. Requesting a missing body or footer fails. `format` accepts: * `backgroundColor`: a six-digit hex color such as `#1A73E8`, or `{ theme }` where `theme` is `text`, `background`, `accent1` through `accent6`, or `link` * `text`: `family`, integer `size`, `bold`, `italic`, `strikethrough`, `underline`, `link`, and `color` * `borders`: `top`, `right`, `bottom`, `left`, `innerHorizontal`, and `innerVertical`. Each is `null` to clear it or `{ style, color? }`, where `style` is `dotted`, `dashed`, `solid`, `solidMedium`, `solidThick`, or `double` * `horizontalAlignment`: `left`, `center`, or `right`. `verticalAlignment` accepts `top`, `middle`, or `bottom` * `wrap`: `overflow`, `clip`, or `wrap`. `textDirection` accepts `leftToRight` or `rightToLeft`. `hyperlinkDisplay` accepts `linked` or `plainText` * `padding`: integer `top`, `right`, `bottom`, and `left` pixel values. Google requires all four sides * `rotation`: `{ type: "angle", angle }` with an integer from `-90` through `90`, or `{ type: "vertical", vertical: boolean }` * `numberFormat`: optional Sheets `pattern` and `type`: `text`, `number`, `percent`, `currency`, `date`, `time`, `dateTime`, or `scientific` Automate.ax validates colors and enum values before sending the request to Google. Second argument `{ account }` selects the Google Account. All action inputs accept compatible signals. ## Output Returns the resolved zero-based, end-exclusive grid range with numeric `sheetId`. Unspecified formatting remains unchanged. # Get rows Source: https://docs.automate.ax/reference/integrations/google-sheets/actions/get-rows Get Google Sheets rows by number as header-keyed records. `googleSheets.getRows` retrieves one or more one-based row numbers from a header-backed sheet or native table. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("Load selected orders", () => { onDashboardRun({ title: "Load selected orders" }) googleSheets.getRows({ spreadsheet: "spreadsheet-id", source: { table: "OrdersTable" }, rowNumbers: [12, 18], }) }) ``` ## Inputs Provide `spreadsheet`, `source`, and one row number or an array of up to 1,000. See [List rows](/reference/integrations/google-sheets/actions/list-rows#inputs) for `source` and optional `valueRender`. Second argument `{ account }` selects the Google Account binding. ## Output Returns `SheetRow[]` in the same order as requested row numbers, including a record of nulls for an empty row. Rows outside the source body fail validation. # Get spreadsheet Source: https://docs.automate.ax/reference/integrations/google-sheets/actions/get-spreadsheet Retrieve metadata for a Google spreadsheet, its sheets, tables, banding, and conditional formatting. `googleSheets.getSpreadsheet()` returns spreadsheet metadata without cell values. Use it to find immutable IDs or inspect sheets, native tables, banded ranges, and conditional-format rules. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("Inspect a workbook", () => { onDashboardRun({ title: "Inspect a workbook" }) googleSheets.getSpreadsheet({ spreadsheet: "https://docs.google.com/spreadsheets/d/id/edit", }) }) ``` ## Inputs Provide `spreadsheet` as an ID or standard Google Sheets URL. Second argument `{ account }` selects the Google Account. All action inputs accept compatible signals. ## Output Returns `spreadsheetId`, `title`, `url`, optional `locale`, `timeZone`, and `autoRecalc`, plus `namedRanges` and sheets. Each sheet includes its identity, position, grid settings, `tables`, `bandedRanges`, and `conditionalFormats`. Table metadata includes `tableId`, `name`, columns, range, and `style`. Banded ranges include their numeric `bandedRangeId` when Google supplies one, provider `reference` otherwise, range, and row or column colors. You can inspect reference-only banded ranges, but the numeric [update](/reference/integrations/google-sheets/actions/update-banded-range) and [delete](/reference/integrations/google-sheets/actions/delete-banded-range) actions can't target them. The action lists conditional rules in priority order with a zero-based `index`, resolved grid `ranges`, and a typed boolean or gradient `rule`. All returned ranges use Google's zero-based, end-exclusive indexes and numeric `sheetId`. The action normalizes colors to either a six-digit hex string or a theme object using `text`, `background`, `accent1` through `accent6`, or `link`. # Insert rows Source: https://docs.automate.ax/reference/integrations/google-sheets/actions/insert-rows Insert header-keyed rows at a specific Google Sheets row number. `googleSheets.insertRows` shifts existing rows down and writes new records atomically. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("Insert a priority order", () => { onDashboardRun({ title: "Insert a priority order" }) googleSheets.insertRows({ spreadsheet: "spreadsheet-id", source: { sheet: "Orders" }, rowNumber: 2, rows: { "Order ID": "A-1042", Status: "Priority" }, }) }) ``` ## Inputs Provide `spreadsheet`, `source`, one-based `rowNumber`, and one or more header-keyed `rows`. Record and `inputMode` behavior match [Append rows](/reference/integrations/google-sheets/actions/append-rows#inputs). The position must be in the source body or immediately after its current end. Second argument `{ account }` selects the Google Account binding. ## Output Returns `{ affectedCells, rowNumbers, updatedRange }`. `rowNumbers` contains the consecutive new rows. Rows inserted below the first body row inherit formatting from the previous body row. # List rows Source: https://docs.automate.ax/reference/integrations/google-sheets/actions/list-rows List consecutive header-keyed rows from a Google sheet or native table. `googleSheets.listRows` maps cells to records keyed by exact source headers. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("List recent orders", () => { onDashboardRun({ title: "List recent orders" }) googleSheets.listRows({ spreadsheet: "spreadsheet-id", source: { sheet: "Orders", headerRow: 1 }, from: "end", limit: 25, }) }) ``` ## Inputs Provide `spreadsheet` and `source`. A source is `{ sheet: string | number; headerRow?: number }` or `{ table: string }`. Sheet headers default to row 1, while table metadata supplies native headers and body bounds. `from` defaults to `start`, `limit` defaults to `100` and accepts up to 10,000, and `offset` defaults to 0. `valueRender` defaults to `unformatted` and also accepts `formatted` or `formula`. Second argument `{ account }` selects the Google Account. ## Output ```ts theme={null} interface SheetRow { rowNumber: number range: string values: Record } ``` `rowNumber` is one-based and `range` covers the source columns. Headers must be non-empty and unique after trimming. Keys match headers exactly. Missing and trailing cells become `null`. # Move conditional format rule Source: https://docs.automate.ax/reference/integrations/google-sheets/actions/move-conditional-format-rule Move a Google Sheets conditional-format rule to a different priority. `googleSheets.moveConditionalFormatRule()` changes a conditional-format rule's priority within one sheet. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("Lower a formatting rule's priority", () => { onDashboardRun({ title: "Lower a formatting rule's priority" }) googleSheets.moveConditionalFormatRule({ spreadsheet: "spreadsheet-id", sheet: "Orders", fromIndex: 0, toIndex: 2, }) }) ``` ## Inputs Provide `spreadsheet`, `sheet`, current zero-based `fromIndex`, and new zero-based `toIndex`. Indexes are per sheet and are positions, not stable IDs. Moving a rule changes the indexes in the affected priority list. Second argument `{ account }` selects the Google Account. All action inputs accept compatible signals. ## Output Returns the moved rule as `{ index, ranges, rule }`, where `index` is `toIndex`. # Read values Source: https://docs.automate.ax/reference/integrations/google-sheets/actions/read-values Read one or more Google Sheets ranges as row- or column-major matrices. `googleSheets.readValues` reads A1 or named ranges in one request. Use row actions for records keyed by headers instead of positional matrices. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("Read order data", () => { onDashboardRun({ title: "Read order data" }) googleSheets.readValues({ spreadsheet: "spreadsheet-id", ranges: ["Orders!A1:D100", "Summary!B2"], valueRender: "unformatted", }) }) ``` ## Inputs Provide `spreadsheet` and one range or non-empty `ranges` array. `majorDimension` defaults to `rows` and also accepts `columns`. `valueRender` defaults to `unformatted` and also accepts `formatted` or `formula`. `dateTimeRender` defaults to `serialNumber` and also accepts `formattedString` when values aren't formatted. Second argument `{ account }` selects the Google Account. ## Output Returns one `{ range, majorDimension, values }` per requested range. `values` is `(string | number | boolean | null)[][]`. The outer dimension matches `majorDimension`. Google omits trailing empty cells and rows, so matrices may have ragged rows and cover less than the requested range. # Sort range Source: https://docs.automate.ax/reference/integrations/google-sheets/actions/sort-range Sort rows in a Google Sheets range by ordered columns. `googleSheets.sortRange` rearranges rows within a structured range using one or more sort keys. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("Sort orders", () => { onDashboardRun({ title: "Sort orders" }) googleSheets.sortRange({ spreadsheet: "spreadsheet-id", range: { sheet: "Orders", startRow: 2, startColumn: 1, endColumn: 4 }, sortBy: [ { column: 4, direction: "descending" }, { column: 1, direction: "ascending" }, ], }) }) ``` ## Inputs Provide `spreadsheet`, one-based structured `range`, and non-empty `sortBy`. Each sort column is an absolute one-based sheet column, not relative to the range. Direction defaults to `ascending`. Second argument `{ account }` selects the Google Account. ## Output Returns the resolved zero-based grid range. Exclude a header row from `range` when it should remain fixed. # Update banded range Source: https://docs.automate.ax/reference/integrations/google-sheets/actions/update-banded-range Update an ordinary Google Sheets banded range's bounds or colors. `googleSheets.updateBandedRange()` changes a numeric banded range's bounds or row and column colors. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("Restyle report banding", () => { onDashboardRun({ title: "Restyle report banding" }) googleSheets.updateBandedRange({ spreadsheet: "spreadsheet-id", bandedRangeId: 184302910, rows: { firstBandColor: "#FFFFFF", secondBandColor: { theme: "accent2" }, footerColor: null, }, }) }) ``` ## Inputs Provide `spreadsheet`, integer `bandedRangeId`, and at least one of `range`, `rows`, or `columns`. `range` replaces the bounds using a structured one-based grid range. Reference-only banded ranges returned by [`getSpreadsheet()`](/reference/integrations/google-sheets/actions/get-spreadsheet) can't use this action. Within `rows` or `columns`, provide one or more `headerColor`, `firstBandColor`, `secondBandColor`, or `footerColor` updates. A color is a six-digit hex string or `{ theme }` using `text`, `background`, `accent1` through `accent6`, or `link`. Set `headerColor` or `footerColor` to `null` to clear it. The first and second band colors remain required while that direction's banding exists. Set all of `rows` or `columns` to `null` to remove that direction's banding, but a banded range must keep at least one direction. Use [`deleteBandedRange()`](/reference/integrations/google-sheets/actions/delete-banded-range) to remove both. Second argument `{ account }` selects the Google Account. All action inputs accept compatible signals. ## Output Returns the banded range's current zero-based range and row or column colors. # Update conditional format rule Source: https://docs.automate.ax/reference/integrations/google-sheets/actions/update-conditional-format-rule Replace a Google Sheets conditional-format rule at a sheet index. `googleSheets.updateConditionalFormatRule()` completely replaces a rule at one sheet's zero-based index without moving it. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("Update order highlighting", () => { onDashboardRun({ title: "Update order highlighting" }) googleSheets.updateConditionalFormatRule({ spreadsheet: "spreadsheet-id", sheet: "Orders", index: 0, ranges: [{ sheet: "Orders", startRow: 2, startColumn: 3 }], rule: { type: "boolean", condition: { type: "textEqual", value: "Overdue" }, format: { bold: true, backgroundColor: "#FCE8E6" }, }, }) }) ``` ## Inputs Provide `spreadsheet`, `sheet`, zero-based `index`, complete replacement `ranges`, and a complete replacement `rule`. All ranges must resolve to `sheet`. See [Create conditional format rule](/reference/integrations/google-sheets/actions/create-conditional-format-rule#inputs) for range targets, conditions, gradients, strict colors, and supported conditional-format properties. Table targets resolve to fixed grid ranges at update time. Rule indexes are per sheet and can shift after other rule lifecycle operations. Second argument `{ account }` selects the Google Account. All action inputs accept compatible signals. ## Output Returns the updated `{ index, ranges, rule }` with normalized zero-based ranges. # Update rows Source: https://docs.automate.ax/reference/integrations/google-sheets/actions/update-rows Update Google Sheets rows by number using header-keyed values. `googleSheets.updateRows` writes only the supplied cells and preserves other columns. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("Close processed orders", () => { onDashboardRun({ title: "Close processed orders" }) googleSheets.updateRows({ spreadsheet: "spreadsheet-id", source: { table: "OrdersTable" }, updates: [ { rowNumber: 12, values: { Status: "Closed" } }, { rowNumber: 18, values: { Status: "Closed", Total: null } }, ], }) }) ``` ## Inputs Provide `spreadsheet`, `source`, and non-empty `updates`. Each update has a one-based `rowNumber` and non-empty `values` record whose keys exactly match headers. `null` clears a cell. `inputMode` defaults to `userEntered`. Second argument `{ account }` selects the Google Account. ## Output Returns `{ affectedCells, rowNumbers }`. `affectedCells` counts supplied cells, not the full row width. The action accepts duplicate row numbers and retains them in output. Later writes to the same cell win in request order. # Update sheet Source: https://docs.automate.ax/reference/integrations/google-sheets/actions/update-sheet Update a Google sheet's title, position, visibility, direction, or grid size. `googleSheets.updateSheet` changes selected sheet properties and returns current metadata. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("Freeze the header", () => { onDashboardRun({ title: "Freeze the header" }) googleSheets.updateSheet({ spreadsheet: "spreadsheet-id", sheet: "Orders", frozenRowCount: 1, }) }) ``` ## Inputs Provide `spreadsheet` and an exact title or numeric sheet ID in `sheet`. Provide at least one property from [Create sheet](/reference/integrations/google-sheets/actions/create-sheet#inputs): `title`, counts, zero-based `index`, `hidden`, or `rightToLeft`. Second argument `{ account }` selects the Google Account. ## Output Returns current `Sheet` metadata. Shrinking row or column allocation can discard cells outside the new grid. Google also rejects duplicate titles and invalid frozen counts. # Update spreadsheet Source: https://docs.automate.ax/reference/integrations/google-sheets/actions/update-spreadsheet Update Google spreadsheet title, locale, timezone, or recalculation policy. `googleSheets.updateSpreadsheet` changes selected spreadsheet properties. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("Configure a workbook", () => { onDashboardRun({ title: "Configure a workbook" }) googleSheets.updateSpreadsheet({ spreadsheet: "spreadsheet-id", title: "2026 Operations", autoRecalc: "onChange", }) }) ``` ## Inputs Provide `spreadsheet`. Provide at least one of `title`, `locale`, `timeZone`, or `autoRecalc: "onChange" | "minutely" | "hourly"`. Second argument `{ account }` selects the Google Account. ## Output Returns the updated `Spreadsheet`. # Update table Source: https://docs.automate.ax/reference/integrations/google-sheets/actions/update-table Update a native Google Sheets table's structure or native colors. `googleSheets.updateTable()` changes a native table's name, range, columns, or native table colors. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("Restyle an order table", () => { onDashboardRun({ title: "Restyle an order table" }) googleSheets.updateTable({ spreadsheet: "spreadsheet-id", table: "OrdersTable", name: "CurrentOrders", style: { headerColor: { theme: "accent2" }, firstBandColor: "#FFFFFF", secondBandColor: "#E6F4EA", }, }) }) ``` ## Inputs Provide `spreadsheet`, an existing table name or ID, and at least one update: * `name`: a new table name * `range`: a complete structured range with `sheet` and optional one-based inclusive row and column bounds * `columns`: a complete replacement array. Each column needs a `name` and a `type`: `unspecified`, `number`, `currency`, `percent`, `date`, `time`, `dateTime`, `text`, `boolean`, `dropdown`, `file`, `person`, `finance`, `place`, or `rating`. Only `dropdown` columns accept and require `options`. * `style`: one or more `headerColor`, `firstBandColor`, or `secondBandColor` updates A style color is a six-digit hex string or `{ theme }` using `text`, `background`, `accent1` through `accent6`, or `link`. Set a style property to `null` to restore its default. Google doesn't reliably support adding or removing native table footers later. Second argument `{ account }` selects the Google Account. ## Output Returns the current `{ tableId, name, range, columns, style }`. When replacing columns, align their count with the target range and existing data. # Upsert rows Source: https://docs.automate.ax/reference/integrations/google-sheets/actions/upsert-rows Update uniquely keyed Google Sheets rows and append records with new keys. `googleSheets.upsertRows` matches records by one or more exact header columns, updates existing matches, and appends new keys. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("Synchronize orders", () => { onDashboardRun({ title: "Synchronize orders" }) googleSheets.upsertRows({ spreadsheet: "spreadsheet-id", source: { table: "OrdersTable" }, keyColumns: ["Order ID"], rows: [ { "Order ID": "A-1042", Status: "Closed" }, { "Order ID": "A-1043", Status: "Open", Total: 80 }, ], }) }) ``` ## Inputs Provide `spreadsheet`, `source`, non-empty exact `keyColumns`, and one or more records. Every input record must have a non-null value for every key. Partial non-key fields patch existing rows, while omitted fields become null on new rows. `inputMode` defaults to `userEntered`. Second argument `{ account }` selects the Google Account binding. ## Output Returns `{ affectedCells, insertedRows, insertedRange?, updatedRowNumbers }`. `insertedRange` is available for ordinary sheets, not native tables. The action fails when existing rows share a composite key or input records contain duplicate keys, preventing ambiguous updates. # Write values Source: https://docs.automate.ax/reference/integrations/google-sheets/actions/write-values Write one or more Google Sheets value ranges atomically. `googleSheets.writeValues` atomically replaces values in one or more A1 or named ranges. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("Write an order summary", () => { onDashboardRun({ title: "Write an order summary" }) googleSheets.writeValues({ spreadsheet: "spreadsheet-id", inputMode: "userEntered", includeValues: true, updates: [ { range: "Summary!A1:B2", values: [ ["Orders", 42], ["Total", "=SUM(Orders!D:D)"], ], }, ], }) }) ``` ## Inputs Provide `spreadsheet` and one update or non-empty update array. Each update contains `range`, `values`, and optional `majorDimension: "rows" | "columns"`, which defaults to rows. Cell values are string, number, boolean, or `null`. Null clears the cell. `inputMode` defaults to `userEntered`, which parses formula-looking strings and other UI input. `raw` stores strings literally. `includeValues` defaults to false. Optional `responseValueRender` and `responseDateTimeRender` use the modes from [Read values](/reference/integrations/google-sheets/actions/read-values#inputs). Second argument `{ account }` selects the Google Account binding. ## Output Returns spreadsheet ID, total updated cells/rows/columns/sheets, and an `updates` array with `updatedRange`, counts, and optional returned `{ range, majorDimension, values }`. Returned values appear only when `includeValues` is true. # Google Sheets Source: https://docs.automate.ax/reference/integrations/google-sheets/index Read and write Google Sheets values, formatting, tables, charts, and rules, or react when cells change. ## Exports ```ts theme={null} import { googleSheets, googleAccount, getGoogleSheetsApi, } from "automate.ax/google-sheets" ``` * `googleSheets` contains the packaged Google Sheets actions and triggers. * `googleAccount("name")` selects a named Google connection. * `getGoogleSheetsApi` creates the authenticated Google Sheets API helper for a custom account-backed action. ## Triggers * [On cells changed](/reference/integrations/google-sheets/triggers/on-cells-changed) ## Actions * [Append rows](/reference/integrations/google-sheets/actions/append-rows) * [Append values](/reference/integrations/google-sheets/actions/append-values) * [Clear range formatting](/reference/integrations/google-sheets/actions/clear-range-formatting) * [Clear values](/reference/integrations/google-sheets/actions/clear-values) * [Create banded range](/reference/integrations/google-sheets/actions/create-banded-range) * [Create conditional format rule](/reference/integrations/google-sheets/actions/create-conditional-format-rule) * [Create sheet](/reference/integrations/google-sheets/actions/create-sheet) * [Create spreadsheet](/reference/integrations/google-sheets/actions/create-spreadsheet) * [Delete banded range](/reference/integrations/google-sheets/actions/delete-banded-range) * [Delete conditional format rule](/reference/integrations/google-sheets/actions/delete-conditional-format-rule) * [Delete rows](/reference/integrations/google-sheets/actions/delete-rows) * [Delete sheet](/reference/integrations/google-sheets/actions/delete-sheet) * [Delete table](/reference/integrations/google-sheets/actions/delete-table) * [Duplicate sheet](/reference/integrations/google-sheets/actions/duplicate-sheet) * [Find and replace](/reference/integrations/google-sheets/actions/find-and-replace) * [Find rows](/reference/integrations/google-sheets/actions/find-rows) * [Format range](/reference/integrations/google-sheets/actions/format-range) * [Get rows](/reference/integrations/google-sheets/actions/get-rows) * [Get spreadsheet](/reference/integrations/google-sheets/actions/get-spreadsheet) * [Insert rows](/reference/integrations/google-sheets/actions/insert-rows) * [List rows](/reference/integrations/google-sheets/actions/list-rows) * [Move conditional format rule](/reference/integrations/google-sheets/actions/move-conditional-format-rule) * [Read values](/reference/integrations/google-sheets/actions/read-values) * [Sort range](/reference/integrations/google-sheets/actions/sort-range) * [Update banded range](/reference/integrations/google-sheets/actions/update-banded-range) * [Update conditional format rule](/reference/integrations/google-sheets/actions/update-conditional-format-rule) * [Update rows](/reference/integrations/google-sheets/actions/update-rows) * [Update sheet](/reference/integrations/google-sheets/actions/update-sheet) * [Update spreadsheet](/reference/integrations/google-sheets/actions/update-spreadsheet) * [Update table](/reference/integrations/google-sheets/actions/update-table) * [Upsert rows](/reference/integrations/google-sheets/actions/upsert-rows) * [Write values](/reference/integrations/google-sheets/actions/write-values) # On cells changed Source: https://docs.automate.ax/reference/integrations/google-sheets/triggers/on-cells-changed Run an automation when formulas or effective cell values change in Google Sheets. `googleSheets.onCellsChanged` emits batches of net cell changes after Google reports that a spreadsheet changed. Use it to react to edited values, formulas, recalculated results, cleared cells, and populated cells. ## Example ```ts theme={null} import { automation } from "automate.ax" import { googleSheets } from "automate.ax/google-sheets" export default automation("Handle order changes", () => { const batch = googleSheets.onCellsChanged({ spreadsheet: "https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/edit", range: "'Orders'!A2:F", }) batch.changes.forEach((change) => { change.cell.a1 change.before.value change.after.value }) }) ``` You can also describe the range with one-based coordinates: ```ts theme={null} const batch = googleSheets.onCellsChanged({ spreadsheet: "SPREADSHEET_ID", range: { sheet: 123456789, startRow: 2, startColumn: 1, endColumn: 6, }, }) ``` ## Options * `spreadsheet` is a static spreadsheet ID or standard Google Sheets URL. * `range` optionally limits deliveries. Pass an A1 string or an object with `sheet` plus inclusive, one-based `startRow`, `endRow`, `startColumn`, and `endColumn` bounds. Omitted ending bounds are unbounded. Omit `range` to monitor every sheet. * `account` is an optional static Google Account binding. A1 strings accept cells and two-ended ranges, including `A1`, `A1:C10`, `A:C`, `1:10`, `A1:C`, and `A:C10`. Quote sheet titles that contain spaces or punctuation, and double embedded apostrophes: `'Lead''s Sheet'!A1:C10`. An A1 range without a sheet prefix applies to the spreadsheet's first visible sheet. Use a numeric `sheet` ID in the object form when the trigger should survive sheet-title changes. ## Trigger data ```ts theme={null} type CellsChangedEvent = { spreadsheet: { id: string title: string url: string } observedAt: string chunk: { index: number total: number } changes: Array<{ sheet: { id: number title: string } cell: { a1: string row: number column: number } before: CellState after: CellState }> } type CellState = { value: string | number | boolean | null formula?: string error?: { type: string message?: string } } ``` `value` is Google's effective value without display formatting. A cleared or empty cell uses `null`. Formula cells also include the user-entered formula, so replacing `=1` with the literal value `1` still counts as a change. Formatting-only edits do not trigger a batch. One observation can produce several batches of up to 500 changes. `chunk.index` starts at `0`; `chunk.total` is the number of batches created for that trigger and range. ## Observation semantics Google reports that the file changed but does not provide a cell-level edit log. Automate.ax reads the current spreadsheet and compares it with the preceding complete observation. The trigger therefore reports net differences, not every intermediate edit, and does not include editor identity or edit order. Provider notifications normally start an observation promptly. A five-minute repair sync catches missed or coalesced notifications. The first complete read establishes a baseline and emits nothing. The spreadsheet can contain at most 100,000 populated or formula-bearing cells. Range filtering controls which changes your trigger receives; Automate.ax still observes the complete spreadsheet so formulas and multiple range subscriptions share one correct baseline. > [!WARNING] > > An automation that writes to the same spreadsheet can trigger itself. Restrict > the monitored range or make the write path idempotent when building feedback > loops. # Create image Source: https://docs.automate.ax/reference/integrations/google-slides/actions/create-image Create an image from a public URL on a slide. `googleSlides.createImage` create an image from a public URL on a slide. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSlides } from "automate.ax/google-slides" export default automation("Create image", () => { onDashboardRun({ title: "Create image" }) googleSlides.createImage({ presentation: "presentation-id", pageObjectId: "slide-1", imageUrl: "https://example.com/chart.png", width: 320, }) }) ``` ## Inputs Provide `presentation`, `pageObjectId`, and `imageUrl`. The public HTTP(S) image URL must be shorter than 2 KB. Position and size use points. A second argument with `account` selects a Google Account. ## Output Returns the presentation ID and created image ID. Google must be able to fetch the image as a PNG, JPEG, or GIF smaller than 50 MB and no larger than 25 megapixels. # Create presentation Source: https://docs.automate.ax/reference/integrations/google-slides/actions/create-presentation Create a Google Slides presentation. `googleSlides.createPresentation` create a Google Slides presentation. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSlides } from "automate.ax/google-slides" export default automation("Create presentation", () => { onDashboardRun({ title: "Create presentation" }) googleSlides.createPresentation({ title: "Quarterly review" }) }) ``` ## Inputs Provide `title`. A second argument with `account` selects a Google Account. ## Output Returns `presentationId`, title, editor URL, `pageSize` dimensions with their provider unit, revision ID, and slide identifiers. # Create shape Source: https://docs.automate.ax/reference/integrations/google-slides/actions/create-shape Create a shape or text box on a slide. `googleSlides.createShape` create a shape or text box on a slide. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSlides } from "automate.ax/google-slides" export default automation("Create shape", () => { onDashboardRun({ title: "Create shape" }) googleSlides.createShape({ presentation: "presentation-id", pageObjectId: "slide-1", shapeType: "textBox", x: 72, y: 72, width: 360, height: 72, }) }) ``` ## Inputs Provide `presentation` and `pageObjectId`. Choose `shapeType`; position and size use points. `objectId` is optional. A second argument with `account` selects a Google Account. ## Output Returns the presentation ID and created shape ID. # Create slide Source: https://docs.automate.ax/reference/integrations/google-slides/actions/create-slide Create a slide with a predefined layout. `googleSlides.createSlide` create a slide with a predefined layout. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSlides } from "automate.ax/google-slides" export default automation("Create slide", () => { onDashboardRun({ title: "Create slide" }) googleSlides.createSlide({ presentation: "presentation-id", layout: "titleAndBody", }) }) ``` ## Inputs Provide `presentation`. `layout` defaults to `blank`; `insertionIndex`, `objectId`, and `requiredRevisionId` are optional. A second argument with `account` selects a Google Account. ## Output Returns the presentation ID, created object ID, occurrence count, and revision ID. # Create table Source: https://docs.automate.ax/reference/integrations/google-slides/actions/create-table Create a table on a slide. `googleSlides.createTable` create a table on a slide. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSlides } from "automate.ax/google-slides" export default automation("Create table", () => { onDashboardRun({ title: "Create table" }) googleSlides.createTable({ presentation: "presentation-id", pageObjectId: "slide-1", rows: 3, columns: 4, }) }) ``` ## Inputs Provide `presentation`, `pageObjectId`, `rows`, and `columns` from 1 through 20. Position, size, and `objectId` are optional. A second argument with `account` selects a Google Account. ## Output Returns the presentation ID and created table ID. # Delete object Source: https://docs.automate.ax/reference/integrations/google-slides/actions/delete-object Delete a slide or page element. `googleSlides.deleteObject` delete a slide or page element. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSlides } from "automate.ax/google-slides" export default automation("Delete object", () => { onDashboardRun({ title: "Delete object" }) googleSlides.deleteObject({ presentation: "presentation-id", objectId: "shape-1", }) }) ``` ## Inputs Provide `presentation` and `objectId`. A second argument with `account` selects a Google Account. ## Output Returns the presentation ID and resulting revision ID. # Delete text Source: https://docs.automate.ax/reference/integrations/google-slides/actions/delete-text Delete all or part of an object's text. `googleSlides.deleteText` delete all or part of an object's text. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSlides } from "automate.ax/google-slides" export default automation("Delete text", () => { onDashboardRun({ title: "Delete text" }) googleSlides.deleteText({ presentation: "presentation-id", objectId: "shape-1", startIndex: 0, endIndex: 7, }) }) ``` ## Inputs Provide `presentation` and `objectId`. Omit both range indexes to delete all text. When you set `endIndex`, it must be greater than `startIndex`; an omitted `startIndex` counts as 0. Set table cell indexes when needed. A second argument with `account` selects a Google Account. ## Output Returns the presentation ID and resulting revision ID. # Duplicate slide Source: https://docs.automate.ax/reference/integrations/google-slides/actions/duplicate-slide Duplicate a slide and optionally assign its new object ID. `googleSlides.duplicateSlide` duplicate a slide and optionally assign its new object ID. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSlides } from "automate.ax/google-slides" export default automation("Duplicate slide", () => { onDashboardRun({ title: "Duplicate slide" }) googleSlides.duplicateSlide({ presentation: "presentation-id", objectId: "slide-1", newObjectId: "slide-copy", }) }) ``` ## Inputs Provide `presentation` and the source slide `objectId`. `newObjectId` must satisfy Google's object-ID syntax. A second argument with `account` selects a Google Account. ## Output Returns the presentation ID and duplicated object ID. # Format text Source: https://docs.automate.ax/reference/integrations/google-slides/actions/format-text Apply formatting to text in a shape or table cell. `googleSlides.formatText` apply formatting to text in a shape or table cell. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSlides } from "automate.ax/google-slides" export default automation("Format text", () => { onDashboardRun({ title: "Format text" }) googleSlides.formatText({ presentation: "presentation-id", objectId: "shape-1", bold: true, foregroundColor: "#1A73E8", }) }) ``` ## Inputs Provide `presentation`, `objectId`, and at least one text style. Range and table-cell indexes are optional. When you set `endIndex`, it must be greater than `startIndex`; an omitted `startIndex` counts as 0. Colors use six-digit hex values. A second argument with `account` selects a Google Account. ## Output Returns the presentation ID and resulting revision ID. # Get presentation Source: https://docs.automate.ax/reference/integrations/google-slides/actions/get-presentation Read presentation metadata and slide identifiers. `googleSlides.getPresentation` read presentation metadata and slide identifiers. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSlides } from "automate.ax/google-slides" export default automation("Get presentation", () => { onDashboardRun({ title: "Get presentation" }) googleSlides.getPresentation({ presentation: "presentation-id" }) }) ``` ## Inputs `presentation` accepts an ID or standard Google Slides URL. A second argument with `account` selects a Google Account. ## Output Returns `presentationId`, title, editor URL, locale, `pageSize` dimensions with their provider unit, revision ID, and ordered slide IDs. # Insert text Source: https://docs.automate.ax/reference/integrations/google-slides/actions/insert-text Insert text into a shape or table cell. `googleSlides.insertText` insert text into a shape or table cell. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSlides } from "automate.ax/google-slides" export default automation("Insert text", () => { onDashboardRun({ title: "Insert text" }) googleSlides.insertText({ presentation: "presentation-id", objectId: "shape-1", text: "Results", }) }) ``` ## Inputs Provide `presentation`, `objectId`, and non-empty `text`. `index` inserts at an offset. Set row and column indexes for a table cell. A second argument with `account` selects a Google Account. ## Output Returns the presentation ID and resulting revision ID. # Replace image Source: https://docs.automate.ax/reference/integrations/google-slides/actions/replace-image Replace an existing image while preserving its object ID. `googleSlides.replaceImage` replace an existing image while preserving its object ID. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSlides } from "automate.ax/google-slides" export default automation("Replace image", () => { onDashboardRun({ title: "Replace image" }) googleSlides.replaceImage({ presentation: "presentation-id", objectId: "image-1", imageUrl: "https://example.com/new.png", replaceMethod: "centerCrop", }) }) ``` ## Inputs Provide `presentation`, image `objectId`, and a public HTTP(S) `imageUrl` shorter than 2 KB. `replaceMethod` defaults to `centerCrop`. A second argument with `account` selects a Google Account. ## Output Returns the presentation ID and resulting revision ID. Google must be able to fetch the image as a PNG, JPEG, or GIF smaller than 50 MB and no larger than 25 megapixels. # Replace text Source: https://docs.automate.ax/reference/integrations/google-slides/actions/replace-text Replace matching text throughout a presentation or selected slides. `googleSlides.replaceText` replace matching text throughout a presentation or selected slides. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSlides } from "automate.ax/google-slides" export default automation("Replace text", () => { onDashboardRun({ title: "Replace text" }) googleSlides.replaceText({ presentation: "presentation-id", searchText: "Draft", replaceText: "Final", }) }) ``` ## Inputs Provide `presentation`, `searchText`, and `replaceText`. `matchCase`, `pageObjectIds`, and `requiredRevisionId` are optional. A second argument with `account` selects a Google Account. ## Output Returns the presentation ID and `occurrencesChanged`. # Transform object Source: https://docs.automate.ax/reference/integrations/google-slides/actions/transform-object Set or adjust a page element's affine transform. `googleSlides.transformObject` set or adjust a page element's affine transform. ## Example ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSlides } from "automate.ax/google-slides" export default automation("Transform object", () => { onDashboardRun({ title: "Transform object" }) googleSlides.transformObject({ presentation: "presentation-id", objectId: "shape-1", translateX: 24, translateY: 12, }) }) ``` ## Inputs Provide `presentation` and `objectId`. Set scale, shear, or translation values in points. `applyMode` defaults to `absolute`; unspecified matrix values use the identity transform. A second argument with `account` selects a Google Account. ## Output Returns the presentation ID and resulting revision ID. # Google Slides Source: https://docs.automate.ax/reference/integrations/google-slides/index Create Google Slides presentations, edit page elements, and reject stale writes with requiredRevisionId. Use `googleSlides` to create presentations and slides, add page elements, edit text, and update images and transforms through the Google Slides API. ## Create a presentation ```ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { googleSlides } from "automate.ax/google-slides" export default automation("Create a presentation", () => { onDashboardRun({ title: "Create quarterly review" }) const presentation = googleSlides.createPresentation({ title: "Quarterly review", }) googleSlides.createSlide({ presentation: presentation.presentationId, layout: "titleAndBody", }) }) ``` Actions accept a presentation ID or standard Google Slides URL. Most edits are atomic requests and accept `requiredRevisionId` to reject stale writes. Read actions request Google's native `presentations.readonly` scope. Create and edit actions request `presentations`, so they can access existing presentations by ID or URL without a prior per-file grant. ## Exports ```ts theme={null} import { googleSlides, googleAccount, getGoogleSlidesApi, } from "automate.ax/google-slides" ``` * `googleSlides` contains the packaged Google Slides actions. * `googleAccount("name")` selects a named Google connection. * `getGoogleSlidesApi` creates the authenticated Google Slides API helper for a custom account-backed action. ## Actions * [Create image](/reference/integrations/google-slides/actions/create-image) * [Create presentation](/reference/integrations/google-slides/actions/create-presentation) * [Create shape](/reference/integrations/google-slides/actions/create-shape) * [Create slide](/reference/integrations/google-slides/actions/create-slide) * [Create table](/reference/integrations/google-slides/actions/create-table) * [Delete object](/reference/integrations/google-slides/actions/delete-object) * [Delete text](/reference/integrations/google-slides/actions/delete-text) * [Duplicate slide](/reference/integrations/google-slides/actions/duplicate-slide) * [Format text](/reference/integrations/google-slides/actions/format-text) * [Get presentation](/reference/integrations/google-slides/actions/get-presentation) * [Insert text](/reference/integrations/google-slides/actions/insert-text) * [Replace image](/reference/integrations/google-slides/actions/replace-image) * [Replace text](/reference/integrations/google-slides/actions/replace-text) * [Transform object](/reference/integrations/google-slides/actions/transform-object) # Add contact tags Source: https://docs.automate.ax/reference/integrations/highlevel/actions/add-contact-tags Adds tags to one contact. `highlevel.addContactTags` adds tags to one contact. ```ts automations/highlevel-add-contact-tags.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Add contact tags", () => { markSignificant( highlevel.addContactTags({ contactId: "sx6wyHhbFdRXh302LLNR", tags: [], }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `contactId` | `string` | Yes | HighLevel contact id value. | | `tags` | `string[]` | Yes | HighLevel tags value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `tags` | `string[]` | No | HighLevel tags value. | This action calls `POST /contacts/{contactId}/tags` with HighLevel API version `2021-07-28` and requires `contacts.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Add contact to campaign Source: https://docs.automate.ax/reference/integrations/highlevel/actions/add-contact-to-campaign Adds one contact to a campaign. `highlevel.addContactToCampaign` adds one contact to a campaign. ```ts automations/highlevel-add-contact-to-campaign.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Add contact to campaign", () => { markSignificant( highlevel.addContactToCampaign({ contactId: "3bZD1nQzbul0MCancbQD", campaignId: "Y2I9XM7aO1hncuSOlc9L", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `contactId` | `string` | Yes | HighLevel contact id value. | | `campaignId` | `string` | Yes | HighLevel campaign id value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `succeded` | `boolean` | No | Whether the operation succeeded. | This action calls `POST /contacts/{contactId}/campaigns/{campaignId}` with HighLevel API version `2021-07-28` and requires `contacts.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. Automate.ax does not automatically replay this enrollment after an indeterminate transport failure. # Add contact to workflow Source: https://docs.automate.ax/reference/integrations/highlevel/actions/add-contact-to-workflow Adds one contact to a workflow. `highlevel.addContactToWorkflow` adds one contact to a workflow. ```ts automations/highlevel-add-contact-to-workflow.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Add contact to workflow", () => { markSignificant( highlevel.addContactToWorkflow({ contactId: "sx6wyHhbFdRXh302LLNR", workflowId: "sx6wyHhbFdRXh302LLNR", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `contactId` | `string` | Yes | HighLevel contact id value. | | `workflowId` | `string` | Yes | HighLevel workflow id value. | | `eventStartTime` | `string` | No | HighLevel event start time value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `succeded` | `boolean` | No | Whether the operation succeeded. | This action calls `POST /contacts/{contactId}/workflow/{workflowId}` with HighLevel API version `2021-07-28` and requires `contacts.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. Automate.ax does not automatically replay this enrollment after an indeterminate transport failure. # Cancel scheduled email message Source: https://docs.automate.ax/reference/integrations/highlevel/actions/cancel-scheduled-email-message Cancels one scheduled email before delivery. `highlevel.cancelScheduledEmailMessage` cancels one scheduled email before delivery. Pass the `emailMessageId` returned by `highlevel.sendMessage` for an email. ```ts automations/highlevel-cancel-scheduled-email-message.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Cancel scheduled email", () => { markSignificant( highlevel.cancelScheduledEmailMessage({ emailMessageId: "ve9EPM428h8vShlRW1KT", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `emailMessageId` | `string` | Yes | Scheduled email message ID. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `status` | `number` | Yes | HighLevel response status. | | `message` | `string` | Yes | HighLevel response message. | This action calls `DELETE /conversations/messages/email/{emailMessageId}/schedule` with HighLevel API version `2021-07-28` and requires `conversations/message.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Cancel scheduled message Source: https://docs.automate.ax/reference/integrations/highlevel/actions/cancel-scheduled-message Cancels one scheduled message before delivery. `highlevel.cancelScheduledMessage` cancels one scheduled non-email message before delivery. Use `highlevel.cancelScheduledEmailMessage` for email. ```ts automations/highlevel-cancel-scheduled-message.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Cancel scheduled message", () => { markSignificant( highlevel.cancelScheduledMessage({ messageId: "ve9EPM428h8vShlRW1KT", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `messageId` | `string` | Yes | HighLevel message id value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `status` | `number` | Yes | HTTP Status code of the request | | `message` | `string` | Yes | Error message of the request | This action calls `DELETE /conversations/messages/{messageId}/schedule` with HighLevel API version `2021-04-15` and requires `conversations/message.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Complete contact task Source: https://docs.automate.ax/reference/integrations/highlevel/actions/complete-contact-task Marks one contact task complete or incomplete. `highlevel.completeContactTask` marks one contact task complete or incomplete. ```ts automations/highlevel-complete-contact-task.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Complete contact task", () => { markSignificant( highlevel.completeContactTask({ contactId: "sx6wyHhbFdRXh302LLNR", taskId: "ocQHyuzHvysMo5N5VsXc", completed: true, }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `contactId` | `string` | Yes | HighLevel contact id value. | | `taskId` | `string` | Yes | HighLevel task id value. | | `completed` | `boolean` | Yes | HighLevel completed value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `task` | `object` | No | HighLevel task value. | This action calls `PUT /contacts/{contactId}/tasks/{taskId}/completed` with HighLevel API version `2021-07-28` and requires `contacts.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Create appointment Source: https://docs.automate.ax/reference/integrations/highlevel/actions/create-appointment Creates an appointment on a calendar. `highlevel.createAppointment` creates an appointment on a calendar. ```ts automations/highlevel-create-appointment.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Create appointment", () => { markSignificant( highlevel.createAppointment({ calendarId: "CVokAlI8fgw4WYWoCtQz", contactId: "0007BWpSzSwfiuSl0tR2", startTime: "2021-06-23T03:30:00+05:30", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `title` | `string` | No | Title | | `meetingLocationType` | `custom \| zoom \| gmeet \| phone \| address \| ms_teams \| google` | No | Meeting location type. - If `address` is provided in the request body, the `meetingLocationType` defaults to **custom**. | | `meetingLocationId` | `string` | No | The unique identifier for the meeting location. - This value can be found in `calendar.locationConfigurations`or `calendar.teamMembers[].locationConfigurations` | | `overrideLocationConfig` | `boolean` | No | Flag to override location config - **false** - If only `meetingLocationId` is provided - **true** - If only `meetingLocationType` is provided | | `appointmentStatus` | `new \| confirmed \| cancelled \| showed \| noshow \| invalid` | No | HighLevel appointment status value. | | `assignedUserId` | `string` | No | Assigned User Id | | `description` | `string` | No | Appointment Description | | `address` | `string` | No | Appointment Address | | `ignoreDateRange` | `boolean` | No | If set to true, the minimum scheduling notice and date range would be ignored | | `toNotify` | `boolean` | No | If set to false, the automations will not run | | `ignoreFreeSlotValidation` | `boolean` | No | If true the time slot validation would be avoided for any appointment creation (even the ignoreDateRange) | | `rrule` | `string` | No | iCalendar RFC 5545 recurrence rule. HighLevel derives instance IDs from the event start time and applies the rule only when free-slot validation is disabled. | | `calendarId` | `string` | Yes | Calendar Id | | `contactId` | `string` | Yes | Contact Id | | `startTime` | `string` | Yes | Start Time | | `endTime` | `string` | No | End Time | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `calendarId` | `string` | Yes | Calendar Id | | `locationId` | `string` | Yes | Location Id | | `contactId` | `string` | Yes | Contact Id | | `startTime` | `string` | No | Start Time | | `endTime` | `string` | No | End Time | | `title` | `string` | No | Title | | `meetingLocationType` | `string` | No | Meeting Location Type | | `appointmentStatus` | `new \| confirmed \| cancelled \| showed \| noshow \| invalid \| active \| completed` | No | HighLevel appointment status value. | | `assignedUserId` | `string` | No | Assigned User Id | | `address` | `string` | No | Appointment Address | | `isRecurring` | `boolean` | No | true if the event is recurring otherwise false | | `rrule` | `string` | No | RRULE as per the iCalendar (RFC 5545) specification for recurring events | | `id` | `string` | Yes | Id | This action calls `POST /calendars/events/appointments` with HighLevel API version `2021-04-15` and requires `calendars/events.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. Automate.ax does not automatically replay this create or send operation after an indeterminate transport failure. # Create blocked slot Source: https://docs.automate.ax/reference/integrations/highlevel/actions/create-blocked-slot Blocks a time range on a calendar. `highlevel.createBlockedSlot` blocks a time range on a calendar. ```ts automations/highlevel-create-blocked-slot.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Create blocked slot", () => { markSignificant( highlevel.createBlockedSlot({ calendarId: "CVokAlI8fgw4WYWoCtQz", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `title` | `string` | No | Title | | `calendarId` | `string` | Yes | Set either a calendar ID or an assigned user ID, not both. | | `assignedUserId` | `string` | No | Set either a calendar ID or an assigned user ID, not both. | | `startTime` | `string` | No | Start Time | | `endTime` | `string` | No | End Time | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `id` | `string` | Yes | Id | | `locationId` | `string` | Yes | Location Id | | `title` | `string` | Yes | Title | | `startTime` | `object` | Yes | Start Time | | `endTime` | `object` | Yes | End Time | | `calendarId` | `string` | No | Calendar id | | `assignedUserId` | `string` | No | Assigned User Id | This action calls `POST /calendars/events/block-slots` with HighLevel API version `2021-04-15` and requires `calendars/events.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. Automate.ax does not automatically replay this create or send operation after an indeterminate transport failure. # Create calendar Source: https://docs.automate.ax/reference/integrations/highlevel/actions/create-calendar Creates a calendar in the connected sub-account. `highlevel.createCalendar` creates a calendar in the connected sub-account. ```ts automations/highlevel-create-calendar.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Create calendar", () => { markSignificant( highlevel.createCalendar({ name: "test calendar", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `isActive` | `boolean` | No | Should the created calendar be active or draft | | `notifications` | `object[]` | No | Deprecated. Please use 'Calendar Notifications APIs' instead. | | `groupId` | `string` | No | Group Id | | `teamMembers` | `object[]` | No | Team members are required for calendars of type: Round Robin, Collective, Class, Service. Personal calendar must have exactly one team member. | | `eventType` | `RoundRobin_OptimizeForAvailability \| RoundRobin_OptimizeForEqualDistribution` | No | HighLevel event type value. | | `name` | `string` | Yes | HighLevel name value. | | `description` | `string` | No | HighLevel description value. | | `slug` | `string` | No | HighLevel slug value. | | `widgetSlug` | `string` | No | HighLevel widget slug value. | | `calendarType` | `round_robin \| event \| class_booking \| collective \| service_booking \| personal` | No | HighLevel calendar type value. | | `widgetType` | `default \| classic` | No | Calendar widget type. Choose "default" for the new layout and "classic" for "classic" layout. | | `eventTitle` | `string` | No | HighLevel event title value. | | `eventColor` | `string` | No | HighLevel event color value. | | `meetingLocation` | `string` | No | Deprecated. Use `locationConfigurations.location` or `teamMembers[].locationConfigurations.location` instead. | | `locationConfigurations` | `object[]` | No | Meeting location configuration for event calendar | | `slotDuration` | `number` | No | This controls the duration of the meeting | | `slotDurationUnit` | `mins \| hours` | No | Unit for slot duration. | | `slotInterval` | `number` | No | Slot interval reflects the amount of time the between booking slots that will be shown in the calendar. | | `slotIntervalUnit` | `mins \| hours` | No | Unit for slot interval. | | `slotBuffer` | `number` | No | Slot-Buffer is additional time that can be added after an appointment, allowing for extra time to wrap up | | `slotBufferUnit` | `mins \| hours` | No | Unit for slot buffer. | | `preBuffer` | `number` | No | Pre-Buffer is additional time that can be added before an appointment, allowing for extra time to get ready | | `preBufferUnit` | `mins \| hours` | No | Unit for pre-buffer. | | `appoinmentPerSlot` | `number` | No | Maximum bookings per slot (per user). Maximum seats per slot in case of Class Booking Calendar. | | `appoinmentPerDay` | `number` | No | Number of appointments that can be booked for a given day | | `allowBookingAfter` | `number` | No | Minimum scheduling notice for events | | `allowBookingAfterUnit` | `hours \| days \| weeks \| months` | No | Unit for minimum scheduling notice | | `allowBookingFor` | `number` | No | Minimum number of days/weeks/months for which to allow booking events | | `allowBookingForUnit` | `days \| weeks \| months` | No | Unit for controlling the duration for which booking would be allowed for | | `openHours` | `object[]` | No | This is only to set the standard availability. For custom availability, use the availabilities property | | `enableRecurring` | `boolean` | No | Enable recurring appointments for the calendars. Please note that only one member should be added in the calendar to enable this | | `recurring` | `object` | No | HighLevel recurring value. | | `formId` | `string` | No | HighLevel form id value. | | `stickyContact` | `boolean` | No | HighLevel sticky contact value. | | `isLivePaymentMode` | `boolean` | No | HighLevel is live payment mode value. | | `autoConfirm` | `boolean` | No | HighLevel auto confirm value. | | `shouldSendAlertEmailsToAssignedMember` | `boolean` | No | HighLevel should send alert emails to assigned member value. | | `alertEmail` | `string` | No | HighLevel alert email value. | | `googleInvitationEmails` | `boolean` | No | HighLevel google invitation emails value. | | `allowReschedule` | `boolean` | No | HighLevel allow reschedule value. | | `allowCancellation` | `boolean` | No | HighLevel allow cancellation value. | | `shouldAssignContactToTeamMember` | `boolean` | No | HighLevel should assign contact to team member value. | | `shouldSkipAssigningContactForExisting` | `boolean` | No | HighLevel should skip assigning contact for existing value. | | `notes` | `string` | No | HighLevel notes value. | | `pixelId` | `string` | No | HighLevel pixel id value. | | `formSubmitType` | `RedirectURL \| ThankYouMessage` | No | HighLevel form submit type value. | | `formSubmitRedirectURL` | `string` | No | Form submission redirect URL. | | `formSubmitThanksMessage` | `string` | No | HighLevel form submit thanks message value. | | `availabilityType` | `0 \| 1` | No | Determines which availability type to consider: - **1**: Only custom availabilities will be used. - **0**: Only open hours will be used. - **null**: Both custom availabilities and open hours will be considered. | | `availabilities` | `object[]` | No | This is only to set the custom availability. For standard availability, use the standard availability hours | | `guestType` | `count_only \| collect_detail` | No | HighLevel guest type value. | | `consentLabel` | `string` | No | HighLevel consent label value. | | `calendarCoverImage` | `string` | No | HighLevel calendar cover image value. | | `lookBusyConfig` | `JSON value` | No | Look Busy Configuration | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `calendar` | `object` | Yes | HighLevel calendar value. | This action calls `POST /calendars/` with HighLevel API version `2021-04-15` and requires `calendars.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. Automate.ax does not automatically replay this create or send operation after an indeterminate transport failure. # Create contact Source: https://docs.automate.ax/reference/integrations/highlevel/actions/create-contact Creates a contact in the connected sub-account. `highlevel.createContact` creates a contact in the connected sub-account. ```ts automations/highlevel-create-contact.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Create contact", () => { markSignificant(highlevel.createContact({})) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `firstName` | `string \| null` | No | HighLevel first name value. | | `lastName` | `string \| null` | No | HighLevel last name value. | | `name` | `string \| null` | No | HighLevel name value. | | `email` | `string \| null` | No | HighLevel email value. | | `gender` | `string` | No | HighLevel gender value. | | `phone` | `string \| null` | No | HighLevel phone value. | | `address1` | `string \| null` | No | HighLevel address1 value. | | `city` | `string \| null` | No | HighLevel city value. | | `state` | `string \| null` | No | HighLevel state value. | | `postalCode` | `string` | No | HighLevel postal code value. | | `website` | `string \| null` | No | HighLevel website value. | | `timezone` | `string \| null` | No | HighLevel timezone value. | | `dnd` | `boolean` | No | HighLevel Do Not Disturb setting. | | `dndSettings` | `object` | No | HighLevel Do Not Disturb settings. | | `inboundDndSettings` | `object` | No | HighLevel inbound Do Not Disturb settings. | | `tags` | `string[]` | No | HighLevel tags value. | | `customFields` | `object[]` | No | HighLevel custom fields value. | | `source` | `string` | No | HighLevel source value. | | `dateOfBirth` | `string \| null` | No | Birth date in a HighLevel-supported date format such as `YYYY-MM-DD`. | | `country` | `string` | No | HighLevel country value. | | `companyName` | `string \| null` | No | HighLevel company name value. | | `assignedTo` | `string` | No | User's Id | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `contact` | `object` | No | HighLevel contact value. | This action calls `POST /contacts/` with HighLevel API version `2021-07-28` and requires `contacts.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. Automate.ax does not automatically replay this create or send operation after an indeterminate transport failure. # Create contact note Source: https://docs.automate.ax/reference/integrations/highlevel/actions/create-contact-note Creates a note attached to one contact. `highlevel.createContactNote` creates a note attached to one contact. ```ts automations/highlevel-create-contact-note.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Create contact note", () => { markSignificant( highlevel.createContactNote({ contactId: "sx6wyHhbFdRXh302LLNR", body: "lorem ipsum", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `contactId` | `string` | Yes | HighLevel contact id value. | | `userId` | `string` | No | HighLevel user id value. | | `body` | `string` | Yes | HighLevel body value. | | `title` | `string` | No | HighLevel title value. | | `color` | `string` | No | HighLevel color value. | | `pinned` | `boolean` | No | HighLevel pinned value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `note` | `object` | No | HighLevel note value. | HighLevel may return `note.userId` as `null` when an integration creates the note. This action calls `POST /contacts/{contactId}/notes` with HighLevel API version `2021-07-28` and requires `contacts.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. Automate.ax does not automatically replay this create or send operation after an indeterminate transport failure. # Create contact task Source: https://docs.automate.ax/reference/integrations/highlevel/actions/create-contact-task Creates a task attached to one contact. `highlevel.createContactTask` creates a task attached to one contact. ```ts automations/highlevel-create-contact-task.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Create contact task", () => { markSignificant( highlevel.createContactTask({ contactId: "sx6wyHhbFdRXh302LLNR", title: "First Task", dueDate: "2020-10-25T11:00:00Z", completed: true, }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `contactId` | `string` | Yes | HighLevel contact id value. | | `title` | `string` | Yes | HighLevel title value. | | `body` | `string` | No | HighLevel body value. | | `dueDate` | `string` | Yes | HighLevel due date value. | | `completed` | `boolean` | Yes | HighLevel completed value. | | `assignedTo` | `string` | No | HighLevel assigned to value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `task` | `object` | No | HighLevel task value. | This action calls `POST /contacts/{contactId}/tasks` with HighLevel API version `2021-07-28` and requires `contacts.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. Automate.ax does not automatically replay this create or send operation after an indeterminate transport failure. # Create conversation Source: https://docs.automate.ax/reference/integrations/highlevel/actions/create-conversation Creates a conversation for a contact. `highlevel.createConversation` creates a conversation for a contact. ```ts automations/highlevel-create-conversation.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Create conversation", () => { markSignificant( highlevel.createConversation({ contactId: "tDtDnQdgm2LXpyiqYvZ6", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `contactId` | `string` | Yes | Contact ID as string | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `success` | `boolean` | Yes | Indicates whether the API request was successful. | | `conversation` | `JSON value` | Yes | Conversation data of the provided conversation ID. | This action calls `POST /conversations/` with HighLevel API version `2021-04-15` and requires `conversations.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. Automate.ax does not automatically replay this create or send operation after an indeterminate transport failure. # Create opportunity Source: https://docs.automate.ax/reference/integrations/highlevel/actions/create-opportunity Creates an opportunity in a pipeline. `highlevel.createOpportunity` creates an opportunity in a pipeline. ```ts automations/highlevel-create-opportunity.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Create opportunity", () => { markSignificant( highlevel.createOpportunity({ pipelineId: "VDm7RPYC2GLUvdpKmBfC", name: "First Opps", status: "open", contactId: "mTkSCb1UBjb5tk4OvB69", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `pipelineId` | `string` | Yes | pipeline Id | | `name` | `string` | Yes | HighLevel name value. | | `pipelineStageId` | `string` | No | HighLevel pipeline stage id value. | | `status` | `open \| won \| lost \| abandoned \| all` | Yes | HighLevel status value. | | `contactId` | `string` | Yes | HighLevel contact id value. | | `monetaryValue` | `number` | No | Opportunity monetary value. | | `assignedTo` | `string` | No | HighLevel assigned to value. | | `customFields` | `object[]` | No | Add custom fields to opportunities. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `opportunity` | `object` | No | HighLevel opportunity value. | This action calls `POST /opportunities/` with HighLevel API version `2021-07-28` and requires `opportunities.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. Automate.ax does not automatically replay this create or send operation after an indeterminate transport failure. # Create schedule Source: https://docs.automate.ax/reference/integrations/highlevel/actions/create-schedule Creates an availability schedule. `highlevel.createSchedule` creates an availability schedule. ```ts automations/highlevel-create-schedule.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Create schedule", () => { markSignificant( highlevel.createSchedule({ timezone: "America/New_York", name: "Business Hours Schedule", userId: "IkqiJlXJ7o9h61tCHHod", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `rules` | `object[]` | No | Schedule rules defining when the schedule is active | | `timezone` | `string` | Yes | Timezone for the schedule (IANA timezone identifier) | | `name` | `string` | Yes | Human-readable name for the schedule | | `userId` | `string` | Yes | User ID associated with the schedule | | `calendarIds` | `string[]` | No | Calendar IDs associated with the schedule | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `schedule` | `JSON value` | Yes | Schedule | This action calls `POST /calendars/schedules` with HighLevel API version `2021-04-15` and requires `calendars.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. Automate.ax does not automatically replay this create or send operation after an indeterminate transport failure. # Delete appointment Source: https://docs.automate.ax/reference/integrations/highlevel/actions/delete-appointment Deletes one calendar event or appointment. `highlevel.deleteAppointment` deletes one calendar event or appointment. ```ts automations/highlevel-delete-appointment.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Delete appointment", () => { markSignificant( highlevel.deleteAppointment({ eventId: "value", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `eventId` | `string` | Yes | HighLevel event id value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `succeeded` | `boolean` | No | HighLevel succeeded value. | This action calls `DELETE /calendars/events/{eventId}` with HighLevel API version `2021-04-15` and requires `calendars/events.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Delete calendar Source: https://docs.automate.ax/reference/integrations/highlevel/actions/delete-calendar Deletes one calendar by ID. `highlevel.deleteCalendar` deletes one calendar by ID. ```ts automations/highlevel-delete-calendar.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Delete calendar", () => { markSignificant( highlevel.deleteCalendar({ calendarId: "ocQHyuzHvysMo5N5VsXc", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `calendarId` | `string` | Yes | HighLevel calendar id value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `success` | `boolean` | Yes | Success | This action calls `DELETE /calendars/{calendarId}` with HighLevel API version `2021-04-15` and requires `calendars.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Delete contact Source: https://docs.automate.ax/reference/integrations/highlevel/actions/delete-contact Permanently deletes one contact by ID. `highlevel.deleteContact` permanently deletes one contact by ID. ```ts automations/highlevel-delete-contact.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Delete contact", () => { markSignificant( highlevel.deleteContact({ contactId: "ocQHyuzHvysMo5N5VsXc", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `contactId` | `string` | Yes | HighLevel contact id value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `succeded` | `boolean` | No | Whether the operation succeeded. | This action calls `DELETE /contacts/{contactId}` with HighLevel API version `2021-07-28` and requires `contacts.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Delete contact note Source: https://docs.automate.ax/reference/integrations/highlevel/actions/delete-contact-note Deletes one contact note. `highlevel.deleteContactNote` deletes one contact note. ```ts automations/highlevel-delete-contact-note.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Delete contact note", () => { markSignificant( highlevel.deleteContactNote({ contactId: "sx6wyHhbFdRXh302LLNR", id: "ocQHyuzHvysMo5N5VsXc", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `contactId` | `string` | Yes | HighLevel contact id value. | | `id` | `string` | Yes | HighLevel id value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `succeded` | `boolean` | No | Whether the operation succeeded. | This action calls `DELETE /contacts/{contactId}/notes/{id}` with HighLevel API version `2021-07-28` and requires `contacts.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Delete contact task Source: https://docs.automate.ax/reference/integrations/highlevel/actions/delete-contact-task Deletes one contact task. `highlevel.deleteContactTask` deletes one contact task. ```ts automations/highlevel-delete-contact-task.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Delete contact task", () => { markSignificant( highlevel.deleteContactTask({ contactId: "sx6wyHhbFdRXh302LLNR", taskId: "ocQHyuzHvysMo5N5VsXc", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `contactId` | `string` | Yes | HighLevel contact id value. | | `taskId` | `string` | Yes | HighLevel task id value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `succeded` | `boolean` | No | Whether the operation succeeded. | This action calls `DELETE /contacts/{contactId}/tasks/{taskId}` with HighLevel API version `2021-07-28` and requires `contacts.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Delete conversation Source: https://docs.automate.ax/reference/integrations/highlevel/actions/delete-conversation Deletes one conversation by ID. `highlevel.deleteConversation` deletes one conversation by ID. ```ts automations/highlevel-delete-conversation.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Delete conversation", () => { markSignificant( highlevel.deleteConversation({ conversationId: "tDtDnQdgm2LXpyiqYvZ6", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `conversationId` | `string` | Yes | HighLevel conversation id value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `success` | `boolean` | Yes | Boolean value as the API response. | This action calls `DELETE /conversations/{conversationId}` with HighLevel API version `2021-04-15` and requires `conversations.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Delete opportunity Source: https://docs.automate.ax/reference/integrations/highlevel/actions/delete-opportunity Deletes one opportunity by ID. `highlevel.deleteOpportunity` deletes one opportunity by ID. ```ts automations/highlevel-delete-opportunity.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Delete opportunity", () => { markSignificant( highlevel.deleteOpportunity({ id: "yWQobCRIhRguQtD2llvk", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `id` | `string` | Yes | HighLevel id value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `succeded` | `boolean` | No | Whether the operation succeeded. | This action calls `DELETE /opportunities/{id}` with HighLevel API version `2021-07-28` and requires `opportunities.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Delete schedule Source: https://docs.automate.ax/reference/integrations/highlevel/actions/delete-schedule Deletes one availability schedule. `highlevel.deleteSchedule` deletes one availability schedule. ```ts automations/highlevel-delete-schedule.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Delete schedule", () => { markSignificant( highlevel.deleteSchedule({ id: "sch123def456ghi789", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `id` | `string` | Yes | HighLevel id value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `success` | `boolean` | No | Whether the deletion was successful | This action calls `DELETE /calendars/schedules/{id}` with HighLevel API version `2021-04-15` and requires `calendars.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Find duplicate contact Source: https://docs.automate.ax/reference/integrations/highlevel/actions/find-duplicate-contact Finds an existing contact by email or phone before creation. `highlevel.findDuplicateContact` finds an existing contact by email or phone before creation. ```ts automations/highlevel-find-duplicate-contact.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Find duplicate contact", () => { markSignificant(highlevel.findDuplicateContact({ email: "ada@example.com" })) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `number` | `string` | No | HighLevel number value. | | `email` | `string` | No | HighLevel email value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output Returns HighLevel's duplicate-contact result, including the matching contact when one exists. This action calls `GET /contacts/search/duplicate` with HighLevel API version `2021-07-28` and requires `contacts.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Get appointment Source: https://docs.automate.ax/reference/integrations/highlevel/actions/get-appointment Retrieves one appointment by event ID. `highlevel.getAppointment` retrieves one appointment by event ID. ```ts automations/highlevel-get-appointment.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Get appointment", () => { markSignificant( highlevel.getAppointment({ eventId: "value", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `eventId` | `string` | Yes | HighLevel event id value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `event` | `object` | No | HighLevel event value. | This action calls `GET /calendars/events/appointments/{eventId}` with HighLevel API version `2021-04-15` and requires `calendars/events.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Get calendar Source: https://docs.automate.ax/reference/integrations/highlevel/actions/get-calendar Retrieves one calendar by ID. `highlevel.getCalendar` retrieves one calendar by ID. ```ts automations/highlevel-get-calendar.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Get calendar", () => { markSignificant( highlevel.getCalendar({ calendarId: "ocQHyuzHvysMo5N5VsXc", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `calendarId` | `string` | Yes | HighLevel calendar id value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `calendar` | `object` | Yes | HighLevel calendar value. | This action calls `GET /calendars/{calendarId}` with HighLevel API version `2021-04-15` and requires `calendars.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Get calendar free slots Source: https://docs.automate.ax/reference/integrations/highlevel/actions/get-calendar-free-slots Returns available slots for a calendar and date range. `highlevel.getCalendarFreeSlots` returns available slots for a calendar and date range. ```ts automations/highlevel-get-calendar-free-slots.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Get calendar free slots", () => { markSignificant( highlevel.getCalendarFreeSlots({ calendarId: "ocQHyuzHvysMo5N5VsXc", startDate: 1548898600000, endDate: 1601490599999, }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `calendarId` | `string` | Yes | HighLevel calendar id value. | | `startDate` | `number` | Yes | HighLevel start date value. | | `endDate` | `number` | Yes | HighLevel end date value. | | `timezone` | `string` | No | HighLevel timezone value. | | `userId` | `string` | No | HighLevel user id value. | | `userIds` | `string[]` | No | HighLevel user ids value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output Returns the provider's successful response. Actions whose endpoint has no response body return `null`. This action calls `GET /calendars/{calendarId}/free-slots` with HighLevel API version `2021-04-15` and requires `calendars.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Get contact Source: https://docs.automate.ax/reference/integrations/highlevel/actions/get-contact Retrieves one contact by ID. `highlevel.getContact` retrieves one contact by ID. ```ts automations/highlevel-get-contact.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Get contact", () => { markSignificant( highlevel.getContact({ contactId: "ocQHyuzHvysMo5N5VsXc", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `contactId` | `string` | Yes | HighLevel contact id value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `contact` | `object` | No | HighLevel contact value. | This action calls `GET /contacts/{contactId}` with HighLevel API version `2021-07-28` and requires `contacts.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Get contact note Source: https://docs.automate.ax/reference/integrations/highlevel/actions/get-contact-note Retrieves one note attached to a contact. `highlevel.getContactNote` retrieves one note attached to a contact. ```ts automations/highlevel-get-contact-note.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Get contact note", () => { markSignificant( highlevel.getContactNote({ contactId: "sx6wyHhbFdRXh302LLNR", id: "ocQHyuzHvysMo5N5VsXc", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `contactId` | `string` | Yes | HighLevel contact id value. | | `id` | `string` | Yes | HighLevel id value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `note` | `object` | No | HighLevel note value. | This action calls `GET /contacts/{contactId}/notes/{id}` with HighLevel API version `2021-07-28` and requires `contacts.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Get contact task Source: https://docs.automate.ax/reference/integrations/highlevel/actions/get-contact-task Retrieves one task attached to a contact. `highlevel.getContactTask` retrieves one task attached to a contact. ```ts automations/highlevel-get-contact-task.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Get contact task", () => { markSignificant( highlevel.getContactTask({ contactId: "sx6wyHhbFdRXh302LLNR", taskId: "ocQHyuzHvysMo5N5VsXc", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `contactId` | `string` | Yes | HighLevel contact id value. | | `taskId` | `string` | Yes | HighLevel task id value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `task` | `object` | No | HighLevel task value. | This action calls `GET /contacts/{contactId}/tasks/{taskId}` with HighLevel API version `2021-07-28` and requires `contacts.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Get conversation Source: https://docs.automate.ax/reference/integrations/highlevel/actions/get-conversation Retrieves one conversation by ID. `highlevel.getConversation` retrieves one conversation by ID. ```ts automations/highlevel-get-conversation.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Get conversation", () => { markSignificant( highlevel.getConversation({ conversationId: "tDtDnQdgm2LXpyiqYvZ6", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `conversationId` | `string` | Yes | HighLevel conversation id value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `contactId` | `string` | Yes | Unique identifier of the contact associated with this conversation | | `locationId` | `string` | Yes | Unique identifier of the business location where this conversation takes place | | `deleted` | `boolean` | Yes | Flag indicating if this conversation has been moved to trash/deleted | | `inbox` | `boolean` | Yes | Flag indicating if this conversation is currently in the main inbox view | | `type` | `number` | Yes | Communication channel type for this conversation: 1 (Phone), 2 (Email), 3 (Facebook Messenger), 4 (Review), 5 (Group SMS), 6 (Internal Chat - coming soon) | | `unreadCount` | `number` | Yes | Number of messages in this conversation that have not been read by the user | | `assignedTo` | `string` | No | Unique identifier of the team member currently responsible for handling this conversation | | `id` | `string` | Yes | Unique identifier for this specific conversation thread | | `starred` | `boolean` | No | Flag indicating if this conversation has been marked as important/starred by the user | This action calls `GET /conversations/{conversationId}` with HighLevel API version `2021-04-15` and requires `conversations.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Get location Source: https://docs.automate.ax/reference/integrations/highlevel/actions/get-location Retrieves the connected sub-account's location record. `highlevel.getLocation` retrieves the connected sub-account's location record. ```ts automations/highlevel-get-location.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Get location", () => { markSignificant(highlevel.getLocation({})) }) ``` ## Input This action has no user-supplied fields. The connected account supplies the HighLevel location. Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `location` | `object` | No | HighLevel location value. | This action calls `GET /locations/{locationId}` with HighLevel API version `2021-07-28` and requires `locations.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Get message Source: https://docs.automate.ax/reference/integrations/highlevel/actions/get-message Retrieves one message by ID. `highlevel.getMessage` retrieves one message by ID. ```ts automations/highlevel-get-message.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Get message", () => { markSignificant( highlevel.getMessage({ id: "value", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `id` | `string` | Yes | HighLevel id value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `id` | `string` | Yes | HighLevel id value. | | `type` | `number` | Yes | HighLevel type value. | | `messageType` | `TYPE_CALL \| TYPE_SMS \| TYPE_RCS \| TYPE_EMAIL \| TYPE_SMS_REVIEW_REQUEST \| TYPE_WEBCHAT \| TYPE_SMS_NO_SHOW_REQUEST \| TYPE_CAMPAIGN_SMS \| TYPE_CAMPAIGN_CALL \| TYPE_CAMPAIGN_EMAIL \| TYPE_CAMPAIGN_VOICEMAIL \| TYPE_FACEBOOK \| TYPE_CAMPAIGN_FACEBOOK \| TYPE_CAMPAIGN_MANUAL_CALL \| TYPE_CAMPAIGN_MANUAL_SMS \| TYPE_GMB \| TYPE_CAMPAIGN_GMB \| TYPE_REVIEW \| TYPE_INSTAGRAM \| TYPE_WHATSAPP \| TYPE_CUSTOM_SMS \| TYPE_CUSTOM_EMAIL \| TYPE_CUSTOM_PROVIDER_SMS \| TYPE_CUSTOM_PROVIDER_EMAIL \| TYPE_IVR_CALL \| TYPE_ACTIVITY_CONTACT \| TYPE_ACTIVITY_INVOICE \| TYPE_ACTIVITY_PAYMENT \| TYPE_ACTIVITY_OPPORTUNITY \| TYPE_LIVE_CHAT \| TYPE_LIVE_CHAT_INFO_MESSAGE \| TYPE_ACTIVITY_APPOINTMENT \| TYPE_FACEBOOK_COMMENT \| TYPE_INSTAGRAM_COMMENT \| TYPE_CUSTOM_CALL \| TYPE_INTERNAL_COMMENT \| TYPE_ACTIVITY_EMPLOYEE_ACTION_LOG \| TYPE_TIKTOK \| TYPE_TIKTOK_COMMENT \| TYPE_ACTIVITY_WHATSAPP \| TYPE_FORM_SUBMISSION \| TYPE_SMS_REACTION` | Yes | Type of the message as a string | | `locationId` | `string` | Yes | HighLevel location id value. | | `contactId` | `string` | Yes | HighLevel contact id value. | | `conversationId` | `string` | Yes | HighLevel conversation id value. | | `dateAdded` | `string` | Yes | HighLevel date added value. | | `body` | `string` | No | HighLevel body value. | | `direction` | `inbound \| outbound` | Yes | HighLevel direction value. | | `status` | `connected \| delivered \| failed \| opened \| pending \| read \| scheduled \| sent \| undelivered \| clicked \| opt_out \| queued` | No | HighLevel status value. | | `contentType` | `string` | Yes | HighLevel content type value. | | `attachments` | `string[]` | No | An array of attachment URLs. Attachments will be empty for Call and Voicemails, type 1 and 10. Please use get call recording API to fetch call recording and voicemails. | | `meta` | `object` | No | HighLevel meta value. | | `source` | `workflow \| bulk_actions \| campaign \| api \| app` | No | Message source | | `userId` | `string` | No | User Id | | `conversationProviderId` | `string` | No | Conversation Provider Id | | `chatWidgetId` | `string` | No | Chat Widget Id | This action calls `GET /conversations/messages/{id}` with HighLevel API version `2021-04-15` and requires `conversations/message.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Get message recording Source: https://docs.automate.ax/reference/integrations/highlevel/actions/get-message-recording Returns the recording for a voice or call message. `highlevel.getMessageRecording` returns the recording for a voice or call message. ```ts automations/highlevel-get-message-recording.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Get message recording", () => { markSignificant( highlevel.getMessageRecording({ messageId: "tDtDnQdgm2LXpyiqYvZ6", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `messageId` | `string` | Yes | HighLevel message id value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `contentType` | `string` | Yes | Recording media type returned by HighLevel, usually `audio/x-wav`. | | `data` | `string` | Yes | Base64-encoded recording bytes. | This action calls `GET /conversations/messages/{messageId}/locations/{locationId}/recording` with HighLevel API version `2021-04-15` and requires `conversations/message.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Get message transcription Source: https://docs.automate.ax/reference/integrations/highlevel/actions/get-message-transcription Returns the transcription for a supported message. `highlevel.getMessageTranscription` returns the transcription for a supported message. ```ts automations/highlevel-get-message-transcription.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Get message transcription", () => { markSignificant( highlevel.getMessageTranscription({ messageId: "tDtDnQdgm2LXpyiqYvZ6", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `messageId` | `string` | Yes | HighLevel message id value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `mediaChannel` | `number` | Yes | Media channel describes the user interaction channel | | `sentenceIndex` | `number` | Yes | Index of the sentence in the transcription | | `startTime` | `number` | Yes | Start time of the sentence in milliseconds | | `endTime` | `number` | Yes | End time of the sentence in milliseconds | | `transcript` | `string` | Yes | Transcript of the sentence | | `confidence` | `number` | Yes | Confidence of the transcription | This action calls `GET /conversations/locations/{locationId}/messages/{messageId}/transcription` with HighLevel API version `2021-04-15` and requires `conversations/message.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Get opportunity Source: https://docs.automate.ax/reference/integrations/highlevel/actions/get-opportunity Retrieves one opportunity by ID. `highlevel.getOpportunity` retrieves one opportunity by ID. ```ts automations/highlevel-get-opportunity.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Get opportunity", () => { markSignificant( highlevel.getOpportunity({ id: "yWQobCRIhRguQtD2llvk", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `id` | `string` | Yes | HighLevel id value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `opportunity` | `object` | No | HighLevel opportunity value. | This action calls `GET /opportunities/{id}` with HighLevel API version `2021-07-28` and requires `opportunities.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Get schedule Source: https://docs.automate.ax/reference/integrations/highlevel/actions/get-schedule Retrieves one availability schedule by ID. `highlevel.getSchedule` retrieves one availability schedule by ID. ```ts automations/highlevel-get-schedule.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Get schedule", () => { markSignificant( highlevel.getSchedule({ id: "IkqiJlXJ7o9h61tCHHod", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `id` | `string` | Yes | HighLevel id value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `schedule` | `JSON value` | Yes | Schedule | This action calls `GET /calendars/schedules/{id}` with HighLevel API version `2021-04-15` and requires `calendars.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Get user Source: https://docs.automate.ax/reference/integrations/highlevel/actions/get-user Retrieves one user by ID. `highlevel.getUser` retrieves one user by ID. ```ts automations/highlevel-get-user.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Get user", () => { markSignificant( highlevel.getUser({ userId: "ve9EPM428h8vShlRW1KT", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `userId` | `string` | Yes | HighLevel user id value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `id` | `string` | No | HighLevel id value. | | `name` | `string` | No | HighLevel name value. | | `firstName` | `string` | No | HighLevel first name value. | | `lastName` | `string` | No | HighLevel last name value. | | `email` | `string` | No | HighLevel email value. | | `phone` | `string` | No | HighLevel phone value. | | `extension` | `string` | No | HighLevel extension value. | | `permissions` | `object` | No | HighLevel permissions value. | | `scopes` | `campaigns.readonly \| campaigns.write \| calendars.readonly \| calendars/events.write \| calendars/groups.write \| calendars.write \| contacts.write \| contacts/bulkActions.write \| workflows.readonly \| workflows.write \| triggers.write \| funnels.write \| forms.write \| surveys.write \| quizzes.write \| websites.write \| medias.write \| medias.readonly \| opportunities.write \| opportunities/leadValue.readonly \| opportunities/bulkActions.write \| reporting/phone.readonly \| reporting/adwords.readonly \| reporting/facebookAds.readonly \| reporting/attributions.readonly \| prospecting/auditReport.write \| reporting/reports.readonly \| reporting/agent.readonly \| reporting/reports.write \| reporting/stats.export \| payments.write \| payments/records.write \| payments/orders.readonly \| payments/orders.export \| payments/orders.import \| payments/orders.collectPayment \| payments/subscriptions.readonly \| payments/subscriptions.write \| payments/subscriptions.update \| payments/subscriptions.export \| payments/subscriptions.pauseResumeCancel \| payments/subscriptions.sharePaymentMethod \| payments/transactions.readonly \| payments/transactions.export \| payments/transactions.import \| payments/transactions.refund \| payments/transactions.viewReceipts \| payments/taxesSettings.readonly \| payments/settings.readonly \| payments/taxesSettings.updateInclusiveExclusive \| payments/taxesSettings.manageRates \| payments/taxesSettings.configureAutomatic \| products.readonly \| products.write \| products.delete \| products.duplicate \| products.bulkActions \| payments/settings.write \| payments/settings.configureReceipt \| payments/settings.configureSubscription \| invoices.write \| invoices.readonly \| invoices/schedule.readonly \| invoices/schedule.write \| invoices/template.readonly \| invoices/template.write \| reputation/review.write \| reputation/listing.write \| reputation/reviewsAIAgents.write \| reputation/gbp.write \| conversations.write \| conversations.readonly \| conversations/message.readonly \| conversations/message.write \| contentAI.write \| dashboard/stats.readonly \| locations/tags.write \| locations/tags.readonly \| marketing.write \| eliza.write \| settings.write \| socialplanner/post.write \| socialplanner/account.readonly \| socialplanner/account.write \| socialplanner/category.readonly \| socialplanner/category.write \| socialplanner/csv.readonly \| socialplanner/csv.write \| socialplanner/group.write \| socialplanner/hashtag.readonly \| socialplanner/hashtag.write \| socialplanner/oauth.readonly \| socialplanner/oauth.write \| socialplanner/post.readonly \| socialplanner/recurring.readonly \| socialplanner/recurring.write \| socialplanner/review.readonly \| socialplanner/review.write \| socialplanner/rss.readonly \| socialplanner/rss.write \| socialplanner/search.readonly \| socialplanner/setting.readonly \| socialplanner/setting.write \| socialplanner/stat.readonly \| socialplanner/tag.readonly \| socialplanner/tag.write \| socialplanner/filters.readonly \| socialplanner/medias.readonly \| socialplanner/medias.write \| socialplanner/watermarks.readonly \| socialplanner/watermarks.write \| socialplanner/metatag.readonly \| socialplanner/facebook.readonly \| socialplanner/linkedin.readonly \| socialplanner/twitter.readonly \| socialplanner/notification.readonly \| socialplanner/notification.write \| socialplanner/snapshot.readonly \| socialplanner/snapshot.write \| marketing/affiliate.write \| blogs.write \| membership.write \| communities.write \| gokollab.write \| certificates.write \| certificates.readonly \| adPublishing.write \| adPublishing.readonly \| prospecting.write \| prospecting.readonly \| prospecting/reports.readonly \| private-integration-location.readonly \| private-integration-location.write \| private-integration-company.readonly \| private-integration-company.write \| native-integrations.readonly \| native-integrations.write \| wordpress.write \| wordpress.read \| custom-menu-link.write \| qrcodes.write \| users/team-management.write \| users/team-management.readonly \| loginas.write \| users-sso-login-management.write \| users-sso-login-management.readonly \| sso-config.write \| snapshots/api.readonly \| snapshots/api.create \| snapshots/api.edit \| snapshots/api.push \| snapshots/api.refresh \| snapshots/api.share \| snapshots/api.delete \| internaltools.location-transfer.write \| internaltools.location-transfer.readonly \| affiliateportal.write \| affiliateportal.readonly \| companies.write \| internaltools.billing.write \| internaltools.billing.readonly \| internaltools.billing-common.readonly \| internaltools.billing-common.write \| voice-ai-agents.write \| voice-ai-agents.readonly \| voice-ai-common.readonly \| voice-ai-common.write \| voice-ai-agent-goals.readonly \| voice-ai-agent-goals.write \| voice-ai-dashboard.readonly \| agency/launchpad.write \| agency/launchpad.readonly \| launchpad/location.write \| launchpad/location.readonly \| text-ai-agents.write \| text-ai-agent-goals.readonly \| text-ai-agent-goals.write \| text-ai-agent-training.write \| text-ai-agents-dashboard.readonly \| locations.create \| locations.delete \| locations.export.list \| locations.features-limits.manage \| locations.pause-resume \| locations.agency-subaccounts.manage \| locations.billing.manage \| locations.details.manage \| audit-logs.readonly \| audit-logs.export` | No | HighLevel scopes value. | | `roles` | `object` | No | HighLevel roles value. | | `lcPhone` | `object` | No | LC Phone Inbound Phone Numbers | | `platformLanguage` | `en_US \| es \| fr_CA \| fr_FR \| nl \| de \| pt_PT \| pt_BR \| it \| sv \| da \| fi \| no` | No | Platform language preference for the user | This action calls `GET /users/{userId}` with HighLevel API version `2021-07-28` and requires `users.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # List appointments Source: https://docs.automate.ax/reference/integrations/highlevel/actions/list-appointments Lists calendar events and appointments in a date range. `highlevel.listAppointments` lists calendar events and appointments in a date range. ```ts automations/highlevel-list-appointments.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("List appointments", () => { markSignificant( highlevel.listAppointments({ calendarId: "BqTwX8QFwXzpegMve9EQ", startTime: "1680373800000", endTime: "1680978599999", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `userId` | `string` | No | HighLevel user id value. | | `calendarId` | `string` | No | HighLevel calendar id value. | | `groupId` | `string` | No | HighLevel group id value. | | `startTime` | `string` | Yes | HighLevel start time value. | | `endTime` | `string` | Yes | HighLevel end time value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. Provide at least one selector: `calendarId`, `groupId`, or `userId`. ## Output | Field | Type | Required | Description | | - | - | - | - | | `events` | `object[]` | No | HighLevel events value. | This action calls `GET /calendars/events` with HighLevel API version `2021-04-15` and requires `calendars/events.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # List blocked slots Source: https://docs.automate.ax/reference/integrations/highlevel/actions/list-blocked-slots Lists blocked calendar slots in a date range. `highlevel.listBlockedSlots` lists blocked calendar slots in a date range. ```ts automations/highlevel-list-blocked-slots.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("List blocked slots", () => { markSignificant( highlevel.listBlockedSlots({ calendarId: "BqTwX8QFwXzpegMve9EQ", startTime: "1680373800000", endTime: "1680978599999", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `userId` | `string` | No | HighLevel user id value. | | `calendarId` | `string` | No | HighLevel calendar id value. | | `groupId` | `string` | No | HighLevel group id value. | | `startTime` | `string` | Yes | HighLevel start time value. | | `endTime` | `string` | Yes | HighLevel end time value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. Provide at least one selector: `calendarId`, `groupId`, or `userId`. ## Output | Field | Type | Required | Description | | - | - | - | - | | `events` | `object[]` | No | HighLevel events value. | This action calls `GET /calendars/blocked-slots` with HighLevel API version `2021-04-15` and requires `calendars/events.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # List calendars Source: https://docs.automate.ax/reference/integrations/highlevel/actions/list-calendars Lists calendars in the connected sub-account. `highlevel.listCalendars` lists calendars in the connected sub-account. ```ts automations/highlevel-list-calendars.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("List calendars", () => { markSignificant(highlevel.listCalendars({})) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `groupId` | `string` | No | HighLevel group id value. | | `showDrafted` | `boolean` | No | HighLevel show drafted value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `calendars` | `object[]` | No | HighLevel calendars value. | This action calls `GET /calendars/` with HighLevel API version `2021-04-15` and requires `calendars.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # List campaigns Source: https://docs.automate.ax/reference/integrations/highlevel/actions/list-campaigns Lists campaigns in the connected sub-account. `highlevel.listCampaigns` lists campaigns in the connected sub-account. ```ts automations/highlevel-list-campaigns.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("List campaigns", () => { markSignificant(highlevel.listCampaigns({})) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `status` | `string` | No | HighLevel status value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `campaigns` | `object[]` | No | HighLevel campaigns value. | This action calls `GET /campaigns/` with HighLevel API version `2021-07-28` and requires `campaigns.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # List contact notes Source: https://docs.automate.ax/reference/integrations/highlevel/actions/list-contact-notes Lists notes attached to one contact. `highlevel.listContactNotes` lists notes attached to one contact. ```ts automations/highlevel-list-contact-notes.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("List contact notes", () => { markSignificant( highlevel.listContactNotes({ contactId: "sx6wyHhbFdRXh302LLNR", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `contactId` | `string` | Yes | HighLevel contact id value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `notes` | `object[]` | No | HighLevel notes value. | This action calls `GET /contacts/{contactId}/notes` with HighLevel API version `2021-07-28` and requires `contacts.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # List contact tasks Source: https://docs.automate.ax/reference/integrations/highlevel/actions/list-contact-tasks Lists tasks attached to one contact. `highlevel.listContactTasks` lists tasks attached to one contact. ```ts automations/highlevel-list-contact-tasks.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("List contact tasks", () => { markSignificant( highlevel.listContactTasks({ contactId: "sx6wyHhbFdRXh302LLNR", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `contactId` | `string` | Yes | HighLevel contact id value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `tasks` | `object[]` | No | HighLevel tasks value. | This action calls `GET /contacts/{contactId}/tasks` with HighLevel API version `2021-07-28` and requires `contacts.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # List contacts Source: https://docs.automate.ax/reference/integrations/highlevel/actions/list-contacts Lists contacts in the connected sub-account. `highlevel.listContacts` lists contacts in the connected sub-account. ```ts automations/highlevel-list-contacts.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("List contacts", () => { markSignificant(highlevel.listContacts({})) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `startAfterId` | `string` | No | HighLevel start after id value. | | `startAfter` | `number` | No | HighLevel start after value. | | `query` | `string` | No | HighLevel query value. | | `limit` | `number` | No | HighLevel limit value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `contacts` | `object[]` | No | HighLevel contacts value. | | `count` | `number` | No | HighLevel count value. | This action calls `GET /contacts/` with HighLevel API version `2021-07-28` and requires `contacts.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # List form submissions Source: https://docs.automate.ax/reference/integrations/highlevel/actions/list-form-submissions Lists form submissions with date and pagination filters. `highlevel.listFormSubmissions` lists form submissions with date and pagination filters. ```ts automations/highlevel-list-form-submissions.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("List form submissions", () => { markSignificant(highlevel.listFormSubmissions({})) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `page` | `number` | No | Page number. Defaults to `1`. | | `limit` | `number` | No | Results per page. Defaults to `20`. | | `formId` | `string` | No | HighLevel form id value. | | `q` | `string` | No | HighLevel q value. | | `startAt` | `string` | No | HighLevel start at value. | | `endAt` | `string` | No | HighLevel end at value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `submissions` | `object[]` | No | HighLevel submissions value. | | `meta` | `object` | No | HighLevel meta value. | This action calls `GET /forms/submissions` with HighLevel API version `2021-07-28` and requires `forms.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # List forms Source: https://docs.automate.ax/reference/integrations/highlevel/actions/list-forms Lists forms in the connected sub-account. `highlevel.listForms` lists forms in the connected sub-account. ```ts automations/highlevel-list-forms.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("List forms", () => { markSignificant(highlevel.listForms({})) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `skip` | `number` | No | HighLevel skip value. | | `limit` | `number` | No | HighLevel limit value. | | `type` | `string` | No | HighLevel type value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `forms` | `object[]` | No | HighLevel forms value. | | `total` | `number` | No | Total number of forms | This action calls `GET /forms/` with HighLevel API version `2021-07-28` and requires `forms.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # List messages Source: https://docs.automate.ax/reference/integrations/highlevel/actions/list-messages Lists messages in one conversation. `highlevel.listMessages` lists messages in one conversation. ```ts automations/highlevel-list-messages.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("List messages", () => { markSignificant( highlevel.listMessages({ conversationId: "tDtDnQdgm2LXpyiqYvZ6", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `conversationId` | `string` | Yes | HighLevel conversation id value. | | `lastMessageId` | `string` | No | HighLevel last message id value. | | `limit` | `number` | No | HighLevel limit value. | | `type` | `TYPE_CALL \| TYPE_SMS \| TYPE_RCS \| TYPE_EMAIL \| TYPE_FACEBOOK \| TYPE_GMB \| TYPE_INSTAGRAM \| TYPE_WHATSAPP \| TYPE_ACTIVITY_APPOINTMENT \| TYPE_ACTIVITY_CONTACT \| TYPE_ACTIVITY_INVOICE \| TYPE_ACTIVITY_PAYMENT \| TYPE_ACTIVITY_OPPORTUNITY \| TYPE_LIVE_CHAT \| TYPE_INTERNAL_COMMENTS \| TYPE_ACTIVITY_EMPLOYEE_ACTION_LOG \| TYPE_TIKTOK \| TYPE_ACTIVITY_WHATSAPP \| TYPE_FORM_SUBMISSION` | No | HighLevel type value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `lastMessageId` | `string` | Yes | Id of the last message in the messages array | | `nextPage` | `boolean` | Yes | Next page value true indicates only 20 message is in the response. Rest of the messages are in the next page. Please use the lastMessageId value in the query to get the next page messages | | `messages` | `object[]` | Yes | Array of messages | This action calls `GET /conversations/{conversationId}/messages` with HighLevel API version `2021-04-15` and requires `conversations/message.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # List opportunity lost reasons Source: https://docs.automate.ax/reference/integrations/highlevel/actions/list-opportunity-lost-reasons Lists configured reasons for lost opportunities. `highlevel.listOpportunityLostReasons` lists configured reasons for lost opportunities. ```ts automations/highlevel-list-opportunity-lost-reasons.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("List opportunity lost reasons", () => { markSignificant(highlevel.listOpportunityLostReasons({})) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `name` | `string` | No | HighLevel name value. | | `deleted` | `boolean` | No | HighLevel deleted value. | | `query` | `string` | No | HighLevel query value. | | `skip` | `number` | No | HighLevel skip value. | | `limit` | `number` | No | HighLevel limit value. | | `getCount` | `boolean` | No | HighLevel get count value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `lostReasons` | `object[]` | No | HighLevel lost reasons value. | | `total` | `number` | No | HighLevel total value. | This action calls `GET /opportunities/lost-reason` with HighLevel API version `2021-07-28` and requires `opportunities.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # List pipelines Source: https://docs.automate.ax/reference/integrations/highlevel/actions/list-pipelines Lists the connected sub-account's opportunity pipelines and stages. `highlevel.listPipelines` lists the connected sub-account's opportunity pipelines and stages. ```ts automations/highlevel-list-pipelines.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("List pipelines", () => { markSignificant(highlevel.listPipelines({})) }) ``` ## Input This action has no user-supplied fields. The connected account supplies the HighLevel location. Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `pipelines` | `object[]` | No | HighLevel pipelines value. | This action calls `GET /opportunities/pipelines` with HighLevel API version `2021-07-28` and requires `opportunities.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # List schedules Source: https://docs.automate.ax/reference/integrations/highlevel/actions/list-schedules Lists availability schedules for the connected sub-account. `highlevel.listSchedules` lists availability schedules for the connected sub-account. ```ts automations/highlevel-list-schedules.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("List schedules", () => { markSignificant( highlevel.listSchedules({ userId: "IkqiJlXJ7o9h61tCHHod", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `userId` | `string` | Yes | HighLevel user id value. | | `calendarId` | `string` | No | HighLevel calendar id value. | | `skip` | `number` | No | HighLevel skip value. | | `limit` | `number` | No | HighLevel limit value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `schedules` | `object[]` | Yes | Array of schedules | This action calls `GET /calendars/schedules/search` with HighLevel API version `2021-04-15` and requires `calendars.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # List survey submissions Source: https://docs.automate.ax/reference/integrations/highlevel/actions/list-survey-submissions Lists survey submissions with date and pagination filters. `highlevel.listSurveySubmissions` lists survey submissions with date and pagination filters. ```ts automations/highlevel-list-survey-submissions.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("List survey submissions", () => { markSignificant(highlevel.listSurveySubmissions({})) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `page` | `number` | No | HighLevel page value. | | `limit` | `number` | No | HighLevel limit value. | | `surveyId` | `string` | No | HighLevel survey id value. | | `q` | `string` | No | HighLevel q value. | | `startAt` | `string` | No | HighLevel start at value. | | `endAt` | `string` | No | HighLevel end at value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `submissions` | `object[]` | No | HighLevel submissions value. | | `meta` | `object` | No | HighLevel meta value. | This action calls `GET /surveys/submissions` with HighLevel API version `2021-07-28` and requires `surveys.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # List surveys Source: https://docs.automate.ax/reference/integrations/highlevel/actions/list-surveys Lists surveys in the connected sub-account. `highlevel.listSurveys` lists surveys in the connected sub-account. ```ts automations/highlevel-list-surveys.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("List surveys", () => { markSignificant(highlevel.listSurveys({})) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `skip` | `number` | No | HighLevel skip value. | | `limit` | `number` | No | HighLevel limit value. | | `type` | `string` | No | HighLevel type value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `surveys` | `object[]` | No | HighLevel surveys value. | | `total` | `number` | No | Number of surveys | This action calls `GET /surveys/` with HighLevel API version `2021-07-28` and requires `surveys.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # List users Source: https://docs.automate.ax/reference/integrations/highlevel/actions/list-users Lists users assigned to the connected sub-account. `highlevel.listUsers` lists users assigned to the connected sub-account. ```ts automations/highlevel-list-users.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("List users", () => { markSignificant(highlevel.listUsers({})) }) ``` ## Input This action has no user-supplied fields. The connected account supplies the HighLevel location. Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `users` | `object[]` | No | HighLevel users value. | This action calls `GET /users/` with HighLevel API version `2021-07-28` and requires `users.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # List workflows Source: https://docs.automate.ax/reference/integrations/highlevel/actions/list-workflows Lists workflows in the connected sub-account. `highlevel.listWorkflows` lists workflows in the connected sub-account. ```ts automations/highlevel-list-workflows.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("List workflows", () => { markSignificant(highlevel.listWorkflows({})) }) ``` ## Input This action has no user-supplied fields. The connected account supplies the HighLevel location. Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `workflows` | `object[]` | No | HighLevel workflows value. | This action calls `GET /workflows/` with HighLevel API version `2021-07-28` and requires `workflows.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Remove contact from campaign Source: https://docs.automate.ax/reference/integrations/highlevel/actions/remove-contact-from-campaign Removes one contact from a campaign. `highlevel.removeContactFromCampaign` removes one contact from a campaign. ```ts automations/highlevel-remove-contact-from-campaign.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Remove contact from campaign", () => { markSignificant( highlevel.removeContactFromCampaign({ contactId: "3bZD1nQzbul0MCancbQD", campaignId: "Y2I9XM7aO1hncuSOlc9L", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `contactId` | `string` | Yes | HighLevel contact id value. | | `campaignId` | `string` | Yes | HighLevel campaign id value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `succeded` | `boolean` | No | Whether the operation succeeded. | This action calls `DELETE /contacts/{contactId}/campaigns/{campaignId}` with HighLevel API version `2021-07-28` and requires `contacts.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Remove contact from workflow Source: https://docs.automate.ax/reference/integrations/highlevel/actions/remove-contact-from-workflow Removes one contact from a workflow. `highlevel.removeContactFromWorkflow` removes one contact from a workflow. ```ts automations/highlevel-remove-contact-from-workflow.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Remove contact from workflow", () => { markSignificant( highlevel.removeContactFromWorkflow({ contactId: "sx6wyHhbFdRXh302LLNR", workflowId: "sx6wyHhbFdRXh302LLNR", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `contactId` | `string` | Yes | HighLevel contact id value. | | `workflowId` | `string` | Yes | HighLevel workflow id value. | | `eventStartTime` | `string` | No | HighLevel event start time value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `succeded` | `boolean` | No | Whether the operation succeeded. | This action calls `DELETE /contacts/{contactId}/workflow/{workflowId}` with HighLevel API version `2021-07-28` and requires `contacts.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Remove contact tags Source: https://docs.automate.ax/reference/integrations/highlevel/actions/remove-contact-tags Removes tags from one contact. `highlevel.removeContactTags` removes tags from one contact. ```ts automations/highlevel-remove-contact-tags.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Remove contact tags", () => { markSignificant( highlevel.removeContactTags({ contactId: "sx6wyHhbFdRXh302LLNR", tags: [], }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `contactId` | `string` | Yes | HighLevel contact id value. | | `tags` | `string[]` | Yes | HighLevel tags value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `tags` | `string[]` | No | HighLevel tags value. | This action calls `DELETE /contacts/{contactId}/tags` with HighLevel API version `2021-07-28` and requires `contacts.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Search contacts Source: https://docs.automate.ax/reference/integrations/highlevel/actions/search-contacts Searches contacts with HighLevel's advanced filters and sorting. `highlevel.searchContacts` searches contacts with HighLevel's advanced filters and sorting. ```ts automations/highlevel-search-contacts.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Search contacts", () => { markSignificant( highlevel.searchContacts({ pageLimit: 100, query: "Ada", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `pageLimit` | `number` | Yes | Results per page, from 1 through 500. | | `page` | `number` | No | Page number for results within the first 10,000 contacts. | | `searchAfter` | `JSON value[]` | No | Cursor returned by HighLevel for results beyond 10,000 contacts. Do not combine it with `page`. | | `query` | `string` | No | Search text, up to 75 characters. | | `filters` | `object[]` | No | Advanced filters with `field`, `operator`, and `value`; top-level filters are combined with AND. | | `sort` | `object[]` | No | Sort entries with `field` and `direction` set to `asc` or `desc`. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output Returns HighLevel's contact search response, including matching contacts, pagination metadata, total count, and trace metadata when supplied. This action calls `POST /contacts/search` with HighLevel API version `2021-07-28` and requires `contacts.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Search conversations Source: https://docs.automate.ax/reference/integrations/highlevel/actions/search-conversations Searches conversations by contact, assignment, status, and pagination. `highlevel.searchConversations` searches conversations by contact, assignment, status, and pagination. ```ts automations/highlevel-search-conversations.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Search conversations", () => { markSignificant(highlevel.searchConversations({})) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `contactId` | `string` | No | HighLevel contact id value. | | `assignedTo` | `string` | No | HighLevel assigned to value. | | `followers` | `string` | No | HighLevel followers value. | | `mentions` | `string` | No | HighLevel mentions value. | | `query` | `string` | No | HighLevel query value. | | `sort` | `asc \| desc` | No | HighLevel sort value. | | `startAfterDate` | `any` | No | HighLevel start after date value. | | `id` | `string` | No | HighLevel id value. | | `limit` | `number` | No | HighLevel limit value. | | `lastMessageType` | `TYPE_CALL \| TYPE_SMS \| TYPE_RCS \| TYPE_EMAIL \| TYPE_SMS_REVIEW_REQUEST \| TYPE_WEBCHAT \| TYPE_SMS_NO_SHOW_REQUEST \| TYPE_CAMPAIGN_SMS \| TYPE_CAMPAIGN_CALL \| TYPE_CAMPAIGN_EMAIL \| TYPE_CAMPAIGN_VOICEMAIL \| TYPE_FACEBOOK \| TYPE_CAMPAIGN_FACEBOOK \| TYPE_CAMPAIGN_MANUAL_CALL \| TYPE_CAMPAIGN_MANUAL_SMS \| TYPE_GMB \| TYPE_CAMPAIGN_GMB \| TYPE_REVIEW \| TYPE_INSTAGRAM \| TYPE_WHATSAPP \| TYPE_CUSTOM_SMS \| TYPE_CUSTOM_EMAIL \| TYPE_CUSTOM_PROVIDER_SMS \| TYPE_CUSTOM_PROVIDER_EMAIL \| TYPE_IVR_CALL \| TYPE_ACTIVITY_CONTACT \| TYPE_ACTIVITY_INVOICE \| TYPE_ACTIVITY_PAYMENT \| TYPE_ACTIVITY_OPPORTUNITY \| TYPE_LIVE_CHAT \| TYPE_LIVE_CHAT_INFO_MESSAGE \| TYPE_ACTIVITY_APPOINTMENT \| TYPE_FACEBOOK_COMMENT \| TYPE_INSTAGRAM_COMMENT \| TYPE_CUSTOM_CALL \| TYPE_INTERNAL_COMMENT \| TYPE_ACTIVITY_EMPLOYEE_ACTION_LOG \| TYPE_TIKTOK \| TYPE_TIKTOK_COMMENT \| TYPE_ACTIVITY_WHATSAPP \| TYPE_FORM_SUBMISSION \| TYPE_SMS_REACTION` | No | HighLevel last message type value. | | `lastMessageAction` | `automated \| manual` | No | HighLevel last message action value. | | `lastMessageDirection` | `inbound \| outbound` | No | HighLevel last message direction value. | | `status` | `all \| read \| unread \| starred \| recents` | No | HighLevel status value. | | `sortBy` | `last_manual_message_date \| last_message_date \| score_profile \| overdue_at \| due_at` | No | HighLevel sort by value. | | `sortScoreProfile` | `string` | No | HighLevel sort score profile value. | | `scoreProfile` | `string` | No | HighLevel score profile value. | | `scoreProfileMin` | `number` | No | HighLevel score profile min value. | | `scoreProfileMax` | `number` | No | HighLevel score profile max value. | | `startDate` | `number` | No | HighLevel start date value. | | `endDate` | `number` | No | HighLevel end date value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `conversations` | `object[]` | Yes | The list of all conversations found for the given query | | `total` | `number` | Yes | Total Number of results found for the given query | This action calls `GET /conversations/search` with HighLevel API version `2021-04-15` and requires `conversations.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Search opportunities Source: https://docs.automate.ax/reference/integrations/highlevel/actions/search-opportunities Searches opportunities with pipeline, status, owner, and pagination filters. `highlevel.searchOpportunities` searches opportunities with pipeline, status, owner, and pagination filters. ```ts automations/highlevel-search-opportunities.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Search opportunities", () => { markSignificant( highlevel.searchOpportunities({ pipelineId: "bCkKGpDsyPP4peuKowkG", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `q` | `string` | No | HighLevel q value. | | `pipelineId` | `string` | No | HighLevel pipeline ID. | | `pipelineStageId` | `string` | No | HighLevel pipeline stage ID. | | `contactId` | `string` | No | HighLevel contact ID. | | `status` | `open \| won \| lost \| abandoned \| all` | No | HighLevel status value. | | `assignedTo` | `string` | No | HighLevel assigned user ID. | | `campaignId` | `string` | No | HighLevel campaign id value. | | `id` | `string` | No | HighLevel id value. | | `order` | `string` | No | HighLevel order value. | | `endDate` | `string` | No | HighLevel end date value. | | `startAfter` | `string` | No | HighLevel start after value. | | `startAfterId` | `string` | No | HighLevel start after id value. | | `date` | `string` | No | HighLevel date value. | | `country` | `string` | No | HighLevel country value. | | `page` | `number` | No | HighLevel page value. | | `limit` | `number` | No | HighLevel limit value. | | `getTasks` | `boolean` | No | HighLevel get tasks value. | | `getNotes` | `boolean` | No | HighLevel get notes value. | | `getCalendarEvents` | `boolean` | No | HighLevel get calendar events value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `opportunities` | `object[]` | No | HighLevel opportunities value. | | `meta` | `object` | No | HighLevel meta value. | | `aggregations` | `object` | No | HighLevel aggregations value. | This action calls `GET /opportunities/search` with HighLevel API version `2021-07-28` and requires `opportunities.readonly`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Send message Source: https://docs.automate.ax/reference/integrations/highlevel/actions/send-message Sends a supported message through a contact conversation. `highlevel.sendMessage` sends a supported message through a contact conversation. ```ts automations/highlevel-send-message.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Send message", () => { markSignificant( highlevel.sendMessage({ type: "SMS", contactId: "abc123def456", message: "Your appointment is confirmed.", status: "delivered", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `type` | `SMS \| Email \| WhatsApp \| IG \| FB \| Custom \| Live_Chat \| InternalComment` | Yes | Type of message being sent | | `contactId` | `string` | Yes | ID of the contact receiving the message | | `appointmentId` | `string` | No | ID of the associated appointment | | `attachments` | `string[]` | No | Array of attachment URLs | | `emailFrom` | `string` | No | Email address to send from | | `emailCc` | `string[]` | No | Array of CC email addresses | | `emailBcc` | `string[]` | No | Array of BCC email addresses | | `html` | `string` | No | HTML content of the message | | `message` | `string` | No | Text content of the message | | `subject` | `string` | No | Subject line for email messages | | `replyMessageId` | `string` | No | ID of message being replied to | | `templateId` | `string` | No | ID of message template | | `threadId` | `string` | No | ID of message thread. For email messages, this is the message ID that contains multiple email messages in the thread | | `scheduledTimestamp` | `number` | No | UTC Timestamp (in seconds) at which the message should be scheduled | | `conversationProviderId` | `string` | No | ID of conversation provider | | `emailTo` | `string` | No | Email address to send to, if different from contact's primary email. This should be a valid email address associated with the contact. | | `customSubtypeId` | `string` | No | Custom subtype ID for email opt-out preferences. Only applies to email messages. | | `emailReplyMode` | `reply \| reply_all` | No | Mode for email replies | | `fromNumber` | `string` | No | Phone number used as the sender number for outbound messages | | `toNumber` | `string` | No | Recipient phone number for outbound messages | | `forward` | `JSON value` | No | Forwarding configuration for emails | | `status` | `delivered \| failed \| pending \| read` | Yes | Message status | | `usesNativeSchedulingAi` | `boolean` | No | Whether the scheduled email uses native AI for the email scheduling | | `optimizationPeriod` | `24h \| 48h \| 72h` | No | Optimization period in hours (24, 48, or 72) | | `mentions` | `string[]` | No | User IDs mentioned by an internal comment. | | `userId` | `string` | No | User attributed as the internal-comment author. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `conversationId` | `string` | Yes | Conversation ID. | | `emailMessageId` | `string` | No | This contains the email message id (only for Email type). Use this ID to send inbound replies to GHL to create a threaded email. | | `messageId` | `string` | Yes | This is the main Message ID | | `messageIds` | `string[]` | No | When sending via the GMB channel, we will be returning list of `messageIds` instead of single `messageId`. | | `msg` | `string` | No | Additional response message when sending a workflow message | | `threadId` | `string` | No | Email conversation thread ID. | | `forwardData` | `JSON value` | No | Optional metadata for forwarded email | | `status` | `delivered \| failed \| pending \| read` | No | Message status, when HighLevel returns one. | This action calls `POST /conversations/messages` with HighLevel API version `2021-04-15` and requires `conversations/message.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. Automate.ax does not automatically replay this create or send operation after an indeterminate transport failure. # Update appointment Source: https://docs.automate.ax/reference/integrations/highlevel/actions/update-appointment Updates one calendar appointment. `highlevel.updateAppointment` updates one calendar appointment. ```ts automations/highlevel-update-appointment.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Update appointment", () => { markSignificant( highlevel.updateAppointment({ eventId: "value", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `eventId` | `string` | Yes | HighLevel event id value. | | `title` | `string` | No | Title | | `meetingLocationType` | `custom \| zoom \| gmeet \| phone \| address \| ms_teams \| google` | No | Meeting location type. - If `address` is provided in the request body, the `meetingLocationType` defaults to **custom**. | | `meetingLocationId` | `string` | No | The unique identifier for the meeting location. - This value can be found in `calendar.locationConfigurations`or `calendar.teamMembers[].locationConfigurations` | | `overrideLocationConfig` | `boolean` | No | Flag to override location config - **false** - If only `meetingLocationId` is provided - **true** - If only `meetingLocationType` is provided | | `appointmentStatus` | `new \| confirmed \| cancelled \| showed \| noshow \| invalid` | No | HighLevel appointment status value. | | `assignedUserId` | `string` | No | Assigned User Id | | `description` | `string` | No | Appointment Description | | `address` | `string` | No | Appointment Address | | `ignoreDateRange` | `boolean` | No | If set to true, the minimum scheduling notice and date range would be ignored | | `toNotify` | `boolean` | No | If set to false, the automations will not run | | `ignoreFreeSlotValidation` | `boolean` | No | If true the time slot validation would be avoided for any appointment creation (even the ignoreDateRange) | | `rrule` | `string` | No | iCalendar RFC 5545 recurrence rule. HighLevel derives instance IDs from the event start time and applies the rule only when free-slot validation is disabled. | | `calendarId` | `string` | No | Calendar Id | | `startTime` | `string` | No | Start Time | | `endTime` | `string` | No | End Time | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `calendarId` | `string` | Yes | Calendar Id | | `locationId` | `string` | Yes | Location Id | | `contactId` | `string` | Yes | Contact Id | | `startTime` | `string` | No | Start Time | | `endTime` | `string` | No | End Time | | `title` | `string` | No | Title | | `meetingLocationType` | `string` | No | Meeting Location Type | | `appointmentStatus` | `new \| confirmed \| cancelled \| showed \| noshow \| invalid \| active \| completed` | No | HighLevel appointment status value. | | `assignedUserId` | `string` | No | Assigned User Id | | `address` | `string` | No | Appointment Address | | `isRecurring` | `boolean` | No | true if the event is recurring otherwise false | | `rrule` | `string` | No | RRULE as per the iCalendar (RFC 5545) specification for recurring events | | `id` | `string` | Yes | Id | This action calls `PUT /calendars/events/appointments/{eventId}` with HighLevel API version `2021-04-15` and requires `calendars/events.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Update blocked slot Source: https://docs.automate.ax/reference/integrations/highlevel/actions/update-blocked-slot Updates one blocked calendar slot. `highlevel.updateBlockedSlot` updates one blocked calendar slot. ```ts automations/highlevel-update-blocked-slot.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Update blocked slot", () => { markSignificant( highlevel.updateBlockedSlot({ eventId: "value", calendarId: "CVokAlI8fgw4WYWoCtQz", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `eventId` | `string` | Yes | HighLevel event id value. | | `title` | `string` | No | Title | | `calendarId` | `string` | Yes | Set either a calendar ID or an assigned user ID, not both. | | `assignedUserId` | `string` | No | Set either a calendar ID or an assigned user ID, not both. | | `startTime` | `string` | No | Start Time | | `endTime` | `string` | No | End Time | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `id` | `string` | Yes | Id | | `locationId` | `string` | Yes | Location Id | | `title` | `string` | Yes | Title | | `startTime` | `object` | Yes | Start Time | | `endTime` | `object` | Yes | End Time | | `calendarId` | `string` | No | Calendar id | | `assignedUserId` | `string` | No | Assigned User Id | This action calls `PUT /calendars/events/block-slots/{eventId}` with HighLevel API version `2021-04-15` and requires `calendars/events.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Update calendar Source: https://docs.automate.ax/reference/integrations/highlevel/actions/update-calendar Updates one calendar by ID. `highlevel.updateCalendar` updates one calendar by ID. ```ts automations/highlevel-update-calendar.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Update calendar", () => { markSignificant( highlevel.updateCalendar({ calendarId: "ocQHyuzHvysMo5N5VsXc", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `calendarId` | `string` | Yes | HighLevel calendar id value. | | `notifications` | `object[]` | No | Deprecated. Please use 'Calendar Notifications APIs' instead. | | `groupId` | `string` | No | Group Id | | `teamMembers` | `object[]` | No | Team members are required for calendars of type: Round Robin, Collective, Class, Service. Personal calendar must have exactly one team member. | | `eventType` | `RoundRobin_OptimizeForAvailability \| RoundRobin_OptimizeForEqualDistribution` | No | HighLevel event type value. | | `name` | `string` | No | HighLevel name value. | | `description` | `string` | No | HighLevel description value. | | `slug` | `string` | No | HighLevel slug value. | | `widgetSlug` | `string` | No | HighLevel widget slug value. | | `widgetType` | `default \| classic` | No | Calendar widget type. Choose "default" for the new layout and "classic" for "classic" layout. | | `eventTitle` | `string` | No | HighLevel event title value. | | `eventColor` | `string` | No | HighLevel event color value. | | `locationConfigurations` | `object[]` | No | Meeting location configuration for event calendar | | `meetingLocation` | `string` | No | Deprecated. Use `locationConfigurations.location` or `teamMembers[].locationConfigurations.location` instead. | | `slotDuration` | `number` | No | This controls the duration of the meeting | | `slotDurationUnit` | `mins \| hours` | No | Unit for slot duration. | | `preBufferUnit` | `mins \| hours` | No | Unit for pre-buffer. | | `slotInterval` | `number` | No | Slot interval reflects the amount of time the between booking slots that will be shown in the calendar. | | `slotIntervalUnit` | `mins \| hours` | No | Unit for slot interval. | | `slotBuffer` | `number` | No | Slot-Buffer is additional time that can be added after an appointment, allowing for extra time to wrap up | | `preBuffer` | `number` | No | Pre-Buffer is additional time that can be added before an appointment, allowing for extra time to get ready | | `appoinmentPerSlot` | `number` | No | Maximum appointments per slot. | | `appoinmentPerDay` | `number` | No | Number of appointments that can be booked for a given day | | `allowBookingAfter` | `number` | No | Minimum scheduling notice for events | | `allowBookingAfterUnit` | `hours \| days \| weeks \| months` | No | Unit for minimum scheduling notice | | `allowBookingFor` | `number` | No | Minimum number of days/weeks/months for which to allow booking events | | `allowBookingForUnit` | `days \| weeks \| months` | No | Unit for controlling the duration for which booking would be allowed for | | `openHours` | `object[]` | No | Standard availability hours. | | `enableRecurring` | `boolean` | No | Enable recurring appointments for the calendars. Please note that only one member should be added in the calendar to enable this | | `recurring` | `object` | No | HighLevel recurring value. | | `formId` | `string` | No | HighLevel form id value. | | `stickyContact` | `boolean` | No | HighLevel sticky contact value. | | `isLivePaymentMode` | `boolean` | No | HighLevel is live payment mode value. | | `autoConfirm` | `boolean` | No | HighLevel auto confirm value. | | `shouldSendAlertEmailsToAssignedMember` | `boolean` | No | HighLevel should send alert emails to assigned member value. | | `alertEmail` | `string` | No | HighLevel alert email value. | | `googleInvitationEmails` | `boolean` | No | HighLevel google invitation emails value. | | `allowReschedule` | `boolean` | No | HighLevel allow reschedule value. | | `allowCancellation` | `boolean` | No | HighLevel allow cancellation value. | | `shouldAssignContactToTeamMember` | `boolean` | No | HighLevel should assign contact to team member value. | | `shouldSkipAssigningContactForExisting` | `boolean` | No | HighLevel should skip assigning contact for existing value. | | `notes` | `string` | No | HighLevel notes value. | | `pixelId` | `string` | No | HighLevel pixel id value. | | `formSubmitType` | `RedirectURL \| ThankYouMessage` | No | HighLevel form submit type value. | | `formSubmitRedirectURL` | `string` | No | Form submission redirect URL. | | `formSubmitThanksMessage` | `string` | No | HighLevel form submit thanks message value. | | `availabilityType` | `0 \| 1` | No | Determines which availability type to consider: - **1**: Only custom availabilities will be used. - **0**: Only open hours will be used. - **null**: Both the custom availabilities and open hours will be considered. | | `availabilities` | `object[]` | No | This is only to set the custom availability. For standard availability, use the standard availability hours | | `guestType` | `count_only \| collect_detail` | No | HighLevel guest type value. | | `consentLabel` | `string` | No | HighLevel consent label value. | | `calendarCoverImage` | `string` | No | HighLevel calendar cover image value. | | `lookBusyConfig` | `JSON value` | No | Look Busy Configuration | | `isActive` | `boolean` | No | HighLevel is active value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `calendar` | `object` | Yes | HighLevel calendar value. | This action calls `PUT /calendars/{calendarId}` with HighLevel API version `2021-04-15` and requires `calendars.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Update contact Source: https://docs.automate.ax/reference/integrations/highlevel/actions/update-contact Updates one contact by ID. `highlevel.updateContact` updates one contact by ID. ```ts automations/highlevel-update-contact.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Update contact", () => { markSignificant( highlevel.updateContact({ contactId: "ocQHyuzHvysMo5N5VsXc", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `contactId` | `string` | Yes | HighLevel contact id value. | | `firstName` | `string \| null` | No | HighLevel first name value. | | `lastName` | `string \| null` | No | HighLevel last name value. | | `name` | `string \| null` | No | HighLevel name value. | | `email` | `string \| null` | No | HighLevel email value. | | `phone` | `string \| null` | No | HighLevel phone value. | | `address1` | `string \| null` | No | HighLevel address1 value. | | `city` | `string \| null` | No | HighLevel city value. | | `state` | `string \| null` | No | HighLevel state value. | | `postalCode` | `string` | No | HighLevel postal code value. | | `website` | `string \| null` | No | HighLevel website value. | | `timezone` | `string \| null` | No | HighLevel timezone value. | | `dnd` | `boolean` | No | HighLevel Do Not Disturb setting. | | `dndSettings` | `object` | No | HighLevel Do Not Disturb settings. | | `inboundDndSettings` | `object` | No | HighLevel inbound Do Not Disturb settings. | | `tags` | `string[]` | No | This field will overwrite all current tags associated with the contact. To update a tags, it is recommended to use the Add Tag or Remove Tag API instead. | | `customFields` | `object[]` | No | HighLevel custom fields value. | | `source` | `string \| null` | No | HighLevel source value. | | `dateOfBirth` | `string \| null` | No | Birth date in a HighLevel-supported date format such as `YYYY-MM-DD`. | | `country` | `string` | No | HighLevel country value. | | `assignedTo` | `string \| null` | No | HighLevel assigned to value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `succeded` | `boolean` | No | Whether the operation succeeded. | | `contact` | `object` | No | HighLevel contact value. | This action calls `PUT /contacts/{contactId}` with HighLevel API version `2021-07-28` and requires `contacts.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Update contact note Source: https://docs.automate.ax/reference/integrations/highlevel/actions/update-contact-note Updates one contact note. `highlevel.updateContactNote` updates one contact note. ```ts automations/highlevel-update-contact-note.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Update contact note", () => { markSignificant( highlevel.updateContactNote({ contactId: "sx6wyHhbFdRXh302LLNR", id: "ocQHyuzHvysMo5N5VsXc", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `contactId` | `string` | Yes | HighLevel contact id value. | | `id` | `string` | Yes | HighLevel id value. | | `userId` | `string` | No | HighLevel user id value. | | `body` | `string` | No | HighLevel body value. | | `title` | `string` | No | HighLevel title value. | | `color` | `string` | No | HighLevel color value. | | `pinned` | `boolean` | No | HighLevel pinned value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `note` | `object` | No | HighLevel note value. | This action calls `PUT /contacts/{contactId}/notes/{id}` with HighLevel API version `2021-07-28` and requires `contacts.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Update contact task Source: https://docs.automate.ax/reference/integrations/highlevel/actions/update-contact-task Updates one contact task. `highlevel.updateContactTask` updates one contact task. ```ts automations/highlevel-update-contact-task.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Update contact task", () => { markSignificant( highlevel.updateContactTask({ contactId: "sx6wyHhbFdRXh302LLNR", taskId: "ocQHyuzHvysMo5N5VsXc", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `contactId` | `string` | Yes | HighLevel contact id value. | | `taskId` | `string` | Yes | HighLevel task id value. | | `title` | `string` | No | HighLevel title value. | | `body` | `string` | No | HighLevel body value. | | `dueDate` | `string` | No | HighLevel due date value. | | `completed` | `boolean` | No | HighLevel completed value. | | `assignedTo` | `string` | No | HighLevel assigned to value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `task` | `object` | No | HighLevel task value. | This action calls `PUT /contacts/{contactId}/tasks/{taskId}` with HighLevel API version `2021-07-28` and requires `contacts.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Update conversation Source: https://docs.automate.ax/reference/integrations/highlevel/actions/update-conversation Updates assignment, status, or read state for one conversation. `highlevel.updateConversation` updates assignment, status, or read state for one conversation. ```ts automations/highlevel-update-conversation.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Update conversation", () => { markSignificant( highlevel.updateConversation({ conversationId: "tDtDnQdgm2LXpyiqYvZ6", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `conversationId` | `string` | Yes | HighLevel conversation id value. | | `unreadCount` | `number` | No | Count of unread messages in the conversation | | `starred` | `boolean` | No | Starred status of the conversation. | | `feedback` | `object` | No | HighLevel feedback value. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `success` | `boolean` | Yes | Boolean value as the API response. | | `conversation` | `JSON value` | Yes | Conversation data of the provided conversation ID. | This action calls `PUT /conversations/{conversationId}` with HighLevel API version `2021-04-15` and requires `conversations.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Update opportunity Source: https://docs.automate.ax/reference/integrations/highlevel/actions/update-opportunity Updates one opportunity by ID. `highlevel.updateOpportunity` updates one opportunity by ID. ```ts automations/highlevel-update-opportunity.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Update opportunity", () => { markSignificant( highlevel.updateOpportunity({ id: "yWQobCRIhRguQtD2llvk", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `id` | `string` | Yes | HighLevel id value. | | `pipelineId` | `string` | No | pipeline Id | | `name` | `string` | No | HighLevel name value. | | `pipelineStageId` | `string` | No | HighLevel pipeline stage id value. | | `status` | `open \| won \| lost \| abandoned \| all` | No | HighLevel status value. | | `monetaryValue` | `number` | No | Opportunity monetary value. | | `assignedTo` | `string` | No | HighLevel assigned to value. | | `customFields` | `object[]` | No | Update custom fields to opportunities. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `opportunity` | `object` | No | HighLevel opportunity value. | This action calls `PUT /opportunities/{id}` with HighLevel API version `2021-07-28` and requires `opportunities.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Update opportunity status Source: https://docs.automate.ax/reference/integrations/highlevel/actions/update-opportunity-status Changes one opportunity's open, won, lost, or abandoned status. `highlevel.updateOpportunityStatus` changes one opportunity's open, won, lost, or abandoned status. ```ts automations/highlevel-update-opportunity-status.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Update opportunity status", () => { markSignificant( highlevel.updateOpportunityStatus({ id: "yWQobCRIhRguQtD2llvk", status: "open", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `id` | `string` | Yes | HighLevel id value. | | `status` | `open \| won \| lost \| abandoned \| all` | Yes | HighLevel status value. | | `lostReasonId` | `string` | No | lost reason Id | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `succeded` | `boolean` | No | Whether the operation succeeded. | This action calls `PUT /opportunities/{id}/status` with HighLevel API version `2021-07-28` and requires `opportunities.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Update schedule Source: https://docs.automate.ax/reference/integrations/highlevel/actions/update-schedule Updates one availability schedule. `highlevel.updateSchedule` updates one availability schedule. ```ts automations/highlevel-update-schedule.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Update schedule", () => { markSignificant( highlevel.updateSchedule({ id: "sch123def456ghi789", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `id` | `string` | Yes | HighLevel id value. | | `name` | `string` | No | Human-readable name for the schedule | | `rules` | `object[]` | No | Updated schedule rules defining when the schedule is active | | `timezone` | `string` | No | Updated timezone for the schedule (IANA timezone identifier) | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `schedule` | `JSON value` | Yes | Schedule | This action calls `PUT /calendars/schedules/{id}` with HighLevel API version `2021-04-15` and requires `calendars.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. # Upsert contact Source: https://docs.automate.ax/reference/integrations/highlevel/actions/upsert-contact Creates or updates a contact using HighLevel's duplicate-contact policy. `highlevel.upsertContact` creates or updates a contact using HighLevel's duplicate-contact policy. ```ts automations/highlevel-upsert-contact.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Upsert contact", () => { markSignificant(highlevel.upsertContact({})) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `firstName` | `string \| null` | No | HighLevel first name value. | | `lastName` | `string \| null` | No | HighLevel last name value. | | `name` | `string \| null` | No | HighLevel name value. | | `email` | `string \| null` | No | HighLevel email value. | | `gender` | `string` | No | HighLevel gender value. | | `phone` | `string \| null` | No | HighLevel phone value. | | `address1` | `string \| null` | No | HighLevel address1 value. | | `city` | `string \| null` | No | HighLevel city value. | | `state` | `string \| null` | No | HighLevel state value. | | `postalCode` | `string` | No | HighLevel postal code value. | | `website` | `string \| null` | No | HighLevel website value. | | `timezone` | `string \| null` | No | HighLevel timezone value. | | `dnd` | `boolean` | No | HighLevel Do Not Disturb setting. | | `dndSettings` | `object` | No | HighLevel Do Not Disturb settings. | | `inboundDndSettings` | `object` | No | HighLevel inbound Do Not Disturb settings. | | `tags` | `string[]` | No | This field will overwrite all current tags associated with the contact. To update a tags, it is recommended to use the Add Tag or Remove Tag API instead. | | `customFields` | `object[]` | No | HighLevel custom fields value. | | `source` | `string` | No | HighLevel source value. | | `dateOfBirth` | `string \| null` | No | Birth date in a HighLevel-supported date format such as `YYYY-MM-DD`. | | `country` | `string` | No | HighLevel country value. | | `companyName` | `string \| null` | No | HighLevel company name value. | | `assignedTo` | `string` | No | User's Id | | `createNewIfDuplicateAllowed` | `boolean` | No | Controls whether to create a new contact or update an existing duplicate. **Scenario 1:** If this value is `true` and the location allows duplicate contacts, a new contact will be created immediately without checking for duplicates. **Scenario 2:** If this value is `true` but the location does not allow duplicate contacts, this field is ignored and the normal upsert behavior applies: the API will search for an existing duplicate contact, update it if found, or create a new contact if not found. **Scenario 3:** If this value is `false` or not provided, the normal upsert behavior applies regardless of the location's duplicate contact setting. | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `new` | `boolean` | No | HighLevel new value. | | `contact` | `object` | No | HighLevel contact value. | | `traceId` | `string` | No | HighLevel trace id value. | This action calls `POST /contacts/upsert` with HighLevel API version `2021-07-28` and requires `contacts.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. Automate.ax does not automatically replay this create or send operation after an indeterminate transport failure. # Upsert opportunity Source: https://docs.automate.ax/reference/integrations/highlevel/actions/upsert-opportunity Creates or updates an opportunity using HighLevel's matching rules. `highlevel.upsertOpportunity` creates or updates an opportunity using HighLevel's matching rules. ```ts automations/highlevel-upsert-opportunity.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Upsert opportunity", () => { markSignificant( highlevel.upsertOpportunity({ pipelineId: "bCkKGpDsyPP4peuKowkG", followers: ["LiKJ2vnRg5ETM8Z19K7"], isRemoveAllFollowers: true, followersActionType: "add", }), ) }) ``` ## Input | Field | Type | Required | Description | | - | - | - | - | | `id` | `string` | No | Existing opportunity ID. | | `pipelineId` | `string` | Yes | pipeline Id | | `followers` | `string[]` | Yes | Contact IDs to follow the opportunity. | | `isRemoveAllFollowers` | `boolean` | Yes | isRemoveAllFollowers | | `followersActionType` | `add \| remove` | Yes | followers action type | | `name` | `string` | No | name | | `status` | `open \| won \| lost \| abandoned \| all` | No | HighLevel status value. | | `pipelineStageId` | `string` | No | HighLevel pipeline stage id value. | | `monetaryValue` | `number` | No | Opportunity monetary value. | | `assignedTo` | `string` | No | HighLevel assigned to value. | | `lostReasonId` | `string` | No | lost reason Id | Automate.ax supplies the connected sub-account's location ID. Optional second argument `{ account }` selects a named HighLevel binding. ## Output | Field | Type | Required | Description | | - | - | - | - | | `opportunity` | `object` | Yes | Updated / New Opportunity | | `new` | `boolean` | Yes | HighLevel new value. | This action calls `POST /opportunities/upsert` with HighLevel API version `2021-07-28` and requires `opportunities.write`. HighLevel validation and permission errors fail the action. Rate limits honor the provider's retry timing. Automate.ax does not automatically replay this create or send operation after an indeterminate transport failure. # HighLevel Source: https://docs.automate.ax/reference/integrations/highlevel/index Automate HighLevel contacts, opportunities, calendars, conversations, messages, and signed sub-account events. ```ts automations/highlevel-new-contact-follow-up.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("Follow up on new HighLevel contacts", () => { const contact = highlevel.onContactCreated() markSignificant( highlevel.createContactTask({ contactId: contact.id, title: "Qualify the new contact", dueDate: "2026-09-10T17:00:00.000Z", completed: false, }), ) }) ``` Connect HighLevel with OAuth or a Private Integration Token on the Automate.ax Growth plan. OAuth is required for triggers. Actions support either method when the credential grants the action's required scope. Each connection represents one HighLevel location, also called a sub-account; Automate.ax supplies its `locationId` to every request. Actions cover contacts, tags, contact tasks and notes, campaign and workflow membership, opportunities and pipelines, calendars, appointments and schedules, conversations, messages, users, forms and surveys. List and search actions expose HighLevel's provider-native pagination fields. HighLevel enforces burst and daily rate limits per resource. Automate.ax treats validation and permission responses as terminal failures, retries server failures according to action safety, and honors `Retry-After` or HighLevel's interval header on rate limits. ## Connect with OAuth Choose OAuth for actions and triggers. Automate.ax requests only the scopes required by your automations plus location identity access. HighLevel access tokens expire daily; Automate.ax rotates the refresh token automatically. If you install Automate.ax from the HighLevel Marketplace, HighLevel sends you to Automate.ax after authorization. Sign in and choose the Automate.ax organization that should use the installed location. Complete this step within 30 minutes; if the link expires, install the app again. To receive triggers, publish or privately install the Automate.ax marketplace app for the location and configure its webhook URL as `https://automate.ax/api/v1/events/highlevel`. Enable the event types your automations use. The broad trigger requires all supported webhook event scopes. ## Connect with a Private Integration Token In HighLevel, create a Private Integration Token for the location, grant `locations.readonly` plus the scopes required by your actions, then paste the token and location ID into Automate.ax. Automate.ax uses location access to validate the credential and label the connection. Private tokens support actions only because HighLevel marketplace webhooks are tied to OAuth app installations. ## Exports ```ts theme={null} import { highlevel, highLevelAccount, getHighLevelApi, } from "automate.ax/highlevel" ``` * `highlevel` contains the packaged HighLevel actions and triggers. * `highLevelAccount("name")` selects a named HighLevel connection. * `getHighLevelApi` creates the authenticated HighLevel API helper for a custom account-backed action. ## Triggers * [On HighLevel event](/reference/integrations/highlevel/triggers/on-event) * [On HighLevel appointment created](/reference/integrations/highlevel/triggers/on-appointment-created) * [On HighLevel appointment updated](/reference/integrations/highlevel/triggers/on-appointment-updated) * [On HighLevel appointment deleted](/reference/integrations/highlevel/triggers/on-appointment-deleted) * [On HighLevel campaign status updated](/reference/integrations/highlevel/triggers/on-campaign-status-updated) * [On HighLevel contact created](/reference/integrations/highlevel/triggers/on-contact-created) * [On HighLevel contact updated](/reference/integrations/highlevel/triggers/on-contact-updated) * [On HighLevel contact deleted](/reference/integrations/highlevel/triggers/on-contact-deleted) * [On HighLevel contact DND updated](/reference/integrations/highlevel/triggers/on-contact-dnd-updated) * [On HighLevel contact tags updated](/reference/integrations/highlevel/triggers/on-contact-tags-updated) * [On HighLevel conversation unread state updated](/reference/integrations/highlevel/triggers/on-conversation-unread-updated) * [On HighLevel conversation updated](/reference/integrations/highlevel/triggers/on-conversation-updated) * [On HighLevel message received](/reference/integrations/highlevel/triggers/on-message-received) * [On HighLevel message sent](/reference/integrations/highlevel/triggers/on-message-sent) * [On HighLevel note created](/reference/integrations/highlevel/triggers/on-note-created) * [On HighLevel note updated](/reference/integrations/highlevel/triggers/on-note-updated) * [On HighLevel note deleted](/reference/integrations/highlevel/triggers/on-note-deleted) * [On HighLevel opportunity created](/reference/integrations/highlevel/triggers/on-opportunity-created) * [On HighLevel opportunity updated](/reference/integrations/highlevel/triggers/on-opportunity-updated) * [On HighLevel opportunity deleted](/reference/integrations/highlevel/triggers/on-opportunity-deleted) * [On HighLevel opportunity stage updated](/reference/integrations/highlevel/triggers/on-opportunity-stage-updated) * [On HighLevel opportunity status updated](/reference/integrations/highlevel/triggers/on-opportunity-status-updated) * [On HighLevel opportunity value updated](/reference/integrations/highlevel/triggers/on-opportunity-value-updated) * [On HighLevel opportunity assignee updated](/reference/integrations/highlevel/triggers/on-opportunity-assignee-updated) * [On HighLevel task created](/reference/integrations/highlevel/triggers/on-task-created) * [On HighLevel task completed](/reference/integrations/highlevel/triggers/on-task-completed) * [On HighLevel task deleted](/reference/integrations/highlevel/triggers/on-task-deleted) * [On HighLevel location updated](/reference/integrations/highlevel/triggers/on-location-updated) * [On HighLevel user created](/reference/integrations/highlevel/triggers/on-user-created) * [On HighLevel user updated](/reference/integrations/highlevel/triggers/on-user-updated) * [On HighLevel user deleted](/reference/integrations/highlevel/triggers/on-user-deleted) ## Actions * [List contacts](/reference/integrations/highlevel/actions/list-contacts) * [Get contact](/reference/integrations/highlevel/actions/get-contact) * [Search contacts](/reference/integrations/highlevel/actions/search-contacts) * [Find duplicate contact](/reference/integrations/highlevel/actions/find-duplicate-contact) * [Create contact](/reference/integrations/highlevel/actions/create-contact) * [Upsert contact](/reference/integrations/highlevel/actions/upsert-contact) * [Update contact](/reference/integrations/highlevel/actions/update-contact) * [Delete contact](/reference/integrations/highlevel/actions/delete-contact) * [Add contact tags](/reference/integrations/highlevel/actions/add-contact-tags) * [Remove contact tags](/reference/integrations/highlevel/actions/remove-contact-tags) * [List contact tasks](/reference/integrations/highlevel/actions/list-contact-tasks) * [Get contact task](/reference/integrations/highlevel/actions/get-contact-task) * [Create contact task](/reference/integrations/highlevel/actions/create-contact-task) * [Update contact task](/reference/integrations/highlevel/actions/update-contact-task) * [Complete contact task](/reference/integrations/highlevel/actions/complete-contact-task) * [Delete contact task](/reference/integrations/highlevel/actions/delete-contact-task) * [List contact notes](/reference/integrations/highlevel/actions/list-contact-notes) * [Get contact note](/reference/integrations/highlevel/actions/get-contact-note) * [Create contact note](/reference/integrations/highlevel/actions/create-contact-note) * [Update contact note](/reference/integrations/highlevel/actions/update-contact-note) * [Delete contact note](/reference/integrations/highlevel/actions/delete-contact-note) * [Add contact to campaign](/reference/integrations/highlevel/actions/add-contact-to-campaign) * [Remove contact from campaign](/reference/integrations/highlevel/actions/remove-contact-from-campaign) * [Add contact to workflow](/reference/integrations/highlevel/actions/add-contact-to-workflow) * [Remove contact from workflow](/reference/integrations/highlevel/actions/remove-contact-from-workflow) * [Search opportunities](/reference/integrations/highlevel/actions/search-opportunities) * [Get opportunity](/reference/integrations/highlevel/actions/get-opportunity) * [Create opportunity](/reference/integrations/highlevel/actions/create-opportunity) * [Upsert opportunity](/reference/integrations/highlevel/actions/upsert-opportunity) * [Update opportunity](/reference/integrations/highlevel/actions/update-opportunity) * [Update opportunity status](/reference/integrations/highlevel/actions/update-opportunity-status) * [Delete opportunity](/reference/integrations/highlevel/actions/delete-opportunity) * [List pipelines](/reference/integrations/highlevel/actions/list-pipelines) * [List opportunity lost reasons](/reference/integrations/highlevel/actions/list-opportunity-lost-reasons) * [List calendars](/reference/integrations/highlevel/actions/list-calendars) * [Get calendar](/reference/integrations/highlevel/actions/get-calendar) * [Create calendar](/reference/integrations/highlevel/actions/create-calendar) * [Update calendar](/reference/integrations/highlevel/actions/update-calendar) * [Delete calendar](/reference/integrations/highlevel/actions/delete-calendar) * [Get calendar free slots](/reference/integrations/highlevel/actions/get-calendar-free-slots) * [List appointments](/reference/integrations/highlevel/actions/list-appointments) * [Get appointment](/reference/integrations/highlevel/actions/get-appointment) * [Create appointment](/reference/integrations/highlevel/actions/create-appointment) * [Update appointment](/reference/integrations/highlevel/actions/update-appointment) * [Delete appointment](/reference/integrations/highlevel/actions/delete-appointment) * [List blocked slots](/reference/integrations/highlevel/actions/list-blocked-slots) * [Create blocked slot](/reference/integrations/highlevel/actions/create-blocked-slot) * [Update blocked slot](/reference/integrations/highlevel/actions/update-blocked-slot) * [List schedules](/reference/integrations/highlevel/actions/list-schedules) * [Get schedule](/reference/integrations/highlevel/actions/get-schedule) * [Create schedule](/reference/integrations/highlevel/actions/create-schedule) * [Update schedule](/reference/integrations/highlevel/actions/update-schedule) * [Delete schedule](/reference/integrations/highlevel/actions/delete-schedule) * [Search conversations](/reference/integrations/highlevel/actions/search-conversations) * [Get conversation](/reference/integrations/highlevel/actions/get-conversation) * [Create conversation](/reference/integrations/highlevel/actions/create-conversation) * [Update conversation](/reference/integrations/highlevel/actions/update-conversation) * [Delete conversation](/reference/integrations/highlevel/actions/delete-conversation) * [List messages](/reference/integrations/highlevel/actions/list-messages) * [Get message](/reference/integrations/highlevel/actions/get-message) * [Send message](/reference/integrations/highlevel/actions/send-message) * [Cancel scheduled message](/reference/integrations/highlevel/actions/cancel-scheduled-message) * [Cancel scheduled email message](/reference/integrations/highlevel/actions/cancel-scheduled-email-message) * [Get message recording](/reference/integrations/highlevel/actions/get-message-recording) * [Get message transcription](/reference/integrations/highlevel/actions/get-message-transcription) * [Get location](/reference/integrations/highlevel/actions/get-location) * [List users](/reference/integrations/highlevel/actions/list-users) * [Get user](/reference/integrations/highlevel/actions/get-user) * [List campaigns](/reference/integrations/highlevel/actions/list-campaigns) * [List workflows](/reference/integrations/highlevel/actions/list-workflows) * [List forms](/reference/integrations/highlevel/actions/list-forms) * [List form submissions](/reference/integrations/highlevel/actions/list-form-submissions) * [List surveys](/reference/integrations/highlevel/actions/list-surveys) * [List survey submissions](/reference/integrations/highlevel/actions/list-survey-submissions) # On HighLevel appointment created Source: https://docs.automate.ax/reference/integrations/highlevel/triggers/on-appointment-created Run when an appointment is created. Use `highlevel.onAppointmentCreated` to run when an appointment is created. ```ts automations/highlevel-on-appointment-created.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("On HighLevel appointment created", () => { const event = highlevel.onAppointmentCreated() markSignificant(event) }) ``` HighLevel triggers require OAuth because HighLevel sends marketplace webhooks for an installed app. Optional static `account` selects a named OAuth binding; the project binding is the default. ## Trigger data Returns the typed `AppointmentCreate` webhook payload. Every event includes `type`, `locationId`, `timestamp`, and `webhookId`; entity events include the affected record fields supplied by HighLevel. Appointment events place appointment details under `appointment`. Automate.ax verifies HighLevel's Ed25519 signature against the exact request body, rejects deliveries outside a five-minute replay window, and deduplicates retries by `webhookId`. # On HighLevel appointment deleted Source: https://docs.automate.ax/reference/integrations/highlevel/triggers/on-appointment-deleted Run when an appointment is deleted. Use `highlevel.onAppointmentDeleted` to run when an appointment is deleted. ```ts automations/highlevel-on-appointment-deleted.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("On HighLevel appointment deleted", () => { const event = highlevel.onAppointmentDeleted() markSignificant(event) }) ``` HighLevel triggers require OAuth because HighLevel sends marketplace webhooks for an installed app. Optional static `account` selects a named OAuth binding; the project binding is the default. ## Trigger data Returns the typed `AppointmentDelete` webhook payload. Every event includes `type`, `locationId`, `timestamp`, and `webhookId`; entity events include the affected record fields supplied by HighLevel. Appointment events place appointment details under `appointment`. Automate.ax verifies HighLevel's Ed25519 signature against the exact request body, rejects deliveries outside a five-minute replay window, and deduplicates retries by `webhookId`. # On HighLevel appointment updated Source: https://docs.automate.ax/reference/integrations/highlevel/triggers/on-appointment-updated Run when an appointment is updated. Use `highlevel.onAppointmentUpdated` to run when an appointment is updated. ```ts automations/highlevel-on-appointment-updated.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("On HighLevel appointment updated", () => { const event = highlevel.onAppointmentUpdated() markSignificant(event) }) ``` HighLevel triggers require OAuth because HighLevel sends marketplace webhooks for an installed app. Optional static `account` selects a named OAuth binding; the project binding is the default. ## Trigger data Returns the typed `AppointmentUpdate` webhook payload. Every event includes `type`, `locationId`, `timestamp`, and `webhookId`; entity events include the affected record fields supplied by HighLevel. Appointment events place appointment details under `appointment`. Automate.ax verifies HighLevel's Ed25519 signature against the exact request body, rejects deliveries outside a five-minute replay window, and deduplicates retries by `webhookId`. # On HighLevel campaign status updated Source: https://docs.automate.ax/reference/integrations/highlevel/triggers/on-campaign-status-updated Run when a contact's campaign status changes. Use `highlevel.onCampaignStatusUpdated` to run when a contact's campaign status changes. ```ts automations/highlevel-on-campaign-status-updated.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("On HighLevel campaign status updated", () => { const event = highlevel.onCampaignStatusUpdated() markSignificant(event) }) ``` HighLevel triggers require OAuth because HighLevel sends marketplace webhooks for an installed app. Optional static `account` selects a named OAuth binding; the project binding is the default. ## Trigger data Returns the typed `CampaignStatusUpdate` webhook payload. Every event includes `type`, `locationId`, `timestamp`, and `webhookId`; entity events include the affected record fields supplied by HighLevel. Appointment events place appointment details under `appointment`. Automate.ax verifies HighLevel's Ed25519 signature against the exact request body, rejects deliveries outside a five-minute replay window, and deduplicates retries by `webhookId`. # On HighLevel contact created Source: https://docs.automate.ax/reference/integrations/highlevel/triggers/on-contact-created Run when a contact is created. Use `highlevel.onContactCreated` to run when a contact is created. ```ts automations/highlevel-on-contact-created.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("On HighLevel contact created", () => { const event = highlevel.onContactCreated() markSignificant(event) }) ``` HighLevel triggers require OAuth because HighLevel sends marketplace webhooks for an installed app. Optional static `account` selects a named OAuth binding; the project binding is the default. ## Trigger data Returns the typed `ContactCreate` webhook payload. Every event includes `type`, `locationId`, `timestamp`, and `webhookId`; entity events include the affected record fields supplied by HighLevel. Appointment events place appointment details under `appointment`. Automate.ax verifies HighLevel's Ed25519 signature against the exact request body, rejects deliveries outside a five-minute replay window, and deduplicates retries by `webhookId`. # On HighLevel contact deleted Source: https://docs.automate.ax/reference/integrations/highlevel/triggers/on-contact-deleted Run when a contact is deleted. Use `highlevel.onContactDeleted` to run when a contact is deleted. ```ts automations/highlevel-on-contact-deleted.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("On HighLevel contact deleted", () => { const event = highlevel.onContactDeleted() markSignificant(event) }) ``` HighLevel triggers require OAuth because HighLevel sends marketplace webhooks for an installed app. Optional static `account` selects a named OAuth binding; the project binding is the default. ## Trigger data Returns the typed `ContactDelete` webhook payload. Every event includes `type`, `locationId`, `timestamp`, and `webhookId`; entity events include the affected record fields supplied by HighLevel. Appointment events place appointment details under `appointment`. Automate.ax verifies HighLevel's Ed25519 signature against the exact request body, rejects deliveries outside a five-minute replay window, and deduplicates retries by `webhookId`. # On HighLevel contact DND updated Source: https://docs.automate.ax/reference/integrations/highlevel/triggers/on-contact-dnd-updated Run when a contact's do-not-disturb settings change. Use `highlevel.onContactDndUpdated` to run when a contact's do-not-disturb settings change. ```ts automations/highlevel-on-contact-dnd-updated.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("On HighLevel contact DND updated", () => { const event = highlevel.onContactDndUpdated() markSignificant(event) }) ``` HighLevel triggers require OAuth because HighLevel sends marketplace webhooks for an installed app. Optional static `account` selects a named OAuth binding; the project binding is the default. ## Trigger data Returns the typed `ContactDndUpdate` webhook payload. Every event includes `type`, `locationId`, `timestamp`, and `webhookId`; entity events include the affected record fields supplied by HighLevel. Appointment events place appointment details under `appointment`. Automate.ax verifies HighLevel's Ed25519 signature against the exact request body, rejects deliveries outside a five-minute replay window, and deduplicates retries by `webhookId`. # On HighLevel contact tags updated Source: https://docs.automate.ax/reference/integrations/highlevel/triggers/on-contact-tags-updated Run when a contact's tags change. Use `highlevel.onContactTagsUpdated` to run when a contact's tags change. ```ts automations/highlevel-on-contact-tags-updated.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("On HighLevel contact tags updated", () => { const event = highlevel.onContactTagsUpdated() markSignificant(event) }) ``` HighLevel triggers require OAuth because HighLevel sends marketplace webhooks for an installed app. Optional static `account` selects a named OAuth binding; the project binding is the default. ## Trigger data Returns the typed `ContactTagUpdate` webhook payload. Every event includes `type`, `locationId`, `timestamp`, and `webhookId`; entity events include the affected record fields supplied by HighLevel. Appointment events place appointment details under `appointment`. Automate.ax verifies HighLevel's Ed25519 signature against the exact request body, rejects deliveries outside a five-minute replay window, and deduplicates retries by `webhookId`. # On HighLevel contact updated Source: https://docs.automate.ax/reference/integrations/highlevel/triggers/on-contact-updated Run when a contact is updated. Use `highlevel.onContactUpdated` to run when a contact is updated. ```ts automations/highlevel-on-contact-updated.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("On HighLevel contact updated", () => { const event = highlevel.onContactUpdated() markSignificant(event) }) ``` HighLevel triggers require OAuth because HighLevel sends marketplace webhooks for an installed app. Optional static `account` selects a named OAuth binding; the project binding is the default. ## Trigger data Returns the typed `ContactUpdate` webhook payload. Every event includes `type`, `locationId`, `timestamp`, and `webhookId`; entity events include the affected record fields supplied by HighLevel. Appointment events place appointment details under `appointment`. Automate.ax verifies HighLevel's Ed25519 signature against the exact request body, rejects deliveries outside a five-minute replay window, and deduplicates retries by `webhookId`. # On HighLevel conversation unread state updated Source: https://docs.automate.ax/reference/integrations/highlevel/triggers/on-conversation-unread-updated Run when a conversation's unread state changes. Use `highlevel.onConversationUnreadUpdated` to run when a conversation's unread state changes. ```ts automations/highlevel-on-conversation-unread-updated.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation( "On HighLevel conversation unread state updated", () => { const event = highlevel.onConversationUnreadUpdated() markSignificant(event) }, ) ``` HighLevel triggers require OAuth because HighLevel sends marketplace webhooks for an installed app. Optional static `account` selects a named OAuth binding; the project binding is the default. ## Trigger data Returns the typed `ConversationUnreadUpdate` webhook payload. Every event includes `type`, `locationId`, `timestamp`, and `webhookId`; entity events include the affected record fields supplied by HighLevel. Appointment events place appointment details under `appointment`. Automate.ax verifies HighLevel's Ed25519 signature against the exact request body, rejects deliveries outside a five-minute replay window, and deduplicates retries by `webhookId`. # On HighLevel conversation updated Source: https://docs.automate.ax/reference/integrations/highlevel/triggers/on-conversation-updated Run when HighLevel merges an identified live-chat conversation. Use `highlevel.onConversationUpdated` to run when a live-chat visitor identifies themselves and HighLevel merges the temporary conversation into their contact conversation. ```ts automations/highlevel-on-conversation-updated.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("On HighLevel conversation updated", () => { const event = highlevel.onConversationUpdated() markSignificant(event) }) ``` HighLevel triggers require OAuth because HighLevel sends marketplace webhooks for an installed app. Optional static `account` selects a named OAuth binding; the project binding is the default. ## Trigger data Returns the typed `ConversationUpdate` webhook payload. `oldConversationId` identifies the temporary live-chat conversation and `newConversationId` identifies the retained contact conversation. Automate.ax verifies HighLevel's Ed25519 signature against the exact request body, rejects deliveries outside a five-minute replay window, and deduplicates retries by `webhookId`. # On HighLevel event Source: https://docs.automate.ax/reference/integrations/highlevel/triggers/on-event Run when any supported HighLevel webhook event. Use `highlevel.onEvent` to run when any supported HighLevel webhook event. ```ts automations/highlevel-on-event.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("On HighLevel event", () => { const event = highlevel.onEvent() markSignificant(event) }) ``` HighLevel triggers require OAuth because HighLevel sends marketplace webhooks for an installed app. Optional static `account` selects a named OAuth binding; the project binding is the default. ## Trigger data Returns a discriminated union of every supported HighLevel webhook payload. Narrow `event.type` to access event-specific fields. Every event includes `type`, `locationId`, `timestamp`, and `webhookId`; entity events include the affected record fields supplied by HighLevel. Appointment events place appointment details under `appointment`. Automate.ax verifies HighLevel's Ed25519 signature against the exact request body, rejects deliveries outside a five-minute replay window, and deduplicates retries by `webhookId`. # On HighLevel location updated Source: https://docs.automate.ax/reference/integrations/highlevel/triggers/on-location-updated Run when the connected sub-account is updated. Use `highlevel.onLocationUpdated` to run when the connected sub-account is updated. ```ts automations/highlevel-on-location-updated.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("On HighLevel location updated", () => { const event = highlevel.onLocationUpdated() markSignificant(event) }) ``` HighLevel triggers require OAuth because HighLevel sends marketplace webhooks for an installed app. Optional static `account` selects a named OAuth binding; the project binding is the default. ## Trigger data Returns the typed `LocationUpdate` webhook payload. Every event includes `type`, `locationId`, `timestamp`, and `webhookId`; entity events include the affected record fields supplied by HighLevel. Appointment events place appointment details under `appointment`. Automate.ax verifies HighLevel's Ed25519 signature against the exact request body, rejects deliveries outside a five-minute replay window, and deduplicates retries by `webhookId`. # On HighLevel message received Source: https://docs.automate.ax/reference/integrations/highlevel/triggers/on-message-received Run when HighLevel receives a message. Use `highlevel.onMessageReceived` to run when HighLevel receives a message. ```ts automations/highlevel-on-message-received.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("On HighLevel message received", () => { const event = highlevel.onMessageReceived() markSignificant(event) }) ``` HighLevel triggers require OAuth because HighLevel sends marketplace webhooks for an installed app. Optional static `account` selects a named OAuth binding; the project binding is the default. ## Trigger data Returns the typed `InboundMessage` webhook payload. Every event includes `type`, `locationId`, `timestamp`, and `webhookId`; entity events include the affected record fields supplied by HighLevel. Appointment events place appointment details under `appointment`. Automate.ax verifies HighLevel's Ed25519 signature against the exact request body, rejects deliveries outside a five-minute replay window, and deduplicates retries by `webhookId`. # On HighLevel message sent Source: https://docs.automate.ax/reference/integrations/highlevel/triggers/on-message-sent Run when HighLevel sends a message. Use `highlevel.onMessageSent` to run when HighLevel sends a message. ```ts automations/highlevel-on-message-sent.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("On HighLevel message sent", () => { const event = highlevel.onMessageSent() markSignificant(event) }) ``` HighLevel triggers require OAuth because HighLevel sends marketplace webhooks for an installed app. Optional static `account` selects a named OAuth binding; the project binding is the default. ## Trigger data Returns the typed `OutboundMessage` webhook payload. Every event includes `type`, `locationId`, `timestamp`, and `webhookId`; entity events include the affected record fields supplied by HighLevel. Appointment events place appointment details under `appointment`. Automate.ax verifies HighLevel's Ed25519 signature against the exact request body, rejects deliveries outside a five-minute replay window, and deduplicates retries by `webhookId`. # On HighLevel note created Source: https://docs.automate.ax/reference/integrations/highlevel/triggers/on-note-created Run when a contact note is created. Use `highlevel.onNoteCreated` to run when a contact note is created. ```ts automations/highlevel-on-note-created.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("On HighLevel note created", () => { const event = highlevel.onNoteCreated() markSignificant(event) }) ``` HighLevel triggers require OAuth because HighLevel sends marketplace webhooks for an installed app. Optional static `account` selects a named OAuth binding; the project binding is the default. ## Trigger data Returns the typed `NoteCreate` webhook payload. Every event includes `type`, `locationId`, `timestamp`, and `webhookId`; entity events include the affected record fields supplied by HighLevel. Appointment events place appointment details under `appointment`. Automate.ax verifies HighLevel's Ed25519 signature against the exact request body, rejects deliveries outside a five-minute replay window, and deduplicates retries by `webhookId`. # On HighLevel note deleted Source: https://docs.automate.ax/reference/integrations/highlevel/triggers/on-note-deleted Run when a contact note is deleted. Use `highlevel.onNoteDeleted` to run when a contact note is deleted. ```ts automations/highlevel-on-note-deleted.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("On HighLevel note deleted", () => { const event = highlevel.onNoteDeleted() markSignificant(event) }) ``` HighLevel triggers require OAuth because HighLevel sends marketplace webhooks for an installed app. Optional static `account` selects a named OAuth binding; the project binding is the default. ## Trigger data Returns the typed `NoteDelete` webhook payload. Every event includes `type`, `locationId`, `timestamp`, and `webhookId`; entity events include the affected record fields supplied by HighLevel. Appointment events place appointment details under `appointment`. Automate.ax verifies HighLevel's Ed25519 signature against the exact request body, rejects deliveries outside a five-minute replay window, and deduplicates retries by `webhookId`. # On HighLevel note updated Source: https://docs.automate.ax/reference/integrations/highlevel/triggers/on-note-updated Run when a contact note is updated. Use `highlevel.onNoteUpdated` to run when a contact note is updated. ```ts automations/highlevel-on-note-updated.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("On HighLevel note updated", () => { const event = highlevel.onNoteUpdated() markSignificant(event) }) ``` HighLevel triggers require OAuth because HighLevel sends marketplace webhooks for an installed app. Optional static `account` selects a named OAuth binding; the project binding is the default. ## Trigger data Returns the typed `NoteUpdate` webhook payload. Every event includes `type`, `locationId`, `timestamp`, and `webhookId`; entity events include the affected record fields supplied by HighLevel. Appointment events place appointment details under `appointment`. Automate.ax verifies HighLevel's Ed25519 signature against the exact request body, rejects deliveries outside a five-minute replay window, and deduplicates retries by `webhookId`. # On HighLevel opportunity assignee updated Source: https://docs.automate.ax/reference/integrations/highlevel/triggers/on-opportunity-assignee-updated Run when an opportunity's assignee changes. Use `highlevel.onOpportunityAssigneeUpdated` to run when an opportunity's assignee changes. ```ts automations/highlevel-on-opportunity-assignee-updated.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("On HighLevel opportunity assignee updated", () => { const event = highlevel.onOpportunityAssigneeUpdated() markSignificant(event) }) ``` HighLevel triggers require OAuth because HighLevel sends marketplace webhooks for an installed app. Optional static `account` selects a named OAuth binding; the project binding is the default. ## Trigger data Returns the typed `OpportunityAssignedToUpdate` webhook payload. Every event includes `type`, `locationId`, `timestamp`, and `webhookId`; entity events include the affected record fields supplied by HighLevel. Appointment events place appointment details under `appointment`. Automate.ax verifies HighLevel's Ed25519 signature against the exact request body, rejects deliveries outside a five-minute replay window, and deduplicates retries by `webhookId`. # On HighLevel opportunity created Source: https://docs.automate.ax/reference/integrations/highlevel/triggers/on-opportunity-created Run when an opportunity is created. Use `highlevel.onOpportunityCreated` to run when an opportunity is created. ```ts automations/highlevel-on-opportunity-created.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("On HighLevel opportunity created", () => { const event = highlevel.onOpportunityCreated() markSignificant(event) }) ``` HighLevel triggers require OAuth because HighLevel sends marketplace webhooks for an installed app. Optional static `account` selects a named OAuth binding; the project binding is the default. ## Trigger data Returns the typed `OpportunityCreate` webhook payload. Every event includes `type`, `locationId`, `timestamp`, and `webhookId`; entity events include the affected record fields supplied by HighLevel. Appointment events place appointment details under `appointment`. Automate.ax verifies HighLevel's Ed25519 signature against the exact request body, rejects deliveries outside a five-minute replay window, and deduplicates retries by `webhookId`. # On HighLevel opportunity deleted Source: https://docs.automate.ax/reference/integrations/highlevel/triggers/on-opportunity-deleted Run when an opportunity is deleted. Use `highlevel.onOpportunityDeleted` to run when an opportunity is deleted. ```ts automations/highlevel-on-opportunity-deleted.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("On HighLevel opportunity deleted", () => { const event = highlevel.onOpportunityDeleted() markSignificant(event) }) ``` HighLevel triggers require OAuth because HighLevel sends marketplace webhooks for an installed app. Optional static `account` selects a named OAuth binding; the project binding is the default. ## Trigger data Returns the typed `OpportunityDelete` webhook payload. Every event includes `type`, `locationId`, `timestamp`, and `webhookId`; entity events include the affected record fields supplied by HighLevel. Appointment events place appointment details under `appointment`. Automate.ax verifies HighLevel's Ed25519 signature against the exact request body, rejects deliveries outside a five-minute replay window, and deduplicates retries by `webhookId`. # On HighLevel opportunity stage updated Source: https://docs.automate.ax/reference/integrations/highlevel/triggers/on-opportunity-stage-updated Run when an opportunity changes pipeline stage. Use `highlevel.onOpportunityStageUpdated` to run when an opportunity changes pipeline stage. ```ts automations/highlevel-on-opportunity-stage-updated.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("On HighLevel opportunity stage updated", () => { const event = highlevel.onOpportunityStageUpdated() markSignificant(event) }) ``` HighLevel triggers require OAuth because HighLevel sends marketplace webhooks for an installed app. Optional static `account` selects a named OAuth binding; the project binding is the default. ## Trigger data Returns the typed `OpportunityStageUpdate` webhook payload. Every event includes `type`, `locationId`, `timestamp`, and `webhookId`; entity events include the affected record fields supplied by HighLevel. Appointment events place appointment details under `appointment`. Automate.ax verifies HighLevel's Ed25519 signature against the exact request body, rejects deliveries outside a five-minute replay window, and deduplicates retries by `webhookId`. # On HighLevel opportunity status updated Source: https://docs.automate.ax/reference/integrations/highlevel/triggers/on-opportunity-status-updated Run when an opportunity's status changes. Use `highlevel.onOpportunityStatusUpdated` to run when an opportunity's status changes. ```ts automations/highlevel-on-opportunity-status-updated.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("On HighLevel opportunity status updated", () => { const event = highlevel.onOpportunityStatusUpdated() markSignificant(event) }) ``` HighLevel triggers require OAuth because HighLevel sends marketplace webhooks for an installed app. Optional static `account` selects a named OAuth binding; the project binding is the default. ## Trigger data Returns the typed `OpportunityStatusUpdate` webhook payload. Every event includes `type`, `locationId`, `timestamp`, and `webhookId`; entity events include the affected record fields supplied by HighLevel. Appointment events place appointment details under `appointment`. Automate.ax verifies HighLevel's Ed25519 signature against the exact request body, rejects deliveries outside a five-minute replay window, and deduplicates retries by `webhookId`. # On HighLevel opportunity updated Source: https://docs.automate.ax/reference/integrations/highlevel/triggers/on-opportunity-updated Run when an opportunity is updated. Use `highlevel.onOpportunityUpdated` to run when an opportunity is updated. ```ts automations/highlevel-on-opportunity-updated.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("On HighLevel opportunity updated", () => { const event = highlevel.onOpportunityUpdated() markSignificant(event) }) ``` HighLevel triggers require OAuth because HighLevel sends marketplace webhooks for an installed app. Optional static `account` selects a named OAuth binding; the project binding is the default. ## Trigger data Returns the typed `OpportunityUpdate` webhook payload. Every event includes `type`, `locationId`, `timestamp`, and `webhookId`; entity events include the affected record fields supplied by HighLevel. Appointment events place appointment details under `appointment`. Automate.ax verifies HighLevel's Ed25519 signature against the exact request body, rejects deliveries outside a five-minute replay window, and deduplicates retries by `webhookId`. # On HighLevel opportunity value updated Source: https://docs.automate.ax/reference/integrations/highlevel/triggers/on-opportunity-value-updated Run when an opportunity's monetary value changes. Use `highlevel.onOpportunityValueUpdated` to run when an opportunity's monetary value changes. ```ts automations/highlevel-on-opportunity-value-updated.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("On HighLevel opportunity value updated", () => { const event = highlevel.onOpportunityValueUpdated() markSignificant(event) }) ``` HighLevel triggers require OAuth because HighLevel sends marketplace webhooks for an installed app. Optional static `account` selects a named OAuth binding; the project binding is the default. ## Trigger data Returns the typed `OpportunityMonetaryValueUpdate` webhook payload. Every event includes `type`, `locationId`, `timestamp`, and `webhookId`; entity events include the affected record fields supplied by HighLevel. Appointment events place appointment details under `appointment`. Automate.ax verifies HighLevel's Ed25519 signature against the exact request body, rejects deliveries outside a five-minute replay window, and deduplicates retries by `webhookId`. # On HighLevel task completed Source: https://docs.automate.ax/reference/integrations/highlevel/triggers/on-task-completed Run when a contact task is completed. Use `highlevel.onTaskCompleted` to run when a contact task is completed. ```ts automations/highlevel-on-task-completed.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("On HighLevel task completed", () => { const event = highlevel.onTaskCompleted() markSignificant(event) }) ``` HighLevel triggers require OAuth because HighLevel sends marketplace webhooks for an installed app. Optional static `account` selects a named OAuth binding; the project binding is the default. ## Trigger data Returns the typed `TaskComplete` webhook payload. Every event includes `type`, `locationId`, `timestamp`, and `webhookId`; entity events include the affected record fields supplied by HighLevel. Appointment events place appointment details under `appointment`. Automate.ax verifies HighLevel's Ed25519 signature against the exact request body, rejects deliveries outside a five-minute replay window, and deduplicates retries by `webhookId`. # On HighLevel task created Source: https://docs.automate.ax/reference/integrations/highlevel/triggers/on-task-created Run when a contact task is created. Use `highlevel.onTaskCreated` to run when a contact task is created. ```ts automations/highlevel-on-task-created.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("On HighLevel task created", () => { const event = highlevel.onTaskCreated() markSignificant(event) }) ``` HighLevel triggers require OAuth because HighLevel sends marketplace webhooks for an installed app. Optional static `account` selects a named OAuth binding; the project binding is the default. ## Trigger data Returns the typed `TaskCreate` webhook payload. Every event includes `type`, `locationId`, `timestamp`, and `webhookId`; entity events include the affected record fields supplied by HighLevel. Appointment events place appointment details under `appointment`. Automate.ax verifies HighLevel's Ed25519 signature against the exact request body, rejects deliveries outside a five-minute replay window, and deduplicates retries by `webhookId`. # On HighLevel task deleted Source: https://docs.automate.ax/reference/integrations/highlevel/triggers/on-task-deleted Run when a contact task is deleted. Use `highlevel.onTaskDeleted` to run when a contact task is deleted. ```ts automations/highlevel-on-task-deleted.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("On HighLevel task deleted", () => { const event = highlevel.onTaskDeleted() markSignificant(event) }) ``` HighLevel triggers require OAuth because HighLevel sends marketplace webhooks for an installed app. Optional static `account` selects a named OAuth binding; the project binding is the default. ## Trigger data Returns the typed `TaskDelete` webhook payload. Every event includes `type`, `locationId`, `timestamp`, and `webhookId`; entity events include the affected record fields supplied by HighLevel. Appointment events place appointment details under `appointment`. Automate.ax verifies HighLevel's Ed25519 signature against the exact request body, rejects deliveries outside a five-minute replay window, and deduplicates retries by `webhookId`. # On HighLevel user created Source: https://docs.automate.ax/reference/integrations/highlevel/triggers/on-user-created Run when a user is created in the connected sub-account. Use `highlevel.onUserCreated` to run when a user is created in the connected sub-account. ```ts automations/highlevel-on-user-created.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("On HighLevel user created", () => { const event = highlevel.onUserCreated() markSignificant(event) }) ``` HighLevel triggers require OAuth because HighLevel sends marketplace webhooks for an installed app. Optional static `account` selects a named OAuth binding; the project binding is the default. ## Trigger data Returns the typed `UserCreate` webhook payload. Every event includes `type`, `locationId`, `timestamp`, and `webhookId`; entity events include the affected record fields supplied by HighLevel. Appointment events place appointment details under `appointment`. Automate.ax verifies HighLevel's Ed25519 signature against the exact request body, rejects deliveries outside a five-minute replay window, and deduplicates retries by `webhookId`. # On HighLevel user deleted Source: https://docs.automate.ax/reference/integrations/highlevel/triggers/on-user-deleted Run when a user is deleted from the connected sub-account. Use `highlevel.onUserDeleted` to run when a user is deleted from the connected sub-account. ```ts automations/highlevel-on-user-deleted.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("On HighLevel user deleted", () => { const event = highlevel.onUserDeleted() markSignificant(event) }) ``` HighLevel triggers require OAuth because HighLevel sends marketplace webhooks for an installed app. Optional static `account` selects a named OAuth binding; the project binding is the default. ## Trigger data Returns the typed `UserDelete` webhook payload with the deleted user's last supplied identity, role, permissions, scopes, and locations. Automate.ax verifies HighLevel's Ed25519 signature against the exact request body, rejects deliveries outside a five-minute replay window, and deduplicates retries by `webhookId`. # On HighLevel user updated Source: https://docs.automate.ax/reference/integrations/highlevel/triggers/on-user-updated Run when a user is updated in the connected sub-account. Use `highlevel.onUserUpdated` to run when a user is updated in the connected sub-account. ```ts automations/highlevel-on-user-updated.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { highlevel } from "automate.ax/highlevel" export default automation("On HighLevel user updated", () => { const event = highlevel.onUserUpdated() markSignificant(event) }) ``` HighLevel triggers require OAuth because HighLevel sends marketplace webhooks for an installed app. Optional static `account` selects a named OAuth binding; the project binding is the default. ## Trigger data Returns the typed `UserUpdate` webhook payload with the affected user's identity, role, permissions, scopes, and locations when supplied by HighLevel. Automate.ax verifies HighLevel's Ed25519 signature against the exact request body, rejects deliveries outside a five-minute replay window, and deduplicates retries by `webhookId`. # Archive company Source: https://docs.automate.ax/reference/integrations/hubspot/actions/archive-company Move one HubSpot company to the recycling bin. Use `hubspot.archiveCompany` to move one HubSpot company to the recycling bin. ```ts automations/hubspot-archive-company.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Archive company", () => { onDashboardRun({ title: "Archive company" }) hubspot.archiveCompany({ recordId: "12345" }) }) ``` ## Inputs Provide the HubSpot record ID. This action archives the record; it does not permanently erase it. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns when HubSpot accepts the archive operation. # Archive contact Source: https://docs.automate.ax/reference/integrations/hubspot/actions/archive-contact Move one HubSpot contact to the recycling bin. Use `hubspot.archiveContact` to move one HubSpot contact to the recycling bin. ```ts automations/hubspot-archive-contact.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Archive contact", () => { onDashboardRun({ title: "Archive contact" }) hubspot.archiveContact({ recordId: "12345" }) }) ``` ## Inputs Provide the HubSpot record ID. This action archives the record; it does not permanently erase it. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns when HubSpot accepts the archive operation. # Archive deal Source: https://docs.automate.ax/reference/integrations/hubspot/actions/archive-deal Move one HubSpot deal to the recycling bin. Use `hubspot.archiveDeal` to move one HubSpot deal to the recycling bin. ```ts automations/hubspot-archive-deal.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Archive deal", () => { onDashboardRun({ title: "Archive deal" }) hubspot.archiveDeal({ recordId: "12345" }) }) ``` ## Inputs Provide the HubSpot record ID. This action archives the record; it does not permanently erase it. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns when HubSpot accepts the archive operation. # Archive ticket Source: https://docs.automate.ax/reference/integrations/hubspot/actions/archive-ticket Move one HubSpot ticket to the recycling bin. Use `hubspot.archiveTicket` to move one HubSpot ticket to the recycling bin. ```ts automations/hubspot-archive-ticket.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Archive ticket", () => { onDashboardRun({ title: "Archive ticket" }) hubspot.archiveTicket({ recordId: "12345" }) }) ``` ## Inputs Provide the HubSpot record ID. This action archives the record; it does not permanently erase it. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns when HubSpot accepts the archive operation. # Associate company Source: https://docs.automate.ax/reference/integrations/hubspot/actions/associate-company Create a labeled association from a HubSpot company. Use `hubspot.associateCompany` to associate a company with another HubSpot CRM record. ```ts automations/hubspot-associate-company.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Associate company", () => { onDashboardRun({ title: "Associate company" }) hubspot.associateCompany({ fromRecordId: "456", toObjectType: "contacts", toRecordId: "123", associationTypes: [ { associationCategory: "HUBSPOT_DEFINED", associationTypeId: 2 }, ], }) }) ``` ## Inputs Provide the company ID, destination object type and record ID, and one or more association type IDs. Use `listAssociationLabels` to resolve valid labels. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns when HubSpot accepts the association. # Associate contact Source: https://docs.automate.ax/reference/integrations/hubspot/actions/associate-contact Create a labeled association from a HubSpot contact. Use `hubspot.associateContact` to associate a contact with another HubSpot CRM record. ```ts automations/hubspot-associate-contact.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Associate contact", () => { onDashboardRun({ title: "Associate contact" }) hubspot.associateContact({ fromRecordId: "123", toObjectType: "companies", toRecordId: "456", associationTypes: [ { associationCategory: "HUBSPOT_DEFINED", associationTypeId: 1 }, ], }) }) ``` ## Inputs Provide the contact ID, destination object type and record ID, and one or more association type IDs. Use `listAssociationLabels` to resolve valid labels. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns when HubSpot accepts the association. # Associate deal Source: https://docs.automate.ax/reference/integrations/hubspot/actions/associate-deal Create a labeled association from a HubSpot deal. Use `hubspot.associateDeal` to associate a deal with another HubSpot CRM record. ```ts automations/hubspot-associate-deal.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Associate deal", () => { onDashboardRun({ title: "Associate deal" }) hubspot.associateDeal({ fromRecordId: "789", toObjectType: "contacts", toRecordId: "123", associationTypes: [ { associationCategory: "HUBSPOT_DEFINED", associationTypeId: 3 }, ], }) }) ``` ## Inputs Provide the deal ID, destination object type and record ID, and one or more association type IDs. Use `listAssociationLabels` to resolve valid labels. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns when HubSpot accepts the association. # Associate ticket Source: https://docs.automate.ax/reference/integrations/hubspot/actions/associate-ticket Create a labeled association from a HubSpot ticket. Use `hubspot.associateTicket` to associate a ticket with another HubSpot CRM record. ```ts automations/hubspot-associate-ticket.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Associate ticket", () => { onDashboardRun({ title: "Associate ticket" }) hubspot.associateTicket({ fromRecordId: "987", toObjectType: "contacts", toRecordId: "123", associationTypes: [ { associationCategory: "HUBSPOT_DEFINED", associationTypeId: 16 }, ], }) }) ``` ## Inputs Provide the ticket ID, destination object type and record ID, and one or more association type IDs. Use `listAssociationLabels` to resolve valid labels. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns when HubSpot accepts the association. # Create company Source: https://docs.automate.ax/reference/integrations/hubspot/actions/create-company Create one HubSpot company. Use `hubspot.createCompany` to create one HubSpot company. ```ts automations/hubspot-create-company.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Create company", () => { onDashboardRun({ title: "Create company" }) hubspot.createCompany({ properties: [{ name: "name", value: "Acme" }], }) }) ``` ## Inputs Provide at least one `{ name, value }` property. An empty string clears a writable value. Optional `associations` create labeled links atomically with the record. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns the created HubSpot company record. # Create contact Source: https://docs.automate.ax/reference/integrations/hubspot/actions/create-contact Create one HubSpot contact. Use `hubspot.createContact` to create one HubSpot contact. ```ts automations/hubspot-create-contact.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Create contact", () => { onDashboardRun({ title: "Create contact" }) hubspot.createContact({ properties: [{ name: "email", value: "ada@acme.example" }], }) }) ``` ## Inputs Provide at least one `{ name, value }` property. An empty string clears a writable value. Optional `associations` create labeled links atomically with the record. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns the created HubSpot contact record. # Create deal Source: https://docs.automate.ax/reference/integrations/hubspot/actions/create-deal Create one HubSpot deal. Use `hubspot.createDeal` to create one HubSpot deal. ```ts automations/hubspot-create-deal.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Create deal", () => { onDashboardRun({ title: "Create deal" }) hubspot.createDeal({ properties: [{ name: "dealname", value: "Enterprise renewal" }], }) }) ``` ## Inputs Provide at least one `{ name, value }` property. An empty string clears a writable value. Optional `associations` create labeled links atomically with the record. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns the created HubSpot deal record. # Create meeting Source: https://docs.automate.ax/reference/integrations/hubspot/actions/create-meeting Create a meeting activity on HubSpot CRM record timelines. Use `hubspot.createMeeting` to create a meeting activity on HubSpot CRM record timelines. ```ts automations/hubspot-create-meeting.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Create meeting", () => { onDashboardRun({ title: "Create meeting" }) hubspot.createMeeting({ timestamp: new Date(), title: "Implementation kickoff", startTime: new Date(), }) }) ``` ## Inputs `timestamp` is required. Optional fields include title, notes, start and end times, outcome, location, external URL, owner, and associations. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns the created HubSpot meeting activity record. # Create note Source: https://docs.automate.ax/reference/integrations/hubspot/actions/create-note Create a note on HubSpot CRM record timelines. Use `hubspot.createNote` to create a note on HubSpot CRM record timelines. ```ts automations/hubspot-create-note.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Create note", () => { onDashboardRun({ title: "Create note" }) hubspot.createNote({ timestamp: new Date(), body: "Customer approved the implementation plan.", }) }) ``` ## Inputs `timestamp` is required. Add `body`, optional HubSpot file `attachmentIds`, owner, and record associations. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns the created HubSpot note activity record. # Create task Source: https://docs.automate.ax/reference/integrations/hubspot/actions/create-task Create a HubSpot CRM task. Use `hubspot.createTask` to create a HubSpot CRM task. ```ts automations/hubspot-create-task.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Create task", () => { onDashboardRun({ title: "Create task" }) hubspot.createTask({ timestamp: new Date(), subject: "Send implementation plan", taskType: "TODO", }) }) ``` ## Inputs `timestamp` is required. Optional fields include subject, body, priority, status, task type, owner, and record associations. Status defaults to `NOT_STARTED`; task type defaults to `TODO`. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns the created HubSpot task activity record. # Create ticket Source: https://docs.automate.ax/reference/integrations/hubspot/actions/create-ticket Create one HubSpot ticket. Use `hubspot.createTicket` to create one HubSpot ticket. ```ts automations/hubspot-create-ticket.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Create ticket", () => { onDashboardRun({ title: "Create ticket" }) hubspot.createTicket({ properties: [{ name: "subject", value: "Login issue" }], }) }) ``` ## Inputs Provide at least one `{ name, value }` property. An empty string clears a writable value. Optional `associations` create labeled links atomically with the record. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns the created HubSpot ticket record. # Get company Source: https://docs.automate.ax/reference/integrations/hubspot/actions/get-company Retrieve one HubSpot company by a stable identifier. Use `hubspot.getCompany` to retrieve one HubSpot company by a stable identifier. ```ts automations/hubspot-get-company.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Get company", () => { onDashboardRun({ title: "Get company" }) hubspot.getCompany({ recordId: "12345" }) }) ``` ## Inputs Provide `recordId`. Set `idProperty` to use a unique property value instead of HubSpot's record ID. Optional read fields match the list action. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns one HubSpot company record with properties, requested associations, and property history. # Get contact Source: https://docs.automate.ax/reference/integrations/hubspot/actions/get-contact Retrieve one HubSpot contact by a stable identifier. Use `hubspot.getContact` to retrieve one HubSpot contact by a stable identifier. ```ts automations/hubspot-get-contact.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Get contact", () => { onDashboardRun({ title: "Get contact" }) hubspot.getContact({ recordId: "12345" }) }) ``` ## Inputs Provide `recordId`. Set `idProperty` to use a unique property value instead of HubSpot's record ID. Optional read fields match the list action. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns one HubSpot contact record with properties, requested associations, and property history. # Get deal Source: https://docs.automate.ax/reference/integrations/hubspot/actions/get-deal Retrieve one HubSpot deal by a stable identifier. Use `hubspot.getDeal` to retrieve one HubSpot deal by a stable identifier. ```ts automations/hubspot-get-deal.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Get deal", () => { onDashboardRun({ title: "Get deal" }) hubspot.getDeal({ recordId: "12345" }) }) ``` ## Inputs Provide `recordId`. Set `idProperty` to use a unique property value instead of HubSpot's record ID. Optional read fields match the list action. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns one HubSpot deal record with properties, requested associations, and property history. # Get owner Source: https://docs.automate.ax/reference/integrations/hubspot/actions/get-owner Retrieve one HubSpot owner by owner or user ID. Use `hubspot.getOwner` to retrieve one HubSpot owner by owner or user ID. ```ts automations/hubspot-get-owner.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Get owner", () => { onDashboardRun({ title: "Get owner" }) hubspot.getOwner({ id: "12345" }) }) ``` ## Inputs Provide `id`. Set `idProperty: "userId"` when the value is a HubSpot user ID. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns owner identity, teams, archive state, and timestamps. # Get ticket Source: https://docs.automate.ax/reference/integrations/hubspot/actions/get-ticket Retrieve one HubSpot ticket by a stable identifier. Use `hubspot.getTicket` to retrieve one HubSpot ticket by a stable identifier. ```ts automations/hubspot-get-ticket.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Get ticket", () => { onDashboardRun({ title: "Get ticket" }) hubspot.getTicket({ recordId: "12345" }) }) ``` ## Inputs Provide `recordId`. Set `idProperty` to use a unique property value instead of HubSpot's record ID. Optional read fields match the list action. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns one HubSpot ticket record with properties, requested associations, and property history. # List association labels Source: https://docs.automate.ax/reference/integrations/hubspot/actions/list-association-labels List labels available between two HubSpot CRM object types. Use `hubspot.listAssociationLabels` to list labels available between two HubSpot CRM object types. ```ts automations/hubspot-list-association-labels.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("List association labels", () => { onDashboardRun({ title: "List association labels" }) hubspot.listAssociationLabels({ fromObjectType: "contacts", toObjectType: "companies", }) }) ``` ## Inputs Provide the directed `fromObjectType` and `toObjectType`. Association type IDs are directional. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns default and custom association labels with category and type ID. # List companies Source: https://docs.automate.ax/reference/integrations/hubspot/actions/list-companies List HubSpot companies with cursor pagination. Use `hubspot.listCompanies` to list HubSpot companies with cursor pagination. ```ts automations/hubspot-list-companies.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("List companies", () => { onDashboardRun({ title: "List companies" }) hubspot.listCompanies({ limit: 100 }) }) ``` ## Inputs Set `limit` from 1 to 100 and pass `after` from the previous page. Optional `properties`, `propertiesWithHistory`, `associations`, and `archived` fields control expansion. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns `records`, optional `total`, and `pageInfo.after` for the next page. # List contacts Source: https://docs.automate.ax/reference/integrations/hubspot/actions/list-contacts List HubSpot contacts with cursor pagination. Use `hubspot.listContacts` to list HubSpot contacts with cursor pagination. ```ts automations/hubspot-list-contacts.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("List contacts", () => { onDashboardRun({ title: "List contacts" }) hubspot.listContacts({ limit: 100 }) }) ``` ## Inputs Set `limit` from 1 to 100 and pass `after` from the previous page. Optional `properties`, `propertiesWithHistory`, `associations`, and `archived` fields control expansion. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns `records`, optional `total`, and `pageInfo.after` for the next page. # List deals Source: https://docs.automate.ax/reference/integrations/hubspot/actions/list-deals List HubSpot deals with cursor pagination. Use `hubspot.listDeals` to list HubSpot deals with cursor pagination. ```ts automations/hubspot-list-deals.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("List deals", () => { onDashboardRun({ title: "List deals" }) hubspot.listDeals({ limit: 100 }) }) ``` ## Inputs Set `limit` from 1 to 100 and pass `after` from the previous page. Optional `properties`, `propertiesWithHistory`, `associations`, and `archived` fields control expansion. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns `records`, optional `total`, and `pageInfo.after` for the next page. # List owners Source: https://docs.automate.ax/reference/integrations/hubspot/actions/list-owners List HubSpot owners who can own CRM records. Use `hubspot.listOwners` to list HubSpot owners who can own CRM records. ```ts automations/hubspot-list-owners.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("List owners", () => { onDashboardRun({ title: "List owners" }) hubspot.listOwners({ limit: 100 }) }) ``` ## Inputs Pass `limit`, `after`, and optional `archived` to page through owners. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns `owners` and optional `after` for the next page. # List pipelines Source: https://docs.automate.ax/reference/integrations/hubspot/actions/list-pipelines List HubSpot deal or ticket pipelines and stages. Use `hubspot.listPipelines` to list HubSpot deal or ticket pipelines and stages. ```ts automations/hubspot-list-pipelines.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("List pipelines", () => { onDashboardRun({ title: "List pipelines" }) hubspot.listPipelines({ objectType: "deals" }) }) ``` ## Inputs Set `objectType` to `deals` or `tickets`. Set `archived` to include archived pipelines. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns ordered pipelines with their ordered stages and stage metadata. # List properties Source: https://docs.automate.ax/reference/integrations/hubspot/actions/list-properties List property definitions for a HubSpot CRM object type. Use `hubspot.listProperties` to list property definitions for a HubSpot CRM object type. ```ts automations/hubspot-list-properties.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("List properties", () => { onDashboardRun({ title: "List properties" }) hubspot.listProperties({ objectType: "contacts" }) }) ``` ## Inputs Provide a supported CRM object type or object type ID. Set `archived` to include archived definitions. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns property names, labels, field types, groups, options, and visibility metadata. # List tickets Source: https://docs.automate.ax/reference/integrations/hubspot/actions/list-tickets List HubSpot tickets with cursor pagination. Use `hubspot.listTickets` to list HubSpot tickets with cursor pagination. ```ts automations/hubspot-list-tickets.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("List tickets", () => { onDashboardRun({ title: "List tickets" }) hubspot.listTickets({ limit: 100 }) }) ``` ## Inputs Set `limit` from 1 to 100 and pass `after` from the previous page. Optional `properties`, `propertiesWithHistory`, `associations`, and `archived` fields control expansion. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns `records`, optional `total`, and `pageInfo.after` for the next page. # Log call Source: https://docs.automate.ax/reference/integrations/hubspot/actions/log-call Log a call on HubSpot CRM record timelines. Use `hubspot.logCall` to log a call on HubSpot CRM record timelines. ```ts automations/hubspot-log-call.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Log call", () => { onDashboardRun({ title: "Log call" }) hubspot.logCall({ timestamp: new Date(), direction: "OUTBOUND", status: "COMPLETED", title: "Discovery call", }) }) ``` ## Inputs `timestamp` is required. Optional fields include direction, status, title, body, numbers, duration, recording URL, owner, and associations. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns the created HubSpot call activity record. # Log email Source: https://docs.automate.ax/reference/integrations/hubspot/actions/log-email Log an email on HubSpot CRM record timelines without sending it. Use `hubspot.logEmail` to log an email on HubSpot CRM record timelines without sending it. ```ts automations/hubspot-log-email.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Log email", () => { onDashboardRun({ title: "Log email" }) hubspot.logEmail({ timestamp: new Date(), subject: "Proposal follow-up", text: "Sent the revised proposal.", from: "ada@acme.example", to: "buyer@example.com", status: "SENT", }) }) ``` ## Inputs `timestamp` is required. Optional fields include subject, text, HTML, sender and recipient email addresses, direction, status, owner, and associations. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns the created HubSpot email activity record. # Remove company association Source: https://docs.automate.ax/reference/integrations/hubspot/actions/remove-company-association Remove one association label from a HubSpot company. Use `hubspot.removeCompanyAssociation` to remove one association label from a company. ```ts automations/hubspot-remove-company-association.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Remove company association", () => { onDashboardRun({ title: "Remove company association" }) hubspot.removeCompanyAssociation({ associationCategory: "HUBSPOT_DEFINED", fromRecordId: "456", toObjectType: "contacts", toRecordId: "123", associationTypeId: 2, }) }) ``` ## Inputs Provide the company ID, destination object type and record ID, association category, and exact association type ID to remove. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns when HubSpot accepts the removal. # Remove contact association Source: https://docs.automate.ax/reference/integrations/hubspot/actions/remove-contact-association Remove one association label from a HubSpot contact. Use `hubspot.removeContactAssociation` to remove one association label from a contact. ```ts automations/hubspot-remove-contact-association.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Remove contact association", () => { onDashboardRun({ title: "Remove contact association" }) hubspot.removeContactAssociation({ associationCategory: "HUBSPOT_DEFINED", fromRecordId: "123", toObjectType: "companies", toRecordId: "456", associationTypeId: 1, }) }) ``` ## Inputs Provide the contact ID, destination object type and record ID, association category, and exact association type ID to remove. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns when HubSpot accepts the removal. # Remove deal association Source: https://docs.automate.ax/reference/integrations/hubspot/actions/remove-deal-association Remove one association label from a HubSpot deal. Use `hubspot.removeDealAssociation` to remove one association label from a deal. ```ts automations/hubspot-remove-deal-association.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Remove deal association", () => { onDashboardRun({ title: "Remove deal association" }) hubspot.removeDealAssociation({ associationCategory: "HUBSPOT_DEFINED", fromRecordId: "789", toObjectType: "contacts", toRecordId: "123", associationTypeId: 3, }) }) ``` ## Inputs Provide the deal ID, destination object type and record ID, association category, and exact association type ID to remove. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns when HubSpot accepts the removal. # Remove ticket association Source: https://docs.automate.ax/reference/integrations/hubspot/actions/remove-ticket-association Remove one association label from a HubSpot ticket. Use `hubspot.removeTicketAssociation` to remove one association label from a ticket. ```ts automations/hubspot-remove-ticket-association.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Remove ticket association", () => { onDashboardRun({ title: "Remove ticket association" }) hubspot.removeTicketAssociation({ associationCategory: "HUBSPOT_DEFINED", fromRecordId: "987", toObjectType: "contacts", toRecordId: "123", associationTypeId: 16, }) }) ``` ## Inputs Provide the ticket ID, destination object type and record ID, association category, and exact association type ID to remove. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns when HubSpot accepts the removal. # Search companies Source: https://docs.automate.ax/reference/integrations/hubspot/actions/search-companies Search HubSpot companies by CRM property values. Use `hubspot.searchCompanies` to search HubSpot companies by CRM property values. ```ts automations/hubspot-search-companies.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Search companies", () => { onDashboardRun({ title: "Search companies" }) hubspot.searchCompanies({ filterGroups: [ { filters: [{ propertyName: "name", operator: "EQ", value: "Acme" }], }, ], limit: 100, }) }) ``` ## Inputs `filterGroups` are OR groups whose filters use AND logic. HubSpot accepts at most five groups, six filters per group, and 18 filters total. You can also pass `query`, one `sort`, `properties`, `after`, and `limit` up to 200. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns matching `records`, optional `total`, and `pageInfo.after`. HubSpot search returns at most 10,000 results for one query. # Search contacts Source: https://docs.automate.ax/reference/integrations/hubspot/actions/search-contacts Search HubSpot contacts by CRM property values. Use `hubspot.searchContacts` to search HubSpot contacts by CRM property values. ```ts automations/hubspot-search-contacts.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Search contacts", () => { onDashboardRun({ title: "Search contacts" }) hubspot.searchContacts({ filterGroups: [ { filters: [ { propertyName: "email", operator: "EQ", value: "ada@acme.example" }, ], }, ], limit: 100, }) }) ``` ## Inputs `filterGroups` are OR groups whose filters use AND logic. HubSpot accepts at most five groups, six filters per group, and 18 filters total. You can also pass `query`, one `sort`, `properties`, `after`, and `limit` up to 200. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns matching `records`, optional `total`, and `pageInfo.after`. HubSpot search returns at most 10,000 results for one query. # Search deals Source: https://docs.automate.ax/reference/integrations/hubspot/actions/search-deals Search HubSpot deals by CRM property values. Use `hubspot.searchDeals` to search HubSpot deals by CRM property values. ```ts automations/hubspot-search-deals.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Search deals", () => { onDashboardRun({ title: "Search deals" }) hubspot.searchDeals({ filterGroups: [ { filters: [ { propertyName: "dealname", operator: "EQ", value: "Enterprise renewal", }, ], }, ], limit: 100, }) }) ``` ## Inputs `filterGroups` are OR groups whose filters use AND logic. HubSpot accepts at most five groups, six filters per group, and 18 filters total. You can also pass `query`, one `sort`, `properties`, `after`, and `limit` up to 200. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns matching `records`, optional `total`, and `pageInfo.after`. HubSpot search returns at most 10,000 results for one query. # Search tickets Source: https://docs.automate.ax/reference/integrations/hubspot/actions/search-tickets Search HubSpot tickets by CRM property values. Use `hubspot.searchTickets` to search HubSpot tickets by CRM property values. ```ts automations/hubspot-search-tickets.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Search tickets", () => { onDashboardRun({ title: "Search tickets" }) hubspot.searchTickets({ filterGroups: [ { filters: [ { propertyName: "subject", operator: "EQ", value: "Login issue" }, ], }, ], limit: 100, }) }) ``` ## Inputs `filterGroups` are OR groups whose filters use AND logic. HubSpot accepts at most five groups, six filters per group, and 18 filters total. You can also pass `query`, one `sort`, `properties`, `after`, and `limit` up to 200. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns matching `records`, optional `total`, and `pageInfo.after`. HubSpot search returns at most 10,000 results for one query. # Update company Source: https://docs.automate.ax/reference/integrations/hubspot/actions/update-company Update writable properties on one HubSpot company. Use `hubspot.updateCompany` to update writable properties on one HubSpot company. ```ts automations/hubspot-update-company.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Update company", () => { onDashboardRun({ title: "Update company" }) hubspot.updateCompany({ recordId: "12345", properties: [{ name: "name", value: "Acme" }], }) }) ``` ## Inputs Provide `recordId` and at least one property. Optional `idProperty` treats `recordId` as a unique property value. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns the updated HubSpot company record. # Update contact Source: https://docs.automate.ax/reference/integrations/hubspot/actions/update-contact Update writable properties on one HubSpot contact. Use `hubspot.updateContact` to update writable properties on one HubSpot contact. ```ts automations/hubspot-update-contact.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Update contact", () => { onDashboardRun({ title: "Update contact" }) hubspot.updateContact({ recordId: "12345", properties: [{ name: "email", value: "ada@acme.example" }], }) }) ``` ## Inputs Provide `recordId` and at least one property. Optional `idProperty` treats `recordId` as a unique property value. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns the updated HubSpot contact record. # Update deal Source: https://docs.automate.ax/reference/integrations/hubspot/actions/update-deal Update writable properties on one HubSpot deal. Use `hubspot.updateDeal` to update writable properties on one HubSpot deal. ```ts automations/hubspot-update-deal.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Update deal", () => { onDashboardRun({ title: "Update deal" }) hubspot.updateDeal({ recordId: "12345", properties: [{ name: "dealname", value: "Enterprise renewal" }], }) }) ``` ## Inputs Provide `recordId` and at least one property. Optional `idProperty` treats `recordId` as a unique property value. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns the updated HubSpot deal record. # Update ticket Source: https://docs.automate.ax/reference/integrations/hubspot/actions/update-ticket Update writable properties on one HubSpot ticket. Use `hubspot.updateTicket` to update writable properties on one HubSpot ticket. ```ts automations/hubspot-update-ticket.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Update ticket", () => { onDashboardRun({ title: "Update ticket" }) hubspot.updateTicket({ recordId: "12345", properties: [{ name: "subject", value: "Login issue" }], }) }) ``` ## Inputs Provide `recordId` and at least one property. Optional `idProperty` treats `recordId` as a unique property value. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns the updated HubSpot ticket record. # Upsert contacts Source: https://docs.automate.ax/reference/integrations/hubspot/actions/upsert-contacts Batch create or update HubSpot contacts by unique property. Use `hubspot.upsertContacts` to batch create or update HubSpot contacts by unique property. ```ts automations/hubspot-upsert-contacts.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Upsert contacts", () => { onDashboardRun({ title: "Upsert contacts" }) hubspot.upsertContacts({ contacts: [ { idProperty: "email", id: "ada@acme.example", properties: [{ name: "firstname", value: "Ada" }], }, ], }) }) ``` ## Inputs Provide 1–100 contacts. Each row names its unique `idProperty`, identifier `id`, and writable properties. Optional second argument `{ account }` selects a named HubSpot binding. ## Output Returns the created or updated `contacts`. Replaying the same unique identifiers is safe. If HubSpot rejects any row, the action fails instead of returning an incomplete result. # HubSpot Source: https://docs.automate.ax/reference/integrations/hubspot/index Use HubSpot's 2026-03 CRM API and verified portal webhooks for records, activities, and associations. ```ts automations/follow-up-hubspot-contacts.automation.ts theme={null} import { automation } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("Follow up on HubSpot contacts", () => { const contact = hubspot.onContactCreated() hubspot.createTask({ timestamp: contact.occurredAt, subject: "Qualify the new contact", associations: [ { toRecordId: contact.objectId, types: [ { associationCategory: "HUBSPOT_DEFINED", associationTypeId: 204, }, ], }, ], }) }) ``` Connect HubSpot with OAuth or a private app access token. OAuth is required for triggers because HubSpot delivers app-level webhooks by portal. Actions support either connection method when its token has the required scope. CRM actions use HubSpot's `2026-03` API. Property inputs are arrays of `{ name, value }` entries so provider property names remain data rather than TypeScript field names. Record dates become JavaScript `Date` values. List and search results include an opaque `pageInfo.after` cursor for the next request. HubSpot webhooks cover contacts, companies, deals, and tickets. Automate.ax verifies the exact request body with the HubSpot app secret, deduplicates retries, and classifies broad deliveries into typed creation, property-change, deletion, merge, restore, and association triggers. Property-change triggers receive the properties enabled in the HubSpot app's webhook configuration. HubSpot returns archived records from its recycling bin when an action accepts `archived: true`. Archive actions do not permanently erase CRM records. ## Exports ```ts theme={null} import { hubspot, hubspotAccount, getHubSpotApi } from "automate.ax/hubspot" ``` * `hubspot` contains the packaged HubSpot actions and triggers. * `hubspotAccount("name")` selects a named HubSpot connection. * `getHubSpotApi` creates the authenticated HubSpot API helper for a custom account-backed action. ## Triggers * [On HubSpot CRM event](/reference/integrations/hubspot/triggers/on-hubspot-crm-event) * [On HubSpot contact created](/reference/integrations/hubspot/triggers/on-hubspot-contact-created) * [On HubSpot contact updated](/reference/integrations/hubspot/triggers/on-hubspot-contact-updated) * [On HubSpot contact deleted](/reference/integrations/hubspot/triggers/on-hubspot-contact-deleted) * [On HubSpot contact merged](/reference/integrations/hubspot/triggers/on-hubspot-contact-merged) * [On HubSpot contact restored](/reference/integrations/hubspot/triggers/on-hubspot-contact-restored) * [On HubSpot contact association added](/reference/integrations/hubspot/triggers/on-hubspot-contact-association-added) * [On HubSpot contact association removed](/reference/integrations/hubspot/triggers/on-hubspot-contact-association-removed) * [On HubSpot company created](/reference/integrations/hubspot/triggers/on-hubspot-company-created) * [On HubSpot company updated](/reference/integrations/hubspot/triggers/on-hubspot-company-updated) * [On HubSpot company deleted](/reference/integrations/hubspot/triggers/on-hubspot-company-deleted) * [On HubSpot company merged](/reference/integrations/hubspot/triggers/on-hubspot-company-merged) * [On HubSpot company restored](/reference/integrations/hubspot/triggers/on-hubspot-company-restored) * [On HubSpot company association added](/reference/integrations/hubspot/triggers/on-hubspot-company-association-added) * [On HubSpot company association removed](/reference/integrations/hubspot/triggers/on-hubspot-company-association-removed) * [On HubSpot deal created](/reference/integrations/hubspot/triggers/on-hubspot-deal-created) * [On HubSpot deal updated](/reference/integrations/hubspot/triggers/on-hubspot-deal-updated) * [On HubSpot deal deleted](/reference/integrations/hubspot/triggers/on-hubspot-deal-deleted) * [On HubSpot deal merged](/reference/integrations/hubspot/triggers/on-hubspot-deal-merged) * [On HubSpot deal restored](/reference/integrations/hubspot/triggers/on-hubspot-deal-restored) * [On HubSpot deal association added](/reference/integrations/hubspot/triggers/on-hubspot-deal-association-added) * [On HubSpot deal association removed](/reference/integrations/hubspot/triggers/on-hubspot-deal-association-removed) * [On HubSpot ticket created](/reference/integrations/hubspot/triggers/on-hubspot-ticket-created) * [On HubSpot ticket updated](/reference/integrations/hubspot/triggers/on-hubspot-ticket-updated) * [On HubSpot ticket deleted](/reference/integrations/hubspot/triggers/on-hubspot-ticket-deleted) * [On HubSpot ticket merged](/reference/integrations/hubspot/triggers/on-hubspot-ticket-merged) * [On HubSpot ticket restored](/reference/integrations/hubspot/triggers/on-hubspot-ticket-restored) * [On HubSpot ticket association added](/reference/integrations/hubspot/triggers/on-hubspot-ticket-association-added) * [On HubSpot ticket association removed](/reference/integrations/hubspot/triggers/on-hubspot-ticket-association-removed) ## Actions * [List contacts](/reference/integrations/hubspot/actions/list-contacts) * [Get contact](/reference/integrations/hubspot/actions/get-contact) * [Search contacts](/reference/integrations/hubspot/actions/search-contacts) * [Create contact](/reference/integrations/hubspot/actions/create-contact) * [Update contact](/reference/integrations/hubspot/actions/update-contact) * [Archive contact](/reference/integrations/hubspot/actions/archive-contact) * [List companies](/reference/integrations/hubspot/actions/list-companies) * [Get company](/reference/integrations/hubspot/actions/get-company) * [Search companies](/reference/integrations/hubspot/actions/search-companies) * [Create company](/reference/integrations/hubspot/actions/create-company) * [Update company](/reference/integrations/hubspot/actions/update-company) * [Archive company](/reference/integrations/hubspot/actions/archive-company) * [List deals](/reference/integrations/hubspot/actions/list-deals) * [Get deal](/reference/integrations/hubspot/actions/get-deal) * [Search deals](/reference/integrations/hubspot/actions/search-deals) * [Create deal](/reference/integrations/hubspot/actions/create-deal) * [Update deal](/reference/integrations/hubspot/actions/update-deal) * [Archive deal](/reference/integrations/hubspot/actions/archive-deal) * [List tickets](/reference/integrations/hubspot/actions/list-tickets) * [Get ticket](/reference/integrations/hubspot/actions/get-ticket) * [Search tickets](/reference/integrations/hubspot/actions/search-tickets) * [Create ticket](/reference/integrations/hubspot/actions/create-ticket) * [Update ticket](/reference/integrations/hubspot/actions/update-ticket) * [Archive ticket](/reference/integrations/hubspot/actions/archive-ticket) * [Upsert contacts](/reference/integrations/hubspot/actions/upsert-contacts) * [List owners](/reference/integrations/hubspot/actions/list-owners) * [Get owner](/reference/integrations/hubspot/actions/get-owner) * [List properties](/reference/integrations/hubspot/actions/list-properties) * [List pipelines](/reference/integrations/hubspot/actions/list-pipelines) * [List association labels](/reference/integrations/hubspot/actions/list-association-labels) * [Associate contact](/reference/integrations/hubspot/actions/associate-contact) * [Associate company](/reference/integrations/hubspot/actions/associate-company) * [Associate deal](/reference/integrations/hubspot/actions/associate-deal) * [Associate ticket](/reference/integrations/hubspot/actions/associate-ticket) * [Remove contact association](/reference/integrations/hubspot/actions/remove-contact-association) * [Remove company association](/reference/integrations/hubspot/actions/remove-company-association) * [Remove deal association](/reference/integrations/hubspot/actions/remove-deal-association) * [Remove ticket association](/reference/integrations/hubspot/actions/remove-ticket-association) * [Log call](/reference/integrations/hubspot/actions/log-call) * [Log email](/reference/integrations/hubspot/actions/log-email) * [Create meeting](/reference/integrations/hubspot/actions/create-meeting) * [Create note](/reference/integrations/hubspot/actions/create-note) * [Create task](/reference/integrations/hubspot/actions/create-task) # On HubSpot company association added Source: https://docs.automate.ax/reference/integrations/hubspot/triggers/on-hubspot-company-association-added Run when a HubSpot company has an association added. Use `hubspot.onCompanyAssociationAdded` to run when a HubSpot company has an association added. ```ts automations/on-hubspot-company-association-added.automation.ts theme={null} import { automation } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("On HubSpot company association added", () => { const event = hubspot.onCompanyAssociationAdded() // Reconcile the added HubSpot company association. }) ``` Optional static `account` selects a named HubSpot OAuth binding; the project binding is the default. HubSpot triggers require OAuth because Automate.ax manages Journal subscriptions for each installed HubSpot account. ## Trigger data Returns a typed HubSpot CRM event with `portalId`, `objectId`, `objectType`, `action`, `occurredAt`, and `journalOffset`. `publishedAt` is present when HubSpot includes the Journal publication time. The event includes `fromObjectId`, `fromObjectTypeId`, `toObjectId`, `toObjectTypeId`, `associationCategory`, `associationTypeId`, and `isPrimary`. Automate.ax consumes HubSpot's ordered Webhooks Journal and deduplicates replayed events. # On HubSpot company association removed Source: https://docs.automate.ax/reference/integrations/hubspot/triggers/on-hubspot-company-association-removed Run when a HubSpot company has an association removed. Use `hubspot.onCompanyAssociationRemoved` to run when a HubSpot company has an association removed. ```ts automations/on-hubspot-company-association-removed.automation.ts theme={null} import { automation } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("On HubSpot company association removed", () => { const event = hubspot.onCompanyAssociationRemoved() // Reconcile the removed HubSpot company association. }) ``` Optional static `account` selects a named HubSpot OAuth binding; the project binding is the default. HubSpot triggers require OAuth because Automate.ax manages Journal subscriptions for each installed HubSpot account. ## Trigger data Returns a typed HubSpot CRM event with `portalId`, `objectId`, `objectType`, `action`, `occurredAt`, and `journalOffset`. `publishedAt` is present when HubSpot includes the Journal publication time. The event includes `fromObjectId`, `fromObjectTypeId`, `toObjectId`, `toObjectTypeId`, `associationCategory`, `associationTypeId`, and `isPrimary`. Automate.ax consumes HubSpot's ordered Webhooks Journal and deduplicates replayed events. # On HubSpot company created Source: https://docs.automate.ax/reference/integrations/hubspot/triggers/on-hubspot-company-created Run when a HubSpot company is created. Use `hubspot.onCompanyCreated` to run when a HubSpot company is created. ```ts automations/on-hubspot-company-created.automation.ts theme={null} import { automation } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("On HubSpot company created", () => { const event = hubspot.onCompanyCreated() // Enrich the new HubSpot company. }) ``` Optional static `account` selects a named HubSpot OAuth binding; the project binding is the default. HubSpot triggers require OAuth because Automate.ax manages Journal subscriptions for each installed HubSpot account. ## Trigger data Returns a typed HubSpot CRM event with `portalId`, `objectId`, `objectType`, `action`, `occurredAt`, and `journalOffset`. `publishedAt` is present when HubSpot includes the Journal publication time. The event identifies the affected record with `objectId`. Automate.ax consumes HubSpot's ordered Webhooks Journal and deduplicates replayed events. # On HubSpot company deleted Source: https://docs.automate.ax/reference/integrations/hubspot/triggers/on-hubspot-company-deleted Run when a HubSpot company is deleted. Use `hubspot.onCompanyDeleted` to run when a HubSpot company is deleted. ```ts automations/on-hubspot-company-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("On HubSpot company deleted", () => { const event = hubspot.onCompanyDeleted() // Remove state tied to the deleted HubSpot company. }) ``` Optional static `account` selects a named HubSpot OAuth binding; the project binding is the default. HubSpot triggers require OAuth because Automate.ax manages Journal subscriptions for each installed HubSpot account. ## Trigger data Returns a typed HubSpot CRM event with `portalId`, `objectId`, `objectType`, `action`, `occurredAt`, and `journalOffset`. `publishedAt` is present when HubSpot includes the Journal publication time. The event identifies the affected record with `objectId`. Automate.ax consumes HubSpot's ordered Webhooks Journal and deduplicates replayed events. # On HubSpot company merged Source: https://docs.automate.ax/reference/integrations/hubspot/triggers/on-hubspot-company-merged Run when a HubSpot company is merged. Use `hubspot.onCompanyMerged` to run when a HubSpot company is merged. ```ts automations/on-hubspot-company-merged.automation.ts theme={null} import { automation } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("On HubSpot company merged", () => { const event = hubspot.onCompanyMerged() // Reconcile records tied to the merged HubSpot company. }) ``` Optional static `account` selects a named HubSpot OAuth binding; the project binding is the default. HubSpot triggers require OAuth because Automate.ax manages Journal subscriptions for each installed HubSpot account. ## Trigger data Returns a typed HubSpot CRM event with `portalId`, `objectId`, `objectType`, `action`, `occurredAt`, and `journalOffset`. `publishedAt` is present when HubSpot includes the Journal publication time. It can also include `mergedObjectIds`, `newObjectId`, `primaryObjectId`, and `numberOfPropertiesMoved` when HubSpot supplies them. Automate.ax consumes HubSpot's ordered Webhooks Journal and deduplicates replayed events. # On HubSpot company restored Source: https://docs.automate.ax/reference/integrations/hubspot/triggers/on-hubspot-company-restored Run when a HubSpot company is restored from the recycling bin. Use `hubspot.onCompanyRestored` to run when a HubSpot company is restored from the recycling bin. ```ts automations/on-hubspot-company-restored.automation.ts theme={null} import { automation } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("On HubSpot company restored", () => { const event = hubspot.onCompanyRestored() // Reprocess the restored HubSpot company. }) ``` Optional static `account` selects a named HubSpot OAuth binding; the project binding is the default. HubSpot triggers require OAuth because Automate.ax manages Journal subscriptions for each installed HubSpot account. ## Trigger data Returns a typed HubSpot CRM event with `portalId`, `objectId`, `objectType`, `action`, `occurredAt`, and `journalOffset`. `publishedAt` is present when HubSpot includes the Journal publication time. The event identifies the affected record with `objectId`. Automate.ax consumes HubSpot's ordered Webhooks Journal and deduplicates replayed events. # On HubSpot company updated Source: https://docs.automate.ax/reference/integrations/hubspot/triggers/on-hubspot-company-updated Run when any property on a HubSpot company changes. Use `hubspot.onCompanyUpdated` to run when any property on a HubSpot company changes. ```ts automations/on-hubspot-company-updated.automation.ts theme={null} import { automation } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("On HubSpot company updated", () => { const event = hubspot.onCompanyUpdated() // Use event.objectId and event.propertyChanges to route the company update. }) ``` Optional static `account` selects a named HubSpot OAuth binding; the project binding is the default. HubSpot triggers require OAuth because Automate.ax manages Journal subscriptions for each installed HubSpot account. ## Trigger data Returns a typed HubSpot CRM event with `portalId`, `objectId`, `objectType`, `action`, `occurredAt`, and `journalOffset`. `publishedAt` is present when HubSpot includes the Journal publication time. `propertyChanges` maps every property included in that Journal update to its new value. Automate.ax subscribes with an empty property list so any changed property can trigger the automation. Automate.ax consumes HubSpot's ordered Webhooks Journal and deduplicates replayed events. # On HubSpot contact association added Source: https://docs.automate.ax/reference/integrations/hubspot/triggers/on-hubspot-contact-association-added Run when a HubSpot contact has an association added. Use `hubspot.onContactAssociationAdded` to run when a HubSpot contact has an association added. ```ts automations/on-hubspot-contact-association-added.automation.ts theme={null} import { automation } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("On HubSpot contact association added", () => { const event = hubspot.onContactAssociationAdded() // Reconcile the added HubSpot contact association. }) ``` Optional static `account` selects a named HubSpot OAuth binding; the project binding is the default. HubSpot triggers require OAuth because Automate.ax manages Journal subscriptions for each installed HubSpot account. ## Trigger data Returns a typed HubSpot CRM event with `portalId`, `objectId`, `objectType`, `action`, `occurredAt`, and `journalOffset`. `publishedAt` is present when HubSpot includes the Journal publication time. The event includes `fromObjectId`, `fromObjectTypeId`, `toObjectId`, `toObjectTypeId`, `associationCategory`, `associationTypeId`, and `isPrimary`. Automate.ax consumes HubSpot's ordered Webhooks Journal and deduplicates replayed events. # On HubSpot contact association removed Source: https://docs.automate.ax/reference/integrations/hubspot/triggers/on-hubspot-contact-association-removed Run when a HubSpot contact has an association removed. Use `hubspot.onContactAssociationRemoved` to run when a HubSpot contact has an association removed. ```ts automations/on-hubspot-contact-association-removed.automation.ts theme={null} import { automation } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("On HubSpot contact association removed", () => { const event = hubspot.onContactAssociationRemoved() // Reconcile the removed HubSpot contact association. }) ``` Optional static `account` selects a named HubSpot OAuth binding; the project binding is the default. HubSpot triggers require OAuth because Automate.ax manages Journal subscriptions for each installed HubSpot account. ## Trigger data Returns a typed HubSpot CRM event with `portalId`, `objectId`, `objectType`, `action`, `occurredAt`, and `journalOffset`. `publishedAt` is present when HubSpot includes the Journal publication time. The event includes `fromObjectId`, `fromObjectTypeId`, `toObjectId`, `toObjectTypeId`, `associationCategory`, `associationTypeId`, and `isPrimary`. Automate.ax consumes HubSpot's ordered Webhooks Journal and deduplicates replayed events. # On HubSpot contact created Source: https://docs.automate.ax/reference/integrations/hubspot/triggers/on-hubspot-contact-created Run when a HubSpot contact is created. Use `hubspot.onContactCreated` to run when a HubSpot contact is created. ```ts automations/on-hubspot-contact-created.automation.ts theme={null} import { automation } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("On HubSpot contact created", () => { const event = hubspot.onContactCreated() // Enrich the new HubSpot contact. }) ``` Optional static `account` selects a named HubSpot OAuth binding; the project binding is the default. HubSpot triggers require OAuth because Automate.ax manages Journal subscriptions for each installed HubSpot account. ## Trigger data Returns a typed HubSpot CRM event with `portalId`, `objectId`, `objectType`, `action`, `occurredAt`, and `journalOffset`. `publishedAt` is present when HubSpot includes the Journal publication time. The event identifies the affected record with `objectId`. Automate.ax consumes HubSpot's ordered Webhooks Journal and deduplicates replayed events. # On HubSpot contact deleted Source: https://docs.automate.ax/reference/integrations/hubspot/triggers/on-hubspot-contact-deleted Run when a HubSpot contact is deleted. Use `hubspot.onContactDeleted` to run when a HubSpot contact is deleted. ```ts automations/on-hubspot-contact-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("On HubSpot contact deleted", () => { const event = hubspot.onContactDeleted() // Remove state tied to the deleted HubSpot contact. }) ``` Optional static `account` selects a named HubSpot OAuth binding; the project binding is the default. HubSpot triggers require OAuth because Automate.ax manages Journal subscriptions for each installed HubSpot account. ## Trigger data Returns a typed HubSpot CRM event with `portalId`, `objectId`, `objectType`, `action`, `occurredAt`, and `journalOffset`. `publishedAt` is present when HubSpot includes the Journal publication time. The event identifies the affected record with `objectId`. Automate.ax consumes HubSpot's ordered Webhooks Journal and deduplicates replayed events. # On HubSpot contact merged Source: https://docs.automate.ax/reference/integrations/hubspot/triggers/on-hubspot-contact-merged Run when a HubSpot contact is merged. Use `hubspot.onContactMerged` to run when a HubSpot contact is merged. ```ts automations/on-hubspot-contact-merged.automation.ts theme={null} import { automation } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("On HubSpot contact merged", () => { const event = hubspot.onContactMerged() // Reconcile records tied to the merged HubSpot contact. }) ``` Optional static `account` selects a named HubSpot OAuth binding; the project binding is the default. HubSpot triggers require OAuth because Automate.ax manages Journal subscriptions for each installed HubSpot account. ## Trigger data Returns a typed HubSpot CRM event with `portalId`, `objectId`, `objectType`, `action`, `occurredAt`, and `journalOffset`. `publishedAt` is present when HubSpot includes the Journal publication time. It can also include `mergedObjectIds`, `newObjectId`, `primaryObjectId`, and `numberOfPropertiesMoved` when HubSpot supplies them. Automate.ax consumes HubSpot's ordered Webhooks Journal and deduplicates replayed events. # On HubSpot contact restored Source: https://docs.automate.ax/reference/integrations/hubspot/triggers/on-hubspot-contact-restored Run when a HubSpot contact is restored from the recycling bin. Use `hubspot.onContactRestored` to run when a HubSpot contact is restored from the recycling bin. ```ts automations/on-hubspot-contact-restored.automation.ts theme={null} import { automation } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("On HubSpot contact restored", () => { const event = hubspot.onContactRestored() // Reprocess the restored HubSpot contact. }) ``` Optional static `account` selects a named HubSpot OAuth binding; the project binding is the default. HubSpot triggers require OAuth because Automate.ax manages Journal subscriptions for each installed HubSpot account. ## Trigger data Returns a typed HubSpot CRM event with `portalId`, `objectId`, `objectType`, `action`, `occurredAt`, and `journalOffset`. `publishedAt` is present when HubSpot includes the Journal publication time. The event identifies the affected record with `objectId`. Automate.ax consumes HubSpot's ordered Webhooks Journal and deduplicates replayed events. # On HubSpot contact updated Source: https://docs.automate.ax/reference/integrations/hubspot/triggers/on-hubspot-contact-updated Run when any property on a HubSpot contact changes. Use `hubspot.onContactUpdated` to run when any property on a HubSpot contact changes. ```ts automations/on-hubspot-contact-updated.automation.ts theme={null} import { automation } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("On HubSpot contact updated", () => { const event = hubspot.onContactUpdated() // Use event.objectId and event.propertyChanges to route the contact update. }) ``` Optional static `account` selects a named HubSpot OAuth binding; the project binding is the default. HubSpot triggers require OAuth because Automate.ax manages Journal subscriptions for each installed HubSpot account. ## Trigger data Returns a typed HubSpot CRM event with `portalId`, `objectId`, `objectType`, `action`, `occurredAt`, and `journalOffset`. `publishedAt` is present when HubSpot includes the Journal publication time. `propertyChanges` maps every property included in that Journal update to its new value. Automate.ax subscribes with an empty property list so any changed property can trigger the automation. Automate.ax consumes HubSpot's ordered Webhooks Journal and deduplicates replayed events. # On HubSpot CRM event Source: https://docs.automate.ax/reference/integrations/hubspot/triggers/on-hubspot-crm-event Run for every supported HubSpot CRM lifecycle event. Use `hubspot.onCrmEvent` to run for every supported HubSpot CRM lifecycle event. ```ts automations/on-hubspot-crm-event.automation.ts theme={null} import { automation } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("On HubSpot CRM event", () => { const event = hubspot.onCrmEvent() // Route the HubSpot CRM event by object and event type. }) ``` Optional static `account` selects a named HubSpot OAuth binding; the project binding is the default. HubSpot triggers require OAuth because Automate.ax manages Journal subscriptions for each installed HubSpot account. ## Trigger data Returns a typed HubSpot CRM event with `portalId`, `objectId`, `objectType`, `action`, `occurredAt`, and `journalOffset`. `publishedAt` is present when HubSpot includes the Journal publication time. The event identifies its `objectType` and semantic `action`. Updated events include `propertyChanges`; association and merge events include their corresponding metadata. Use a semantic trigger when the automation handles only one lifecycle event. Automate.ax consumes HubSpot's ordered Webhooks Journal and deduplicates replayed events. # On HubSpot deal association added Source: https://docs.automate.ax/reference/integrations/hubspot/triggers/on-hubspot-deal-association-added Run when a HubSpot deal has an association added. Use `hubspot.onDealAssociationAdded` to run when a HubSpot deal has an association added. ```ts automations/on-hubspot-deal-association-added.automation.ts theme={null} import { automation } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("On HubSpot deal association added", () => { const event = hubspot.onDealAssociationAdded() // Reconcile the added HubSpot deal association. }) ``` Optional static `account` selects a named HubSpot OAuth binding; the project binding is the default. HubSpot triggers require OAuth because Automate.ax manages Journal subscriptions for each installed HubSpot account. ## Trigger data Returns a typed HubSpot CRM event with `portalId`, `objectId`, `objectType`, `action`, `occurredAt`, and `journalOffset`. `publishedAt` is present when HubSpot includes the Journal publication time. The event includes `fromObjectId`, `fromObjectTypeId`, `toObjectId`, `toObjectTypeId`, `associationCategory`, `associationTypeId`, and `isPrimary`. Automate.ax consumes HubSpot's ordered Webhooks Journal and deduplicates replayed events. # On HubSpot deal association removed Source: https://docs.automate.ax/reference/integrations/hubspot/triggers/on-hubspot-deal-association-removed Run when a HubSpot deal has an association removed. Use `hubspot.onDealAssociationRemoved` to run when a HubSpot deal has an association removed. ```ts automations/on-hubspot-deal-association-removed.automation.ts theme={null} import { automation } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("On HubSpot deal association removed", () => { const event = hubspot.onDealAssociationRemoved() // Reconcile the removed HubSpot deal association. }) ``` Optional static `account` selects a named HubSpot OAuth binding; the project binding is the default. HubSpot triggers require OAuth because Automate.ax manages Journal subscriptions for each installed HubSpot account. ## Trigger data Returns a typed HubSpot CRM event with `portalId`, `objectId`, `objectType`, `action`, `occurredAt`, and `journalOffset`. `publishedAt` is present when HubSpot includes the Journal publication time. The event includes `fromObjectId`, `fromObjectTypeId`, `toObjectId`, `toObjectTypeId`, `associationCategory`, `associationTypeId`, and `isPrimary`. Automate.ax consumes HubSpot's ordered Webhooks Journal and deduplicates replayed events. # On HubSpot deal created Source: https://docs.automate.ax/reference/integrations/hubspot/triggers/on-hubspot-deal-created Run when a HubSpot deal is created. Use `hubspot.onDealCreated` to run when a HubSpot deal is created. ```ts automations/on-hubspot-deal-created.automation.ts theme={null} import { automation } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("On HubSpot deal created", () => { const event = hubspot.onDealCreated() // Enrich the new HubSpot deal. }) ``` Optional static `account` selects a named HubSpot OAuth binding; the project binding is the default. HubSpot triggers require OAuth because Automate.ax manages Journal subscriptions for each installed HubSpot account. ## Trigger data Returns a typed HubSpot CRM event with `portalId`, `objectId`, `objectType`, `action`, `occurredAt`, and `journalOffset`. `publishedAt` is present when HubSpot includes the Journal publication time. The event identifies the affected record with `objectId`. Automate.ax consumes HubSpot's ordered Webhooks Journal and deduplicates replayed events. # On HubSpot deal deleted Source: https://docs.automate.ax/reference/integrations/hubspot/triggers/on-hubspot-deal-deleted Run when a HubSpot deal is deleted. Use `hubspot.onDealDeleted` to run when a HubSpot deal is deleted. ```ts automations/on-hubspot-deal-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("On HubSpot deal deleted", () => { const event = hubspot.onDealDeleted() // Remove state tied to the deleted HubSpot deal. }) ``` Optional static `account` selects a named HubSpot OAuth binding; the project binding is the default. HubSpot triggers require OAuth because Automate.ax manages Journal subscriptions for each installed HubSpot account. ## Trigger data Returns a typed HubSpot CRM event with `portalId`, `objectId`, `objectType`, `action`, `occurredAt`, and `journalOffset`. `publishedAt` is present when HubSpot includes the Journal publication time. The event identifies the affected record with `objectId`. Automate.ax consumes HubSpot's ordered Webhooks Journal and deduplicates replayed events. # On HubSpot deal merged Source: https://docs.automate.ax/reference/integrations/hubspot/triggers/on-hubspot-deal-merged Run when a HubSpot deal is merged. Use `hubspot.onDealMerged` to run when a HubSpot deal is merged. ```ts automations/on-hubspot-deal-merged.automation.ts theme={null} import { automation } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("On HubSpot deal merged", () => { const event = hubspot.onDealMerged() // Reconcile records tied to the merged HubSpot deal. }) ``` Optional static `account` selects a named HubSpot OAuth binding; the project binding is the default. HubSpot triggers require OAuth because Automate.ax manages Journal subscriptions for each installed HubSpot account. ## Trigger data Returns a typed HubSpot CRM event with `portalId`, `objectId`, `objectType`, `action`, `occurredAt`, and `journalOffset`. `publishedAt` is present when HubSpot includes the Journal publication time. It can also include `mergedObjectIds`, `newObjectId`, `primaryObjectId`, and `numberOfPropertiesMoved` when HubSpot supplies them. Automate.ax consumes HubSpot's ordered Webhooks Journal and deduplicates replayed events. # On HubSpot deal restored Source: https://docs.automate.ax/reference/integrations/hubspot/triggers/on-hubspot-deal-restored Run when a HubSpot deal is restored from the recycling bin. Use `hubspot.onDealRestored` to run when a HubSpot deal is restored from the recycling bin. ```ts automations/on-hubspot-deal-restored.automation.ts theme={null} import { automation } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("On HubSpot deal restored", () => { const event = hubspot.onDealRestored() // Reprocess the restored HubSpot deal. }) ``` Optional static `account` selects a named HubSpot OAuth binding; the project binding is the default. HubSpot triggers require OAuth because Automate.ax manages Journal subscriptions for each installed HubSpot account. ## Trigger data Returns a typed HubSpot CRM event with `portalId`, `objectId`, `objectType`, `action`, `occurredAt`, and `journalOffset`. `publishedAt` is present when HubSpot includes the Journal publication time. The event identifies the affected record with `objectId`. Automate.ax consumes HubSpot's ordered Webhooks Journal and deduplicates replayed events. # On HubSpot deal updated Source: https://docs.automate.ax/reference/integrations/hubspot/triggers/on-hubspot-deal-updated Run when any property on a HubSpot deal changes. Use `hubspot.onDealUpdated` to run when any property on a HubSpot deal changes. ```ts automations/on-hubspot-deal-updated.automation.ts theme={null} import { automation } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("On HubSpot deal updated", () => { const event = hubspot.onDealUpdated() // Use event.objectId and event.propertyChanges to route the deal update. }) ``` Optional static `account` selects a named HubSpot OAuth binding; the project binding is the default. HubSpot triggers require OAuth because Automate.ax manages Journal subscriptions for each installed HubSpot account. ## Trigger data Returns a typed HubSpot CRM event with `portalId`, `objectId`, `objectType`, `action`, `occurredAt`, and `journalOffset`. `publishedAt` is present when HubSpot includes the Journal publication time. `propertyChanges` maps every property included in that Journal update to its new value. Automate.ax subscribes with an empty property list so any changed property can trigger the automation. Automate.ax consumes HubSpot's ordered Webhooks Journal and deduplicates replayed events. # On HubSpot ticket association added Source: https://docs.automate.ax/reference/integrations/hubspot/triggers/on-hubspot-ticket-association-added Run when a HubSpot ticket has an association added. Use `hubspot.onTicketAssociationAdded` to run when a HubSpot ticket has an association added. ```ts automations/on-hubspot-ticket-association-added.automation.ts theme={null} import { automation } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("On HubSpot ticket association added", () => { const event = hubspot.onTicketAssociationAdded() // Reconcile the added HubSpot ticket association. }) ``` Optional static `account` selects a named HubSpot OAuth binding; the project binding is the default. HubSpot triggers require OAuth because Automate.ax manages Journal subscriptions for each installed HubSpot account. ## Trigger data Returns a typed HubSpot CRM event with `portalId`, `objectId`, `objectType`, `action`, `occurredAt`, and `journalOffset`. `publishedAt` is present when HubSpot includes the Journal publication time. The event includes `fromObjectId`, `fromObjectTypeId`, `toObjectId`, `toObjectTypeId`, `associationCategory`, `associationTypeId`, and `isPrimary`. Automate.ax consumes HubSpot's ordered Webhooks Journal and deduplicates replayed events. # On HubSpot ticket association removed Source: https://docs.automate.ax/reference/integrations/hubspot/triggers/on-hubspot-ticket-association-removed Run when a HubSpot ticket has an association removed. Use `hubspot.onTicketAssociationRemoved` to run when a HubSpot ticket has an association removed. ```ts automations/on-hubspot-ticket-association-removed.automation.ts theme={null} import { automation } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("On HubSpot ticket association removed", () => { const event = hubspot.onTicketAssociationRemoved() // Reconcile the removed HubSpot ticket association. }) ``` Optional static `account` selects a named HubSpot OAuth binding; the project binding is the default. HubSpot triggers require OAuth because Automate.ax manages Journal subscriptions for each installed HubSpot account. ## Trigger data Returns a typed HubSpot CRM event with `portalId`, `objectId`, `objectType`, `action`, `occurredAt`, and `journalOffset`. `publishedAt` is present when HubSpot includes the Journal publication time. The event includes `fromObjectId`, `fromObjectTypeId`, `toObjectId`, `toObjectTypeId`, `associationCategory`, `associationTypeId`, and `isPrimary`. Automate.ax consumes HubSpot's ordered Webhooks Journal and deduplicates replayed events. # On HubSpot ticket created Source: https://docs.automate.ax/reference/integrations/hubspot/triggers/on-hubspot-ticket-created Run when a HubSpot ticket is created. Use `hubspot.onTicketCreated` to run when a HubSpot ticket is created. ```ts automations/on-hubspot-ticket-created.automation.ts theme={null} import { automation } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("On HubSpot ticket created", () => { const event = hubspot.onTicketCreated() // Enrich the new HubSpot ticket. }) ``` Optional static `account` selects a named HubSpot OAuth binding; the project binding is the default. HubSpot triggers require OAuth because Automate.ax manages Journal subscriptions for each installed HubSpot account. ## Trigger data Returns a typed HubSpot CRM event with `portalId`, `objectId`, `objectType`, `action`, `occurredAt`, and `journalOffset`. `publishedAt` is present when HubSpot includes the Journal publication time. The event identifies the affected record with `objectId`. Automate.ax consumes HubSpot's ordered Webhooks Journal and deduplicates replayed events. # On HubSpot ticket deleted Source: https://docs.automate.ax/reference/integrations/hubspot/triggers/on-hubspot-ticket-deleted Run when a HubSpot ticket is deleted. Use `hubspot.onTicketDeleted` to run when a HubSpot ticket is deleted. ```ts automations/on-hubspot-ticket-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("On HubSpot ticket deleted", () => { const event = hubspot.onTicketDeleted() // Remove state tied to the deleted HubSpot ticket. }) ``` Optional static `account` selects a named HubSpot OAuth binding; the project binding is the default. HubSpot triggers require OAuth because Automate.ax manages Journal subscriptions for each installed HubSpot account. ## Trigger data Returns a typed HubSpot CRM event with `portalId`, `objectId`, `objectType`, `action`, `occurredAt`, and `journalOffset`. `publishedAt` is present when HubSpot includes the Journal publication time. The event identifies the affected record with `objectId`. Automate.ax consumes HubSpot's ordered Webhooks Journal and deduplicates replayed events. # On HubSpot ticket merged Source: https://docs.automate.ax/reference/integrations/hubspot/triggers/on-hubspot-ticket-merged Run when a HubSpot ticket is merged. Use `hubspot.onTicketMerged` to run when a HubSpot ticket is merged. ```ts automations/on-hubspot-ticket-merged.automation.ts theme={null} import { automation } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("On HubSpot ticket merged", () => { const event = hubspot.onTicketMerged() // Reconcile records tied to the merged HubSpot ticket. }) ``` Optional static `account` selects a named HubSpot OAuth binding; the project binding is the default. HubSpot triggers require OAuth because Automate.ax manages Journal subscriptions for each installed HubSpot account. ## Trigger data Returns a typed HubSpot CRM event with `portalId`, `objectId`, `objectType`, `action`, `occurredAt`, and `journalOffset`. `publishedAt` is present when HubSpot includes the Journal publication time. It can also include `mergedObjectIds`, `newObjectId`, `primaryObjectId`, and `numberOfPropertiesMoved` when HubSpot supplies them. Automate.ax consumes HubSpot's ordered Webhooks Journal and deduplicates replayed events. # On HubSpot ticket restored Source: https://docs.automate.ax/reference/integrations/hubspot/triggers/on-hubspot-ticket-restored Run when a HubSpot ticket is restored from the recycling bin. Use `hubspot.onTicketRestored` to run when a HubSpot ticket is restored from the recycling bin. ```ts automations/on-hubspot-ticket-restored.automation.ts theme={null} import { automation } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("On HubSpot ticket restored", () => { const event = hubspot.onTicketRestored() // Reprocess the restored HubSpot ticket. }) ``` Optional static `account` selects a named HubSpot OAuth binding; the project binding is the default. HubSpot triggers require OAuth because Automate.ax manages Journal subscriptions for each installed HubSpot account. ## Trigger data Returns a typed HubSpot CRM event with `portalId`, `objectId`, `objectType`, `action`, `occurredAt`, and `journalOffset`. `publishedAt` is present when HubSpot includes the Journal publication time. The event identifies the affected record with `objectId`. Automate.ax consumes HubSpot's ordered Webhooks Journal and deduplicates replayed events. # On HubSpot ticket updated Source: https://docs.automate.ax/reference/integrations/hubspot/triggers/on-hubspot-ticket-updated Run when any property on a HubSpot ticket changes. Use `hubspot.onTicketUpdated` to run when any property on a HubSpot ticket changes. ```ts automations/on-hubspot-ticket-updated.automation.ts theme={null} import { automation } from "automate.ax" import { hubspot } from "automate.ax/hubspot" export default automation("On HubSpot ticket updated", () => { const event = hubspot.onTicketUpdated() // Use event.objectId and event.propertyChanges to route the ticket update. }) ``` Optional static `account` selects a named HubSpot OAuth binding; the project binding is the default. HubSpot triggers require OAuth because Automate.ax manages Journal subscriptions for each installed HubSpot account. ## Trigger data Returns a typed HubSpot CRM event with `portalId`, `objectId`, `objectType`, `action`, `occurredAt`, and `journalOffset`. `publishedAt` is present when HubSpot includes the Journal publication time. `propertyChanges` maps every property included in that Journal update to its new value. Automate.ax subscribes with an empty property list so any changed property can trigger the automation. Automate.ax consumes HubSpot's ordered Webhooks Journal and deduplicates replayed events. # Archive contact Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/archive-contact Archive a JobNimbus contact without permanently deleting it. `jobNimbus.archiveContact` archive a JobNimbus contact without permanently deleting it. ```ts automations/jobnimbus-archive-contact.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("Archive contact", () => { onDashboardRun({ title: "Archive contact" }) jobNimbus.archiveContact({ contactId: "contact-id" }) }) ``` ## Inputs Provide `contactId`. Optional `actor`, `bulk`, and `skip` control legacy admin visibility and automation or notification processing. Optional second argument `{ account }` selects a named binding. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns the updated `JobNimbusContact` with `isActive: false`. JobNimbus keeps the record available for restoration. # Archive job Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/archive-job Archive a JobNimbus job without permanently deleting it. `jobNimbus.archiveJob` archive a JobNimbus job without permanently deleting it. ```ts automations/jobnimbus-archive-job.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("Archive job", () => { onDashboardRun({ title: "Archive job" }) jobNimbus.archiveJob({ jobId: "job-id" }) }) ``` ## Inputs Provide `jobId`. Optional `actor`, `bulk`, and `skip` use JobNimbus's documented legacy mutation controls. Optional second argument `{ account }` selects a named binding. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns the updated `JobNimbusJob` with `isActive: false`. # Archive product Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/archive-product Archive an item in the JobNimbus product catalog. `jobNimbus.archiveProduct` archive an item in the JobNimbus product catalog. ```ts automations/jobnimbus-archive-product.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("Archive product", () => { onDashboardRun({ title: "Archive product" }) jobNimbus.archiveProduct({ productId: "product-id" }) }) ``` ## Inputs Provide `productId`. Optional `actor`, `bulk`, and `skip` use the legacy mutation controls. Optional second argument `{ account }` selects a named binding. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns the updated `JobNimbusProduct` with `isActive: false`. # Archive task Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/archive-task Archive a JobNimbus task without permanently deleting it. `jobNimbus.archiveTask` archive a JobNimbus task without permanently deleting it. ```ts automations/jobnimbus-archive-task.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("Archive task", () => { onDashboardRun({ title: "Archive task" }) jobNimbus.archiveTask({ taskId: "task-id" }) }) ``` ## Inputs Provide `taskId`. Optional `actor`, `bulk`, and `skip` use the legacy mutation controls. Optional second argument `{ account }` selects a named binding. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns the updated `JobNimbusTask` with `isActive: false`. # Create activity Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/create-activity Create an activity on a JobNimbus record. `jobNimbus.createActivity` create an activity on a JobNimbus record. ```ts automations/jobnimbus-create-activity.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("Create activity", () => { onDashboardRun({ title: "Create activity" }) jobNimbus.createActivity({ activityAction: "Created", activityTypeId: 1, content: "Initial inspection complete", primaryRecord: { id: "job-id", type: "job" }, relatedRecords: null, }) }) ``` ## Inputs Provide the configured `activityTypeId`, action label, content, and primary record. `relatedRecords` is an array of `{ id, type }` references or `null`; `isPrivate` defaults to false. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns the created `JobNimbusActivity` with JavaScript `Date` timestamps. # Create contact Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/create-contact Create a contact in a JobNimbus workflow. `jobNimbus.createContact` create a contact in a JobNimbus workflow. ```ts automations/jobnimbus-create-contact.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("Create contact", () => { onDashboardRun({ title: "Create contact" }) jobNimbus.createContact({ firstName: "Ada", lastName: "Lovelace", email: "ada@example.com", recordTypeName: "Customer", statusName: "Lead", }) }) ``` ## Inputs Provide `recordTypeName`, `statusName`, and at least one of company, display name, first name, or last name. Optional addresses, owners, tags, workflow fields, `customFields`, and legacy mutation controls are supported. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns the created `JobNimbusContact`, including JobNimbus IDs and normalized custom fields. # Create job Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/create-job Create a job in a JobNimbus workflow. `jobNimbus.createJob` create a job in a JobNimbus workflow. ```ts automations/jobnimbus-create-job.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("Create job", () => { onDashboardRun({ title: "Create job" }) jobNimbus.createJob({ name: "Roof replacement", primary: { id: "contact-id" }, recordTypeName: "Retail", statusName: "Lead", }) }) ``` ## Inputs Provide `name`, `recordTypeName`, and `statusName`. Add `primary` to relate a contact, plus optional address, workflow, owner, tag, and custom fields. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns the created `JobNimbusJob`. # Create product Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/create-product Create an item in the JobNimbus product catalog. `jobNimbus.createProduct` create an item in the JobNimbus product catalog. ```ts automations/jobnimbus-create-product.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("Create product", () => { onDashboardRun({ title: "Create product" }) jobNimbus.createProduct({ name: "Architectural shingle", itemType: "material", uoms: [{ uom: "SQ", material: { cost: 95, price: 140 } }], }) }) ``` ## Inputs Provide `name`. Optional fields include description, external ID, item type, location, suppliers, tax behavior, units of measure, and labor or material prices. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns the created `JobNimbusProduct`. # Create task Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/create-task Create a JobNimbus task related to CRM records. `jobNimbus.createTask` create a JobNimbus task related to CRM records. ```ts automations/jobnimbus-create-task.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("Create task", () => { onDashboardRun({ title: "Create task" }) jobNimbus.createTask({ dateStart: new Date("2026-09-01T16:00:00Z"), recordTypeName: "Task", related: [{ id: "job-id" }], title: "Call homeowner", }) }) ``` ## Inputs Provide `title`, `recordTypeName`, and `dateStart` as a `Date` or Unix seconds. Optional fields include end date, owners, related record IDs, priority, tags, completion, and description. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns the created `JobNimbusTask`; legacy Unix timestamps become JavaScript `Date` values. # Delete activity Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/delete-activity Permanently delete an editable JobNimbus activity. `jobNimbus.deleteActivity` permanently delete an editable JobNimbus activity. ```ts automations/jobnimbus-delete-activity.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("Delete activity", () => { onDashboardRun({ title: "Delete activity" }) jobNimbus.deleteActivity({ activityId: "activity-id" }) }) ``` ## Inputs Provide `activityId`. JobNimbus only permits deletion when the activity is editable. Optional second argument `{ account }` selects a named binding. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns `null` after JobNimbus accepts the deletion. # Get account settings Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/get-account-settings Retrieve JobNimbus workflows, types, sources, and settings. `jobNimbus.getAccountSettings` retrieve JobNimbus workflows, types, sources, and settings. ```ts automations/jobnimbus-get-account-settings.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("Get account settings", () => { onDashboardRun({ title: "Get account settings" }) jobNimbus.getAccountSettings() }) ``` ## Inputs No input is required. Optional second argument `{ account }` selects a named binding. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns configured workflows and any available activity, file, source, and task types. Account-defined fields are preserved as codec-safe values. # Get activity Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/get-activity Retrieve one JobNimbus activity by ID. `jobNimbus.getActivity` retrieve one JobNimbus activity by ID. ```ts automations/jobnimbus-get-activity.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("Get activity", () => { onDashboardRun({ title: "Get activity" }) jobNimbus.getActivity({ activityId: "activity-id" }) }) ``` ## Inputs Provide the Platform activity `activityId`. Optional second argument `{ account }` selects a named binding. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns a `JobNimbusActivity` with its primary and related records, author, privacy/editability flags, and `Date` timestamps. # Get contact Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/get-contact Retrieve one JobNimbus contact by ID. `jobNimbus.getContact` retrieve one JobNimbus contact by ID. ```ts automations/jobnimbus-get-contact.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("Get contact", () => { onDashboardRun({ title: "Get contact" }) jobNimbus.getContact({ contactId: "contact-id" }) }) ``` ## Inputs Provide the contact JNID. An admin API key can optionally set `actor` to a team member email to apply that user's visibility. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns the normalized `JobNimbusContact`, including account-defined fields under `customFields`. # Get file Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/get-file Download a JobNimbus file attachment. `jobNimbus.getFile` download a JobNimbus file attachment. ```ts automations/jobnimbus-get-file.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("Get file", () => { onDashboardRun({ title: "Get file" }) jobNimbus.getFile({ fileId: "file-id" }) }) ``` ## Inputs Provide the file JNID. Optional second argument `{ account }` selects a named binding. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns a `Blob` containing the attachment bytes and provider content type. # Get job Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/get-job Retrieve one JobNimbus job by ID. `jobNimbus.getJob` retrieve one JobNimbus job by ID. ```ts automations/jobnimbus-get-job.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("Get job", () => { onDashboardRun({ title: "Get job" }) jobNimbus.getJob({ jobId: "job-id" }) }) ``` ## Inputs Provide the job JNID. An admin key can optionally set `actor` to apply a team member's record visibility. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns the normalized `JobNimbusJob`. # Get product Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/get-product Retrieve one JobNimbus product by ID. `jobNimbus.getProduct` retrieve one JobNimbus product by ID. ```ts automations/jobnimbus-get-product.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("Get product", () => { onDashboardRun({ title: "Get product" }) jobNimbus.getProduct({ productId: "product-id" }) }) ``` ## Inputs Provide the product JNID. An admin key can optionally set `actor`. Optional second argument `{ account }` selects a named binding. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns the `JobNimbusProduct`, including units of measure and configured labor or material pricing. # Get task Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/get-task Retrieve one JobNimbus task by ID. `jobNimbus.getTask` retrieve one JobNimbus task by ID. ```ts automations/jobnimbus-get-task.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("Get task", () => { onDashboardRun({ title: "Get task" }) jobNimbus.getTask({ taskId: "task-id" }) }) ``` ## Inputs Provide the task JNID. An admin key can optionally set `actor`. Optional second argument `{ account }` selects a named binding. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns the normalized `JobNimbusTask` with `Date` values for documented task timestamps. # List activities Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/list-activities List current JobNimbus activities with cursor pagination. `jobNimbus.listActivities` list current JobNimbus activities with cursor pagination. ```ts automations/jobnimbus-list-activities.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("List activities", () => { onDashboardRun({ title: "List activities" }) jobNimbus.listActivities({ pageSize: 100, sort: "-createdAt" }) }) ``` ## Inputs `pageSize` defaults to 100 and accepts 1–200. Filter by activity type, creator, primary record, or relationship depth; pass `cursor` from the previous result. Sort ascending or descending by creation time. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns `{ data: JobNimbusActivity[], pagination: { nextCursor, pageSize } }`. # List activity types Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/list-activity-types List activity types configured for the JobNimbus company. `jobNimbus.listActivityTypes` list activity types configured for the JobNimbus company. ```ts automations/jobnimbus-list-activity-types.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("List activity types", () => { onDashboardRun({ title: "List activity types" }) jobNimbus.listActivityTypes() }) ``` ## Inputs No input is required. Optional second argument `{ account }` selects a named binding. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns configured activity types with IDs, display names, and system/archive flags. # List contacts Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/list-contacts List JobNimbus contacts with offset pagination and filters. `jobNimbus.listContacts` list JobNimbus contacts with offset pagination and filters. ```ts automations/jobnimbus-list-contacts.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("List contacts", () => { onDashboardRun({ title: "List contacts" }) jobNimbus.listContacts({ size: 100, from: 0, sortField: "dateCreated" }) }) ``` ## Inputs `size` defaults to 100 and accepts 1–1,000; `from` defaults to 0. Optional `fields`, Elasticsearch-style `filter`, `sortField`, `sortDirection`, and admin `actor` are supported. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns `{ count, results: JobNimbusContact[] }`. For more than 10,000 contacts, page by ascending creation date and deduplicate by ID as JobNimbus recommends. # List files Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/list-files List JobNimbus attachment metadata. `jobNimbus.listFiles` list JobNimbus attachment metadata. ```ts automations/jobnimbus-list-files.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("List files", () => { onDashboardRun({ title: "List files" }) jobNimbus.listFiles({ size: 100, from: 0 }) }) ``` ## Inputs Use the shared legacy list controls: `size`, `from`, fields, filter, sort, and optional admin `actor`. This action returns metadata only. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns `{ count, results: JobNimbusFile[] }`. Use `getFile` to download an attachment. # List groups Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/list-groups List groups configured for the JobNimbus account. `jobNimbus.listGroups` list groups configured for the JobNimbus account. ```ts automations/jobnimbus-list-groups.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("List groups", () => { onDashboardRun({ title: "List groups" }) jobNimbus.listGroups() }) ``` ## Inputs No input is required. Optional second argument `{ account }` selects a named binding. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns group names with their manager and member user IDs. # List jobs Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/list-jobs List JobNimbus jobs with offset pagination and filters. `jobNimbus.listJobs` list JobNimbus jobs with offset pagination and filters. ```ts automations/jobnimbus-list-jobs.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("List jobs", () => { onDashboardRun({ title: "List jobs" }) jobNimbus.listJobs({ size: 100, from: 0, sortDirection: "desc" }) }) ``` ## Inputs Use `size` from 1–1,000 and nonnegative `from`. Optional fields, Elasticsearch-style filter, sort, and admin `actor` narrow the result. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns `{ count, results: JobNimbusJob[] }`. # List products Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/list-products List items in the JobNimbus product catalog. `jobNimbus.listProducts` list items in the JobNimbus product catalog. ```ts automations/jobnimbus-list-products.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("List products", () => { onDashboardRun({ title: "List products" }) jobNimbus.listProducts({ size: 100, from: 0 }) }) ``` ## Inputs Use the shared legacy list controls for pagination, fields, filters, sorting, and optional admin actor visibility. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns `{ count, results: JobNimbusProduct[] }`. # List tasks Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/list-tasks List JobNimbus tasks with offset pagination and filters. `jobNimbus.listTasks` list JobNimbus tasks with offset pagination and filters. ```ts automations/jobnimbus-list-tasks.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("List tasks", () => { onDashboardRun({ title: "List tasks" }) jobNimbus.listTasks({ size: 100, from: 0 }) }) ``` ## Inputs Use `size` from 1–1,000 and nonnegative `from`. Optional fields, Elasticsearch-style filter, sort, and admin `actor` are supported. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns `{ count, results: JobNimbusTask[] }`. # List units of measure Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/list-units-of-measure List units of measure available to JobNimbus financial records. `jobNimbus.listUnitsOfMeasure` list units of measure available to JobNimbus financial records. ```ts automations/jobnimbus-list-units-of-measure.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("List units of measure", () => { onDashboardRun({ title: "List units of measure" }) jobNimbus.listUnitsOfMeasure() }) ``` ## Inputs No input is required. Optional second argument `{ account }` selects a named binding. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns the configured unit-of-measure names as `string[]`. # List users Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/list-users List active and disabled JobNimbus team members. `jobNimbus.listUsers` list active and disabled JobNimbus team members. ```ts automations/jobnimbus-list-users.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("List users", () => { onDashboardRun({ title: "List users" }) jobNimbus.listUsers() }) ``` ## Inputs No input is required. Optional second argument `{ account }` selects a named binding. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns `{ users, dateUpdated? }`. Each user includes stable ID, email, name, active state, optional image URL, and calendar color. # Update activity Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/update-activity Apply JSON Patch operations to an editable JobNimbus activity. `jobNimbus.updateActivity` apply JSON Patch operations to an editable JobNimbus activity. ```ts automations/jobnimbus-update-activity.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("Update activity", () => { onDashboardRun({ title: "Update activity" }) jobNimbus.updateActivity({ activityId: "activity-id", operations: [{ op: "replace", path: "/content", value: "Updated note" }], }) }) ``` ## Inputs Provide `activityId` and at least one RFC 6902 `add`, `replace`, or `remove` operation. Paths begin with `/`; add and replace operations require a JSON value. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns the updated `JobNimbusActivity`. # Update contact Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/update-contact Update mutable fields on a JobNimbus contact. `jobNimbus.updateContact` update mutable fields on a JobNimbus contact. ```ts automations/jobnimbus-update-contact.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("Update contact", () => { onDashboardRun({ title: "Update contact" }) jobNimbus.updateContact({ contactId: "contact-id", mobilePhone: "+14155550100", }) }) ``` ## Inputs Provide `contactId` and at least one mutable contact, address, workflow, owner, tag, or custom field. Set nullable fields to `null` to clear them. Optional legacy mutation controls are supported. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns the updated `JobNimbusContact`. # Update job Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/update-job Update mutable fields on a JobNimbus job. `jobNimbus.updateJob` update mutable fields on a JobNimbus job. ```ts automations/jobnimbus-update-job.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("Update job", () => { onDashboardRun({ title: "Update job" }) jobNimbus.updateJob({ jobId: "job-id", statusName: "Sold" }) }) ``` ## Inputs Provide `jobId` and at least one mutable job, address, workflow, relationship, owner, tag, or custom field. Optional legacy mutation controls are supported. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns the updated `JobNimbusJob`. # Update product Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/update-product Update an item in the JobNimbus product catalog. `jobNimbus.updateProduct` update an item in the JobNimbus product catalog. ```ts automations/jobnimbus-update-product.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("Update product", () => { onDashboardRun({ title: "Update product" }) jobNimbus.updateProduct({ productId: "product-id", description: "30-year shingle", }) }) ``` ## Inputs Provide `productId` and at least one mutable product field. Update names, descriptions, type, suppliers, tax behavior, location, or complete unit-of-measure pricing entries. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns the updated `JobNimbusProduct`. # Update task Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/update-task Update mutable fields on a JobNimbus task. `jobNimbus.updateTask` update mutable fields on a JobNimbus task. ```ts automations/jobnimbus-update-task.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("Update task", () => { onDashboardRun({ title: "Update task" }) jobNimbus.updateTask({ taskId: "task-id", isCompleted: true }) }) ``` ## Inputs Provide `taskId` and at least one mutable field. Dates accept `Date` or Unix seconds; update title, description, owners, relationships, tags, priority, workflow type, or completion. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns the updated `JobNimbusTask`. # Upload file Source: https://docs.automate.ax/reference/integrations/jobnimbus/actions/upload-file Upload a file and relate it to JobNimbus records. `jobNimbus.uploadFile` upload a file and relate it to JobNimbus records. ```ts automations/jobnimbus-upload-file.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("Upload file", () => { onDashboardRun({ title: "Upload file" }) jobNimbus.uploadFile({ file: new File(["inspection notes"], "inspection.txt", { type: "text/plain", }), relatedIds: ["job-id"], type: 1, }) }) ``` ## Inputs Provide a `File` smaller than 100 MB, at least one related contact or job ID, and the configured numeric file type. Optional description and privacy are supported; `generateThumbnail` defaults to true. Optional second argument `{ account }` selects a named JobNimbus binding. ## Output Returns `{ id, filename, thumbnailUrl? }` after the signed upload and JobNimbus completion request both succeed. With the default `generateThumbnail: true`, `thumbnailUrl` contains the generated thumbnail URL. When thumbnail generation is disabled, JobNimbus creates it asynchronously and can omit the URL from this response. Multipart uploads are not exposed. # JobNimbus Source: https://docs.automate.ax/reference/integrations/jobnimbus/index Use JobNimbus API keys for CRM records and single-part file uploads under 100 MB. ```ts automations/create-jobnimbus-task.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { jobNimbus } from "automate.ax/jobnimbus" export default automation("Create JobNimbus task", () => { const run = onDashboardRun({ title: "Create JobNimbus task", fields: [ { name: "jobId", type: "text", label: "Job ID", required: true, }, ], }) jobNimbus.createTask({ dateStart: new Date("2026-09-01T16:00:00Z"), recordTypeName: "Task", related: [{ id: run.data.jobId }], title: "Call homeowner", }) }) ``` Connect an API key created in JobNimbus Settings under API. The key's Access Profile controls which records and operations are available; Automate.ax does not widen those permissions. Admin keys can use the optional `actor` input on legacy actions to apply a team member's visibility. Legacy list actions use `size` (1–1,000) and `from` offset pagination. Provider fields become public TypeScript fields, provider record identifiers become `id`, documented Unix timestamps become JavaScript `Date` values, and account-defined custom fields appear under `customFields`. Single-part file uploads support files smaller than 100 MB. Automate.ax does not expose JobNimbus outbound-webhook triggers. ## Exports ```ts theme={null} import { jobNimbus, jobNimbusAccount, getJobNimbusApi, } from "automate.ax/jobnimbus" ``` * `jobNimbus` contains the packaged JobNimbus actions. * `jobNimbusAccount("name")` selects a named JobNimbus connection. * `getJobNimbusApi` creates the authenticated JobNimbus API helper for a custom account-backed action. ## Actions * [Archive contact](/reference/integrations/jobnimbus/actions/archive-contact) * [Archive job](/reference/integrations/jobnimbus/actions/archive-job) * [Archive product](/reference/integrations/jobnimbus/actions/archive-product) * [Archive task](/reference/integrations/jobnimbus/actions/archive-task) * [Create activity](/reference/integrations/jobnimbus/actions/create-activity) * [Create contact](/reference/integrations/jobnimbus/actions/create-contact) * [Create job](/reference/integrations/jobnimbus/actions/create-job) * [Create product](/reference/integrations/jobnimbus/actions/create-product) * [Create task](/reference/integrations/jobnimbus/actions/create-task) * [Delete activity](/reference/integrations/jobnimbus/actions/delete-activity) * [Get account settings](/reference/integrations/jobnimbus/actions/get-account-settings) * [Get activity](/reference/integrations/jobnimbus/actions/get-activity) * [Get contact](/reference/integrations/jobnimbus/actions/get-contact) * [Get file](/reference/integrations/jobnimbus/actions/get-file) * [Get job](/reference/integrations/jobnimbus/actions/get-job) * [Get product](/reference/integrations/jobnimbus/actions/get-product) * [Get task](/reference/integrations/jobnimbus/actions/get-task) * [List activities](/reference/integrations/jobnimbus/actions/list-activities) * [List activity types](/reference/integrations/jobnimbus/actions/list-activity-types) * [List contacts](/reference/integrations/jobnimbus/actions/list-contacts) * [List files](/reference/integrations/jobnimbus/actions/list-files) * [List groups](/reference/integrations/jobnimbus/actions/list-groups) * [List jobs](/reference/integrations/jobnimbus/actions/list-jobs) * [List products](/reference/integrations/jobnimbus/actions/list-products) * [List tasks](/reference/integrations/jobnimbus/actions/list-tasks) * [List units of measure](/reference/integrations/jobnimbus/actions/list-units-of-measure) * [List users](/reference/integrations/jobnimbus/actions/list-users) * [Update activity](/reference/integrations/jobnimbus/actions/update-activity) * [Update contact](/reference/integrations/jobnimbus/actions/update-contact) * [Update job](/reference/integrations/jobnimbus/actions/update-job) * [Update product](/reference/integrations/jobnimbus/actions/update-product) * [Update task](/reference/integrations/jobnimbus/actions/update-task) * [Upload file](/reference/integrations/jobnimbus/actions/upload-file) # Add subscriber to form Source: https://docs.automate.ax/reference/integrations/kit/actions/add-subscriber-to-form Adds an existing subscriber to a form by subscriber ID. `kit.addSubscriberToForm` adds an existing subscriber to a form by subscriber ID. ```ts automations/add-subscriber-to-form.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Add subscriber to form", () => { markSignificant( kit.addSubscriberToForm({ formId: 1, id: 1, referrer: "value", }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `formId` | `integer` | Yes | — | | `id` | `integer` | Yes | — | | `referrer` | `string` | Yes | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `subscriber` | `object` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Add subscriber to form by email Source: https://docs.automate.ax/reference/integrations/kit/actions/add-subscriber-to-form-by-email-address Adds an existing subscriber to a form by email address. `kit.addSubscriberToFormByEmailAddress` adds an existing subscriber to a form by email address. ```ts automations/add-subscriber-to-form-by-email-address.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Add subscriber to form by email", () => { markSignificant( kit.addSubscriberToFormByEmailAddress({ formId: 1, emailAddress: "value", }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `formId` | `integer` | Yes | — | | `emailAddress` | `string` | Yes | — | | `referrer` | `string \| null` | No | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `subscriber` | `object` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Add subscriber to sequence Source: https://docs.automate.ax/reference/integrations/kit/actions/add-subscriber-to-sequence Adds an existing subscriber to a sequence by subscriber ID. `kit.addSubscriberToSequence` adds an existing subscriber to a sequence by subscriber ID. ```ts automations/add-subscriber-to-sequence.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Add subscriber to sequence", () => { markSignificant( kit.addSubscriberToSequence({ id: 1, sequenceId: 1, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `integer` | Yes | — | | `sequenceId` | `integer` | Yes | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `subscriber` | `object` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Add subscriber to sequence by email Source: https://docs.automate.ax/reference/integrations/kit/actions/add-subscriber-to-sequence-by-email-address Adds an existing subscriber to a sequence by email address. `kit.addSubscriberToSequenceByEmailAddress` adds an existing subscriber to a sequence by email address. ```ts automations/add-subscriber-to-sequence-by-email-address.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Add subscriber to sequence by email", () => { markSignificant( kit.addSubscriberToSequenceByEmailAddress({ sequenceId: 1, emailAddress: "value", }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `sequenceId` | `integer` | Yes | — | | `emailAddress` | `string` | Yes | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `subscriber` | `object` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Bulk add subscribers to forms Source: https://docs.automate.ax/reference/integrations/kit/actions/bulk-add-subscribers-to-forms Adds subscribers to forms synchronously or as an asynchronous bulk job. `kit.bulkAddSubscribersToForms` adds subscribers to forms synchronously or as an asynchronous bulk job. ```ts automations/bulk-add-subscribers-to-forms.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Bulk add subscribers to forms", () => { markSignificant( kit.bulkAddSubscribersToForms({ additions: [ { formId: 1, subscriberId: 1, }, ], }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `additions` | `object[]` | Yes | — | | `callbackUrl` | `string \| null` | No | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `subscribers` | `object[]` | No | — | | `failures` | `object[]` | No | — | > This action requires a Kit OAuth connection. Kit does not allow V4 API keys for this endpoint. Kit may complete a small bulk request inline or return an asynchronous bulk job. Large queued jobs count against Kit's 300 MB account queue limit. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Bulk create custom fields Source: https://docs.automate.ax/reference/integrations/kit/actions/bulk-create-custom-fields Creates custom fields synchronously or as an asynchronous bulk job. `kit.bulkCreateCustomFields` creates custom fields synchronously or as an asynchronous bulk job. ```ts automations/bulk-create-custom-fields.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Bulk create custom fields", () => { markSignificant( kit.bulkCreateCustomFields({ customFields: [ { label: "value", }, ], }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `customFields` | `object[]` | Yes | — | | `callbackUrl` | `string \| null` | No | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `customFields` | `object[]` | No | — | | `failures` | `JSON value[]` | No | — | > This action requires a Kit OAuth connection. Kit does not allow V4 API keys for this endpoint. Kit may complete a small bulk request inline or return an asynchronous bulk job. Large queued jobs count against Kit's 300 MB account queue limit. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Bulk create subscribers Source: https://docs.automate.ax/reference/integrations/kit/actions/bulk-create-subscribers Creates or updates subscribers in one bulk request. `kit.bulkCreateSubscribers` creates or updates subscribers in one bulk request. ```ts automations/bulk-create-subscribers.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Bulk create subscribers", () => { markSignificant( kit.bulkCreateSubscribers({ subscribers: [{}], }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `subscribers` | `object[]` | Yes | — | | `callbackUrl` | `string \| null` | No | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `subscribers` | `object[]` | No | — | | `failures` | `object[]` | No | — | > This action requires a Kit OAuth connection. Kit does not allow V4 API keys for this endpoint. Kit may complete a small bulk request inline or return an asynchronous bulk job. Large queued jobs count against Kit's 300 MB account queue limit. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Bulk create tags Source: https://docs.automate.ax/reference/integrations/kit/actions/bulk-create-tags Creates tags synchronously or as an asynchronous bulk job. `kit.bulkCreateTags` creates tags synchronously or as an asynchronous bulk job. ```ts automations/bulk-create-tags.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Bulk create tags", () => { markSignificant( kit.bulkCreateTags({ tags: [ { name: "value", }, ], }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `tags` | `object[]` | Yes | — | | `callbackUrl` | `string \| null` | No | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `tags` | `object[]` | No | — | | `failures` | `JSON value[]` | No | — | > This action requires a Kit OAuth connection. Kit does not allow V4 API keys for this endpoint. Kit may complete a small bulk request inline or return an asynchronous bulk job. Large queued jobs count against Kit's 300 MB account queue limit. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Bulk delete tags Source: https://docs.automate.ax/reference/integrations/kit/actions/bulk-delete-tags Deletes tags synchronously or as an asynchronous bulk job. `kit.bulkDeleteTags` deletes tags synchronously or as an asynchronous bulk job. ```ts automations/bulk-delete-tags.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Bulk delete tags", () => { markSignificant( kit.bulkDeleteTags({ tags: [ { id: 1, }, ], }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `tags` | `object[]` | Yes | Tags to delete, identified by `id`. Batches of 100 or fewer are processed synchronously (200); larger batches are queued and processed asynchronously (202). | | `callbackUrl` | `string \| null` | No | Optional. When the batch is processed asynchronously (more than 100 tags), the results are POSTed to this URL on completion. | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `failures` | `object[]` | No | — | > This action requires a Kit OAuth connection. Kit does not allow V4 API keys for this endpoint. Kit may complete a small bulk request inline or return an asynchronous bulk job. Large queued jobs count against Kit's 300 MB account queue limit. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Bulk tag subscribers Source: https://docs.automate.ax/reference/integrations/kit/actions/bulk-tag-subscribers Applies tags to subscribers in one bulk request. `kit.bulkTagSubscribers` applies tags to subscribers in one bulk request. ```ts automations/bulk-tag-subscribers.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Bulk tag subscribers", () => { markSignificant( kit.bulkTagSubscribers({ taggings: [ { tagId: 1, subscriberId: 1, }, ], }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `taggings` | `object[]` | Yes | — | | `callbackUrl` | `string \| null` | No | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `subscribers` | `object[]` | No | — | | `failures` | `object[]` | No | — | > This action requires a Kit OAuth connection. Kit does not allow V4 API keys for this endpoint. Kit may complete a small bulk request inline or return an asynchronous bulk job. Large queued jobs count against Kit's 300 MB account queue limit. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Bulk update subscriber custom fields Source: https://docs.automate.ax/reference/integrations/kit/actions/bulk-update-subscriber-custom-field-values Updates custom field values across subscribers in one bulk request. `kit.bulkUpdateSubscriberCustomFieldValues` updates custom field values across subscribers in one bulk request. ```ts automations/bulk-update-subscriber-custom-field-values.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Bulk update subscriber custom fields", () => { markSignificant( kit.bulkUpdateSubscriberCustomFieldValues({ customFieldValues: [ { subscriberId: 1, subscriberCustomFieldId: 1, value: "value", }, ], callbackUrl: "value", }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `customFieldValues` | `object[]` | Yes | — | | `callbackUrl` | `JSON value \| null` | Yes | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `customFieldValues` | `object[]` | No | — | | `failures` | `object[]` | No | — | > This action requires a Kit OAuth connection. Kit does not allow V4 API keys for this endpoint. Kit may complete a small bulk request inline or return an asynchronous bulk job. Large queued jobs count against Kit's 300 MB account queue limit. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Create broadcast Source: https://docs.automate.ax/reference/integrations/kit/actions/create-broadcast Creates a draft or scheduled Kit broadcast. `kit.createBroadcast` creates a draft or scheduled Kit broadcast. ```ts automations/create-broadcast.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Create broadcast", () => { markSignificant( kit.createBroadcast({ content: "value", description: "value", public: true, publishedAt: "value", previewText: "value", subject: "value", subscriberFilter: [ { all: [ { type: "segment", ids: [1], }, ], any: [ { type: "segment", ids: [1], }, ], none: [ { type: "segment", ids: [1], }, ], }, ], }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `emailTemplateId` | `integer` | No | Id of the email template to use. Uses the account's default template if not provided. 'Starting point' template is not supported. | | `emailAddress` | `string \| null` | No | The sending email address to use. Uses the account's sending email address if not provided. | | `content` | `string` | Yes | The HTML content of the email. | | `description` | `string` | Yes | — | | `public` | `boolean` | Yes | `true` to publish this broadcast to the web. The broadcast will appear in a newsletter feed on your Creator Profile and Landing Pages. | | `publishedAt` | `string` | Yes | The published timestamp to display in ISO8601 format. If no timezone is provided, UTC is assumed. | | `sendAt` | `string \| null` | No | The scheduled send time for this broadcast in ISO8601 format. If no timezone is provided, UTC is assumed. | | `thumbnailAlt` | `string \| null` | No | — | | `thumbnailUrl` | `string \| null` | No | — | | `previewText` | `string` | Yes | — | | `subject` | `string` | Yes | — | | `subscriberFilter` | `object[]` | Yes | Filters your subscribers. At this time, we only support using only one filter group type via the API (for example `all`, `any`, or `none` but no combinations). If nothing is provided, will default to all of your subscribers. | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `broadcast` | `object` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Create custom field Source: https://docs.automate.ax/reference/integrations/kit/actions/create-custom-field Creates one account custom field. `kit.createCustomField` creates one account custom field. ```ts automations/create-custom-field.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Create custom field", () => { markSignificant( kit.createCustomField({ label: "value", }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `label` | `string` | Yes | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `customField` | `object` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Create purchase Source: https://docs.automate.ax/reference/integrations/kit/actions/create-purchase Records a purchase against a subscriber. `kit.createPurchase` records a purchase against a subscriber. ```ts automations/create-purchase.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Create purchase", () => { markSignificant( kit.createPurchase({ purchase: { emailAddress: "customer@example.com", transactionId: "order_1042", status: "paid", subtotal: 59, tax: 4.72, shipping: 0, discount: 10, total: 53.72, currency: "USD", transactionTime: "2026-09-05T12:00:00Z", products: [ { name: "Creator workbook", pid: "workbook", lid: "order_1042_workbook", quantity: 1, unitPrice: 59, sku: "WORKBOOK-PRINT", }, ], }, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `purchase` | `object` | Yes | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `purchase` | `object` | Yes | — | > This action requires a Kit OAuth connection. Kit does not allow V4 API keys for this endpoint. > [!WARNING] > > Do not reuse a `transactionId` for retries outside Automate.ax. Kit appends > the submitted products to the existing purchase, so repeating the same > transaction can create duplicate line items. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Create sequence Source: https://docs.automate.ax/reference/integrations/kit/actions/create-sequence Creates an empty automated email sequence. `kit.createSequence` creates an empty automated email sequence. ```ts automations/create-sequence.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Create sequence", () => { markSignificant( kit.createSequence({ name: "Welcome series", }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `name` | `string` | No | The name of the sequence. | | `emailAddress` | `string` | No | The sending email address to use. Uses the account's sending email address if not provided. | | `emailTemplateId` | `integer` | No | Id of the email template to use. | | `sendDays` | `string[]` | No | The days of the week to send the sequence on. Must be one of: `monday`, `tuesday`, `wednesday`, `thursday`, `friday`, `saturday`, `sunday`. | | `sendHour` | `integer` | No | The hour of the day to send the sequence at. Must be an integer between 0 and 23. | | `timeZone` | `string` | No | The timezone to use for the sequence. Must be a valid IANA timezone string. | | `active` | `boolean` | No | `true` to activate the sequence, `false` to deactivate it. | | `repeat` | `boolean` | No | When `true`, subscribers can restart the sequence multiple times. | | `hold` | `boolean` | No | When `true`, subscribers added via Visual Automations stay in the sequence after receiving the last email. | | `excludeSubscriberSources` | `object[]` | No | The subscriber sources to exclude from the sequence. | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `sequence` | `object` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Create sequence email Source: https://docs.automate.ax/reference/integrations/kit/actions/create-sequence-email Adds one email step to a sequence. `kit.createSequenceEmail` adds one email step to a sequence. ```ts automations/create-sequence-email.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Create sequence email", () => { markSignificant( kit.createSequenceEmail({ sequenceId: 1, subject: "value", delayValue: 1, delayUnit: "days", }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `sequenceId` | `integer` | Yes | — | | `subject` | `string` | Yes | Subject line of the email | | `previewText` | `string \| null` | No | Preview text shown in email clients before the email is opened | | `content` | `string \| null` | No | HTML body content of the email | | `delayValue` | `integer` | Yes | Number of days or hours to wait before sending this email after the previous one | | `delayUnit` | `"days" \| "hours"` | Yes | Unit for the send delay. Use `days` for schedule-aware delivery, `hours` for a fixed hourly delay | | `emailTemplateId` | `integer \| null` | No | ID of the email template to use for layout and styling | | `published` | `boolean` | No | Whether the email is active and will be sent to subscribers. Defaults to `false` (draft) | | `sendDays` | `string[] \| null` | No | Days of the week this email may be sent. Defaults to all 7 days (inherits the sequence schedule). Pass a subset to restrict delivery, or `null` to reset to all days | | `position` | `integer \| null` | No | Zero-based position of the email in the sequence. Assigned automatically after the last email if omitted | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `email` | `object` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Create snippet Source: https://docs.automate.ax/reference/integrations/kit/actions/create-snippet Creates a reusable email snippet. `kit.createSnippet` creates a reusable email snippet. ```ts automations/create-snippet.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Create snippet", () => { markSignificant( kit.createSnippet({ name: "Welcome note", snippetType: "inline", content: "Thanks for being here.", }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `name` | `string` | Yes | Name of the snippet | | `snippetType` | `"inline" \| "block"` | Yes | Use `inline` for text or `block` for rich text | | `content` | `string` | Conditional | Required for an inline snippet | | `documentAttributes` | `object` | Conditional | Required for a block snippet | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `snippet` | `object` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Create subscriber Source: https://docs.automate.ax/reference/integrations/kit/actions/create-subscriber Creates or updates a subscriber by email address. `kit.createSubscriber` creates or updates a subscriber by email address. ```ts automations/create-subscriber.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Create subscriber", () => { markSignificant( kit.createSubscriber({ emailAddress: "value", }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `firstName` | `string \| null` | No | — | | `emailAddress` | `string` | Yes | — | | `state` | `"active" \| "cancelled" \| "bounced" \| "complained" \| "inactive" \| null` | No | Create subscriber in this state (`active`, `bounced`, `cancelled`, `complained` or `inactive`). Defaults to `active`. | | `fields` | `object` | No | Custom field values keyed by the custom field's `key` (for example `last_name`, not `Last Name`). Unknown keys are ignored and reported in the response `warnings` array. | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `subscriber` | `object` | Yes | — | | `warnings` | `string[]` | No | Present only when the request referenced custom field keys that don't exist on the account. Each entry names an unknown key that was ignored; the subscriber is still created or updated. | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Create tag Source: https://docs.automate.ax/reference/integrations/kit/actions/create-tag Creates a tag or returns the existing case-insensitive name match. `kit.createTag` creates a tag or returns the existing case-insensitive name match. ```ts automations/create-tag.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Create tag", () => { markSignificant( kit.createTag({ name: "value", }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `name` | `string` | Yes | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `tag` | `object` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Delete broadcast Source: https://docs.automate.ax/reference/integrations/kit/actions/delete-broadcast Permanently deletes a draft or scheduled broadcast. `kit.deleteBroadcast` permanently deletes a draft or scheduled broadcast. ```ts automations/delete-broadcast.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Delete broadcast", () => { markSignificant( kit.deleteBroadcast({ id: 1, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `integer` | Yes | — | Returns an empty object after Kit accepts the request. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Delete custom field Source: https://docs.automate.ax/reference/integrations/kit/actions/delete-custom-field Deletes a custom field and all subscriber values stored in it. `kit.deleteCustomField` deletes a custom field and all subscriber values stored in it. ```ts automations/delete-custom-field.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Delete custom field", () => { markSignificant( kit.deleteCustomField({ id: 1, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `integer` | Yes | — | Returns an empty object after Kit accepts the request. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Delete sequence Source: https://docs.automate.ax/reference/integrations/kit/actions/delete-sequence Soft-deletes a sequence and stops active delivery. `kit.deleteSequence` soft-deletes a sequence and stops active delivery. ```ts automations/delete-sequence.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Delete sequence", () => { markSignificant( kit.deleteSequence({ id: 1, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `integer` | Yes | — | Returns an empty object after Kit accepts the request. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Delete sequence email Source: https://docs.automate.ax/reference/integrations/kit/actions/delete-sequence-email Permanently removes one email from a sequence. `kit.deleteSequenceEmail` permanently removes one email from a sequence. ```ts automations/delete-sequence-email.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Delete sequence email", () => { markSignificant( kit.deleteSequenceEmail({ id: 1, sequenceId: 1, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `integer` | Yes | — | | `sequenceId` | `integer` | Yes | — | Returns an empty object after Kit accepts the request. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Delete subscriber location Source: https://docs.automate.ax/reference/integrations/kit/actions/delete-subscriber-location Removes a subscriber's pinned location. `kit.deleteSubscriberLocation` removes a subscriber's pinned location. ```ts automations/delete-subscriber-location.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Delete subscriber location", () => { markSignificant( kit.deleteSubscriberLocation({ subscriberId: 1, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `subscriberId` | `integer` | Yes | — | Returns an empty object after Kit accepts the request. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Filter subscribers Source: https://docs.automate.ax/reference/integrations/kit/actions/filter-subscribers Filters subscribers by engagement, sign-up, state, and tags. `kit.filterSubscribers` filters subscribers by engagement, sign-up, state, and tags. ```ts automations/filter-subscribers.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Filter subscribers", () => { markSignificant( kit.filterSubscribers({ countingMode: "unique_email", all: [ { type: "opens", countGreaterThanOrEqual: 2, after: "2026-08-01", }, { type: "attribution", any: [ { type: "kit_source", sourceType: "api_subscription", }, ], }, ], include: [{ type: "tags" }], sortField: "engagement__open_rate", sortOrder: "desc", }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `countingMode` | `"raw" \| "unique_email"` | No | Controls how engagement-filter count thresholds are tallied. `raw` (default) counts every event—five opens of the same email = five. `unique_email` counts distinct emails on which the action occurred—five opens of the same email = one. Applies to every engagement filter (opens, clicks, sent, delivered) in the request; ignored for other filter types. | | `all` | `FilterCondition[]` | Yes | Conditions that every returned subscriber must match. | | `include` | `object[]` | No | Optional. Array of `{ type, ...config }` objects naming additional fields to embed on each subscriber row. Valid types: `attribution`, `tags`, `location`, `canceled_at`, `stats`, `custom_fields`. The `stats` type accepts an optional `range: { start, end }` (YYYY-MM-DD dates, defaulting to the last 90 days). The `custom_fields` type adds a `fields` object with all account custom field values (null for fields the subscriber has not set). | | `sortField` | `"id" \| "first_name" \| "email_address" \| "created_at" \| "engagement__sent" \| "engagement__opens" \| "engagement__clicks" \| "engagement__open_rate" \| "engagement__click_rate" \| "location__distance"` | No | Field to order results by. Base columns (`id`, `first_name`, `email_address`, `created_at`) order by that subscriber attribute. `engagement__` orders by an engagement stat over the trailing 90 days: counts (`sent`, `opens`, `clicks`) and rates (`open_rate`, `click_rate`); subscribers with no sends order as 0. `location__distance` orders by great-circle distance and requires a `location` filter in the same request—its `latitude`/`longitude` supply the origin, and subscribers without a primary location are excluded. Distance defaults to nearest-first (`sort_order` defaults to `asc` for this field); pass `sort_order=desc` for farthest-first. Default: `created_at`. | | `sortOrder` | `"asc" \| "desc"` | No | Sort direction (default: desc). | Each filter condition requires `type`. Engagement conditions (`opens`, `clicks`, `sent`, or `delivered`) accept `countGreaterThan`, `countGreaterThanOrEqual`, `countLessThan`, `countLessThanOrEqual`, `after`, and `before`. A `subscriber_state` condition accepts `states`; a `custom_field` condition accepts `subscriberCustomFieldId`, `value`, and `comparison`; and a `location` condition requires `latitude`, `longitude`, and `radius`. Some conditions accept an `any` array: * Engagement conditions accept `{ type: "broadcasts", ids }` or `{ type: "urls", urls, matching }`. * A `tags` condition accepts `{ type: "ids", matching }`. * An `attribution` condition accepts `{ type: "forms", ids }` or `{ type: "kit_source", sourceType?, sourceIds?, sourceNames?, mechanism?, mechanismIds? }`. ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `subscribers` | `object[]` | Yes | — | | `pagination` | `object` | Yes | — | Kit list and reporting endpoints can lag recent writes. Cursor-based list actions accept `after` or `before`; `perPage` defaults to Kit's provider default and cannot exceed 1,000. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Get broadcast Source: https://docs.automate.ax/reference/integrations/kit/actions/get-broadcast Returns one broadcast with content, targeting, and publication settings. `kit.getBroadcast` returns one broadcast with content, targeting, and publication settings. ```ts automations/get-broadcast.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Get broadcast", () => { markSignificant( kit.getBroadcast({ id: 1, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `[]` | `string` | No | — | | `id` | `integer` | Yes | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `broadcast` | `object` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Get broadcast stats Source: https://docs.automate.ax/reference/integrations/kit/actions/get-broadcast-stats Returns delivery and engagement statistics for one broadcast. `kit.getBroadcastStats` returns delivery and engagement statistics for one broadcast. ```ts automations/get-broadcast-stats.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Get broadcast stats", () => { markSignificant( kit.getBroadcastStats({ broadcastId: 1, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `broadcastId` | `integer` | Yes | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `broadcast` | `object` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Get creator profile Source: https://docs.automate.ax/reference/integrations/kit/actions/get-creator-profile Returns the account's public creator profile. `kit.getCreatorProfile` returns the account's public creator profile. ```ts automations/get-creator-profile.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Get creator profile", () => { markSignificant(kit.getCreatorProfile({})) }) ``` ## Input This action takes no input. ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `profile` | `object` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Get current account Source: https://docs.automate.ax/reference/integrations/kit/actions/get-current-account Returns the authenticated Kit account and user identity. `kit.getCurrentAccount` returns the authenticated Kit account and user identity. ```ts automations/get-current-account.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Get current account", () => { markSignificant(kit.getCurrentAccount({})) }) ``` ## Input This action takes no input. ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `user` | `object` | Yes | — | | `account` | `object` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Get email stats Source: https://docs.automate.ax/reference/integrations/kit/actions/get-email-stats Returns account-level email performance for the last 90 days. `kit.getEmailStats` returns account-level email performance for the last 90 days. ```ts automations/get-email-stats.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Get email stats", () => { markSignificant(kit.getEmailStats({})) }) ``` ## Input This action takes no input. ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `stats` | `object` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Get growth stats Source: https://docs.automate.ax/reference/integrations/kit/actions/get-growth-stats Returns subscriber growth statistics for a selected period. `kit.getGrowthStats` returns subscriber growth statistics for a selected period. ```ts automations/get-growth-stats.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Get growth stats", () => { markSignificant(kit.getGrowthStats({})) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `ending` | `string` | No | — | | `starting` | `string` | No | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `stats` | `object` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Get post Source: https://docs.automate.ax/reference/integrations/kit/actions/get-post Returns one post with content, publication, and SEO fields. `kit.getPost` returns one post with content, publication, and SEO fields. ```ts automations/get-post.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Get post", () => { markSignificant( kit.getPost({ id: 1, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `integer` | Yes | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `post` | `object` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Get purchase Source: https://docs.automate.ax/reference/integrations/kit/actions/get-purchase Returns one recorded purchase. `kit.getPurchase` returns one recorded purchase. ```ts automations/get-purchase.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Get purchase", () => { markSignificant( kit.getPurchase({ id: 1, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `integer` | Yes | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `purchase` | `object` | Yes | — | > This action requires a Kit OAuth connection. Kit does not allow V4 API keys for this endpoint. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Get sequence Source: https://docs.automate.ax/reference/integrations/kit/actions/get-sequence Returns one sequence and its delivery settings. `kit.getSequence` returns one sequence and its delivery settings. ```ts automations/get-sequence.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Get sequence", () => { markSignificant( kit.getSequence({ id: 1, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `integer` | Yes | — | | `include` | `string` | No | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `sequence` | `object` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Get sequence email Source: https://docs.automate.ax/reference/integrations/kit/actions/get-sequence-email Returns one sequence email with its full content. `kit.getSequenceEmail` returns one sequence email with its full content. ```ts automations/get-sequence-email.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Get sequence email", () => { markSignificant( kit.getSequenceEmail({ id: 1, sequenceId: 1, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `integer` | Yes | — | | `sequenceId` | `integer` | Yes | — | | `include` | `string` | No | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `email` | `object` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Get snippet Source: https://docs.automate.ax/reference/integrations/kit/actions/get-snippet Returns one reusable snippet with full content. `kit.getSnippet` returns one reusable snippet with full content. ```ts automations/get-snippet.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Get snippet", () => { markSignificant( kit.getSnippet({ id: 1, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `integer` | Yes | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `snippet` | `object` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Get subscriber Source: https://docs.automate.ax/reference/integrations/kit/actions/get-subscriber Returns one subscriber and their custom field values. `kit.getSubscriber` returns one subscriber and their custom field values. ```ts automations/get-subscriber.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Get subscriber", () => { markSignificant( kit.getSubscriber({ id: 1, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `integer` | Yes | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `subscriber` | `object` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Get subscriber stats Source: https://docs.automate.ax/reference/integrations/kit/actions/get-subscriber-stats Returns delivery and engagement statistics for one subscriber. `kit.getSubscriberStats` returns delivery and engagement statistics for one subscriber. ```ts automations/get-subscriber-stats.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Get subscriber stats", () => { markSignificant( kit.getSubscriberStats({ subscriberId: 1, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `emailSentAfter` | `string` | No | — | | `emailSentBefore` | `string` | No | — | | `subscriberId` | `integer` | Yes | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `subscriber` | `object` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # List broadcast link clicks Source: https://docs.automate.ax/reference/integrations/kit/actions/list-broadcast-link-clicks Lists link-level click performance for a broadcast. `kit.listBroadcastLinkClicks` lists link-level click performance for a broadcast. ```ts automations/list-broadcast-link-clicks.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("List broadcast link clicks", () => { markSignificant( kit.listBroadcastLinkClicks({ broadcastId: 1, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `broadcastId` | `integer` | Yes | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `broadcast` | `object` | Yes | — | | `pagination` | `object` | Yes | — | Kit list and reporting endpoints can lag recent writes. Cursor-based list actions accept `after` or `before`; `perPage` defaults to Kit's provider default and cannot exceed 1,000. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # List broadcast stats Source: https://docs.automate.ax/reference/integrations/kit/actions/list-broadcast-stats Lists delivery and engagement statistics for broadcasts. `kit.listBroadcastStats` lists delivery and engagement statistics for broadcasts. ```ts automations/list-broadcast-stats.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("List broadcast stats", () => { markSignificant(kit.listBroadcastStats({})) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `after` | `string \| null` | No | — | | `before` | `string \| null` | No | — | | `includeTotalCount` | `boolean` | No | — | | `perPage` | `integer \| null` | No | Minimum: 1. Maximum: 1000. | | `sentAfter` | `string \| null` | No | — | | `sentBefore` | `string \| null` | No | — | | `status` | `"draft" \| "scheduled" \| "sending" \| "completed" \| "aborted"` | No | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `broadcasts` | `object[]` | Yes | — | | `pagination` | `object` | Yes | — | Kit list and reporting endpoints can lag recent writes. Cursor-based list actions accept `after` or `before`; `perPage` defaults to Kit's provider default and cannot exceed 1,000. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # List broadcasts Source: https://docs.automate.ax/reference/integrations/kit/actions/list-broadcasts Lists broadcasts with cursor pagination and lifecycle filters. `kit.listBroadcasts` lists broadcasts with cursor pagination and lifecycle filters. ```ts automations/list-broadcasts.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("List broadcasts", () => { markSignificant(kit.listBroadcasts({})) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `after` | `string \| null` | No | — | | `before` | `string \| null` | No | — | | `includeTotalCount` | `boolean` | No | — | | `perPage` | `integer \| null` | No | Minimum: 1. Maximum: 1000. | | `sentAfter` | `string \| null` | No | — | | `sentBefore` | `string \| null` | No | — | | `slim` | `boolean` | No | — | | `status` | `"draft" \| "scheduled" \| "sending" \| "completed" \| "aborted"` | No | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `broadcasts` | `object[]` | Yes | — | | `pagination` | `object` | Yes | — | Kit list and reporting endpoints can lag recent writes. Cursor-based list actions accept `after` or `before`; `perPage` defaults to Kit's provider default and cannot exceed 1,000. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # List colors Source: https://docs.automate.ax/reference/integrations/kit/actions/list-colors Lists the account's saved brand color palette. `kit.listColors` lists the account's saved brand color palette. ```ts automations/list-colors.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("List colors", () => { markSignificant(kit.listColors({})) }) ``` ## Input This action takes no input. ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `colors` | `string[]` | Yes | — | Kit list and reporting endpoints can lag recent writes. Cursor-based list actions accept `after` or `before`; `perPage` defaults to Kit's provider default and cannot exceed 1,000. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # List custom fields Source: https://docs.automate.ax/reference/integrations/kit/actions/list-custom-fields Lists custom fields with cursor pagination. `kit.listCustomFields` lists custom fields with cursor pagination. ```ts automations/list-custom-fields.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("List custom fields", () => { markSignificant(kit.listCustomFields({})) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `after` | `string \| null` | No | — | | `before` | `string \| null` | No | — | | `includeTotalCount` | `boolean` | No | — | | `perPage` | `integer \| null` | No | Minimum: 1. Maximum: 1000. | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `customFields` | `object[]` | Yes | — | | `pagination` | `object` | Yes | — | Kit list and reporting endpoints can lag recent writes. Cursor-based list actions accept `after` or `before`; `perPage` defaults to Kit's provider default and cannot exceed 1,000. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # List email templates Source: https://docs.automate.ax/reference/integrations/kit/actions/list-email-templates Lists account email templates with cursor pagination. `kit.listEmailTemplates` lists account email templates with cursor pagination. ```ts automations/list-email-templates.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("List email templates", () => { markSignificant(kit.listEmailTemplates({})) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `after` | `string \| null` | No | — | | `before` | `string \| null` | No | — | | `includeTotalCount` | `boolean` | No | — | | `perPage` | `integer \| null` | No | Minimum: 1. Maximum: 1000. | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `emailTemplates` | `object[]` | Yes | — | | `pagination` | `object` | Yes | — | Kit list and reporting endpoints can lag recent writes. Cursor-based list actions accept `after` or `before`; `perPage` defaults to Kit's provider default and cannot exceed 1,000. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # List form subscribers Source: https://docs.automate.ax/reference/integrations/kit/actions/list-form-subscribers Lists subscribers associated with one form. `kit.listFormSubscribers` lists subscribers associated with one form. ```ts automations/list-form-subscribers.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("List form subscribers", () => { markSignificant( kit.listFormSubscribers({ formId: 1, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `addedAfter` | `string \| null` | No | — | | `addedBefore` | `string \| null` | No | — | | `after` | `string \| null` | No | — | | `before` | `string \| null` | No | — | | `createdAfter` | `string \| null` | No | — | | `createdBefore` | `string \| null` | No | — | | `formId` | `integer` | Yes | — | | `includeTotalCount` | `boolean` | No | — | | `perPage` | `integer \| null` | No | Minimum: 1. Maximum: 1000. | | `slim` | `boolean` | No | — | | `status` | `"active" \| "inactive" \| "bounced" \| "complained" \| "cancelled" \| "all"` | No | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `subscribers` | `object[]` | Yes | — | | `pagination` | `object` | Yes | — | Kit list and reporting endpoints can lag recent writes. Cursor-based list actions accept `after` or `before`; `perPage` defaults to Kit's provider default and cannot exceed 1,000. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # List forms Source: https://docs.automate.ax/reference/integrations/kit/actions/list-forms Lists forms and landing pages with status and type filters. `kit.listForms` lists forms and landing pages with status and type filters. ```ts automations/list-forms.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("List forms", () => { markSignificant(kit.listForms({})) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `after` | `string \| null` | No | — | | `before` | `string \| null` | No | — | | `includeTotalCount` | `boolean` | No | — | | `perPage` | `integer \| null` | No | Minimum: 1. Maximum: 1000. | | `status` | `"active" \| "archived" \| "trashed" \| "all" \| null` | No | — | | `type` | `"embed" \| "hosted" \| null` | No | — | | `include` | `string` | No | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `forms` | `object[]` | Yes | — | | `pagination` | `object` | Yes | — | Kit list and reporting endpoints can lag recent writes. Cursor-based list actions accept `after` or `before`; `perPage` defaults to Kit's provider default and cannot exceed 1,000. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # List posts Source: https://docs.automate.ax/reference/integrations/kit/actions/list-posts Lists posts published to the creator's Kit site or email audience. `kit.listPosts` lists posts published to the creator's Kit site or email audience. ```ts automations/list-posts.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("List posts", () => { markSignificant(kit.listPosts({})) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `after` | `string \| null` | No | — | | `before` | `string \| null` | No | — | | `includeContent` | `boolean` | No | — | | `includeTotalCount` | `boolean` | No | — | | `perPage` | `integer \| null` | No | Minimum: 1. Maximum: 1000. | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `posts` | `object[]` | Yes | — | | `pagination` | `object` | Yes | — | Kit list and reporting endpoints can lag recent writes. Cursor-based list actions accept `after` or `before`; `perPage` defaults to Kit's provider default and cannot exceed 1,000. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # List purchases Source: https://docs.automate.ax/reference/integrations/kit/actions/list-purchases Lists purchases recorded in the account. `kit.listPurchases` lists purchases recorded in the account. ```ts automations/list-purchases.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("List purchases", () => { markSignificant(kit.listPurchases({})) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `after` | `string \| null` | No | — | | `before` | `string \| null` | No | — | | `includeTotalCount` | `boolean` | No | — | | `perPage` | `integer \| null` | No | Minimum: 1. Maximum: 1000. | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `purchases` | `object[]` | Yes | — | | `pagination` | `object` | Yes | — | > This action requires a Kit OAuth connection. Kit does not allow V4 API keys for this endpoint. Kit list and reporting endpoints can lag recent writes. Cursor-based list actions accept `after` or `before`; `perPage` defaults to Kit's provider default and cannot exceed 1,000. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # List segments Source: https://docs.automate.ax/reference/integrations/kit/actions/list-segments Lists account segments with cursor pagination. `kit.listSegments` lists account segments with cursor pagination. ```ts automations/list-segments.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("List segments", () => { markSignificant(kit.listSegments({})) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `after` | `string \| null` | No | — | | `before` | `string \| null` | No | — | | `includeTotalCount` | `boolean` | No | — | | `perPage` | `integer \| null` | No | Minimum: 1. Maximum: 1000. | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `segments` | `object[]` | Yes | — | | `pagination` | `object` | Yes | — | Kit list and reporting endpoints can lag recent writes. Cursor-based list actions accept `after` or `before`; `perPage` defaults to Kit's provider default and cannot exceed 1,000. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # List sequence emails Source: https://docs.automate.ax/reference/integrations/kit/actions/list-sequence-emails Lists the email steps in one sequence. `kit.listSequenceEmails` lists the email steps in one sequence. ```ts automations/list-sequence-emails.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("List sequence emails", () => { markSignificant( kit.listSequenceEmails({ sequenceId: 1, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `after` | `string \| null` | No | — | | `before` | `string \| null` | No | — | | `includeContent` | `boolean \| null` | No | — | | `includeTotalCount` | `boolean` | No | — | | `perPage` | `integer \| null` | No | Minimum: 1. Maximum: 1000. | | `sequenceId` | `integer` | Yes | — | | `include` | `string` | No | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `emails` | `object[]` | Yes | — | | `pagination` | `object` | Yes | — | Kit list and reporting endpoints can lag recent writes. Cursor-based list actions accept `after` or `before`; `perPage` defaults to Kit's provider default and cannot exceed 1,000. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # List sequence subscribers Source: https://docs.automate.ax/reference/integrations/kit/actions/list-sequence-subscribers Lists subscribers enrolled in one sequence. `kit.listSequenceSubscribers` lists subscribers enrolled in one sequence. ```ts automations/list-sequence-subscribers.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("List sequence subscribers", () => { markSignificant( kit.listSequenceSubscribers({ sequenceId: 1, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `addedAfter` | `string \| null` | No | — | | `addedBefore` | `string \| null` | No | — | | `after` | `string \| null` | No | — | | `before` | `string \| null` | No | — | | `createdAfter` | `string \| null` | No | — | | `createdBefore` | `string \| null` | No | — | | `includeTotalCount` | `boolean` | No | — | | `perPage` | `integer \| null` | No | Minimum: 1. Maximum: 1000. | | `sequenceId` | `integer` | Yes | — | | `status` | `"active" \| "inactive" \| "bounced" \| "complained" \| "cancelled" \| "all"` | No | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `subscribers` | `object[]` | Yes | — | | `pagination` | `object` | Yes | — | Kit list and reporting endpoints can lag recent writes. Cursor-based list actions accept `after` or `before`; `perPage` defaults to Kit's provider default and cannot exceed 1,000. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # List sequences Source: https://docs.automate.ax/reference/integrations/kit/actions/list-sequences Lists automated email sequences. `kit.listSequences` lists automated email sequences. ```ts automations/list-sequences.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("List sequences", () => { markSignificant(kit.listSequences({})) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `after` | `string \| null` | No | — | | `before` | `string \| null` | No | — | | `includeTotalCount` | `boolean` | No | — | | `perPage` | `integer \| null` | No | Minimum: 1. Maximum: 1000. | | `include` | `string` | No | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `sequences` | `object[]` | Yes | — | | `pagination` | `object` | Yes | — | Kit list and reporting endpoints can lag recent writes. Cursor-based list actions accept `after` or `before`; `perPage` defaults to Kit's provider default and cannot exceed 1,000. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # List snippets Source: https://docs.automate.ax/reference/integrations/kit/actions/list-snippets Lists reusable email snippets. `kit.listSnippets` lists reusable email snippets. ```ts automations/list-snippets.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("List snippets", () => { markSignificant(kit.listSnippets({})) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `after` | `string \| null` | No | — | | `archived` | `boolean \| null` | No | — | | `before` | `string \| null` | No | — | | `includeContent` | `boolean` | No | — | | `includeTotalCount` | `boolean` | No | — | | `perPage` | `integer \| null` | No | Minimum: 1. Maximum: 1000. | | `snippetType` | `"block" \| "inline" \| null` | No | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `snippets` | `object[]` | Yes | — | | `pagination` | `object` | Yes | — | Kit list and reporting endpoints can lag recent writes. Cursor-based list actions accept `after` or `before`; `perPage` defaults to Kit's provider default and cannot exceed 1,000. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # List subscriber tags Source: https://docs.automate.ax/reference/integrations/kit/actions/list-subscriber-tags Lists tags currently applied to one subscriber. `kit.listSubscriberTags` lists tags currently applied to one subscriber. ```ts automations/list-subscriber-tags.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("List subscriber tags", () => { markSignificant( kit.listSubscriberTags({ subscriberId: 1, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `after` | `string \| null` | No | — | | `before` | `string \| null` | No | — | | `includeTotalCount` | `boolean` | No | — | | `perPage` | `integer \| null` | No | Minimum: 1. Maximum: 1000. | | `subscriberId` | `integer` | Yes | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `tags` | `object[]` | Yes | — | | `pagination` | `object` | Yes | — | Kit list and reporting endpoints can lag recent writes. Cursor-based list actions accept `after` or `before`; `perPage` defaults to Kit's provider default and cannot exceed 1,000. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # List subscribers Source: https://docs.automate.ax/reference/integrations/kit/actions/list-subscribers Lists subscribers with cursor, status, date, and engagement sorting filters. `kit.listSubscribers` lists subscribers with cursor, status, date, and engagement sorting filters. ```ts automations/list-subscribers.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("List subscribers", () => { markSignificant(kit.listSubscribers({})) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `after` | `string \| null` | No | — | | `before` | `string \| null` | No | — | | `createdAfter` | `string` | No | — | | `createdBefore` | `string` | No | — | | `emailAddress` | `string` | No | — | | `include` | `string` | No | — | | `includeTotalCount` | `boolean` | No | — | | `perPage` | `number \| null` | No | — | | `slim` | `boolean` | No | — | | `sortField` | `"id" \| "created_at" \| "updated_at" \| "cancelled_at" \| "canceled_at" \| "engagement__sent" \| "engagement__opens" \| "engagement__clicks" \| "engagement__open_rate" \| "engagement__click_rate"` | No | — | | `sortOrder` | `"asc" \| "desc"` | No | — | | `status` | `"active" \| "inactive" \| "bounced" \| "complained" \| "cancelled" \| "all"` | No | — | | `updatedAfter` | `string` | No | — | | `updatedBefore` | `string` | No | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `subscribers` | `object[]` | Yes | — | | `pagination` | `object` | Yes | — | Kit list and reporting endpoints can lag recent writes. Cursor-based list actions accept `after` or `before`; `perPage` defaults to Kit's provider default and cannot exceed 1,000. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # List tag subscribers Source: https://docs.automate.ax/reference/integrations/kit/actions/list-tag-subscribers Lists subscribers that have one tag. `kit.listTagSubscribers` lists subscribers that have one tag. ```ts automations/list-tag-subscribers.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("List tag subscribers", () => { markSignificant( kit.listTagSubscribers({ tagId: 1, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `after` | `string \| null` | No | — | | `before` | `string \| null` | No | — | | `createdAfter` | `string \| null` | No | — | | `createdBefore` | `string \| null` | No | — | | `includeTotalCount` | `boolean` | No | — | | `perPage` | `integer \| null` | No | Minimum: 1. Maximum: 1000. | | `slim` | `boolean` | No | — | | `status` | `"active" \| "inactive" \| "bounced" \| "complained" \| "cancelled" \| "all"` | No | — | | `tagId` | `integer` | Yes | — | | `taggedAfter` | `string \| null` | No | — | | `taggedBefore` | `string \| null` | No | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `subscribers` | `object[]` | Yes | — | | `pagination` | `object` | Yes | — | Kit list and reporting endpoints can lag recent writes. Cursor-based list actions accept `after` or `before`; `perPage` defaults to Kit's provider default and cannot exceed 1,000. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # List tags Source: https://docs.automate.ax/reference/integrations/kit/actions/list-tags Lists account tags with cursor pagination. `kit.listTags` lists account tags with cursor pagination. ```ts automations/list-tags.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("List tags", () => { markSignificant(kit.listTags({})) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `after` | `string \| null` | No | — | | `before` | `string \| null` | No | — | | `includeTotalCount` | `boolean` | No | — | | `perPage` | `integer \| null` | No | Minimum: 1. Maximum: 1000. | | `include` | `string` | No | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `tags` | `object[]` | Yes | — | | `pagination` | `object` | Yes | — | Kit list and reporting endpoints can lag recent writes. Cursor-based list actions accept `after` or `before`; `perPage` defaults to Kit's provider default and cannot exceed 1,000. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Pin subscriber location Source: https://docs.automate.ax/reference/integrations/kit/actions/pin-subscriber-location Pins an explicit location to a subscriber. `kit.pinSubscriberLocation` pins an explicit location to a subscriber. ```ts automations/pin-subscriber-location.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Pin subscriber location", () => { markSignificant( kit.pinSubscriberLocation({ subscriberId: 1, location: { city: "value", stateProvince: "value", countryCode: "value", latitude: 1, longitude: 1, timezone: "value", }, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `subscriberId` | `integer` | Yes | — | | `location` | `object` | Yes | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `subscriber` | `object` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Remove tag from subscriber Source: https://docs.automate.ax/reference/integrations/kit/actions/remove-tag-from-subscriber Removes one tag from a subscriber by ID. `kit.removeTagFromSubscriber` removes one tag from a subscriber by ID. ```ts automations/remove-tag-from-subscriber.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Remove tag from subscriber", () => { markSignificant( kit.removeTagFromSubscriber({ id: 1, tagId: 1, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `integer` | Yes | — | | `tagId` | `integer` | Yes | — | Returns an empty object after Kit accepts the request. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Tag subscriber Source: https://docs.automate.ax/reference/integrations/kit/actions/tag-subscriber Applies a tag to an existing subscriber by ID. `kit.tagSubscriber` applies a tag to an existing subscriber by ID. ```ts automations/tag-subscriber.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Tag subscriber", () => { markSignificant( kit.tagSubscriber({ id: 1, tagId: 1, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `integer` | Yes | — | | `tagId` | `integer` | Yes | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `subscriber` | `object` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Tag subscriber by email Source: https://docs.automate.ax/reference/integrations/kit/actions/tag-subscriber-by-email-address Applies a tag to an existing subscriber by email address. `kit.tagSubscriberByEmailAddress` applies a tag to an existing subscriber by email address. ```ts automations/tag-subscriber-by-email-address.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Tag subscriber by email", () => { markSignificant( kit.tagSubscriberByEmailAddress({ tagId: 1, emailAddress: "value", }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `tagId` | `integer` | Yes | — | | `emailAddress` | `string` | Yes | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `subscriber` | `object` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Unsubscribe subscriber Source: https://docs.automate.ax/reference/integrations/kit/actions/unsubscribe-subscriber Unsubscribes a subscriber from all future Kit email. `kit.unsubscribeSubscriber` unsubscribes a subscriber from all future Kit email. ```ts automations/unsubscribe-subscriber.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Unsubscribe subscriber", () => { markSignificant( kit.unsubscribeSubscriber({ id: 1, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `integer` | Yes | — | Returns an empty object after Kit accepts the request. Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Update broadcast Source: https://docs.automate.ax/reference/integrations/kit/actions/update-broadcast Updates a draft or scheduled broadcast. `kit.updateBroadcast` updates a draft or scheduled broadcast. ```ts automations/update-broadcast.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Update broadcast", () => { markSignificant( kit.updateBroadcast({ id: 1, emailTemplateId: 1, emailAddress: "value", content: "value", description: "value", public: true, publishedAt: "value", sendAt: "value", thumbnailAlt: "value", thumbnailUrl: "value", previewText: "value", subject: "value", subscriberFilter: [ { all: [ { type: "value", ids: [1], }, ], any: [ { type: "value", ids: [1], }, ], none: [ { type: "value", ids: [1], }, ], }, ], }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `integer` | Yes | — | | `emailTemplateId` | `integer` | Yes | Id of the email template to use. Uses the account's default template if not provided. 'Starting point' template is not supported. | | `emailAddress` | `string \| null` | Yes | The sending email address to use. Uses the account's sending email address if not provided. | | `content` | `string` | Yes | The HTML content of the email. | | `description` | `string` | Yes | — | | `public` | `boolean` | Yes | `true` to publish this broadcast to the web. The broadcast will appear in a newsletter feed on your Creator Profile and Landing Pages. | | `publishedAt` | `string` | Yes | The published timestamp to display in ISO8601 format. If no timezone is provided, UTC is assumed. | | `sendAt` | `string` | Yes | The scheduled send time for this broadcast in ISO8601 format. If no timezone is provided, UTC is assumed. | | `thumbnailAlt` | `JSON value \| null` | Yes | — | | `thumbnailUrl` | `JSON value \| null` | Yes | — | | `previewText` | `string` | Yes | — | | `subject` | `string` | Yes | — | | `subscriberFilter` | `object[]` | Yes | Filters your subscribers. At this time, we only support using only one filter group type via the API (for example `all`, `any`, or `none` but no combinations). If nothing is provided, will default to all of your subscribers. | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `broadcast` | `object` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Update colors Source: https://docs.automate.ax/reference/integrations/kit/actions/update-colors Replaces the account's saved brand color palette. `kit.updateColors` replaces the account's saved brand color palette. ```ts automations/update-colors.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Update colors", () => { markSignificant( kit.updateColors({ colors: ["value"], }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `colors` | `string[]` | Yes | An array of up to 10 color hex codes | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `colors` | `string[]` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Update custom field Source: https://docs.automate.ax/reference/integrations/kit/actions/update-custom-field Renames one custom field. `kit.updateCustomField` renames one custom field. ```ts automations/update-custom-field.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Update custom field", () => { markSignificant( kit.updateCustomField({ id: 1, label: "value", }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `integer` | Yes | — | | `label` | `string` | Yes | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `customField` | `object` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Update sequence Source: https://docs.automate.ax/reference/integrations/kit/actions/update-sequence Updates one sequence's schedule and delivery settings. `kit.updateSequence` updates one sequence's schedule and delivery settings. ```ts automations/update-sequence.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Update sequence", () => { markSignificant( kit.updateSequence({ id: 1, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `integer` | Yes | — | | `name` | `string` | No | The name of the sequence. | | `emailAddress` | `string` | No | The sending email address to use. Uses the account's sending email address if not provided. | | `emailTemplateId` | `integer` | No | Id of the email template to use. | | `sendDays` | `string[]` | No | The days of the week to send the sequence on. Must be one of: `monday`, `tuesday`, `wednesday`, `thursday`, `friday`, `saturday`, `sunday`. | | `sendHour` | `integer` | No | The hour of the day to send the sequence at. Must be an integer between 0 and 23. | | `timeZone` | `string` | No | The timezone to use for the sequence. Must be a valid IANA timezone string. | | `active` | `boolean` | No | `true` to activate the sequence, `false` to deactivate it. | | `repeat` | `boolean` | No | When `true`, subscribers can restart the sequence multiple times. | | `hold` | `boolean` | No | When `true`, subscribers added via Visual Automations stay in the sequence after receiving the last email. | | `excludeSubscriberSources` | `object[]` | No | The subscriber sources to exclude from the sequence. | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `sequence` | `object` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Update sequence email Source: https://docs.automate.ax/reference/integrations/kit/actions/update-sequence-email Updates one sequence email's content, timing, position, or state. `kit.updateSequenceEmail` updates one sequence email's content, timing, position, or state. ```ts automations/update-sequence-email.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Update sequence email", () => { markSignificant( kit.updateSequenceEmail({ id: 1, sequenceId: 1, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `integer` | Yes | — | | `sequenceId` | `integer` | Yes | — | | `subject` | `string` | No | New subject line for the email | | `previewText` | `string \| null` | No | New preview text shown in email clients before the email is opened | | `content` | `string \| null` | No | New HTML body content of the email | | `delayValue` | `integer` | No | New delay value | | `delayUnit` | `"days" \| "hours"` | No | New delay unit. Use `days` for schedule-aware delivery, `hours` for a fixed hourly delay | | `emailTemplateId` | `integer \| null` | No | New email template ID for layout and styling. Pass `null` to clear | | `published` | `boolean` | No | Pass `true` to publish a draft email or `false` to unpublish it | | `sendDays` | `string[] \| null` | No | Days of the week this email may be sent. Pass a subset to restrict delivery, or `null` to reset to all days (inherits the sequence schedule) | | `position` | `integer \| null` | No | New zero-based position of the email in the sequence | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `email` | `object` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Update snippet Source: https://docs.automate.ax/reference/integrations/kit/actions/update-snippet Updates a snippet's name, content, or archive state. `kit.updateSnippet` updates a snippet's name, content, or archive state. ```ts automations/update-snippet.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Update snippet", () => { markSignificant( kit.updateSnippet({ id: 60, name: "Updated welcome note", }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `integer` | Yes | — | | `name` | `string` | No | New name for the snippet | | `snippetType` | `string` | No | Cannot be changed—must match the existing type if provided | | `archived` | `boolean` | No | Pass `true` to archive or `false` to restore the snippet | | `content` | `string` | No | New Liquid-enabled text content | | `documentAttributes` | `object` | No | Updated rich-text document | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `snippet` | `object` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Update subscriber Source: https://docs.automate.ax/reference/integrations/kit/actions/update-subscriber Updates one subscriber and their custom field values. `kit.updateSubscriber` updates one subscriber and their custom field values. ```ts automations/update-subscriber.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Update subscriber", () => { markSignificant( kit.updateSubscriber({ id: 1, emailAddress: "value", }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `integer` | Yes | — | | `firstName` | `string \| null` | No | — | | `emailAddress` | `string` | Yes | — | | `fields` | `object` | No | Custom field values keyed by the custom field's `key` (for example `last_name`, not `Last Name`). Unknown keys are ignored and reported in the response `warnings` array. | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `subscriber` | `object` | Yes | — | | `warnings` | `string[]` | No | Present only when the request referenced custom field keys that don't exist on the account. Each entry names an unknown key that was ignored; the subscriber is still created or updated. | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Update subscriber location Source: https://docs.automate.ax/reference/integrations/kit/actions/update-subscriber-location Replaces a subscriber's pinned location. `kit.updateSubscriberLocation` replaces a subscriber's pinned location. ```ts automations/update-subscriber-location.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Update subscriber location", () => { markSignificant( kit.updateSubscriberLocation({ subscriberId: 1, location: { city: "value", stateProvince: "value", countryCode: "value", latitude: 1, longitude: 1, timezone: "value", }, }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `subscriberId` | `integer` | Yes | — | | `location` | `object` | Yes | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `subscriber` | `object` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Update tag Source: https://docs.automate.ax/reference/integrations/kit/actions/update-tag Renames one tag without changing its memberships. `kit.updateTag` renames one tag without changing its memberships. ```ts automations/update-tag.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Update tag", () => { markSignificant( kit.updateTag({ id: 1, name: "value", }), ) }) ``` ## Input Pass these fields: | Field | Type | Required | Description | | - | - | - | - | | `id` | `integer` | Yes | — | | `name` | `string` | Yes | — | ## Output Returns an object with these fields: | Field | Type | Required | Description | | - | - | - | - | | `tag` | `object` | Yes | — | Kit rate limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. Automate.ax honors provider retry timing for rate-limit and temporary bulk-capacity responses. # Kit Source: https://docs.automate.ax/reference/integrations/kit/index Manage Kit audiences and creator email, and start automations from signed Kit events. Automate.ax connects Kit subscribers, forms, tags, custom fields, sequences, broadcasts, snippets, posts, purchases, templates, and account analytics to typed automations. Managed webhook endpoints cover all 23 event types currently available from Kit. ```ts automations/welcome-kit-subscribers.automation.ts theme={null} import { automation } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("Welcome Kit subscribers", () => { const created = kit.onSubscriberCreated() kit.addSubscriberToSequence({ sequenceId: 77, id: created.data.subscriber.id, }) }) ``` ## Connect OAuth is the preferred connection method and is required for ten bulk and purchase actions. You can use a V4 API key from Kit's account settings for personal or testing connections and all other actions and triggers. Kit limits OAuth connections to 600 requests per 60 seconds and V4 API keys to 120 requests per 60 seconds. List and reporting data can lag a successful write; direct reads and writes are strongly consistent. Managed triggers verify Kit's timestamped HMAC signatures and deduplicate batched retries by event UUID. ## Exports ```ts theme={null} import { kit, kitAccount, getKitApi } from "automate.ax/kit" ``` * `kit` contains the packaged actions and triggers. * `kitAccount("name")` selects a named Kit connection. * `getKitApi` creates the authenticated V4 helper for a custom account-backed action. ## Triggers * [On event](/reference/integrations/kit/triggers/on-event) * [On subscriber created](/reference/integrations/kit/triggers/on-subscriber-created) * [On subscriber activated](/reference/integrations/kit/triggers/on-subscriber-activated) * [On subscriber unsubscribed](/reference/integrations/kit/triggers/on-subscriber-unsubscribed) * [On subscriber bounced](/reference/integrations/kit/triggers/on-subscriber-bounced) * [On subscriber complained](/reference/integrations/kit/triggers/on-subscriber-complained) * [On subscriber subscribed to form](/reference/integrations/kit/triggers/on-subscriber-subscribed-to-form) * [On subscriber added to sequence](/reference/integrations/kit/triggers/on-subscriber-added-to-sequence) * [On subscriber sequence completed](/reference/integrations/kit/triggers/on-subscriber-sequence-completed) * [On subscriber tag added](/reference/integrations/kit/triggers/on-subscriber-tag-added) * [On subscriber tag removed](/reference/integrations/kit/triggers/on-subscriber-tag-removed) * [On subscriber custom field value updated](/reference/integrations/kit/triggers/on-subscriber-custom-field-value-updated) * [On tag created](/reference/integrations/kit/triggers/on-tag-created) * [On tag deleted](/reference/integrations/kit/triggers/on-tag-deleted) * [On custom field created](/reference/integrations/kit/triggers/on-custom-field-created) * [On custom field deleted](/reference/integrations/kit/triggers/on-custom-field-deleted) * [On sequence created](/reference/integrations/kit/triggers/on-sequence-created) * [On sequence deleted](/reference/integrations/kit/triggers/on-sequence-deleted) * [On sequence published](/reference/integrations/kit/triggers/on-sequence-published) * [On sequence disabled](/reference/integrations/kit/triggers/on-sequence-disabled) * [On broadcast created](/reference/integrations/kit/triggers/on-broadcast-created) * [On broadcast sent](/reference/integrations/kit/triggers/on-broadcast-sent) * [On broadcast deleted](/reference/integrations/kit/triggers/on-broadcast-deleted) * [On post published](/reference/integrations/kit/triggers/on-post-published) ## Actions * [Get current account](/reference/integrations/kit/actions/get-current-account) * [List colors](/reference/integrations/kit/actions/list-colors) * [Update colors](/reference/integrations/kit/actions/update-colors) * [Get creator profile](/reference/integrations/kit/actions/get-creator-profile) * [Get email stats](/reference/integrations/kit/actions/get-email-stats) * [Get growth stats](/reference/integrations/kit/actions/get-growth-stats) * [List broadcasts](/reference/integrations/kit/actions/list-broadcasts) * [Create broadcast](/reference/integrations/kit/actions/create-broadcast) * [List broadcast stats](/reference/integrations/kit/actions/list-broadcast-stats) * [List broadcast link clicks](/reference/integrations/kit/actions/list-broadcast-link-clicks) * [Get broadcast stats](/reference/integrations/kit/actions/get-broadcast-stats) * [Delete broadcast](/reference/integrations/kit/actions/delete-broadcast) * [Get broadcast](/reference/integrations/kit/actions/get-broadcast) * [Update broadcast](/reference/integrations/kit/actions/update-broadcast) * [Bulk create custom fields](/reference/integrations/kit/actions/bulk-create-custom-fields) * [Bulk update subscriber custom fields](/reference/integrations/kit/actions/bulk-update-subscriber-custom-field-values) * [List custom fields](/reference/integrations/kit/actions/list-custom-fields) * [Create custom field](/reference/integrations/kit/actions/create-custom-field) * [Delete custom field](/reference/integrations/kit/actions/delete-custom-field) * [Update custom field](/reference/integrations/kit/actions/update-custom-field) * [List email templates](/reference/integrations/kit/actions/list-email-templates) * [Bulk add subscribers to forms](/reference/integrations/kit/actions/bulk-add-subscribers-to-forms) * [List forms](/reference/integrations/kit/actions/list-forms) * [List form subscribers](/reference/integrations/kit/actions/list-form-subscribers) * [Add subscriber to form by email](/reference/integrations/kit/actions/add-subscriber-to-form-by-email-address) * [Add subscriber to form](/reference/integrations/kit/actions/add-subscriber-to-form) * [List posts](/reference/integrations/kit/actions/list-posts) * [Get post](/reference/integrations/kit/actions/get-post) * [List purchases](/reference/integrations/kit/actions/list-purchases) * [Create purchase](/reference/integrations/kit/actions/create-purchase) * [Get purchase](/reference/integrations/kit/actions/get-purchase) * [List segments](/reference/integrations/kit/actions/list-segments) * [List sequence emails](/reference/integrations/kit/actions/list-sequence-emails) * [Create sequence email](/reference/integrations/kit/actions/create-sequence-email) * [Delete sequence email](/reference/integrations/kit/actions/delete-sequence-email) * [Get sequence email](/reference/integrations/kit/actions/get-sequence-email) * [Update sequence email](/reference/integrations/kit/actions/update-sequence-email) * [List sequences](/reference/integrations/kit/actions/list-sequences) * [Create sequence](/reference/integrations/kit/actions/create-sequence) * [Delete sequence](/reference/integrations/kit/actions/delete-sequence) * [Get sequence](/reference/integrations/kit/actions/get-sequence) * [Update sequence](/reference/integrations/kit/actions/update-sequence) * [List sequence subscribers](/reference/integrations/kit/actions/list-sequence-subscribers) * [Add subscriber to sequence by email](/reference/integrations/kit/actions/add-subscriber-to-sequence-by-email-address) * [Add subscriber to sequence](/reference/integrations/kit/actions/add-subscriber-to-sequence) * [List snippets](/reference/integrations/kit/actions/list-snippets) * [Create snippet](/reference/integrations/kit/actions/create-snippet) * [Get snippet](/reference/integrations/kit/actions/get-snippet) * [Update snippet](/reference/integrations/kit/actions/update-snippet) * [Bulk create subscribers](/reference/integrations/kit/actions/bulk-create-subscribers) * [List subscribers](/reference/integrations/kit/actions/list-subscribers) * [Create subscriber](/reference/integrations/kit/actions/create-subscriber) * [Filter subscribers](/reference/integrations/kit/actions/filter-subscribers) * [Get subscriber](/reference/integrations/kit/actions/get-subscriber) * [Update subscriber](/reference/integrations/kit/actions/update-subscriber) * [Unsubscribe subscriber](/reference/integrations/kit/actions/unsubscribe-subscriber) * [Delete subscriber location](/reference/integrations/kit/actions/delete-subscriber-location) * [Update subscriber location](/reference/integrations/kit/actions/update-subscriber-location) * [Pin subscriber location](/reference/integrations/kit/actions/pin-subscriber-location) * [Get subscriber stats](/reference/integrations/kit/actions/get-subscriber-stats) * [List subscriber tags](/reference/integrations/kit/actions/list-subscriber-tags) * [Bulk delete tags](/reference/integrations/kit/actions/bulk-delete-tags) * [Bulk create tags](/reference/integrations/kit/actions/bulk-create-tags) * [Bulk tag subscribers](/reference/integrations/kit/actions/bulk-tag-subscribers) * [List tags](/reference/integrations/kit/actions/list-tags) * [Create tag](/reference/integrations/kit/actions/create-tag) * [Update tag](/reference/integrations/kit/actions/update-tag) * [List tag subscribers](/reference/integrations/kit/actions/list-tag-subscribers) * [Tag subscriber by email](/reference/integrations/kit/actions/tag-subscriber-by-email-address) * [Remove tag from subscriber](/reference/integrations/kit/actions/remove-tag-from-subscriber) * [Tag subscriber](/reference/integrations/kit/actions/tag-subscriber) # On broadcast created Source: https://docs.automate.ax/reference/integrations/kit/triggers/on-broadcast-created Subscribes when a broadcast is created. `kit.onBroadcastCreated` subscribes when a broadcast is created. ```ts automations/on-broadcast-created.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("On broadcast created", () => { const event = kit.onBroadcastCreated() markSignificant(event) }) ``` ## Event | Field | Type | Required | Description | | - | - | - | - | | `id` | `string (UUID)` | Yes | Stable event identifier used for deduplication. | | `type` | `"broadcast.created"` | Yes | Kit provider event type. | | `created` | `string (date-time)` | Yes | When the event occurred. | | `data` | `object` | Yes | Provider payload for this event. | `data.broadcast` contains a broadcast summary. Use `kit.getBroadcast` for full content. Provider snake case fields are exposed as camelCase. Subscriber custom-field keys under `fields` are preserved exactly. Automate.ax creates and maintains one account-level Kit webhook endpoint, verifies the timestamped `X-Kit-Signature` against the raw body, and deduplicates each event by `id`. Kit can batch up to 100 same-type events in one delivery; each event starts independently. Use `kit.onEvent` when one automation should receive every available event. # On broadcast deleted Source: https://docs.automate.ax/reference/integrations/kit/triggers/on-broadcast-deleted Subscribes when a broadcast is deleted. `kit.onBroadcastDeleted` subscribes when a broadcast is deleted. ```ts automations/on-broadcast-deleted.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("On broadcast deleted", () => { const event = kit.onBroadcastDeleted() markSignificant(event) }) ``` ## Event | Field | Type | Required | Description | | - | - | - | - | | `id` | `string (UUID)` | Yes | Stable event identifier used for deduplication. | | `type` | `"broadcast.deleted"` | Yes | Kit provider event type. | | `created` | `string (date-time)` | Yes | When the event occurred. | | `data` | `object` | Yes | Provider payload for this event. | `data.broadcast` contains a summary of the deleted broadcast. Provider snake case fields are exposed as camelCase. Subscriber custom-field keys under `fields` are preserved exactly. Automate.ax creates and maintains one account-level Kit webhook endpoint, verifies the timestamped `X-Kit-Signature` against the raw body, and deduplicates each event by `id`. Kit can batch up to 100 same-type events in one delivery; each event starts independently. Use `kit.onEvent` when one automation should receive every available event. # On broadcast sent Source: https://docs.automate.ax/reference/integrations/kit/triggers/on-broadcast-sent Subscribes when a broadcast finishes sending. `kit.onBroadcastSent` subscribes when a broadcast finishes sending. ```ts automations/on-broadcast-sent.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("On broadcast sent", () => { const event = kit.onBroadcastSent() markSignificant(event) }) ``` ## Event | Field | Type | Required | Description | | - | - | - | - | | `id` | `string (UUID)` | Yes | Stable event identifier used for deduplication. | | `type` | `"broadcast.sent"` | Yes | Kit provider event type. | | `created` | `string (date-time)` | Yes | When the event occurred. | | `data` | `object` | Yes | Provider payload for this event. | `data.broadcast` contains a broadcast summary. Provider snake case fields are exposed as camelCase. Subscriber custom-field keys under `fields` are preserved exactly. Automate.ax creates and maintains one account-level Kit webhook endpoint, verifies the timestamped `X-Kit-Signature` against the raw body, and deduplicates each event by `id`. Kit can batch up to 100 same-type events in one delivery; each event starts independently. Use `kit.onEvent` when one automation should receive every available event. # On custom field created Source: https://docs.automate.ax/reference/integrations/kit/triggers/on-custom-field-created Subscribes when a custom field is created. `kit.onCustomFieldCreated` subscribes when a custom field is created. ```ts automations/on-custom-field-created.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("On custom field created", () => { const event = kit.onCustomFieldCreated() markSignificant(event) }) ``` ## Event | Field | Type | Required | Description | | - | - | - | - | | `id` | `string (UUID)` | Yes | Stable event identifier used for deduplication. | | `type` | `"custom_field.created"` | Yes | Kit provider event type. | | `created` | `string (date-time)` | Yes | When the event occurred. | | `data` | `object` | Yes | Provider payload for this event. | `data.customField` contains the field. Provider snake case fields are exposed as camelCase. Subscriber custom-field keys under `fields` are preserved exactly. Automate.ax creates and maintains one account-level Kit webhook endpoint, verifies the timestamped `X-Kit-Signature` against the raw body, and deduplicates each event by `id`. Kit can batch up to 100 same-type events in one delivery; each event starts independently. Use `kit.onEvent` when one automation should receive every available event. # On custom field deleted Source: https://docs.automate.ax/reference/integrations/kit/triggers/on-custom-field-deleted Subscribes when a custom field is deleted. `kit.onCustomFieldDeleted` subscribes when a custom field is deleted. ```ts automations/on-custom-field-deleted.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("On custom field deleted", () => { const event = kit.onCustomFieldDeleted() markSignificant(event) }) ``` ## Event | Field | Type | Required | Description | | - | - | - | - | | `id` | `string (UUID)` | Yes | Stable event identifier used for deduplication. | | `type` | `"custom_field.deleted"` | Yes | Kit provider event type. | | `created` | `string (date-time)` | Yes | When the event occurred. | | `data` | `object` | Yes | Provider payload for this event. | `data.customField` contains the deleted field. Provider snake case fields are exposed as camelCase. Subscriber custom-field keys under `fields` are preserved exactly. Automate.ax creates and maintains one account-level Kit webhook endpoint, verifies the timestamped `X-Kit-Signature` against the raw body, and deduplicates each event by `id`. Kit can batch up to 100 same-type events in one delivery; each event starts independently. Use `kit.onEvent` when one automation should receive every available event. # On event Source: https://docs.automate.ax/reference/integrations/kit/triggers/on-event Subscribes to every available Kit webhook event. `kit.onEvent` subscribes to every available Kit webhook event. ```ts automations/on-event.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("On event", () => { const event = kit.onEvent() markSignificant(event) }) ``` ## Event | Field | Type | Required | Description | | - | - | - | - | | `id` | `string (UUID)` | Yes | Stable event identifier used for deduplication. | | `type` | `KitWebhookEventType` | Yes | Kit provider event type. | | `created` | `string (date-time)` | Yes | When the event occurred. | | `data` | `object` | Yes | Provider payload for this event. | The shape of `data` depends on `type`. Provider snake case fields are exposed as camelCase. Subscriber custom-field keys under `fields` are preserved exactly. Automate.ax creates and maintains one account-level Kit webhook endpoint, verifies the timestamped `X-Kit-Signature` against the raw body, and deduplicates each event by `id`. Kit can batch up to 100 same-type events in one delivery; each event starts independently. Use `kit.onEvent` when one automation should receive every available event. # On post published Source: https://docs.automate.ax/reference/integrations/kit/triggers/on-post-published Subscribes when a post is published. `kit.onPostPublished` subscribes when a post is published. ```ts automations/on-post-published.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("On post published", () => { const event = kit.onPostPublished() markSignificant(event) }) ``` ## Event | Field | Type | Required | Description | | - | - | - | - | | `id` | `string (UUID)` | Yes | Stable event identifier used for deduplication. | | `type` | `"post.published"` | Yes | Kit provider event type. | | `created` | `string (date-time)` | Yes | When the event occurred. | | `data` | `object` | Yes | Provider payload for this event. | `data.post` contains a post summary. Use `kit.getPost` for full content. Provider snake case fields are exposed as camelCase. Subscriber custom-field keys under `fields` are preserved exactly. Automate.ax creates and maintains one account-level Kit webhook endpoint, verifies the timestamped `X-Kit-Signature` against the raw body, and deduplicates each event by `id`. Kit can batch up to 100 same-type events in one delivery; each event starts independently. Use `kit.onEvent` when one automation should receive every available event. # On sequence created Source: https://docs.automate.ax/reference/integrations/kit/triggers/on-sequence-created Subscribes when a sequence is created. `kit.onSequenceCreated` subscribes when a sequence is created. ```ts automations/on-sequence-created.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("On sequence created", () => { const event = kit.onSequenceCreated() markSignificant(event) }) ``` ## Event | Field | Type | Required | Description | | - | - | - | - | | `id` | `string (UUID)` | Yes | Stable event identifier used for deduplication. | | `type` | `"sequence.created"` | Yes | Kit provider event type. | | `created` | `string (date-time)` | Yes | When the event occurred. | | `data` | `object` | Yes | Provider payload for this event. | `data.sequence` contains the sequence. Provider snake case fields are exposed as camelCase. Subscriber custom-field keys under `fields` are preserved exactly. Automate.ax creates and maintains one account-level Kit webhook endpoint, verifies the timestamped `X-Kit-Signature` against the raw body, and deduplicates each event by `id`. Kit can batch up to 100 same-type events in one delivery; each event starts independently. Use `kit.onEvent` when one automation should receive every available event. # On sequence deleted Source: https://docs.automate.ax/reference/integrations/kit/triggers/on-sequence-deleted Subscribes when a sequence is deleted. `kit.onSequenceDeleted` subscribes when a sequence is deleted. ```ts automations/on-sequence-deleted.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("On sequence deleted", () => { const event = kit.onSequenceDeleted() markSignificant(event) }) ``` ## Event | Field | Type | Required | Description | | - | - | - | - | | `id` | `string (UUID)` | Yes | Stable event identifier used for deduplication. | | `type` | `"sequence.deleted"` | Yes | Kit provider event type. | | `created` | `string (date-time)` | Yes | When the event occurred. | | `data` | `object` | Yes | Provider payload for this event. | `data.sequence` contains the deleted sequence. Provider snake case fields are exposed as camelCase. Subscriber custom-field keys under `fields` are preserved exactly. Automate.ax creates and maintains one account-level Kit webhook endpoint, verifies the timestamped `X-Kit-Signature` against the raw body, and deduplicates each event by `id`. Kit can batch up to 100 same-type events in one delivery; each event starts independently. Use `kit.onEvent` when one automation should receive every available event. # On sequence disabled Source: https://docs.automate.ax/reference/integrations/kit/triggers/on-sequence-disabled Subscribes when a sequence is disabled. `kit.onSequenceDisabled` subscribes when a sequence is disabled. ```ts automations/on-sequence-disabled.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("On sequence disabled", () => { const event = kit.onSequenceDisabled() markSignificant(event) }) ``` ## Event | Field | Type | Required | Description | | - | - | - | - | | `id` | `string (UUID)` | Yes | Stable event identifier used for deduplication. | | `type` | `"sequence.disabled"` | Yes | Kit provider event type. | | `created` | `string (date-time)` | Yes | When the event occurred. | | `data` | `object` | Yes | Provider payload for this event. | `data.sequence` contains the disabled sequence. Provider snake case fields are exposed as camelCase. Subscriber custom-field keys under `fields` are preserved exactly. Automate.ax creates and maintains one account-level Kit webhook endpoint, verifies the timestamped `X-Kit-Signature` against the raw body, and deduplicates each event by `id`. Kit can batch up to 100 same-type events in one delivery; each event starts independently. Use `kit.onEvent` when one automation should receive every available event. # On sequence published Source: https://docs.automate.ax/reference/integrations/kit/triggers/on-sequence-published Subscribes when a sequence is published. `kit.onSequencePublished` subscribes when a sequence is published. ```ts automations/on-sequence-published.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("On sequence published", () => { const event = kit.onSequencePublished() markSignificant(event) }) ``` ## Event | Field | Type | Required | Description | | - | - | - | - | | `id` | `string (UUID)` | Yes | Stable event identifier used for deduplication. | | `type` | `"sequence.published"` | Yes | Kit provider event type. | | `created` | `string (date-time)` | Yes | When the event occurred. | | `data` | `object` | Yes | Provider payload for this event. | `data.sequence` contains the published sequence. Provider snake case fields are exposed as camelCase. Subscriber custom-field keys under `fields` are preserved exactly. Automate.ax creates and maintains one account-level Kit webhook endpoint, verifies the timestamped `X-Kit-Signature` against the raw body, and deduplicates each event by `id`. Kit can batch up to 100 same-type events in one delivery; each event starts independently. Use `kit.onEvent` when one automation should receive every available event. # On subscriber activated Source: https://docs.automate.ax/reference/integrations/kit/triggers/on-subscriber-activated Subscribes when a subscriber becomes active. `kit.onSubscriberActivated` subscribes when a subscriber becomes active. ```ts automations/on-subscriber-activated.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("On subscriber activated", () => { const event = kit.onSubscriberActivated() markSignificant(event) }) ``` ## Event | Field | Type | Required | Description | | - | - | - | - | | `id` | `string (UUID)` | Yes | Stable event identifier used for deduplication. | | `type` | `"subscriber.activated"` | Yes | Kit provider event type. | | `created` | `string (date-time)` | Yes | When the event occurred. | | `data` | `object` | Yes | Provider payload for this event. | `data.subscriber` contains the active subscriber. Provider snake case fields are exposed as camelCase. Subscriber custom-field keys under `fields` are preserved exactly. Automate.ax creates and maintains one account-level Kit webhook endpoint, verifies the timestamped `X-Kit-Signature` against the raw body, and deduplicates each event by `id`. Kit can batch up to 100 same-type events in one delivery; each event starts independently. Use `kit.onEvent` when one automation should receive every available event. # On subscriber added to sequence Source: https://docs.automate.ax/reference/integrations/kit/triggers/on-subscriber-added-to-sequence Subscribes when a subscriber enters a sequence. `kit.onSubscriberAddedToSequence` subscribes when a subscriber enters a sequence. ```ts automations/on-subscriber-added-to-sequence.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("On subscriber added to sequence", () => { const event = kit.onSubscriberAddedToSequence() markSignificant(event) }) ``` ## Event | Field | Type | Required | Description | | - | - | - | - | | `id` | `string (UUID)` | Yes | Stable event identifier used for deduplication. | | `type` | `"subscriber.added_to_sequence"` | Yes | Kit provider event type. | | `created` | `string (date-time)` | Yes | When the event occurred. | | `data` | `object` | Yes | Provider payload for this event. | `data` contains `subscriber` and `sequence`. Provider snake case fields are exposed as camelCase. Subscriber custom-field keys under `fields` are preserved exactly. Automate.ax creates and maintains one account-level Kit webhook endpoint, verifies the timestamped `X-Kit-Signature` against the raw body, and deduplicates each event by `id`. Kit can batch up to 100 same-type events in one delivery; each event starts independently. Use `kit.onEvent` when one automation should receive every available event. # On subscriber bounced Source: https://docs.automate.ax/reference/integrations/kit/triggers/on-subscriber-bounced Subscribes when a subscriber address hard-bounces. `kit.onSubscriberBounced` subscribes when a subscriber address hard-bounces. ```ts automations/on-subscriber-bounced.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("On subscriber bounced", () => { const event = kit.onSubscriberBounced() markSignificant(event) }) ``` ## Event | Field | Type | Required | Description | | - | - | - | - | | `id` | `string (UUID)` | Yes | Stable event identifier used for deduplication. | | `type` | `"subscriber.bounced"` | Yes | Kit provider event type. | | `created` | `string (date-time)` | Yes | When the event occurred. | | `data` | `object` | Yes | Provider payload for this event. | `data.subscriber` contains the bounced subscriber. Provider snake case fields are exposed as camelCase. Subscriber custom-field keys under `fields` are preserved exactly. Automate.ax creates and maintains one account-level Kit webhook endpoint, verifies the timestamped `X-Kit-Signature` against the raw body, and deduplicates each event by `id`. Kit can batch up to 100 same-type events in one delivery; each event starts independently. Use `kit.onEvent` when one automation should receive every available event. # On subscriber complained Source: https://docs.automate.ax/reference/integrations/kit/triggers/on-subscriber-complained Subscribes when a subscriber reports an email as spam. `kit.onSubscriberComplained` subscribes when a subscriber reports an email as spam. ```ts automations/on-subscriber-complained.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("On subscriber complained", () => { const event = kit.onSubscriberComplained() markSignificant(event) }) ``` ## Event | Field | Type | Required | Description | | - | - | - | - | | `id` | `string (UUID)` | Yes | Stable event identifier used for deduplication. | | `type` | `"subscriber.complained"` | Yes | Kit provider event type. | | `created` | `string (date-time)` | Yes | When the event occurred. | | `data` | `object` | Yes | Provider payload for this event. | `data.subscriber` contains the complaining subscriber. Provider snake case fields are exposed as camelCase. Subscriber custom-field keys under `fields` are preserved exactly. Automate.ax creates and maintains one account-level Kit webhook endpoint, verifies the timestamped `X-Kit-Signature` against the raw body, and deduplicates each event by `id`. Kit can batch up to 100 same-type events in one delivery; each event starts independently. Use `kit.onEvent` when one automation should receive every available event. # On subscriber created Source: https://docs.automate.ax/reference/integrations/kit/triggers/on-subscriber-created Subscribes when a subscriber is created. `kit.onSubscriberCreated` subscribes when a subscriber is created. ```ts automations/on-subscriber-created.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("On subscriber created", () => { const event = kit.onSubscriberCreated() markSignificant(event) }) ``` ## Event | Field | Type | Required | Description | | - | - | - | - | | `id` | `string (UUID)` | Yes | Stable event identifier used for deduplication. | | `type` | `"subscriber.created"` | Yes | Kit provider event type. | | `created` | `string (date-time)` | Yes | When the event occurred. | | `data` | `object` | Yes | Provider payload for this event. | `data.subscriber` contains the subscriber. Provider snake case fields are exposed as camelCase. Subscriber custom-field keys under `fields` are preserved exactly. Automate.ax creates and maintains one account-level Kit webhook endpoint, verifies the timestamped `X-Kit-Signature` against the raw body, and deduplicates each event by `id`. Kit can batch up to 100 same-type events in one delivery; each event starts independently. Use `kit.onEvent` when one automation should receive every available event. # On subscriber custom field value updated Source: https://docs.automate.ax/reference/integrations/kit/triggers/on-subscriber-custom-field-value-updated Subscribes when a subscriber custom field value changes. `kit.onSubscriberCustomFieldValueUpdated` subscribes when a subscriber custom field value changes. ```ts automations/on-subscriber-custom-field-value-updated.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("On subscriber custom field value updated", () => { const event = kit.onSubscriberCustomFieldValueUpdated() markSignificant(event) }) ``` ## Event | Field | Type | Required | Description | | - | - | - | - | | `id` | `string (UUID)` | Yes | Stable event identifier used for deduplication. | | `type` | `"subscriber.custom_field_value_updated"` | Yes | Kit provider event type. | | `created` | `string (date-time)` | Yes | When the event occurred. | | `data` | `object` | Yes | Provider payload for this event. | `data` contains `subscriber` and `customField`, including the new `value`. Provider snake case fields are exposed as camelCase. Subscriber custom-field keys under `fields` are preserved exactly. Automate.ax creates and maintains one account-level Kit webhook endpoint, verifies the timestamped `X-Kit-Signature` against the raw body, and deduplicates each event by `id`. Kit can batch up to 100 same-type events in one delivery; each event starts independently. Use `kit.onEvent` when one automation should receive every available event. # On subscriber sequence completed Source: https://docs.automate.ax/reference/integrations/kit/triggers/on-subscriber-sequence-completed Subscribes when a subscriber completes a sequence. `kit.onSubscriberSequenceCompleted` subscribes when a subscriber completes a sequence. ```ts automations/on-subscriber-sequence-completed.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("On subscriber sequence completed", () => { const event = kit.onSubscriberSequenceCompleted() markSignificant(event) }) ``` ## Event | Field | Type | Required | Description | | - | - | - | - | | `id` | `string (UUID)` | Yes | Stable event identifier used for deduplication. | | `type` | `"subscriber.sequence_completed"` | Yes | Kit provider event type. | | `created` | `string (date-time)` | Yes | When the event occurred. | | `data` | `object` | Yes | Provider payload for this event. | `data` contains `subscriber` and `sequence`. Provider snake case fields are exposed as camelCase. Subscriber custom-field keys under `fields` are preserved exactly. Automate.ax creates and maintains one account-level Kit webhook endpoint, verifies the timestamped `X-Kit-Signature` against the raw body, and deduplicates each event by `id`. Kit can batch up to 100 same-type events in one delivery; each event starts independently. Use `kit.onEvent` when one automation should receive every available event. # On subscriber subscribed to form Source: https://docs.automate.ax/reference/integrations/kit/triggers/on-subscriber-subscribed-to-form Subscribes when a subscriber joins a form. `kit.onSubscriberSubscribedToForm` subscribes when a subscriber joins a form. ```ts automations/on-subscriber-subscribed-to-form.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("On subscriber subscribed to form", () => { const event = kit.onSubscriberSubscribedToForm() markSignificant(event) }) ``` ## Event | Field | Type | Required | Description | | - | - | - | - | | `id` | `string (UUID)` | Yes | Stable event identifier used for deduplication. | | `type` | `"subscriber.subscribed_to_form"` | Yes | Kit provider event type. | | `created` | `string (date-time)` | Yes | When the event occurred. | | `data` | `object` | Yes | Provider payload for this event. | `data` contains `subscriber` and `form`. Provider snake case fields are exposed as camelCase. Subscriber custom-field keys under `fields` are preserved exactly. Automate.ax creates and maintains one account-level Kit webhook endpoint, verifies the timestamped `X-Kit-Signature` against the raw body, and deduplicates each event by `id`. Kit can batch up to 100 same-type events in one delivery; each event starts independently. Use `kit.onEvent` when one automation should receive every available event. # On subscriber tag added Source: https://docs.automate.ax/reference/integrations/kit/triggers/on-subscriber-tag-added Subscribes when a tag is added to a subscriber. `kit.onSubscriberTagAdded` subscribes when a tag is added to a subscriber. ```ts automations/on-subscriber-tag-added.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("On subscriber tag added", () => { const event = kit.onSubscriberTagAdded() markSignificant(event) }) ``` ## Event | Field | Type | Required | Description | | - | - | - | - | | `id` | `string (UUID)` | Yes | Stable event identifier used for deduplication. | | `type` | `"subscriber.tag_added"` | Yes | Kit provider event type. | | `created` | `string (date-time)` | Yes | When the event occurred. | | `data` | `object` | Yes | Provider payload for this event. | `data` contains `subscriber` and `tag`. Provider snake case fields are exposed as camelCase. Subscriber custom-field keys under `fields` are preserved exactly. Automate.ax creates and maintains one account-level Kit webhook endpoint, verifies the timestamped `X-Kit-Signature` against the raw body, and deduplicates each event by `id`. Kit can batch up to 100 same-type events in one delivery; each event starts independently. Use `kit.onEvent` when one automation should receive every available event. # On subscriber tag removed Source: https://docs.automate.ax/reference/integrations/kit/triggers/on-subscriber-tag-removed Subscribes when a tag is removed from a subscriber. `kit.onSubscriberTagRemoved` subscribes when a tag is removed from a subscriber. ```ts automations/on-subscriber-tag-removed.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("On subscriber tag removed", () => { const event = kit.onSubscriberTagRemoved() markSignificant(event) }) ``` ## Event | Field | Type | Required | Description | | - | - | - | - | | `id` | `string (UUID)` | Yes | Stable event identifier used for deduplication. | | `type` | `"subscriber.tag_removed"` | Yes | Kit provider event type. | | `created` | `string (date-time)` | Yes | When the event occurred. | | `data` | `object` | Yes | Provider payload for this event. | `data` contains `subscriber` and `tag`. Deleting a tag emits `tag.deleted`, not one removal event per subscriber. Provider snake case fields are exposed as camelCase. Subscriber custom-field keys under `fields` are preserved exactly. Automate.ax creates and maintains one account-level Kit webhook endpoint, verifies the timestamped `X-Kit-Signature` against the raw body, and deduplicates each event by `id`. Kit can batch up to 100 same-type events in one delivery; each event starts independently. Use `kit.onEvent` when one automation should receive every available event. # On subscriber unsubscribed Source: https://docs.automate.ax/reference/integrations/kit/triggers/on-subscriber-unsubscribed Subscribes when a subscriber unsubscribes. `kit.onSubscriberUnsubscribed` subscribes when a subscriber unsubscribes. ```ts automations/on-subscriber-unsubscribed.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("On subscriber unsubscribed", () => { const event = kit.onSubscriberUnsubscribed() markSignificant(event) }) ``` ## Event | Field | Type | Required | Description | | - | - | - | - | | `id` | `string (UUID)` | Yes | Stable event identifier used for deduplication. | | `type` | `"subscriber.unsubscribed"` | Yes | Kit provider event type. | | `created` | `string (date-time)` | Yes | When the event occurred. | | `data` | `object` | Yes | Provider payload for this event. | `data.subscriber` contains the subscriber with its new state. Provider snake case fields are exposed as camelCase. Subscriber custom-field keys under `fields` are preserved exactly. Automate.ax creates and maintains one account-level Kit webhook endpoint, verifies the timestamped `X-Kit-Signature` against the raw body, and deduplicates each event by `id`. Kit can batch up to 100 same-type events in one delivery; each event starts independently. Use `kit.onEvent` when one automation should receive every available event. # On tag created Source: https://docs.automate.ax/reference/integrations/kit/triggers/on-tag-created Subscribes when a tag is created. `kit.onTagCreated` subscribes when a tag is created. ```ts automations/on-tag-created.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("On tag created", () => { const event = kit.onTagCreated() markSignificant(event) }) ``` ## Event | Field | Type | Required | Description | | - | - | - | - | | `id` | `string (UUID)` | Yes | Stable event identifier used for deduplication. | | `type` | `"tag.created"` | Yes | Kit provider event type. | | `created` | `string (date-time)` | Yes | When the event occurred. | | `data` | `object` | Yes | Provider payload for this event. | `data.tag` contains the tag. Provider snake case fields are exposed as camelCase. Subscriber custom-field keys under `fields` are preserved exactly. Automate.ax creates and maintains one account-level Kit webhook endpoint, verifies the timestamped `X-Kit-Signature` against the raw body, and deduplicates each event by `id`. Kit can batch up to 100 same-type events in one delivery; each event starts independently. Use `kit.onEvent` when one automation should receive every available event. # On tag deleted Source: https://docs.automate.ax/reference/integrations/kit/triggers/on-tag-deleted Subscribes when a tag is deleted. `kit.onTagDeleted` subscribes when a tag is deleted. ```ts automations/on-tag-deleted.automation.ts theme={null} import { automation, markSignificant } from "automate.ax" import { kit } from "automate.ax/kit" export default automation("On tag deleted", () => { const event = kit.onTagDeleted() markSignificant(event) }) ``` ## Event | Field | Type | Required | Description | | - | - | - | - | | `id` | `string (UUID)` | Yes | Stable event identifier used for deduplication. | | `type` | `"tag.deleted"` | Yes | Kit provider event type. | | `created` | `string (date-time)` | Yes | When the event occurred. | | `data` | `object` | Yes | Provider payload for this event. | `data.tag` contains the deleted tag. Provider snake case fields are exposed as camelCase. Subscriber custom-field keys under `fields` are preserved exactly. Automate.ax creates and maintains one account-level Kit webhook endpoint, verifies the timestamped `X-Kit-Signature` against the raw body, and deduplicates each event by `id`. Kit can batch up to 100 same-type events in one delivery; each event starts independently. Use `kit.onEvent` when one automation should receive every available event. # Get import status Source: https://docs.automate.ax/reference/integrations/krisp/actions/get-import-status Retrieves the processing status of a Krisp recording import. `krisp.getImportStatus` checks a recording after `importRecording` uploads it. ```ts automations/get-krisp-import-status.automation.ts theme={null} import { automation, markSignificant, onDashboardRun } from "automate.ax" import { krisp } from "automate.ax/krisp" export default automation("Get Krisp import status", () => { onDashboardRun({ title: "Get Krisp import status" }) markSignificant(krisp.getImportStatus({ importId: "import-id" })) }) ``` `importId` is required. The result's `status` is `uploading`, `processing`, `ready`, or `failed`. `meetingId` becomes available when processing succeeds; `error` describes a failed import. Krisp returns `404` for an unknown import. # Get meeting Source: https://docs.automate.ax/reference/integrations/krisp/actions/get-meeting Retrieves one processed Krisp meeting with optional transcript and notes. `krisp.getMeeting` retrieves metadata and participants for one meeting. ```ts automations/get-krisp-meeting.automation.ts theme={null} import { automation, markSignificant, onDashboardRun } from "automate.ax" import { krisp } from "automate.ax/krisp" export default automation("Get Krisp meeting", () => { onDashboardRun({ title: "Get Krisp meeting" }) markSignificant( krisp.getMeeting({ meetingId: "meeting-id", includeTranscript: true, includeNotes: true, }), ) }) ``` `meetingId` is required. `includeTranscript` and `includeNotes` default to `false` because those fields can be large. A transcript contains diarized speakers and segments with start and end times in seconds. Notes contain Krisp's nested generated and custom blocks. Krisp returns `409` while a meeting is still processing and `404` when it does not exist or the connected user cannot access it. # Get profile Source: https://docs.automate.ax/reference/integrations/krisp/actions/get-profile Retrieves the user and workspace represented by a Krisp API key. `krisp.getProfile` retrieves the identity behind the connected read-scoped key. ```ts automations/get-krisp-profile.automation.ts theme={null} import { automation, markSignificant, onDashboardRun } from "automate.ax" import { krisp } from "automate.ax/krisp" export default automation("Get Krisp profile", () => { onDashboardRun({ title: "Get Krisp profile" }) markSignificant(krisp.getProfile({})) }) ``` The action takes no input. It returns the Krisp user ID, email, nullable name and avatar, team ID, and workspace ID. # Import recording Source: https://docs.automate.ax/reference/integrations/krisp/actions/import-recording Uploads a recording for Krisp to transcribe and summarize. `krisp.importRecording` starts an import and uploads the supplied file to Krisp's temporary destination. ```ts automations/import-krisp-recording.automation.ts theme={null} import { automation, onInvocation } from "automate.ax" import { krisp } from "automate.ax/krisp" export default automation("Import Krisp recording", () => { const invocation = onInvocation<{ recording: File }>() krisp.importRecording({ file: invocation.recording, title: "Customer interview", language: "en", }) }) ``` `file` is required and cannot exceed 1 GB. `title`, `language`, and `durationSeconds` are optional metadata. The result contains `importId` and the upload URL expiration time in `expiresAt`; pass the ID to `getImportStatus`. Krisp permits only one import-start request in flight per user. Automate.ax retries a rejected concurrent start and rate limits, but it does not replay the action after an uncertain failure. A `403` can indicate missing write scope, an unsupported plan, or insufficient storage. # List action items Source: https://docs.automate.ax/reference/integrations/krisp/actions/list-action-items Lists action items extracted from visible Krisp meetings. `krisp.listActionItems` lists follow-up work extracted across visible meetings. ```ts automations/list-krisp-action-items.automation.ts theme={null} import { automation, markSignificant, onSchedule } from "automate.ax" import { krisp } from "automate.ax/krisp" export default automation("List my open Krisp items", () => { onSchedule({ schedule: "0 9 * * 1-5" }) markSignificant( krisp.listActionItems({ completed: false, assignedToMe: true, }), ) }) ``` Filter by `completed` or `assignedToMe`. `limit` defaults to `50` and accepts up to `200`; pass `cursor` from `nextCursor` to continue. The result contains `items`, `nextCursor`, and `total`. Each item includes its completion state, nullable assignee and due date, and source meeting details. # List meetings Source: https://docs.automate.ax/reference/integrations/krisp/actions/list-meetings Lists processed Krisp meetings visible to the connected user. `krisp.listMeetings` lists processed meetings owned by or shared directly with the connected user. ```ts automations/list-krisp-meetings.automation.ts theme={null} import { automation, markSignificant, onDashboardRun } from "automate.ax" import { krisp } from "automate.ax/krisp" export default automation("List Krisp meetings", () => { onDashboardRun({ title: "List Krisp meetings" }) markSignificant(krisp.listMeetings({ ownership: "mine", limit: 50 })) }) ``` `limit` defaults to `20` and accepts up to `100`. Use `cursor` from `nextCursor` for the next page. Filter by ISO date-times with `from` and `to`, title or note text with `query`, tag IDs with `tagIds`, or `ownership` (`all`, `mine`, or `shared`). Sort with `sortBy` (`date`, `duration`, or `lastModified`) and `order` (`newest` or `oldest`). Set `includeParticipants` to `true` to request attendee data. The result contains `meetings`, `nextCursor`, and `total`. Public-link and workspace-wide visibility do not make a meeting available through this endpoint; the user must own it or receive a direct share. `query` does not search transcript text. # List tags Source: https://docs.automate.ax/reference/integrations/krisp/actions/list-tags Lists Krisp meeting tags. `krisp.listTags` lists up to 100 tags available to the connected user. ```ts automations/list-krisp-tags.automation.ts theme={null} import { automation, markSignificant, onDashboardRun } from "automate.ax" import { krisp } from "automate.ax/krisp" export default automation("List Krisp tags", () => { onDashboardRun({ title: "List Krisp tags" }) markSignificant(krisp.listTags({ query: "customer" })) }) ``` `query` is an optional name-prefix filter. The result contains `items`; each tag has an ID, name, nullable color, and creation time. Krisp does not paginate this endpoint beyond its 100-tag maximum. # Krisp Source: https://docs.automate.ax/reference/integrations/krisp/index Read Krisp meetings, transcripts, notes, action items, and tags, or import recordings for processing. Automate.ax connects to the Krisp Meeting Assistant API with a personal API key. Use the integration to read processed meeting content, find follow-up work, and import recordings for Krisp to transcribe and summarize. Krisp requires a Core, Advanced, or Trial plan for API access. Create a key in Krisp with `read`, `write`, or both scopes, then select the same access when connecting it to Automate.ax. The credential stays outside your automation. ```ts automations/review-krisp-action-items.automation.ts theme={null} import { automation, markSignificant, onSchedule } from "automate.ax" import { krisp } from "automate.ax/krisp" export default automation("Review Krisp action items", () => { onSchedule({ schedule: "0 9 * * 1-5" }) markSignificant(krisp.listActionItems({ completed: false })) }) ``` Krisp limits an account to five requests per second with a burst of 25 requests over five seconds. Automate.ax safely retries read actions, rate limits, and rejected concurrent import starts. It does not replay recording imports after an uncertain failure because another start could duplicate work. Krisp documents webhook event names but not stable payload schemas, so this integration does not expose provider event triggers. Use `onSchedule` with a list action when polling fits your workflow. See [Krisp's official API documentation](https://meeting-api-docs.krisp.ai/) for plan, key, and provider behavior. ## Exports ```ts theme={null} import { getKrispApi, krisp, krispAccount } from "automate.ax/krisp" ``` * `krisp` contains the packaged Krisp actions. * `krispAccount("name")` selects a named Krisp connection. * `getKrispApi` creates the authenticated REST helper for a custom account-backed action. ## Actions * [Get profile](/reference/integrations/krisp/actions/get-profile) * [List meetings](/reference/integrations/krisp/actions/list-meetings) * [Get meeting](/reference/integrations/krisp/actions/get-meeting) * [List action items](/reference/integrations/krisp/actions/list-action-items) * [List tags](/reference/integrations/krisp/actions/list-tags) * [Import recording](/reference/integrations/krisp/actions/import-recording) * [Get import status](/reference/integrations/krisp/actions/get-import-status) # Archive cycle Source: https://docs.automate.ax/reference/integrations/linear/actions/archive-cycle Archive a Linear cycle. `linear.archiveCycle` archives a Linear cycle.. ```ts automations/linear-archive-cycle.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Archive cycle", () => { onDashboardRun({ title: "Archive cycle" }) linear.archiveCycle({ cycleId: "cycle-uuid" }) }) ``` Provide `cycleId`. Returns the archived `LinearCycle`, or `null` if Linear deleted it. Optional second argument `{ account }` selects the Linear binding. # Archive issue Source: https://docs.automate.ax/reference/integrations/linear/actions/archive-issue Archive or trash a Linear issue. `linear.archiveIssue` archives by default. Set `trash: true` to move the issue to Linear's recently deleted view instead. ```ts automations/archive-linear-issue.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Archive Linear issue", () => { onDashboardRun({ title: "Archive Linear issue" }) linear.archiveIssue({ issueId: "ENG-123" }) }) ``` `issueId` accepts a `UUID` or identifier. Optional `trash` selects recently deleted items. Optional second argument `{ account }` defaults to the project binding. Returns the archived `LinearIssue`, including `archivedAt` and provider trash state. Use [Unarchive issue](/reference/integrations/linear/actions/unarchive-issue) for archived issues. # Archive project Source: https://docs.automate.ax/reference/integrations/linear/actions/archive-project Archive or trash a Linear project. `linear.archiveProject` archives by default. `trash: true` uses Linear's recently deleted view. ```ts automations/archive-linear-project.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Archive Linear project", () => { onDashboardRun({ title: "Archive Linear project" }) linear.archiveProject({ projectId: "project-slug" }) }) ``` `projectId` accepts a `UUID` or slug. You can also use `trash`. Optional second argument `{ account }` selects the Linear binding. Returns the archived `LinearProject`. # Archive project update Source: https://docs.automate.ax/reference/integrations/linear/actions/archive-project-update Archive a Linear project update. `linear.archiveProjectUpdate` archives a Linear project update.. ```ts automations/linear-archive-project-update.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Archive project update", () => { onDashboardRun({ title: "Archive project update" }) linear.archiveProjectUpdate({ projectUpdateId: "update-uuid" }) }) ``` Provide `projectUpdateId`. Returns the archived `LinearProjectUpdate`, or `null` if Linear deleted it. Optional second argument `{ account }` selects the Linear binding. # Create cycle Source: https://docs.automate.ax/reference/integrations/linear/actions/create-cycle Create a dated Linear cycle. `linear.createCycle` creates a dated Linear cycle.. ```ts automations/linear-create-cycle.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Create cycle", () => { onDashboardRun({ title: "Create cycle" }) linear.createCycle({ teamId: "team-uuid", startsAt: "2026-09-01T00:00:00Z", endsAt: "2026-09-15T00:00:00Z", }) }) ``` Provide `teamId`, `startsAt`, and `endsAt`. You can also set `name`, `description`, and `completedAt`. Returns the created `LinearCycle`. Optional second argument `{ account }` selects the Linear binding. # Create document Source: https://docs.automate.ax/reference/integrations/linear/actions/create-document Create a Linear document. `linear.createDocument` creates a Linear document.. ```ts automations/linear-create-document.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Create document", () => { onDashboardRun({ title: "Create document" }) linear.createDocument({ title: "Launch notes", projectId: "project-uuid", content: "# Launch", }) }) ``` Provide `title`. You can attach the document to either one `projectId` or one `issueId`, not both, and set its content, owner, icon, color, or sort order. Returns the created `LinearDocument`. Optional second argument `{ account }` selects the Linear binding. # Create issue Source: https://docs.automate.ax/reference/integrations/linear/actions/create-issue Create a Linear issue. `linear.createIssue` creates an issue in a team. Without `stateId`, Linear uses the team's default workflow state. ```ts automations/create-linear-issue.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Create Linear issue", () => { onDashboardRun({ title: "Create Linear issue" }) linear.createIssue({ teamId: "team-uuid", title: "Investigate customer report", description: "Review the attached evidence.", priority: 2, labelIds: ["label-uuid"], }) }) ``` Provide `teamId` and a non-empty `title`. Optional fields are `assigneeId`, `cycleId`, Markdown `description`, and `dueDate` in `YYYY-MM-DD` format. You can also provide a nonnegative integer `estimate`, `labelIds`, `parentId`, an integer `priority` from 0–4 where 0 is none and 4 is low, `projectId`, `stateId`, and `subscriberIds`. Optional second argument `{ account }` selects the Linear binding. Returns the created `LinearIssue`. Referenced users, labels, cycle, state, parent, and project must be compatible with the selected team. # Create issue attachment Source: https://docs.automate.ax/reference/integrations/linear/actions/create-issue-attachment Attach an external URL to a Linear issue. `linear.createIssueAttachment` creates an external attachment. Reusing its `url` updates it instead of creating a duplicate. ```ts automations/attach-linear-resource.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Attach customer ticket", () => { onDashboardRun({ title: "Attach customer ticket" }) linear.createIssueAttachment({ issueId: "ENG-123", title: "Customer ticket", url: "https://example.com/tickets/123", subtitle: "Escalated", }) }) ``` Provide `issueId`, a non-empty `title`, and a valid external `url`. Optional fields are Markdown `commentBody`, `groupBySource`, `PNG` or `JPEG` `iconUrl`, string-or-number `metadata`, and `subtitle`. Optional second argument `{ account }` selects the Linear binding. Returns the created or updated `LinearAttachment`. This action links a URL. It doesn't upload file bytes. # Create issue comment Source: https://docs.automate.ax/reference/integrations/linear/actions/create-issue-comment Comment on or reply to a Linear issue. `linear.createIssueComment` adds a top-level comment or threaded reply. ```ts automations/comment-on-linear-issue.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Comment on Linear issue", () => { onDashboardRun({ title: "Comment on Linear issue" }) linear.createIssueComment({ issueId: "ENG-123", body: "Ready for **review**.", }) }) ``` Provide `issueId` and a non-empty Markdown `body`. Optional `parentId` creates a threaded reply. Set `doNotSubscribeToIssue: true` to avoid automatically subscribing the acting user. Optional second argument `{ account }` defaults to the project binding. Returns the created `LinearComment`. Keep its `id` for update or deletion. # Create issue label Source: https://docs.automate.ax/reference/integrations/linear/actions/create-issue-label Create a Linear issue label. `linear.createIssueLabel` creates a Linear issue label.. ```ts automations/linear-create-issue-label.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Create issue label", () => { onDashboardRun({ title: "Create issue label" }) linear.createIssueLabel({ name: "Escalated", color: "#EB5757" }) }) ``` Provide `name`. Omit `teamId` for a workspace label, or provide it for a team label. Returns the created `LinearIssueLabel`. Optional second argument `{ account }` selects the Linear binding. # Create issue relation Source: https://docs.automate.ax/reference/integrations/linear/actions/create-issue-relation Create a directional Linear issue relation. `linear.createIssueRelation` links a source issue to a target issue. ```ts automations/relate-linear-issues.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Relate Linear issues", () => { onDashboardRun({ title: "Relate Linear issues" }) linear.createIssueRelation({ issueId: "ENG-123", relatedIssueId: "ENG-456", type: "blocks", }) }) ``` Provide `issueId`, `relatedIssueId`, and `type`. Type is `"blocks"`, `"duplicate"`, `"related"`, or `"similar"`. With `"blocks"`, the source `issueId` blocks the target. Optional second argument `{ account }` defaults to the project binding. Returns the created `LinearIssueRelation` with source and target issue references. # Create project Source: https://docs.automate.ax/reference/integrations/linear/actions/create-project Create a Linear project for one or more teams. `linear.createProject` creates a project with planning, ownership, membership, and content. ```ts automations/create-linear-project.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Create Linear project", () => { onDashboardRun({ title: "Create Linear project" }) linear.createProject({ name: "Product launch", teamIds: ["team-uuid"], targetDate: "2026-09-30", priority: 2, }) }) ``` Provide `name` and a non-empty `teamIds` array. Optional fields are `color`, Markdown `content`, `description`, `icon`, `leadId`, `memberIds`, and `priority` from 0–4. You can also provide `startDate`, legacy `state`, `statusId`, and `targetDate`. Optional second argument `{ account }` selects the Linear binding. Dates use `YYYY-MM-DD`. Returns the created `LinearProject`. Prefer `statusId` over legacy `state` in modern workspaces. # Create project milestone Source: https://docs.automate.ax/reference/integrations/linear/actions/create-project-milestone Create a milestone in a Linear project. `linear.createProjectMilestone` creates a milestone in a Linear project.. ```ts automations/linear-create-project-milestone.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Create project milestone", () => { onDashboardRun({ title: "Create project milestone" }) linear.createProjectMilestone({ projectId: "project-uuid", name: "Public beta", targetDate: "2026-09-30", }) }) ``` Provide `projectId` and `name`. You can also set `description`, `targetDate`, and `sortOrder`. Returns the created `LinearProjectMilestone`. Optional second argument `{ account }` selects the Linear binding. # Create project update Source: https://docs.automate.ax/reference/integrations/linear/actions/create-project-update Post a status update to a Linear project. `linear.createProjectUpdate` posts a status update to a Linear project.. ```ts automations/linear-create-project-update.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Create project update", () => { onDashboardRun({ title: "Create project update" }) linear.createProjectUpdate({ projectId: "project-uuid", body: "Launch is on track.", health: "onTrack", }) }) ``` Provide `projectId`. Optional Markdown `body` describes the update. Optional `health` is `onTrack`, `atRisk`, or `offTrack`; `isDiffHidden` hides the computed diff. Returns the created `LinearProjectUpdate`. Optional second argument `{ account }` selects the Linear binding. # Create reaction Source: https://docs.automate.ax/reference/integrations/linear/actions/create-reaction Add an emoji reaction in Linear. `linear.createReaction` adds an emoji reaction in Linear.. ```ts automations/linear-create-reaction.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Create reaction", () => { onDashboardRun({ title: "Create reaction" }) linear.createReaction({ issueId: "issue-uuid", emoji: "+1" }) }) ``` Provide `emoji` and exactly one of `issueId`, `commentId`, `initiativeUpdateId`, or `projectUpdateId`. Returns the created `LinearReaction`. Optional second argument `{ account }` selects the Linear binding. # Delegate issue Source: https://docs.automate.ax/reference/integrations/linear/actions/delegate-issue Delegate a Linear issue to a coding-session agent such as Codex. `linear.delegateIssue` delegates an existing issue to a Linear agent app. Linear then starts and tracks the provider's coding session on that issue. ```ts automations/delegate-linear-issue.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Delegate Linear issues to Codex", () => { const issue = linear.onIssueCreated() const agents = linear.listUsers({ app: true, active: true, name: "Codex" }) linear.delegateIssue({ issueId: issue.identifier, delegateId: agents.users[0]!.id, }) }) ``` `issueId` accepts a UUID or human-readable identifier such as `ENG-123`. `delegateId` is the app-user ID returned by `linear.listUsers`; choose an active app user whose `supportsAgentSessions` field is `true`. Optional second argument `{ account }` defaults to the project binding. Returns the updated `LinearIssue`, including its `delegate`. The selected agent integration must already be installed and configured in the Linear workspace. Use `linear.updateIssue({ issueId, delegateId: null })` to remove delegation. # Delete comment Source: https://docs.automate.ax/reference/integrations/linear/actions/delete-comment Permanently delete a Linear comment. `linear.deleteComment` removes a comment or reply by ID. ```ts automations/delete-linear-comment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Delete Linear comment", () => { onDashboardRun({ title: "Delete Linear comment" }) linear.deleteComment({ commentId: "comment-uuid" }) }) ``` Provide `commentId`. Optional second argument `{ account }` defaults to the project binding. Returns `Signal<{ commentId: string }>`. Deletion is permanent. # Delete document Source: https://docs.automate.ax/reference/integrations/linear/actions/delete-document Move a Linear document to reversible trash. `linear.deleteDocument` moves a Linear document to reversible trash.. ```ts automations/linear-delete-document.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Delete document", () => { onDashboardRun({ title: "Delete document" }) linear.deleteDocument({ documentId: "document-uuid" }) }) ``` Provide `documentId`. Linear keeps the document recoverable through `linear.unarchiveDocument`. Returns the trashed `LinearDocument`, or `null` if Linear deleted it. Optional second argument `{ account }` selects the Linear binding. # Delete issue attachment Source: https://docs.automate.ax/reference/integrations/linear/actions/delete-issue-attachment Permanently delete an external Linear issue attachment. `linear.deleteIssueAttachment` removes an attachment by its Linear ID, not its external URL. ```ts automations/delete-linear-attachment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Delete Linear attachment", () => { onDashboardRun({ title: "Delete Linear attachment" }) linear.deleteIssueAttachment({ attachmentId: "attachment-uuid" }) }) ``` Provide `attachmentId`. Optional second argument `{ account }` defaults to the project binding. Returns `Signal<{ attachmentId: string }>`. # Delete issue label Source: https://docs.automate.ax/reference/integrations/linear/actions/delete-issue-label Permanently delete a Linear issue label. `linear.deleteIssueLabel` permanently deletes a Linear issue label.. ```ts automations/linear-delete-issue-label.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Delete issue label", () => { onDashboardRun({ title: "Delete issue label" }) linear.deleteIssueLabel({ issueLabelId: "label-uuid" }) }) ``` Provide `issueLabelId`. Returns `{ issueLabelId }` after Linear confirms deletion. Optional second argument `{ account }` selects the Linear binding. # Delete issue relation Source: https://docs.automate.ax/reference/integrations/linear/actions/delete-issue-relation Permanently delete a Linear issue relation. `linear.deleteIssueRelation` removes only the relationship. Both issues remain. ```ts automations/delete-linear-relation.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Delete Linear relation", () => { onDashboardRun({ title: "Delete Linear relation" }) linear.deleteIssueRelation({ relationId: "relation-uuid" }) }) ``` Provide `relationId`. Optional second argument `{ account }` defaults to the project binding. Returns `Signal<{ relationId: string }>`. # Delete project milestone Source: https://docs.automate.ax/reference/integrations/linear/actions/delete-project-milestone Permanently delete a Linear project milestone. `linear.deleteProjectMilestone` permanently deletes a Linear project milestone.. ```ts automations/linear-delete-project-milestone.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Delete project milestone", () => { onDashboardRun({ title: "Delete project milestone" }) linear.deleteProjectMilestone({ projectMilestoneId: "milestone-uuid" }) }) ``` Provide `projectMilestoneId`. Returns `{ projectMilestoneId }` after Linear confirms deletion. Optional second argument `{ account }` selects the Linear binding. # Delete reaction Source: https://docs.automate.ax/reference/integrations/linear/actions/delete-reaction Permanently delete a Linear reaction. `linear.deleteReaction` permanently deletes a Linear reaction.. ```ts automations/linear-delete-reaction.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Delete reaction", () => { onDashboardRun({ title: "Delete reaction" }) linear.deleteReaction({ reactionId: "reaction-uuid" }) }) ``` Provide `reactionId`. Returns `{ reactionId }` after Linear confirms deletion. Optional second argument `{ account }` selects the Linear binding. # Get agent session Source: https://docs.automate.ax/reference/integrations/linear/actions/get-agent-session Get the current state of one Linear agent session. `linear.getAgentSession` reads one coding session created through Linear delegation. ```ts automations/get-linear-agent-session.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Get Linear agent session", () => { onDashboardRun({ title: "Get Linear agent session" }) linear.getAgentSession({ agentSessionId: "agent-session-uuid" }) }) ``` `agentSessionId` is required. Optional second argument `{ account }` defaults to the project binding. Returns a `LinearAgentSession` with its app user, issue, lifecycle dates, provider summary and plan, external links, and status. `plan` is `null` until the agent reports one. Status is `pending`, `active`, `awaitingInput`, `complete`, `error`, or `stale`. # Get comment Source: https://docs.automate.ax/reference/integrations/linear/actions/get-comment Get a Linear comment by ID. `linear.getComment` loads a comment or threaded reply. ```ts automations/get-linear-comment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Get Linear comment", () => { onDashboardRun({ title: "Get Linear comment" }) linear.getComment({ commentId: "comment-uuid" }) }) ``` Provide `commentId`. Optional second argument `{ account }` defaults to the project binding. Returns `Signal` with Markdown body, author, parent relationships, URL, and timestamps. # Get cycle Source: https://docs.automate.ax/reference/integrations/linear/actions/get-cycle Get one Linear cycle. `linear.getCycle` gets one Linear cycle.. ```ts automations/linear-get-cycle.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Get cycle", () => { onDashboardRun({ title: "Get cycle" }) linear.getCycle({ cycleId: "cycle-uuid" }) }) ``` Provide `cycleId`. Returns the matching `LinearCycle`. Optional second argument `{ account }` selects the Linear binding. # Get document Source: https://docs.automate.ax/reference/integrations/linear/actions/get-document Get one Linear document. `linear.getDocument` gets one Linear document.. ```ts automations/linear-get-document.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Get document", () => { onDashboardRun({ title: "Get document" }) linear.getDocument({ documentId: "document-uuid" }) }) ``` Provide a document ID or URL slug as `documentId`. Returns the matching `LinearDocument`. Optional second argument `{ account }` selects the Linear binding. # Get issue Source: https://docs.automate.ax/reference/integrations/linear/actions/get-issue Get a Linear issue by its universally unique identifier or issue identifier. `linear.getIssue` accepts UUIDs and identifiers such as `ENG-123`. ```ts automations/get-linear-issue.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Get Linear issue", () => { onDashboardRun({ title: "Get Linear issue" }) linear.getIssue({ issueId: "ENG-123" }) }) ``` Provide `issueId`. Optional second argument `{ account }` defaults to the project binding. Returns the normalized `LinearIssue` with dates as `Date` values and `dueDate` as `YYYY-MM-DD | null`. # Get issue label Source: https://docs.automate.ax/reference/integrations/linear/actions/get-issue-label Get a Linear issue label by ID. `linear.getIssueLabel` loads label details, parent, and team ownership. ```ts automations/get-linear-label.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Get Linear label", () => { onDashboardRun({ title: "Get Linear label" }) linear.getIssueLabel({ issueLabelId: "label-uuid" }) }) ``` Provide `issueLabelId`. Optional second argument `{ account }` defaults to the project binding. Returns `Signal`. # Get project Source: https://docs.automate.ax/reference/integrations/linear/actions/get-project Get a Linear project by its universally unique identifier or slug. `linear.getProject` returns planning, membership, status, and progress data. ```ts automations/get-linear-project.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Get Linear project", () => { onDashboardRun({ title: "Get Linear project" }) linear.getProject({ projectId: "project-slug" }) }) ``` `projectId` accepts a `UUID` or project slug. Optional second argument `{ account }` defaults to the project binding. Returns the normalized `LinearProject`. # Get project milestone Source: https://docs.automate.ax/reference/integrations/linear/actions/get-project-milestone Get one Linear project milestone. `linear.getProjectMilestone` gets one Linear project milestone.. ```ts automations/linear-get-project-milestone.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Get project milestone", () => { onDashboardRun({ title: "Get project milestone" }) linear.getProjectMilestone({ projectMilestoneId: "milestone-uuid" }) }) ``` Provide `projectMilestoneId`. Returns the matching `LinearProjectMilestone`. Optional second argument `{ account }` selects the Linear binding. # Get project update Source: https://docs.automate.ax/reference/integrations/linear/actions/get-project-update Get one Linear project update. `linear.getProjectUpdate` gets one Linear project update.. ```ts automations/linear-get-project-update.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Get project update", () => { onDashboardRun({ title: "Get project update" }) linear.getProjectUpdate({ projectUpdateId: "update-uuid" }) }) ``` Provide an ID or project-local slug as `projectUpdateId`. When using a slug, also provide `projectId`. Returns the matching `LinearProjectUpdate`. Optional second argument `{ account }` selects the Linear binding. # Get team Source: https://docs.automate.ax/reference/integrations/linear/actions/get-team Get a Linear team by ID or issue key. `linear.getTeam` accepts a stable `UUID` or short key such as `ENG`. ```ts automations/get-linear-team.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Get Linear team", () => { onDashboardRun({ title: "Get Linear team" }) linear.getTeam({ teamId: "ENG" }) }) ``` Provide `teamId`. Optional second argument `{ account }` defaults to the project binding. Returns the normalized `LinearTeam`. # Get user Source: https://docs.automate.ax/reference/integrations/linear/actions/get-user Get a Linear user by ID. `linear.getUser` returns a user profile. ```ts automations/get-linear-user.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Get Linear user", () => { onDashboardRun({ title: "Get Linear user" }) linear.getUser({ userId: "user-uuid" }) }) ``` Provide a stable `UUID` as `userId`. Optional second argument `{ account }` defaults to the project binding. Returns `Signal`. # Get viewer Source: https://docs.automate.ax/reference/integrations/linear/actions/get-viewer Get the connected Linear user's profile. `linear.getViewer` returns the connected user's workspace profile. ```ts automations/get-linear-viewer.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Get Linear viewer", () => { onDashboardRun({ title: "Get Linear viewer" }) linear.getViewer() }) ``` The action has no schema input fields. Optional second argument `{ account }`, which defaults to the project binding. Returns `Signal` with identity, email, names, avatar, profile URL, active/administrator/owner/guest/app flags, archive/join/update dates, timezone, and `isMe`. # Get workflow state Source: https://docs.automate.ax/reference/integrations/linear/actions/get-workflow-state Get a Linear workflow state by ID. `linear.getWorkflowState` loads state metadata and its owning team. ```ts automations/get-linear-state.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Get Linear state", () => { onDashboardRun({ title: "Get Linear state" }) linear.getWorkflowState({ workflowStateId: "state-uuid" }) }) ``` Provide `workflowStateId`. Optional second argument `{ account }` defaults to the project binding. Returns `Signal`. # Get workspace Source: https://docs.automate.ax/reference/integrations/linear/actions/get-workspace Get the connected Linear workspace. `linear.getWorkspace` gets the connected Linear workspace.. ```ts automations/linear-get-workspace.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Get workspace", () => { onDashboardRun({ title: "Get workspace" }) linear.getWorkspace() }) ``` Takes no input. Returns the connected `LinearOrganization`. Optional second argument `{ account }` selects the Linear binding. # List cycles Source: https://docs.automate.ax/reference/integrations/linear/actions/list-cycles List Linear cycles. `linear.listCycles` lists Linear cycles.. ```ts automations/linear-list-cycles.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("List cycles", () => { onDashboardRun({ title: "List cycles" }) linear.listCycles({ teamId: "team-uuid", limit: 25 }) }) ``` Optional inputs are `teamId`, `after`, `limit`, `includeArchived`, and `orderBy`. Returns `cycles` and cursor `pageInfo`. Optional second argument `{ account }` selects the Linear binding. # List documents Source: https://docs.automate.ax/reference/integrations/linear/actions/list-documents List Linear documents. `linear.listDocuments` lists Linear documents.. ```ts automations/linear-list-documents.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("List documents", () => { onDashboardRun({ title: "List documents" }) linear.listDocuments({ projectId: "project-uuid", limit: 25 }) }) ``` Optional inputs are `projectId`, `after`, `limit`, `includeArchived`, and `orderBy`. Returns `documents` and cursor `pageInfo`. Optional second argument `{ account }` selects the Linear binding. # List issue agent sessions Source: https://docs.automate.ax/reference/integrations/linear/actions/list-issue-agent-sessions List coding and other agent sessions attached to a Linear issue. `linear.listIssueAgentSessions` reads the agent-session history for one issue. Use it after delegation to monitor work without using Linear as the transport for direct Codex cloud tasks. ```ts automations/list-linear-agent-sessions.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Check Linear coding sessions", () => { onSchedule({ schedule: "*/5 * * * *" }) linear.listIssueAgentSessions({ issueId: "ENG-123", limit: 20 }) }) ``` `issueId` accepts a UUID or human-readable identifier. Common page inputs are `limit` (1 to 50, default 50), `after`, and `includeArchived`. Optional second argument `{ account }` defaults to the project binding. Returns `{ agentSessions: LinearAgentSession[]; pageInfo: LinearPageInfo }`, ordered by most recent update. Each session includes the agent app, issue, nullable provider plan and summary, external links, lifecycle dates, and status. # List issue attachments Source: https://docs.automate.ax/reference/integrations/linear/actions/list-issue-attachments List external attachments on a Linear issue. `linear.listIssueAttachments` returns external resources, not files embedded in Markdown. ```ts automations/list-linear-attachments.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("List Linear attachments", () => { onDashboardRun({ title: "List Linear attachments" }) linear.listIssueAttachments({ issueId: "ENG-123" }) }) ``` `issueId` accepts a `UUID` or identifier. `limit` accepts 1–50 and defaults to 50. Other common page fields are `after` and `includeArchived`. Optional second argument `{ account }` defaults to the project binding. Returns `{ attachments: LinearAttachment[]; pageInfo: LinearPageInfo }`. Each attachment includes unique URL, title/subtitle, source metadata, grouping flag, creator, issue reference, and dates. # List issue comments Source: https://docs.automate.ax/reference/integrations/linear/actions/list-issue-comments List comments on a Linear issue. `linear.listIssueComments` returns top-level comments and threaded replies from Linear's comment filter. ```ts automations/list-linear-comments.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("List Linear comments", () => { onDashboardRun({ title: "List Linear comments" }) linear.listIssueComments({ issueId: "ENG-123", orderBy: "createdAt", limit: 50, }) }) ``` `issueId` accepts a `UUID` or identifier. `orderBy` is `"createdAt"` by default or `"updatedAt"`. `limit` accepts 1–50 and defaults to 50. Other common page fields are `after` and `includeArchived`. Optional second argument `{ account }` defaults to the project binding. Returns `{ comments: LinearComment[]; pageInfo: LinearPageInfo }`. Comments include body, author, issue/parent IDs, URL, and creation, update, edit, resolve, and archive dates. # List issue labels Source: https://docs.automate.ax/reference/integrations/linear/actions/list-issue-labels List Linear workspace and team issue labels. `linear.listIssueLabels` returns IDs for issue label changes. ```ts automations/list-linear-labels.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Find Linear labels", () => { onDashboardRun({ title: "Find Linear labels" }) linear.listIssueLabels({ teamId: "team-uuid", name: "bug" }) }) ``` Optional `teamId` and a case-insensitive name substring filter results. `limit` accepts 1–50 and defaults to 50. `after` continues pagination. `includeArchived` controls archived labels. Second argument `{ account }` defaults to the project binding. Returns `{ issueLabels: LinearIssueLabel[]; pageInfo: LinearPageInfo }`. Labels include hierarchy, team ownership, grouping, description, color, and dates. # List issue relations Source: https://docs.automate.ax/reference/integrations/linear/actions/list-issue-relations List both directions of a Linear issue's relations. `linear.listIssueRelations` returns outgoing and inverse relations, whose meaning depends on the starting issue. ```ts automations/list-linear-relations.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("List Linear issue relations", () => { onDashboardRun({ title: "List Linear issue relations" }) linear.listIssueRelations({ issueId: "ENG-123", limit: 50 }) }) ``` `issueId` accepts a `UUID` or identifier. `limit` accepts 1–50 and defaults to 50 for each direction. `after` paginates outgoing `relations`. `inverseAfter` independently paginates `inverseRelations`. Optional second argument `{ account }` defaults to the project binding. Returns both arrays and separate `pageInfo` and `inversePageInfo`. Each relation includes `id`, `type`, source `issue`, target `relatedIssue`, and dates. # List issues Source: https://docs.automate.ax/reference/integrations/linear/actions/list-issues Filter Linear issues. `linear.listIssues` filters by ownership, planning, state, date, or text. ```ts automations/list-linear-issues.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Find recently updated Linear issues", () => { onDashboardRun({ title: "Find recently updated Linear issues" }) linear.listIssues({ teamId: "team-uuid", updatedAtOrAfter: "2026-08-01T00:00:00Z", orderBy: "updatedAt", limit: 50, }) }) ``` Optional filters are `assigneeId`, `createdAtOrAfter`, `labelId`, `projectId`, `search`, `stateId`, `teamId`, and `updatedAtOrAfter`. The `parentId` filter returns direct sub-issues. Timestamps require an `ISO` offset. `orderBy` is `"createdAt"` or `"updatedAt"` and defaults to `"updatedAt"`. `limit` accepts 1–50 and defaults to 50. Other common page fields are `after` and `includeArchived`. Optional second argument `{ account }` defaults to the project binding. Returns `{ issues: LinearIssue[]; pageInfo: LinearPageInfo }`. Pass `endCursor` as `after` while `hasNextPage` is true. # List project milestones Source: https://docs.automate.ax/reference/integrations/linear/actions/list-project-milestones List Linear project milestones. `linear.listProjectMilestones` lists Linear project milestones.. ```ts automations/linear-list-project-milestones.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("List project milestones", () => { onDashboardRun({ title: "List project milestones" }) linear.listProjectMilestones({ projectId: "project-uuid", limit: 25 }) }) ``` Optional inputs are `projectId`, `after`, `limit`, `includeArchived`, and `orderBy`. Returns `projectMilestones` and cursor `pageInfo`. Optional second argument `{ account }` selects the Linear binding. # List project statuses Source: https://docs.automate.ax/reference/integrations/linear/actions/list-project-statuses List Linear project statuses. `linear.listProjectStatuses` returns status IDs for project creation and updates. ```ts automations/list-linear-project-statuses.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("List Linear project statuses", () => { onDashboardRun({ title: "List Linear project statuses" }) linear.listProjectStatuses() }) ``` The action has no schema input fields. Optional second argument `{ account }` defaults to the project binding. Returns `Signal`. Each status has `id`, `name`, `type`, `color`, and nullable `description`. # List project updates Source: https://docs.automate.ax/reference/integrations/linear/actions/list-project-updates List Linear project updates. `linear.listProjectUpdates` lists Linear project updates.. ```ts automations/linear-list-project-updates.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("List project updates", () => { onDashboardRun({ title: "List project updates" }) linear.listProjectUpdates({ projectId: "project-uuid", limit: 25 }) }) ``` Optional inputs are `projectId`, `after`, `limit`, `includeArchived`, and `orderBy`. Returns `projectUpdates` and cursor `pageInfo`. Optional second argument `{ account }` selects the Linear binding. # List projects Source: https://docs.automate.ax/reference/integrations/linear/actions/list-projects Filter Linear projects. `linear.listProjects` filters by access, ownership, membership, status, state, or text. ```ts automations/list-linear-projects.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("List Linear projects", () => { onDashboardRun({ title: "List Linear projects" }) linear.listProjects({ accessibleTeamId: "team-uuid", orderBy: "updatedAt", limit: 50, }) }) ``` Optional filters are `accessibleTeamId`, `leadId`, `memberId`, `search`, legacy `state`, and `statusId`. `orderBy` is `"createdAt"` or `"updatedAt"` and defaults to `"updatedAt"`. `limit` accepts 1–50 and defaults to 50. Other common page fields are `after` and `includeArchived`. Optional second argument `{ account }` defaults to the project binding. Returns `{ projects: LinearProject[]; pageInfo: LinearPageInfo }`. # List teams Source: https://docs.automate.ax/reference/integrations/linear/actions/list-teams List Linear teams visible to the connected user. `linear.listTeams` returns team IDs for issue and project actions. ```ts automations/list-linear-teams.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("List Linear teams", () => { onDashboardRun({ title: "List Linear teams" }) linear.listTeams({ includeArchived: false, limit: 50 }) }) ``` `limit` accepts 1–50 and defaults to `50`. `after` continues from `pageInfo.endCursor`. `includeArchived` controls archived teams. Optional second argument `{ account }` defaults to the project binding. Returns `{ teams: LinearTeam[]; pageInfo: LinearPageInfo }`, including team key, names, color/icon, description, workflow settings, estimate settings, privacy, timezone, and dates. # List users Source: https://docs.automate.ax/reference/integrations/linear/actions/list-users List Linear users by status or text. `linear.listUsers` discovers user IDs for assignments, delegation, subscriptions, project membership, and leads. ```ts automations/find-linear-user.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Find active Linear users", () => { onDashboardRun({ title: "Find active Linear users" }) linear.listUsers({ active: true, name: "Ada", includeDisabled: false }) }) ``` To find coding agents such as Codex, filter for app users and select a result whose `supportsAgentSessions` field is `true`: ```ts theme={null} const agents = linear.listUsers({ app: true, active: true }) ``` Optional filters are exact `email`, a case-insensitive name substring, `active`, `app`, and `includeDisabled`. `limit` accepts 1–50 and defaults to 50. Other common page inputs are `after` and `includeArchived`. Second argument `{ account }` defaults to the project binding. Returns `{ users: LinearUser[]; pageInfo: LinearPageInfo }`. Each user reports whether it is an app identity and whether it supports agent sessions. `includeDisabled` controls the candidate set, while `active` filters it by active state. # List workflow states Source: https://docs.automate.ax/reference/integrations/linear/actions/list-workflow-states List Linear workflow states by team. `linear.listWorkflowStates` returns state IDs for issue creation and movement. ```ts automations/list-linear-states.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("List Linear workflow states", () => { onDashboardRun({ title: "List Linear workflow states" }) linear.listWorkflowStates({ teamId: "team-uuid" }) }) ``` Optional `teamId` restricts states to one team. `limit` accepts 1–50 and defaults to 50. Other common page inputs are `after` and `includeArchived`. Second argument `{ account }` defaults to the project binding. Returns `{ workflowStates: LinearWorkflowState[]; pageInfo: LinearPageInfo }`. States include ID, name, category `type`, color, description, ordering position, owning team, and dates. # Resolve comment Source: https://docs.automate.ax/reference/integrations/linear/actions/resolve-comment Resolve a Linear comment thread. `linear.resolveComment` resolves a Linear comment thread.. ```ts automations/linear-resolve-comment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Resolve comment", () => { onDashboardRun({ title: "Resolve comment" }) linear.resolveComment({ commentId: "comment-uuid" }) }) ``` Provide `commentId`. Returns the resolved `LinearComment`. Optional second argument `{ account }` selects the Linear binding. # Restore issue label Source: https://docs.automate.ax/reference/integrations/linear/actions/restore-issue-label Restore a retired Linear issue label. `linear.restoreIssueLabel` restores a retired Linear issue label.. ```ts automations/linear-restore-issue-label.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Restore issue label", () => { onDashboardRun({ title: "Restore issue label" }) linear.restoreIssueLabel({ issueLabelId: "label-uuid" }) }) ``` Provide `issueLabelId`. Returns the restored `LinearIssueLabel`. Optional second argument `{ account }` selects the Linear binding. # Retire issue label Source: https://docs.automate.ax/reference/integrations/linear/actions/retire-issue-label Retire a Linear issue label without removing it from issues. `linear.retireIssueLabel` retires a Linear issue label without removing it from issues.. ```ts automations/linear-retire-issue-label.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Retire issue label", () => { onDashboardRun({ title: "Retire issue label" }) linear.retireIssueLabel({ issueLabelId: "label-uuid" }) }) ``` Provide `issueLabelId`. Retired labels cannot be added to new issues. Returns the retired `LinearIssueLabel`. Optional second argument `{ account }` selects the Linear binding. # Unarchive document Source: https://docs.automate.ax/reference/integrations/linear/actions/unarchive-document Restore a trashed Linear document. `linear.unarchiveDocument` restores a trashed Linear document.. ```ts automations/linear-unarchive-document.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Unarchive document", () => { onDashboardRun({ title: "Unarchive document" }) linear.unarchiveDocument({ documentId: "document-uuid" }) }) ``` Provide `documentId`. Returns the restored `LinearDocument`, or `null` if Linear deleted it. Optional second argument `{ account }` selects the Linear binding. # Unarchive issue Source: https://docs.automate.ax/reference/integrations/linear/actions/unarchive-issue Restore an archived Linear issue. `linear.unarchiveIssue` restores an archived issue. ```ts automations/restore-linear-issue.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Restore Linear issue", () => { onDashboardRun({ title: "Restore Linear issue" }) linear.unarchiveIssue({ issueId: "ENG-123" }) }) ``` `issueId` accepts a `UUID` or identifier. Optional second argument `{ account }` defaults to the project binding. Returns the restored `LinearIssue`. Recently deleted items may follow different provider retention and restoration rules than normally archived issues. # Unarchive project Source: https://docs.automate.ax/reference/integrations/linear/actions/unarchive-project Restore an archived Linear project. `linear.unarchiveProject` restores an archived project. ```ts automations/restore-linear-project.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Restore Linear project", () => { onDashboardRun({ title: "Restore Linear project" }) linear.unarchiveProject({ projectId: "project-slug" }) }) ``` `projectId` accepts a `UUID` or slug. Optional second argument `{ account }` defaults to the project binding. Returns the restored `LinearProject`. # Unarchive project update Source: https://docs.automate.ax/reference/integrations/linear/actions/unarchive-project-update Restore an archived Linear project update. `linear.unarchiveProjectUpdate` restores an archived Linear project update.. ```ts automations/linear-unarchive-project-update.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Unarchive project update", () => { onDashboardRun({ title: "Unarchive project update" }) linear.unarchiveProjectUpdate({ projectUpdateId: "update-uuid" }) }) ``` Provide `projectUpdateId`. Returns the restored `LinearProjectUpdate`, or `null` if Linear deleted it. Optional second argument `{ account }` selects the Linear binding. # Reopen comment Source: https://docs.automate.ax/reference/integrations/linear/actions/unresolve-comment Reopen a resolved Linear comment thread. `linear.unresolveComment` reopens a resolved Linear comment thread. ```ts automations/linear-unresolve-comment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Reopen comment", () => { onDashboardRun({ title: "Reopen comment" }) linear.unresolveComment({ commentId: "comment-uuid" }) }) ``` Provide `commentId`. Returns the reopened `LinearComment`. Optional second argument `{ account }` selects the Linear binding. # Update comment Source: https://docs.automate.ax/reference/integrations/linear/actions/update-comment Update a Linear comment's Markdown body. `linear.updateComment` replaces a comment's body and records its edit time. ```ts automations/update-linear-comment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Update Linear comment", () => { onDashboardRun({ title: "Update Linear comment" }) linear.updateComment({ commentId: "comment-uuid", body: "Approved." }) }) ``` Provide `commentId` and a non-empty Markdown `body`. Optional second argument `{ account }` defaults to the project binding. Returns the updated `LinearComment`. The connected user must have permission to edit it. # Update cycle Source: https://docs.automate.ax/reference/integrations/linear/actions/update-cycle Update a Linear cycle. `linear.updateCycle` updates a Linear cycle.. ```ts automations/linear-update-cycle.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Update cycle", () => { onDashboardRun({ title: "Update cycle" }) linear.updateCycle({ cycleId: "cycle-uuid", name: "Sprint 18" }) }) ``` Provide `cycleId` and any fields to change: `name`, `description`, `startsAt`, `endsAt`, or `completedAt`. Returns the updated `LinearCycle`. Optional second argument `{ account }` selects the Linear binding. # Update document Source: https://docs.automate.ax/reference/integrations/linear/actions/update-document Update a Linear document. `linear.updateDocument` updates a Linear document.. ```ts automations/linear-update-document.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Update document", () => { onDashboardRun({ title: "Update document" }) linear.updateDocument({ documentId: "document-uuid", title: "Launch plan" }) }) ``` Provide `documentId` and the fields to change. A document can select either `projectId` or `issueId`, not both. Returns the updated `LinearDocument`. Optional second argument `{ account }` selects the Linear binding. # Update issue Source: https://docs.automate.ax/reference/integrations/linear/actions/update-issue Update a Linear issue. `linear.updateIssue` changes selected fields on an issue by its `UUID` or identifier. ```ts automations/update-linear-issue.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Move Linear issue", () => { onDashboardRun({ title: "Move Linear issue" }) linear.updateIssue({ issueId: "ENG-123", stateId: "state-uuid", assigneeId: "user-uuid", }) }) ``` Provide `issueId`. Optional fields are `assigneeId`, `cycleId`, `delegateId`, `description`, `dueDate`, `estimate`, `labelIds`, `addedLabelIds`, `removedLabelIds`, `parentId`, `priority`, `projectId`, `stateId`, `subscriberIds`, `teamId`, and `title`. Optional second argument `{ account }` selects the Linear binding. Nullable fields accept `null` to clear their value. Use `delegateId` with an agent app-user ID to start a coding session, or `null` to remove delegation. `labelIds` replaces all labels. The added and removed arrays modify the set. `subscriberIds` replaces all subscribers. Priority is 0–4 and estimate is a nonnegative integer or `null`. Returns the updated `LinearIssue`. Moving teams can make team-specific states, labels, cycles, or estimates invalid. # Update issue attachment Source: https://docs.automate.ax/reference/integrations/linear/actions/update-issue-attachment Update a Linear issue attachment. `linear.updateIssueAttachment` updates a Linear issue attachment.. ```ts automations/linear-update-issue-attachment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Update issue attachment", () => { onDashboardRun({ title: "Update issue attachment" }) linear.updateIssueAttachment({ attachmentId: "attachment-uuid", title: "Customer ticket", }) }) ``` Provide `attachmentId` and `title`. You can also replace `subtitle`, `iconUrl`, or integration metadata. Returns the updated `LinearAttachment`. Optional second argument `{ account }` selects the Linear binding. # Update issue label Source: https://docs.automate.ax/reference/integrations/linear/actions/update-issue-label Update a Linear issue label. `linear.updateIssueLabel` updates a Linear issue label.. ```ts automations/linear-update-issue-label.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Update issue label", () => { onDashboardRun({ title: "Update issue label" }) linear.updateIssueLabel({ issueLabelId: "label-uuid", name: "Urgent" }) }) ``` Provide `issueLabelId` and the fields to change. You can update the name, color, description, grouping, or parent. Returns the updated `LinearIssueLabel`. Optional second argument `{ account }` selects the Linear binding. # Update project Source: https://docs.automate.ax/reference/integrations/linear/actions/update-project Update a Linear project. `linear.updateProject` changes selected project fields. ```ts automations/update-linear-project.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Update Linear project", () => { onDashboardRun({ title: "Update Linear project" }) linear.updateProject({ projectId: "project-slug", statusId: "status-uuid", leadId: "user-uuid", }) }) ``` `projectId` accepts a `UUID` or slug. Optional fields are `color`, `content`, `description`, `icon`, `leadId`, `memberIds`, `name`, `priority`, `startDate`, legacy `state`, `statusId`, `targetDate`, and `teamIds`. Optional second argument `{ account }` selects the Linear binding. Nullable content, icon, lead, and date fields accept `null` to clear. `memberIds` and `teamIds` replace their complete sets. When supplied, `teamIds` must be non-empty. Returns the updated `LinearProject`. # Update project milestone Source: https://docs.automate.ax/reference/integrations/linear/actions/update-project-milestone Update a Linear project milestone. `linear.updateProjectMilestone` updates a Linear project milestone.. ```ts automations/linear-update-project-milestone.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Update project milestone", () => { onDashboardRun({ title: "Update project milestone" }) linear.updateProjectMilestone({ projectMilestoneId: "milestone-uuid", targetDate: "2026-10-15", }) }) ``` Provide `projectMilestoneId` and the fields to change. Returns the updated `LinearProjectMilestone`. Optional second argument `{ account }` selects the Linear binding. # Update project update Source: https://docs.automate.ax/reference/integrations/linear/actions/update-project-update Update a Linear project status update. `linear.updateProjectUpdate` updates a Linear project status update.. ```ts automations/linear-update-project-update.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Update project update", () => { onDashboardRun({ title: "Update project update" }) linear.updateProjectUpdate({ projectUpdateId: "update-uuid", health: "atRisk", }) }) ``` Provide `projectUpdateId` and a new Markdown `body` or `health`. Returns the updated `LinearProjectUpdate`. Optional second argument `{ account }` selects the Linear binding. # Linear Source: https://docs.automate.ax/reference/integrations/linear/index Manage Linear issues, projects, cycles, comments, documents, and teams, or react to workspace resource changes. ## Exports ```ts theme={null} import { linear, linearAccount, getLinearApi } from "automate.ax/linear" ``` * `linear` contains the packaged Linear actions and triggers. * `linearAccount("name")` selects a named Linear connection. * `getLinearApi` creates the authenticated Linear API helper for a custom account-backed action. ## Triggers * [On attachment created](/reference/integrations/linear/triggers/on-attachment-created) * [On attachment event](/reference/integrations/linear/triggers/on-attachment-event) * [On attachment removed](/reference/integrations/linear/triggers/on-attachment-removed) * [On attachment updated](/reference/integrations/linear/triggers/on-attachment-updated) * [On comment created](/reference/integrations/linear/triggers/on-comment-created) * [On Linear comment event](/reference/integrations/linear/triggers/on-comment-event) * [On comment removed](/reference/integrations/linear/triggers/on-comment-removed) * [On comment updated](/reference/integrations/linear/triggers/on-comment-updated) * [On customer created](/reference/integrations/linear/triggers/on-customer-created) * [On customer event](/reference/integrations/linear/triggers/on-customer-event) * [On customer need created](/reference/integrations/linear/triggers/on-customer-need-created) * [On customer need event](/reference/integrations/linear/triggers/on-customer-need-event) * [On customer need removed](/reference/integrations/linear/triggers/on-customer-need-removed) * [On customer need updated](/reference/integrations/linear/triggers/on-customer-need-updated) * [On customer removed](/reference/integrations/linear/triggers/on-customer-removed) * [On customer updated](/reference/integrations/linear/triggers/on-customer-updated) * [On cycle created](/reference/integrations/linear/triggers/on-cycle-created) * [On cycle event](/reference/integrations/linear/triggers/on-cycle-event) * [On cycle removed](/reference/integrations/linear/triggers/on-cycle-removed) * [On cycle updated](/reference/integrations/linear/triggers/on-cycle-updated) * [On document created](/reference/integrations/linear/triggers/on-document-created) * [On document event](/reference/integrations/linear/triggers/on-document-event) * [On document removed](/reference/integrations/linear/triggers/on-document-removed) * [On document updated](/reference/integrations/linear/triggers/on-document-updated) * [On initiative created](/reference/integrations/linear/triggers/on-initiative-created) * [On initiative event](/reference/integrations/linear/triggers/on-initiative-event) * [On initiative removed](/reference/integrations/linear/triggers/on-initiative-removed) * [On initiative update created](/reference/integrations/linear/triggers/on-initiative-update-created) * [On initiative update event](/reference/integrations/linear/triggers/on-initiative-update-event) * [On initiative update removed](/reference/integrations/linear/triggers/on-initiative-update-removed) * [On initiative update updated](/reference/integrations/linear/triggers/on-initiative-update-updated) * [On initiative updated](/reference/integrations/linear/triggers/on-initiative-updated) * [On issue created](/reference/integrations/linear/triggers/on-issue-created) * [On Linear issue event](/reference/integrations/linear/triggers/on-issue-event) * [On issue label created](/reference/integrations/linear/triggers/on-issue-label-created) * [On issue label event](/reference/integrations/linear/triggers/on-issue-label-event) * [On issue label removed](/reference/integrations/linear/triggers/on-issue-label-removed) * [On issue label updated](/reference/integrations/linear/triggers/on-issue-label-updated) * [On issue removed](/reference/integrations/linear/triggers/on-issue-removed) * [On issue SLA breached](/reference/integrations/linear/triggers/on-issue-sla-breached) * [On issue SLA event](/reference/integrations/linear/triggers/on-issue-sla-event) * [On issue SLA high risk](/reference/integrations/linear/triggers/on-issue-sla-high-risk) * [On issue SLA set](/reference/integrations/linear/triggers/on-issue-sla-set) * [On issue updated](/reference/integrations/linear/triggers/on-issue-updated) * [On project created](/reference/integrations/linear/triggers/on-project-created) * [On Linear project event](/reference/integrations/linear/triggers/on-project-event) * [On project label created](/reference/integrations/linear/triggers/on-project-label-created) * [On project label event](/reference/integrations/linear/triggers/on-project-label-event) * [On project label removed](/reference/integrations/linear/triggers/on-project-label-removed) * [On project label updated](/reference/integrations/linear/triggers/on-project-label-updated) * [On project removed](/reference/integrations/linear/triggers/on-project-removed) * [On project update created](/reference/integrations/linear/triggers/on-project-update-created) * [On project update event](/reference/integrations/linear/triggers/on-project-update-event) * [On project update removed](/reference/integrations/linear/triggers/on-project-update-removed) * [On project update updated](/reference/integrations/linear/triggers/on-project-update-updated) * [On project updated](/reference/integrations/linear/triggers/on-project-updated) * [On reaction created](/reference/integrations/linear/triggers/on-reaction-created) * [On reaction event](/reference/integrations/linear/triggers/on-reaction-event) * [On reaction removed](/reference/integrations/linear/triggers/on-reaction-removed) * [On release created](/reference/integrations/linear/triggers/on-release-created) * [On release event](/reference/integrations/linear/triggers/on-release-event) * [On release note created](/reference/integrations/linear/triggers/on-release-note-created) * [On release note event](/reference/integrations/linear/triggers/on-release-note-event) * [On release note removed](/reference/integrations/linear/triggers/on-release-note-removed) * [On release note updated](/reference/integrations/linear/triggers/on-release-note-updated) * [On release removed](/reference/integrations/linear/triggers/on-release-removed) * [On release updated](/reference/integrations/linear/triggers/on-release-updated) * [On user created](/reference/integrations/linear/triggers/on-user-created) * [On user event](/reference/integrations/linear/triggers/on-user-event) * [On user removed](/reference/integrations/linear/triggers/on-user-removed) * [On user updated](/reference/integrations/linear/triggers/on-user-updated) ## Actions * [Archive cycle](/reference/integrations/linear/actions/archive-cycle) * [Archive issue](/reference/integrations/linear/actions/archive-issue) * [Archive project update](/reference/integrations/linear/actions/archive-project-update) * [Archive project](/reference/integrations/linear/actions/archive-project) * [Create cycle](/reference/integrations/linear/actions/create-cycle) * [Create document](/reference/integrations/linear/actions/create-document) * [Create issue attachment](/reference/integrations/linear/actions/create-issue-attachment) * [Create issue comment](/reference/integrations/linear/actions/create-issue-comment) * [Create issue label](/reference/integrations/linear/actions/create-issue-label) * [Create issue relation](/reference/integrations/linear/actions/create-issue-relation) * [Create issue](/reference/integrations/linear/actions/create-issue) * [Create project milestone](/reference/integrations/linear/actions/create-project-milestone) * [Create project update](/reference/integrations/linear/actions/create-project-update) * [Create project](/reference/integrations/linear/actions/create-project) * [Create reaction](/reference/integrations/linear/actions/create-reaction) * [Delegate issue](/reference/integrations/linear/actions/delegate-issue) * [Delete comment](/reference/integrations/linear/actions/delete-comment) * [Delete document](/reference/integrations/linear/actions/delete-document) * [Delete issue attachment](/reference/integrations/linear/actions/delete-issue-attachment) * [Delete issue label](/reference/integrations/linear/actions/delete-issue-label) * [Delete issue relation](/reference/integrations/linear/actions/delete-issue-relation) * [Delete project milestone](/reference/integrations/linear/actions/delete-project-milestone) * [Delete reaction](/reference/integrations/linear/actions/delete-reaction) * [Get agent session](/reference/integrations/linear/actions/get-agent-session) * [Get comment](/reference/integrations/linear/actions/get-comment) * [Get cycle](/reference/integrations/linear/actions/get-cycle) * [Get document](/reference/integrations/linear/actions/get-document) * [Get issue label](/reference/integrations/linear/actions/get-issue-label) * [Get issue](/reference/integrations/linear/actions/get-issue) * [Get project milestone](/reference/integrations/linear/actions/get-project-milestone) * [Get project update](/reference/integrations/linear/actions/get-project-update) * [Get project](/reference/integrations/linear/actions/get-project) * [Get team](/reference/integrations/linear/actions/get-team) * [Get user](/reference/integrations/linear/actions/get-user) * [Get viewer](/reference/integrations/linear/actions/get-viewer) * [Get workflow state](/reference/integrations/linear/actions/get-workflow-state) * [Get workspace](/reference/integrations/linear/actions/get-workspace) * [List cycles](/reference/integrations/linear/actions/list-cycles) * [List documents](/reference/integrations/linear/actions/list-documents) * [List issue agent sessions](/reference/integrations/linear/actions/list-issue-agent-sessions) * [List issue attachments](/reference/integrations/linear/actions/list-issue-attachments) * [List issue comments](/reference/integrations/linear/actions/list-issue-comments) * [List issue labels](/reference/integrations/linear/actions/list-issue-labels) * [List issue relations](/reference/integrations/linear/actions/list-issue-relations) * [List issues](/reference/integrations/linear/actions/list-issues) * [List project milestones](/reference/integrations/linear/actions/list-project-milestones) * [List project statuses](/reference/integrations/linear/actions/list-project-statuses) * [List project updates](/reference/integrations/linear/actions/list-project-updates) * [List projects](/reference/integrations/linear/actions/list-projects) * [List teams](/reference/integrations/linear/actions/list-teams) * [List users](/reference/integrations/linear/actions/list-users) * [List workflow states](/reference/integrations/linear/actions/list-workflow-states) * [Resolve comment](/reference/integrations/linear/actions/resolve-comment) * [Restore issue label](/reference/integrations/linear/actions/restore-issue-label) * [Retire issue label](/reference/integrations/linear/actions/retire-issue-label) * [Unarchive document](/reference/integrations/linear/actions/unarchive-document) * [Unarchive issue](/reference/integrations/linear/actions/unarchive-issue) * [Unarchive project update](/reference/integrations/linear/actions/unarchive-project-update) * [Unarchive project](/reference/integrations/linear/actions/unarchive-project) * [Reopen comment](/reference/integrations/linear/actions/unresolve-comment) * [Update comment](/reference/integrations/linear/actions/update-comment) * [Update cycle](/reference/integrations/linear/actions/update-cycle) * [Update document](/reference/integrations/linear/actions/update-document) * [Update issue attachment](/reference/integrations/linear/actions/update-issue-attachment) * [Update issue label](/reference/integrations/linear/actions/update-issue-label) * [Update issue](/reference/integrations/linear/actions/update-issue) * [Update project milestone](/reference/integrations/linear/actions/update-project-milestone) * [Update project update](/reference/integrations/linear/actions/update-project-update) * [Update project](/reference/integrations/linear/actions/update-project) # On attachment created Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-attachment-created Run an automation when Linear reports attachment created. `linear.onAttachmentCreated` handles attachment created in the connected Linear workspace. ```ts automations/watch-linear-attachment.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On attachment created", () => { const event = linear.onAttachmentCreated() // Update the file archive from the Linear attachment. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearAttachmentTrigger = LinearAttachment & { event: LinearWebhookEvent } interface LinearAttachment { archivedAt?: string | null createdAt: string creatorId?: string | null groupBySource: boolean id: string issueId: string metadata: Record sourceType?: string | null subtitle?: string | null title: string updatedAt: string url: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "Attachment" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` `issueId` identifies the linked issue. `metadata` contains integration-defined JSON values. Resource objects and the webhook envelope retain extra Linear fields. # On attachment event Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-attachment-event Run an automation when Linear reports attachment changes. `linear.onAttachmentEvent` handles attachment changes in the connected Linear workspace. ```ts automations/watch-linear-attachment.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On attachment event", () => { const event = linear.onAttachmentEvent() // Route the Linear attachment event by action. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearAttachmentTrigger = LinearAttachment & { event: LinearWebhookEvent } interface LinearAttachment { archivedAt?: string | null createdAt: string creatorId?: string | null groupBySource: boolean id: string issueId: string metadata: Record sourceType?: string | null subtitle?: string | null title: string updatedAt: string url: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "Attachment" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` `issueId` identifies the linked issue. `metadata` contains integration-defined JSON values. Resource objects and the webhook envelope retain extra Linear fields. # On attachment removed Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-attachment-removed Run an automation when Linear reports attachment removed. `linear.onAttachmentRemoved` handles attachment removed in the connected Linear workspace. ```ts automations/watch-linear-attachment.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On attachment removed", () => { const event = linear.onAttachmentRemoved() // Update the file archive from the Linear attachment. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearAttachmentTrigger = LinearAttachment & { event: LinearWebhookEvent } interface LinearAttachment { archivedAt?: string | null createdAt: string creatorId?: string | null groupBySource: boolean id: string issueId: string metadata: Record sourceType?: string | null subtitle?: string | null title: string updatedAt: string url: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "Attachment" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` `issueId` identifies the linked issue. `metadata` contains integration-defined JSON values. Resource objects and the webhook envelope retain extra Linear fields. # On attachment updated Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-attachment-updated Run an automation when Linear reports attachment updated. `linear.onAttachmentUpdated` handles attachment updated in the connected Linear workspace. ```ts automations/watch-linear-attachment.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On attachment updated", () => { const event = linear.onAttachmentUpdated() // Update the file archive from the Linear attachment. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearAttachmentTrigger = LinearAttachment & { event: LinearWebhookEvent } interface LinearAttachment { archivedAt?: string | null createdAt: string creatorId?: string | null groupBySource: boolean id: string issueId: string metadata: Record sourceType?: string | null subtitle?: string | null title: string updatedAt: string url: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "Attachment" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` `issueId` identifies the linked issue. `metadata` contains integration-defined JSON values. Resource objects and the webhook envelope retain extra Linear fields. # On comment created Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-comment-created Run an automation when someone creates a Linear comment. `linear.onCommentCreated` handles new issue comments and threaded replies. ```ts automations/watch-new-linear-comments.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Watch new Linear comments", () => { const event = linear.onCommentCreated() // Notify the Linear issue owner about the comment activity. }) ``` Optional static `account` defaults to the project binding. Trigger data includes the comment body, issue and parent references, author, and timestamps. `event` preserves the webhook and narrows `event.action` to `"create"`. ## Trigger data Returns the [Linear comment event fields](/reference/integrations/linear/triggers/on-comment-event#trigger-data) with `event.action: "create"`: ```ts theme={null} type LinearCommentCreatedEvent = LinearComment & { event: LinearWebhookEvent & { action: "create" } } ``` # On Linear comment event Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-comment-event Run an automation when someone creates, updates, or removes a Linear comment. `linear.onCommentEvent` handles comment creation, updates, and removal. ```ts automations/watch-linear-comments.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Watch Linear comments", () => { const event = linear.onCommentEvent() // Notify the Linear issue owner about the comment activity. }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearCommentEvent = LinearComment & { event: LinearWebhookEvent } interface LinearComment { archivedAt?: string | null body: string createdAt: string editedAt?: string | null id: string issue?: LinearIssueReference | null issueId?: string | null parentId?: string | null quotedText?: string | null resolvedAt?: string | null updatedAt: string user?: LinearUser | null userId?: string | null } interface LinearIssueReference { id: string identifier: string team: LinearTeam teamId: string title: string url: string } ``` See the [shared webhook envelope](/reference/integrations/linear/triggers/on-issue-event#trigger-data). Inspect `event.action` for the change or `event.updatedFrom` for previous values. Call `linear.getComment` for the normalized comment after the event. # On comment removed Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-comment-removed Run an automation when someone removes a Linear comment. `linear.onCommentRemoved` handles comment removal. ```ts automations/watch-linear-comment-removals.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Watch removed Linear comments", () => { const event = linear.onCommentRemoved() // Notify the Linear issue owner about the comment activity. }) ``` Optional static `account` defaults to the project binding. Trigger data includes the removed comment's body, relationships, author, and last-known timestamps. `event` preserves the webhook and narrows `event.action` to `"remove"`. The comment may no longer be retrievable. ## Trigger data Returns the [Linear comment event fields](/reference/integrations/linear/triggers/on-comment-event#trigger-data) with `event.action: "remove"`: ```ts theme={null} type LinearCommentRemovedEvent = LinearComment & { event: LinearWebhookEvent & { action: "remove" } } ``` # On comment updated Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-comment-updated Run an automation when someone updates a Linear comment. `linear.onCommentUpdated` handles comment edits. ```ts automations/watch-linear-comment-edits.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Watch Linear comment edits", () => { const event = linear.onCommentUpdated() // Notify the Linear issue owner about the comment activity. }) ``` Optional static `account` defaults to the project binding. Trigger data includes the comment body, issue and parent references, author, and timestamps. `event.action` is `"update"`. `event.updatedFrom` contains previous values supplied by Linear. ## Trigger data Returns the [Linear comment event fields](/reference/integrations/linear/triggers/on-comment-event#trigger-data) with `event.action: "update"`: ```ts theme={null} type LinearCommentUpdatedEvent = LinearComment & { event: LinearWebhookEvent & { action: "update" } } ``` # On customer created Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-customer-created Run an automation when Linear reports customer created. `linear.onCustomerCreated` handles customer created in the connected Linear workspace. ```ts automations/watch-linear-customer.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On customer created", () => { const event = linear.onCustomerCreated() // Sync the Linear customer to the CRM. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearCustomerTrigger = LinearCustomer & { event: LinearWebhookEvent } interface LinearCustomer { approximateNeedCount: number archivedAt?: string | null createdAt: string domains: string[] externalIds: string[] id: string logoUrl?: string | null name: string ownerId?: string | null revenue?: number | null size?: number | null slugId: string statusId?: string | null tierId?: string | null updatedAt: string url: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "Customer" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Customer events include external identifiers and domains. Revenue, size, ownership, status, and tier can be absent. Resource objects and the webhook envelope retain extra Linear fields. # On customer event Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-customer-event Run an automation when Linear reports customer changes. `linear.onCustomerEvent` handles customer changes in the connected Linear workspace. ```ts automations/watch-linear-customer.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On customer event", () => { const event = linear.onCustomerEvent() // Route the Linear customer event by action. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearCustomerTrigger = LinearCustomer & { event: LinearWebhookEvent } interface LinearCustomer { approximateNeedCount: number archivedAt?: string | null createdAt: string domains: string[] externalIds: string[] id: string logoUrl?: string | null name: string ownerId?: string | null revenue?: number | null size?: number | null slugId: string statusId?: string | null tierId?: string | null updatedAt: string url: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "Customer" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Customer events include external identifiers and domains. Revenue, size, ownership, status, and tier can be absent. Resource objects and the webhook envelope retain extra Linear fields. # On customer need created Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-customer-need-created Run an automation when Linear reports customer need created. `linear.onCustomerNeedCreated` handles customer need created in the connected Linear workspace. ```ts automations/watch-linear-customer-need.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On customer need created", () => { const event = linear.onCustomerNeedCreated() // Sync the Linear customer need to the CRM. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearCustomerNeedTrigger = LinearCustomerNeed & { event: LinearWebhookEvent } interface LinearCustomerNeed { archivedAt?: string | null attachmentId?: string | null body?: string | null commentId?: string | null createdAt: string creatorId?: string | null customerId?: string | null id: string issueId?: string | null priority: number projectId?: string | null updatedAt: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "CustomerNeed" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` A customer need can point to an attachment, comment, customer, issue, or project. Each relationship is independently nullable. Resource objects and the webhook envelope retain extra Linear fields. # On customer need event Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-customer-need-event Run an automation when Linear reports customer need changes. `linear.onCustomerNeedEvent` handles customer need changes in the connected Linear workspace. ```ts automations/watch-linear-customer-need.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On customer need event", () => { const event = linear.onCustomerNeedEvent() // Route the Linear customer need event by action. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearCustomerNeedTrigger = LinearCustomerNeed & { event: LinearWebhookEvent } interface LinearCustomerNeed { archivedAt?: string | null attachmentId?: string | null body?: string | null commentId?: string | null createdAt: string creatorId?: string | null customerId?: string | null id: string issueId?: string | null priority: number projectId?: string | null updatedAt: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "CustomerNeed" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` A customer need can point to an attachment, comment, customer, issue, or project. Each relationship is independently nullable. Resource objects and the webhook envelope retain extra Linear fields. # On customer need removed Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-customer-need-removed Run an automation when Linear reports customer need removed. `linear.onCustomerNeedRemoved` handles customer need removed in the connected Linear workspace. ```ts automations/watch-linear-customer-need.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On customer need removed", () => { const event = linear.onCustomerNeedRemoved() // Sync the Linear customer need to the CRM. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearCustomerNeedTrigger = LinearCustomerNeed & { event: LinearWebhookEvent } interface LinearCustomerNeed { archivedAt?: string | null attachmentId?: string | null body?: string | null commentId?: string | null createdAt: string creatorId?: string | null customerId?: string | null id: string issueId?: string | null priority: number projectId?: string | null updatedAt: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "CustomerNeed" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` A customer need can point to an attachment, comment, customer, issue, or project. Each relationship is independently nullable. Resource objects and the webhook envelope retain extra Linear fields. # On customer need updated Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-customer-need-updated Run an automation when Linear reports customer need updated. `linear.onCustomerNeedUpdated` handles customer need updated in the connected Linear workspace. ```ts automations/watch-linear-customer-need.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On customer need updated", () => { const event = linear.onCustomerNeedUpdated() // Sync the Linear customer need to the CRM. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearCustomerNeedTrigger = LinearCustomerNeed & { event: LinearWebhookEvent } interface LinearCustomerNeed { archivedAt?: string | null attachmentId?: string | null body?: string | null commentId?: string | null createdAt: string creatorId?: string | null customerId?: string | null id: string issueId?: string | null priority: number projectId?: string | null updatedAt: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "CustomerNeed" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` A customer need can point to an attachment, comment, customer, issue, or project. Each relationship is independently nullable. Resource objects and the webhook envelope retain extra Linear fields. # On customer removed Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-customer-removed Run an automation when Linear reports customer removed. `linear.onCustomerRemoved` handles customer removed in the connected Linear workspace. ```ts automations/watch-linear-customer.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On customer removed", () => { const event = linear.onCustomerRemoved() // Sync the Linear customer to the CRM. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearCustomerTrigger = LinearCustomer & { event: LinearWebhookEvent } interface LinearCustomer { approximateNeedCount: number archivedAt?: string | null createdAt: string domains: string[] externalIds: string[] id: string logoUrl?: string | null name: string ownerId?: string | null revenue?: number | null size?: number | null slugId: string statusId?: string | null tierId?: string | null updatedAt: string url: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "Customer" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Customer events include external identifiers and domains. Revenue, size, ownership, status, and tier can be absent. Resource objects and the webhook envelope retain extra Linear fields. # On customer updated Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-customer-updated Run an automation when Linear reports customer updated. `linear.onCustomerUpdated` handles customer updated in the connected Linear workspace. ```ts automations/watch-linear-customer.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On customer updated", () => { const event = linear.onCustomerUpdated() // Sync the Linear customer to the CRM. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearCustomerTrigger = LinearCustomer & { event: LinearWebhookEvent } interface LinearCustomer { approximateNeedCount: number archivedAt?: string | null createdAt: string domains: string[] externalIds: string[] id: string logoUrl?: string | null name: string ownerId?: string | null revenue?: number | null size?: number | null slugId: string statusId?: string | null tierId?: string | null updatedAt: string url: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "Customer" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Customer events include external identifiers and domains. Revenue, size, ownership, status, and tier can be absent. Resource objects and the webhook envelope retain extra Linear fields. # On cycle created Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-cycle-created Run an automation when Linear reports cycle created. `linear.onCycleCreated` handles cycle created in the connected Linear workspace. ```ts automations/watch-linear-cycle.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On cycle created", () => { const event = linear.onCycleCreated() // Update the planning calendar from the Linear cycle. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearCycleWebhookDataTrigger = LinearCycleWebhookData & { event: LinearWebhookEvent } interface LinearCycleWebhookData { archivedAt?: string | null completedAt?: string | null createdAt: string description?: string | null endsAt: string id: string name?: string | null number: number startsAt: string teamId: string updatedAt: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "Cycle" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Cycle dates are provider timestamps. `completedAt` is null until the cycle completes. Resource objects and the webhook envelope retain extra Linear fields. # On cycle event Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-cycle-event Run an automation when Linear reports cycle changes. `linear.onCycleEvent` handles cycle changes in the connected Linear workspace. ```ts automations/watch-linear-cycle.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On cycle event", () => { const event = linear.onCycleEvent() // Route the Linear cycle event by action. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearCycleWebhookDataTrigger = LinearCycleWebhookData & { event: LinearWebhookEvent< LinearCycleWebhookData, "create" | "update" | "remove" > } interface LinearCycleWebhookData { archivedAt?: string | null completedAt?: string | null createdAt: string description?: string | null endsAt: string id: string name?: string | null number: number startsAt: string teamId: string updatedAt: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "Cycle" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Cycle dates are provider timestamps. `completedAt` is null until the cycle completes. Resource objects and the webhook envelope retain extra Linear fields. # On cycle removed Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-cycle-removed Run an automation when Linear reports cycle removed. `linear.onCycleRemoved` handles cycle removed in the connected Linear workspace. ```ts automations/watch-linear-cycle.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On cycle removed", () => { const event = linear.onCycleRemoved() // Update the planning calendar from the Linear cycle. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearCycleWebhookDataTrigger = LinearCycleWebhookData & { event: LinearWebhookEvent } interface LinearCycleWebhookData { archivedAt?: string | null completedAt?: string | null createdAt: string description?: string | null endsAt: string id: string name?: string | null number: number startsAt: string teamId: string updatedAt: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "Cycle" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Cycle dates are provider timestamps. `completedAt` is null until the cycle completes. Resource objects and the webhook envelope retain extra Linear fields. # On cycle updated Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-cycle-updated Run an automation when Linear reports cycle updated. `linear.onCycleUpdated` handles cycle updated in the connected Linear workspace. ```ts automations/watch-linear-cycle.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On cycle updated", () => { const event = linear.onCycleUpdated() // Update the planning calendar from the Linear cycle. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearCycleWebhookDataTrigger = LinearCycleWebhookData & { event: LinearWebhookEvent } interface LinearCycleWebhookData { archivedAt?: string | null completedAt?: string | null createdAt: string description?: string | null endsAt: string id: string name?: string | null number: number startsAt: string teamId: string updatedAt: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "Cycle" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Cycle dates are provider timestamps. `completedAt` is null until the cycle completes. Resource objects and the webhook envelope retain extra Linear fields. # On document created Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-document-created Run an automation when Linear reports document created. `linear.onDocumentCreated` handles document created in the connected Linear workspace. ```ts automations/watch-linear-document.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On document created", () => { const event = linear.onDocumentCreated() // Sync the Linear document to the knowledge base. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearDocumentWebhookDataTrigger = LinearDocumentWebhookData & { event: LinearWebhookEvent } interface LinearDocumentWebhookData { archivedAt?: string | null color?: string | null content?: string | null createdAt: string creatorId?: string | null hiddenAt?: string | null icon?: string | null id: string initiativeId?: string | null projectId?: string | null slugId: string sortOrder: number title: string trashed?: boolean | null updatedAt: string updatedById?: string | null } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "Document" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Documents can belong to a project or initiative. Archived, hidden, and trashed state remain separate provider fields. Resource objects and the webhook envelope retain extra Linear fields. # On document event Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-document-event Run an automation when Linear reports document changes. `linear.onDocumentEvent` handles document changes in the connected Linear workspace. ```ts automations/watch-linear-document.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On document event", () => { const event = linear.onDocumentEvent() // Route the Linear document event by action. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearDocumentWebhookDataTrigger = LinearDocumentWebhookData & { event: LinearWebhookEvent< LinearDocumentWebhookData, "create" | "update" | "remove" > } interface LinearDocumentWebhookData { archivedAt?: string | null color?: string | null content?: string | null createdAt: string creatorId?: string | null hiddenAt?: string | null icon?: string | null id: string initiativeId?: string | null projectId?: string | null slugId: string sortOrder: number title: string trashed?: boolean | null updatedAt: string updatedById?: string | null } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "Document" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Documents can belong to a project or initiative. Archived, hidden, and trashed state remain separate provider fields. Resource objects and the webhook envelope retain extra Linear fields. # On document removed Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-document-removed Run an automation when Linear reports document removed. `linear.onDocumentRemoved` handles document removed in the connected Linear workspace. ```ts automations/watch-linear-document.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On document removed", () => { const event = linear.onDocumentRemoved() // Sync the Linear document to the knowledge base. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearDocumentWebhookDataTrigger = LinearDocumentWebhookData & { event: LinearWebhookEvent } interface LinearDocumentWebhookData { archivedAt?: string | null color?: string | null content?: string | null createdAt: string creatorId?: string | null hiddenAt?: string | null icon?: string | null id: string initiativeId?: string | null projectId?: string | null slugId: string sortOrder: number title: string trashed?: boolean | null updatedAt: string updatedById?: string | null } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "Document" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Documents can belong to a project or initiative. Archived, hidden, and trashed state remain separate provider fields. Resource objects and the webhook envelope retain extra Linear fields. # On document updated Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-document-updated Run an automation when Linear reports document updated. `linear.onDocumentUpdated` handles document updated in the connected Linear workspace. ```ts automations/watch-linear-document.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On document updated", () => { const event = linear.onDocumentUpdated() // Sync the Linear document to the knowledge base. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearDocumentWebhookDataTrigger = LinearDocumentWebhookData & { event: LinearWebhookEvent } interface LinearDocumentWebhookData { archivedAt?: string | null color?: string | null content?: string | null createdAt: string creatorId?: string | null hiddenAt?: string | null icon?: string | null id: string initiativeId?: string | null projectId?: string | null slugId: string sortOrder: number title: string trashed?: boolean | null updatedAt: string updatedById?: string | null } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "Document" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Documents can belong to a project or initiative. Archived, hidden, and trashed state remain separate provider fields. Resource objects and the webhook envelope retain extra Linear fields. # On initiative created Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-initiative-created Run an automation when Linear reports initiative created. `linear.onInitiativeCreated` handles initiative created in the connected Linear workspace. ```ts automations/watch-linear-initiative.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On initiative created", () => { const event = linear.onInitiativeCreated() // Sync the Linear initiative to the portfolio roadmap. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearInitiativeTrigger = LinearInitiative & { event: LinearWebhookEvent } interface LinearInitiative { archivedAt?: string | null canceledAt?: string | null completedAt?: string | null createdAt: string description: string health?: string | null id: string identifier?: string | null labelIds: string[] name: string organizationId: string ownerId?: string | null targetDate?: string | null updatedAt: string url: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "Initiative" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Initiative events expose workspace ownership, labels, health, and target-date state directly from Linear. Resource objects and the webhook envelope retain extra Linear fields. # On initiative event Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-initiative-event Run an automation when Linear reports initiative changes. `linear.onInitiativeEvent` handles initiative changes in the connected Linear workspace. ```ts automations/watch-linear-initiative.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On initiative event", () => { const event = linear.onInitiativeEvent() // Route the Linear initiative event by action. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearInitiativeTrigger = LinearInitiative & { event: LinearWebhookEvent } interface LinearInitiative { archivedAt?: string | null canceledAt?: string | null completedAt?: string | null createdAt: string description: string health?: string | null id: string identifier?: string | null labelIds: string[] name: string organizationId: string ownerId?: string | null targetDate?: string | null updatedAt: string url: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "Initiative" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Initiative events expose workspace ownership, labels, health, and target-date state directly from Linear. Resource objects and the webhook envelope retain extra Linear fields. # On initiative removed Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-initiative-removed Run an automation when Linear reports initiative removed. `linear.onInitiativeRemoved` handles initiative removed in the connected Linear workspace. ```ts automations/watch-linear-initiative.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On initiative removed", () => { const event = linear.onInitiativeRemoved() // Sync the Linear initiative to the portfolio roadmap. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearInitiativeTrigger = LinearInitiative & { event: LinearWebhookEvent } interface LinearInitiative { archivedAt?: string | null canceledAt?: string | null completedAt?: string | null createdAt: string description: string health?: string | null id: string identifier?: string | null labelIds: string[] name: string organizationId: string ownerId?: string | null targetDate?: string | null updatedAt: string url: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "Initiative" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Initiative events expose workspace ownership, labels, health, and target-date state directly from Linear. Resource objects and the webhook envelope retain extra Linear fields. # On initiative update created Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-initiative-update-created Run an automation when Linear reports initiative update created. `linear.onInitiativeUpdateCreated` handles initiative update created in the connected Linear workspace. ```ts automations/watch-linear-initiative-update.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On initiative update created", () => { const event = linear.onInitiativeUpdateCreated() // Publish the Linear initiative status digest. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearInitiativeUpdateTrigger = LinearInitiativeUpdate & { event: LinearWebhookEvent } interface LinearInitiativeUpdate { archivedAt?: string | null body: string createdAt: string diffMarkdown?: string | null editedAt: string health: string id: string initiativeId: string slugId: string updatedAt: string url?: string | null userId: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "InitiativeUpdate" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Initiative updates carry the Markdown body, health snapshot, computed diff, author, and parent initiative IDs. Resource objects and the webhook envelope retain extra Linear fields. # On initiative update event Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-initiative-update-event Run an automation when Linear reports initiative update changes. `linear.onInitiativeUpdateEvent` handles initiative update changes in the connected Linear workspace. ```ts automations/watch-linear-initiative-update.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On initiative update event", () => { const event = linear.onInitiativeUpdateEvent() // Route the Linear initiative update by action. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearInitiativeUpdateTrigger = LinearInitiativeUpdate & { event: LinearWebhookEvent< LinearInitiativeUpdate, "create" | "update" | "remove" > } interface LinearInitiativeUpdate { archivedAt?: string | null body: string createdAt: string diffMarkdown?: string | null editedAt: string health: string id: string initiativeId: string slugId: string updatedAt: string url?: string | null userId: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "InitiativeUpdate" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Initiative updates carry the Markdown body, health snapshot, computed diff, author, and parent initiative IDs. Resource objects and the webhook envelope retain extra Linear fields. # On initiative update removed Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-initiative-update-removed Run an automation when Linear reports initiative update removed. `linear.onInitiativeUpdateRemoved` handles initiative update removed in the connected Linear workspace. ```ts automations/watch-linear-initiative-update.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On initiative update removed", () => { const event = linear.onInitiativeUpdateRemoved() // Publish the Linear initiative status digest. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearInitiativeUpdateTrigger = LinearInitiativeUpdate & { event: LinearWebhookEvent } interface LinearInitiativeUpdate { archivedAt?: string | null body: string createdAt: string diffMarkdown?: string | null editedAt: string health: string id: string initiativeId: string slugId: string updatedAt: string url?: string | null userId: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "InitiativeUpdate" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Initiative updates carry the Markdown body, health snapshot, computed diff, author, and parent initiative IDs. Resource objects and the webhook envelope retain extra Linear fields. # On initiative update updated Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-initiative-update-updated Run an automation when Linear reports initiative update updated. `linear.onInitiativeUpdateUpdated` handles initiative update updated in the connected Linear workspace. ```ts automations/watch-linear-initiative-update.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On initiative update updated", () => { const event = linear.onInitiativeUpdateUpdated() // Publish the Linear initiative status digest. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearInitiativeUpdateTrigger = LinearInitiativeUpdate & { event: LinearWebhookEvent } interface LinearInitiativeUpdate { archivedAt?: string | null body: string createdAt: string diffMarkdown?: string | null editedAt: string health: string id: string initiativeId: string slugId: string updatedAt: string url?: string | null userId: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "InitiativeUpdate" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Initiative updates carry the Markdown body, health snapshot, computed diff, author, and parent initiative IDs. Resource objects and the webhook envelope retain extra Linear fields. # On initiative updated Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-initiative-updated Run an automation when Linear reports initiative updated. `linear.onInitiativeUpdated` handles initiative updated in the connected Linear workspace. ```ts automations/watch-linear-initiative.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On initiative updated", () => { const event = linear.onInitiativeUpdated() // Sync the Linear initiative to the portfolio roadmap. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearInitiativeTrigger = LinearInitiative & { event: LinearWebhookEvent } interface LinearInitiative { archivedAt?: string | null canceledAt?: string | null completedAt?: string | null createdAt: string description: string health?: string | null id: string identifier?: string | null labelIds: string[] name: string organizationId: string ownerId?: string | null targetDate?: string | null updatedAt: string url: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "Initiative" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Initiative events expose workspace ownership, labels, health, and target-date state directly from Linear. Resource objects and the webhook envelope retain extra Linear fields. # On issue created Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-issue-created Run an automation when someone creates a Linear issue. `linear.onIssueCreated` handles issue creation. ```ts automations/welcome-linear-issues.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Watch new Linear issues", () => { const event = linear.onIssueCreated() // Sync the Linear issue to the external tracker. }) ``` Optional static `account` defaults to the project binding. Trigger data includes the issue's identity, title, description, priority, workflow state, team, project, assignee, labels, and timestamps. `event` preserves the webhook and narrows `event.action` to `"create"`. ## Trigger data Returns the [Linear issue event fields](/reference/integrations/linear/triggers/on-issue-event#trigger-data) with `event.action: "create"`: ```ts theme={null} type LinearIssueCreatedEvent = LinearIssue & { event: LinearWebhookEvent & { action: "create" } } ``` # On Linear issue event Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-issue-event Run an automation when someone creates, updates, or removes a Linear issue. `linear.onIssueEvent` handles issue creation, updates, and removal. ```ts automations/watch-linear-issues.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Watch Linear issues", () => { const event = linear.onIssueEvent() // Route the Linear issue event by action. }) ``` Optional static `account` defaults to the project binding. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearIssueEvent = LinearIssue & { event: LinearWebhookEvent } interface LinearIssue { archivedAt?: string | null assignee?: LinearUser | null assigneeId?: string | null canceledAt?: string | null completedAt?: string | null createdAt: string creator?: LinearUser | null creatorId?: string | null description?: string | null dueDate?: string | null estimate?: number | null id: string identifier: string labelIds: string[] labels: LinearLabel[] number: number parentId?: string | null priority: number priorityLabel: string project?: LinearProjectReference | null projectId?: string | null startedAt?: string | null state: LinearWorkflowState stateId: string subscriberIds: string[] team?: LinearTeam | null teamId: string title: string trashed?: boolean | null updatedAt: string url: string } interface LinearWebhookEvent { action: "create" | "update" | "remove" actor?: LinearActor | null createdAt: string data: TData organizationId: string type: TType updatedFrom?: Record url?: string webhookId: string webhookTimestamp: number } interface LinearUser { avatarUrl?: string | null email: string id: string name: string url: string } interface LinearLabel { color: string id: string name: string parentId?: string | null } interface LinearProjectReference { id: string name: string url: string } interface LinearWorkflowState { color: string id: string name: string type: string } interface LinearTeam { id: string key: string name: string } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Resource objects and the webhook envelope retain extra Linear fields. Includes the changed issue's `id`, `identifier`, `title`, timestamps, priority, workflow state, team, project, assignee, and labels. `event` contains the provider payload. Inspect `event.action` for the change or `event.updatedFrom` for previous values. Call `linear.getIssue` for the normalized issue after the event. # On issue label created Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-issue-label-created Run an automation when Linear reports issue label created. `linear.onIssueLabelCreated` handles issue label created in the connected Linear workspace. ```ts automations/watch-linear-issue-label.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On issue label created", () => { const event = linear.onIssueLabelCreated() // Recalculate routing for the Linear issue. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearIssueLabelWebhookDataTrigger = LinearIssueLabelWebhookData & { event: LinearWebhookEvent } interface LinearIssueLabelWebhookData { archivedAt?: string | null color: string createdAt: string creatorId?: string | null description?: string | null id: string isGroup: boolean name: string parentId?: string | null teamId?: string | null updatedAt: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "IssueLabel" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Issue labels can be workspace-wide or team-specific. `parentId` identifies grouped label hierarchies. Resource objects and the webhook envelope retain extra Linear fields. # On issue label event Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-issue-label-event Run an automation when Linear reports issue label changes. `linear.onIssueLabelEvent` handles issue label changes in the connected Linear workspace. ```ts automations/watch-linear-issue-label.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On issue label event", () => { const event = linear.onIssueLabelEvent() // Recalculate routing for the Linear issue. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearIssueLabelWebhookDataTrigger = LinearIssueLabelWebhookData & { event: LinearWebhookEvent< LinearIssueLabelWebhookData, "create" | "update" | "remove" > } interface LinearIssueLabelWebhookData { archivedAt?: string | null color: string createdAt: string creatorId?: string | null description?: string | null id: string isGroup: boolean name: string parentId?: string | null teamId?: string | null updatedAt: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "IssueLabel" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Issue labels can be workspace-wide or team-specific. `parentId` identifies grouped label hierarchies. Resource objects and the webhook envelope retain extra Linear fields. # On issue label removed Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-issue-label-removed Run an automation when Linear reports issue label removed. `linear.onIssueLabelRemoved` handles issue label removed in the connected Linear workspace. ```ts automations/watch-linear-issue-label.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On issue label removed", () => { const event = linear.onIssueLabelRemoved() // Recalculate routing for the Linear issue. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearIssueLabelWebhookDataTrigger = LinearIssueLabelWebhookData & { event: LinearWebhookEvent } interface LinearIssueLabelWebhookData { archivedAt?: string | null color: string createdAt: string creatorId?: string | null description?: string | null id: string isGroup: boolean name: string parentId?: string | null teamId?: string | null updatedAt: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "IssueLabel" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Issue labels can be workspace-wide or team-specific. `parentId` identifies grouped label hierarchies. Resource objects and the webhook envelope retain extra Linear fields. # On issue label updated Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-issue-label-updated Run an automation when Linear reports issue label updated. `linear.onIssueLabelUpdated` handles issue label updated in the connected Linear workspace. ```ts automations/watch-linear-issue-label.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On issue label updated", () => { const event = linear.onIssueLabelUpdated() // Recalculate routing for the Linear issue. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearIssueLabelWebhookDataTrigger = LinearIssueLabelWebhookData & { event: LinearWebhookEvent } interface LinearIssueLabelWebhookData { archivedAt?: string | null color: string createdAt: string creatorId?: string | null description?: string | null id: string isGroup: boolean name: string parentId?: string | null teamId?: string | null updatedAt: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "IssueLabel" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Issue labels can be workspace-wide or team-specific. `parentId` identifies grouped label hierarchies. Resource objects and the webhook envelope retain extra Linear fields. # On issue removed Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-issue-removed Run an automation when someone removes a Linear issue. `linear.onIssueRemoved` handles issue removal. ```ts automations/watch-linear-issue-removals.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Watch removed Linear issues", () => { const event = linear.onIssueRemoved() // Sync the Linear issue to the external tracker. }) ``` Optional static `account` defaults to the project binding. Trigger data includes the issue's identity, title, workflow, ownership, and other last-known fields. `event` preserves the webhook and narrows `event.action` to `"remove"`. `linear.getIssue` may no longer find it. ## Trigger data Returns the [Linear issue event fields](/reference/integrations/linear/triggers/on-issue-event#trigger-data) with `event.action: "remove"`: ```ts theme={null} type LinearIssueRemovedEvent = LinearIssue & { event: LinearWebhookEvent & { action: "remove" } } ``` # On issue SLA breached Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-issue-sla-breached Run an automation when Linear reports issue SLA breached. `linear.onIssueSlaBreached` handles issue SLA breached in the connected Linear workspace. ```ts automations/watch-linear-issue-sla.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On issue SLA breached", () => { const event = linear.onIssueSlaBreached() // Update the Linear issue in the on-call queue. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearIssueSlaTrigger = LinearIssue & { event: { action: "breached" createdAt: string issueData: LinearIssue organizationId: string type: "IssueSLA" url?: string | null webhookId: string webhookTimestamp: number } } interface LinearIssue { archivedAt?: string | null assignee?: LinearUser | null assigneeId?: string | null canceledAt?: string | null completedAt?: string | null createdAt: string creator?: LinearUser | null creatorId?: string | null description?: string | null dueDate?: string | null estimate?: number | null id: string identifier: string labelIds: string[] labels: LinearLabel[] number: number parentId?: string | null priority: number priorityLabel: string project?: LinearProjectReference | null projectId?: string | null startedAt?: string | null state: LinearWorkflowState stateId: string subscriberIds: string[] team?: LinearTeam | null teamId: string title: string trashed?: boolean | null updatedAt: string url: string } interface LinearUser { avatarUrl?: string | null email: string id: string name: string url: string } interface LinearLabel { color: string id: string name: string parentId?: string | null } interface LinearProjectReference { id: string name: string url: string } interface LinearWorkflowState { color: string id: string name: string type: string } interface LinearTeam { id: string key: string name: string } ``` `set` means Linear assigned an SLA, `highRisk` means the issue entered the at-risk window, and `breached` means the SLA deadline passed. The output promotes `issueData` fields and preserves the original provider envelope under `event`. Both objects retain extra Linear fields. # On issue SLA event Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-issue-sla-event Run an automation when Linear reports issue SLA changes. `linear.onIssueSlaEvent` handles issue SLA changes in the connected Linear workspace. ```ts automations/watch-linear-issue-sla.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On issue SLA event", () => { const event = linear.onIssueSlaEvent() // Update the Linear issue in the on-call queue. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearIssueSlaTrigger = LinearIssue & { event: { action: "set" | "highRisk" | "breached" createdAt: string issueData: LinearIssue organizationId: string type: "IssueSLA" url?: string | null webhookId: string webhookTimestamp: number } } interface LinearIssue { archivedAt?: string | null assignee?: LinearUser | null assigneeId?: string | null canceledAt?: string | null completedAt?: string | null createdAt: string creator?: LinearUser | null creatorId?: string | null description?: string | null dueDate?: string | null estimate?: number | null id: string identifier: string labelIds: string[] labels: LinearLabel[] number: number parentId?: string | null priority: number priorityLabel: string project?: LinearProjectReference | null projectId?: string | null startedAt?: string | null state: LinearWorkflowState stateId: string subscriberIds: string[] team?: LinearTeam | null teamId: string title: string trashed?: boolean | null updatedAt: string url: string } interface LinearUser { avatarUrl?: string | null email: string id: string name: string url: string } interface LinearLabel { color: string id: string name: string parentId?: string | null } interface LinearProjectReference { id: string name: string url: string } interface LinearWorkflowState { color: string id: string name: string type: string } interface LinearTeam { id: string key: string name: string } ``` `set` means Linear assigned an SLA, `highRisk` means the issue entered the at-risk window, and `breached` means the SLA deadline passed. The output promotes `issueData` fields and preserves the original provider envelope under `event`. Both objects retain extra Linear fields. # On issue SLA high risk Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-issue-sla-high-risk Run an automation when Linear reports issue SLA high risk. `linear.onIssueSlaHighRisk` handles issue SLA high risk in the connected Linear workspace. ```ts automations/watch-linear-issue-sla.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On issue SLA high risk", () => { const event = linear.onIssueSlaHighRisk() // Update the Linear issue in the on-call queue. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearIssueSlaTrigger = LinearIssue & { event: { action: "highRisk" createdAt: string issueData: LinearIssue organizationId: string type: "IssueSLA" url?: string | null webhookId: string webhookTimestamp: number } } interface LinearIssue { archivedAt?: string | null assignee?: LinearUser | null assigneeId?: string | null canceledAt?: string | null completedAt?: string | null createdAt: string creator?: LinearUser | null creatorId?: string | null description?: string | null dueDate?: string | null estimate?: number | null id: string identifier: string labelIds: string[] labels: LinearLabel[] number: number parentId?: string | null priority: number priorityLabel: string project?: LinearProjectReference | null projectId?: string | null startedAt?: string | null state: LinearWorkflowState stateId: string subscriberIds: string[] team?: LinearTeam | null teamId: string title: string trashed?: boolean | null updatedAt: string url: string } interface LinearUser { avatarUrl?: string | null email: string id: string name: string url: string } interface LinearLabel { color: string id: string name: string parentId?: string | null } interface LinearProjectReference { id: string name: string url: string } interface LinearWorkflowState { color: string id: string name: string type: string } interface LinearTeam { id: string key: string name: string } ``` `set` means Linear assigned an SLA, `highRisk` means the issue entered the at-risk window, and `breached` means the SLA deadline passed. The output promotes `issueData` fields and preserves the original provider envelope under `event`. Both objects retain extra Linear fields. # On issue SLA set Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-issue-sla-set Run an automation when Linear reports issue SLA set. `linear.onIssueSlaSet` handles issue SLA set in the connected Linear workspace. ```ts automations/watch-linear-issue-sla.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On issue SLA set", () => { const event = linear.onIssueSlaSet() // Update the Linear issue in the on-call queue. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearIssueSlaTrigger = LinearIssue & { event: { action: "set" createdAt: string issueData: LinearIssue organizationId: string type: "IssueSLA" url?: string | null webhookId: string webhookTimestamp: number } } interface LinearIssue { archivedAt?: string | null assignee?: LinearUser | null assigneeId?: string | null canceledAt?: string | null completedAt?: string | null createdAt: string creator?: LinearUser | null creatorId?: string | null description?: string | null dueDate?: string | null estimate?: number | null id: string identifier: string labelIds: string[] labels: LinearLabel[] number: number parentId?: string | null priority: number priorityLabel: string project?: LinearProjectReference | null projectId?: string | null startedAt?: string | null state: LinearWorkflowState stateId: string subscriberIds: string[] team?: LinearTeam | null teamId: string title: string trashed?: boolean | null updatedAt: string url: string } interface LinearUser { avatarUrl?: string | null email: string id: string name: string url: string } interface LinearLabel { color: string id: string name: string parentId?: string | null } interface LinearProjectReference { id: string name: string url: string } interface LinearWorkflowState { color: string id: string name: string type: string } interface LinearTeam { id: string key: string name: string } ``` `set` means Linear assigned an SLA, `highRisk` means the issue entered the at-risk window, and `breached` means the SLA deadline passed. The output promotes `issueData` fields and preserves the original provider envelope under `event`. Both objects retain extra Linear fields. # On issue updated Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-issue-updated Run an automation when someone updates a Linear issue. `linear.onIssueUpdated` handles issue updates. ```ts automations/watch-linear-issue-updates.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Watch Linear issue updates", () => { const event = linear.onIssueUpdated() // Sync the Linear issue to the external tracker. }) ``` Optional static `account` defaults to the project binding. Trigger data includes the issue's identity, title, description, priority, workflow state, team, project, assignee, labels, and timestamps. `event.action` is `"update"`. `event.updatedFrom` contains previous values from Linear. Call `linear.getIssue` for the normalized issue after the event. ## Trigger data Returns the [Linear issue event fields](/reference/integrations/linear/triggers/on-issue-event#trigger-data) with `event.action: "update"`: ```ts theme={null} type LinearIssueUpdatedEvent = LinearIssue & { event: LinearWebhookEvent & { action: "update" } } ``` # On project created Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-project-created Run an automation when someone creates a Linear project. `linear.onProjectCreated` handles project creation. ```ts automations/watch-new-linear-projects.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Watch new Linear projects", () => { const event = linear.onProjectCreated() // Sync the Linear project to the portfolio dashboard. }) ``` Optional static `account` defaults to the project binding. Trigger data includes the project's name, description, dates, priority, status, lead, teams, and URL. `event` preserves the webhook and narrows `event.action` to `"create"`. ## Trigger data Returns the [Linear project event fields](/reference/integrations/linear/triggers/on-project-event#trigger-data) with `event.action: "create"`: ```ts theme={null} type LinearProjectCreatedEvent = LinearProject & { event: LinearWebhookEvent & { action: "create" } } ``` # On Linear project event Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-project-event Run an automation when someone creates, updates, or removes a Linear project. `linear.onProjectEvent` handles project creation, updates, and removal. ```ts automations/watch-linear-projects.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Watch Linear projects", () => { const event = linear.onProjectEvent() // Route the Linear project event by action. }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearProjectEvent = LinearProject & { event: LinearWebhookEvent } interface LinearProject { archivedAt?: string | null canceledAt?: string | null color: string completedAt?: string | null content?: string | null createdAt: string creatorId?: string | null description: string health?: string | null icon?: string | null id: string identifier?: string | null lead?: LinearUser | null leadId?: string | null memberIds: string[] name: string priority: number slugId: string startDate?: string | null startedAt?: string | null status?: LinearProjectStatus | null statusId: string targetDate?: string | null teamIds: string[] trashed?: boolean | null updatedAt: string url: string } interface LinearProjectStatus { color: string id: string name: string type: string } ``` See the [shared webhook envelope](/reference/integrations/linear/triggers/on-issue-event#trigger-data). Inspect `event.action` for the change or `event.updatedFrom` for previous values. Call `linear.getProject` for the normalized project after the event. # On project label created Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-project-label-created Run an automation when Linear reports project label created. `linear.onProjectLabelCreated` handles project label created in the connected Linear workspace. ```ts automations/watch-linear-project-label.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On project label created", () => { const event = linear.onProjectLabelCreated() // Update the Linear portfolio grouping. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearProjectLabelWebhookDataTrigger = LinearProjectLabelWebhookData & { event: LinearWebhookEvent } interface LinearProjectLabelWebhookData { archivedAt?: string | null color: string createdAt: string creatorId?: string | null description?: string | null id: string isGroup: boolean name: string parentId?: string | null updatedAt: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "ProjectLabel" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Project labels are workspace resources. `parentId` identifies grouped label hierarchies. Resource objects and the webhook envelope retain extra Linear fields. # On project label event Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-project-label-event Run an automation when Linear reports project label changes. `linear.onProjectLabelEvent` handles project label changes in the connected Linear workspace. ```ts automations/watch-linear-project-label.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On project label event", () => { const event = linear.onProjectLabelEvent() // Update the Linear portfolio grouping. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearProjectLabelWebhookDataTrigger = LinearProjectLabelWebhookData & { event: LinearWebhookEvent< LinearProjectLabelWebhookData, "create" | "update" | "remove" > } interface LinearProjectLabelWebhookData { archivedAt?: string | null color: string createdAt: string creatorId?: string | null description?: string | null id: string isGroup: boolean name: string parentId?: string | null updatedAt: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "ProjectLabel" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Project labels are workspace resources. `parentId` identifies grouped label hierarchies. Resource objects and the webhook envelope retain extra Linear fields. # On project label removed Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-project-label-removed Run an automation when Linear reports project label removed. `linear.onProjectLabelRemoved` handles project label removed in the connected Linear workspace. ```ts automations/watch-linear-project-label.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On project label removed", () => { const event = linear.onProjectLabelRemoved() // Update the Linear portfolio grouping. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearProjectLabelWebhookDataTrigger = LinearProjectLabelWebhookData & { event: LinearWebhookEvent } interface LinearProjectLabelWebhookData { archivedAt?: string | null color: string createdAt: string creatorId?: string | null description?: string | null id: string isGroup: boolean name: string parentId?: string | null updatedAt: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "ProjectLabel" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Project labels are workspace resources. `parentId` identifies grouped label hierarchies. Resource objects and the webhook envelope retain extra Linear fields. # On project label updated Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-project-label-updated Run an automation when Linear reports project label updated. `linear.onProjectLabelUpdated` handles project label updated in the connected Linear workspace. ```ts automations/watch-linear-project-label.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On project label updated", () => { const event = linear.onProjectLabelUpdated() // Update the Linear portfolio grouping. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearProjectLabelWebhookDataTrigger = LinearProjectLabelWebhookData & { event: LinearWebhookEvent } interface LinearProjectLabelWebhookData { archivedAt?: string | null color: string createdAt: string creatorId?: string | null description?: string | null id: string isGroup: boolean name: string parentId?: string | null updatedAt: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "ProjectLabel" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Project labels are workspace resources. `parentId` identifies grouped label hierarchies. Resource objects and the webhook envelope retain extra Linear fields. # On project removed Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-project-removed Run an automation when someone removes a Linear project. `linear.onProjectRemoved` handles project removal. ```ts automations/watch-linear-project-removals.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Watch removed Linear projects", () => { const event = linear.onProjectRemoved() // Sync the Linear project to the portfolio dashboard. }) ``` Optional static `account` defaults to the project binding. Trigger data includes the project's name, description, status, ownership, and other last-known fields. `event` preserves the webhook and narrows `event.action` to `"remove"`. The project may no longer be retrievable. ## Trigger data Returns the [Linear project event fields](/reference/integrations/linear/triggers/on-project-event#trigger-data) with `event.action: "remove"`: ```ts theme={null} type LinearProjectRemovedEvent = LinearProject & { event: LinearWebhookEvent & { action: "remove" } } ``` # On project update created Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-project-update-created Run an automation when Linear reports project update created. `linear.onProjectUpdateCreated` handles project update created in the connected Linear workspace. ```ts automations/watch-linear-project-update.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On project update created", () => { const event = linear.onProjectUpdateCreated() // Publish the Linear project status digest. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearProjectUpdateWebhookDataTrigger = LinearProjectUpdateWebhookData & { event: LinearWebhookEvent } interface LinearProjectUpdateWebhookData { archivedAt?: string | null body: string createdAt: string diffMarkdown?: string | null editedAt: string health: string id: string projectId: string slugId: string updatedAt: string url?: string | null userId: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "ProjectUpdate" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Project updates carry the Markdown body, health snapshot, computed diff, author, and parent project IDs. Resource objects and the webhook envelope retain extra Linear fields. # On project update event Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-project-update-event Run an automation when Linear reports project update changes. `linear.onProjectUpdateEvent` handles project update changes in the connected Linear workspace. ```ts automations/watch-linear-project-update.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On project update event", () => { const event = linear.onProjectUpdateEvent() // Route the Linear project update by action. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearProjectUpdateWebhookDataTrigger = LinearProjectUpdateWebhookData & { event: LinearWebhookEvent< LinearProjectUpdateWebhookData, "create" | "update" | "remove" > } interface LinearProjectUpdateWebhookData { archivedAt?: string | null body: string createdAt: string diffMarkdown?: string | null editedAt: string health: string id: string projectId: string slugId: string updatedAt: string url?: string | null userId: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "ProjectUpdate" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Project updates carry the Markdown body, health snapshot, computed diff, author, and parent project IDs. Resource objects and the webhook envelope retain extra Linear fields. # On project update removed Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-project-update-removed Run an automation when Linear reports project update removed. `linear.onProjectUpdateRemoved` handles project update removed in the connected Linear workspace. ```ts automations/watch-linear-project-update.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On project update removed", () => { const event = linear.onProjectUpdateRemoved() // Publish the Linear project status digest. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearProjectUpdateWebhookDataTrigger = LinearProjectUpdateWebhookData & { event: LinearWebhookEvent } interface LinearProjectUpdateWebhookData { archivedAt?: string | null body: string createdAt: string diffMarkdown?: string | null editedAt: string health: string id: string projectId: string slugId: string updatedAt: string url?: string | null userId: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "ProjectUpdate" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Project updates carry the Markdown body, health snapshot, computed diff, author, and parent project IDs. Resource objects and the webhook envelope retain extra Linear fields. # On project update updated Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-project-update-updated Run an automation when Linear reports project update updated. `linear.onProjectUpdateUpdated` handles project update updated in the connected Linear workspace. ```ts automations/watch-linear-project-update.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On project update updated", () => { const event = linear.onProjectUpdateUpdated() // Publish the Linear project status digest. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearProjectUpdateWebhookDataTrigger = LinearProjectUpdateWebhookData & { event: LinearWebhookEvent } interface LinearProjectUpdateWebhookData { archivedAt?: string | null body: string createdAt: string diffMarkdown?: string | null editedAt: string health: string id: string projectId: string slugId: string updatedAt: string url?: string | null userId: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "ProjectUpdate" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Project updates carry the Markdown body, health snapshot, computed diff, author, and parent project IDs. Resource objects and the webhook envelope retain extra Linear fields. # On project updated Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-project-updated Run an automation when someone updates a Linear project. `linear.onProjectUpdated` handles project updates. ```ts automations/watch-linear-project-updates.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("Watch Linear project updates", () => { const event = linear.onProjectUpdated() // Sync the Linear project to the portfolio dashboard. }) ``` Optional static `account` defaults to the project binding. Trigger data includes the project's name, description, dates, priority, status, lead, teams, and URL. `event.action` is `"update"`. `event.updatedFrom` contains previous values from Linear. ## Trigger data Returns the [Linear project event fields](/reference/integrations/linear/triggers/on-project-event#trigger-data) with `event.action: "update"`: ```ts theme={null} type LinearProjectUpdatedEvent = LinearProject & { event: LinearWebhookEvent & { action: "update" } } ``` # On reaction created Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-reaction-created Run an automation when Linear reports reaction created. `linear.onReactionCreated` handles reaction created in the connected Linear workspace. ```ts automations/watch-linear-reaction.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On reaction created", () => { const event = linear.onReactionCreated() // Notify the Linear issue owner about the comment activity. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearReactionWebhookDataTrigger = LinearReactionWebhookData & { event: LinearWebhookEvent } interface LinearReactionWebhookData { archivedAt?: string | null commentId?: string | null createdAt: string emoji: string id: string initiativeUpdateId?: string | null issueId?: string | null projectUpdateId?: string | null updatedAt: string userId?: string | null } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "Reaction" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Exactly one target relationship normally identifies the reacted-to issue, comment, initiative update, or project update. Linear can also send update actions to the broad event trigger. Resource objects and the webhook envelope retain extra Linear fields. # On reaction event Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-reaction-event Run an automation when Linear reports reaction changes. `linear.onReactionEvent` handles reaction changes in the connected Linear workspace. ```ts automations/watch-linear-reaction.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On reaction event", () => { const event = linear.onReactionEvent() // Notify the Linear issue owner about the comment activity. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearReactionWebhookDataTrigger = LinearReactionWebhookData & { event: LinearWebhookEvent< LinearReactionWebhookData, "create" | "update" | "remove" > } interface LinearReactionWebhookData { archivedAt?: string | null commentId?: string | null createdAt: string emoji: string id: string initiativeUpdateId?: string | null issueId?: string | null projectUpdateId?: string | null updatedAt: string userId?: string | null } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "Reaction" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Exactly one target relationship normally identifies the reacted-to issue, comment, initiative update, or project update. Linear can also send update actions to the broad event trigger. Resource objects and the webhook envelope retain extra Linear fields. # On reaction removed Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-reaction-removed Run an automation when Linear reports reaction removed. `linear.onReactionRemoved` handles reaction removed in the connected Linear workspace. ```ts automations/watch-linear-reaction.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On reaction removed", () => { const event = linear.onReactionRemoved() // Notify the Linear issue owner about the comment activity. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearReactionWebhookDataTrigger = LinearReactionWebhookData & { event: LinearWebhookEvent } interface LinearReactionWebhookData { archivedAt?: string | null commentId?: string | null createdAt: string emoji: string id: string initiativeUpdateId?: string | null issueId?: string | null projectUpdateId?: string | null updatedAt: string userId?: string | null } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "Reaction" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Exactly one target relationship normally identifies the reacted-to issue, comment, initiative update, or project update. Linear can also send update actions to the broad event trigger. Resource objects and the webhook envelope retain extra Linear fields. # On release created Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-release-created Run an automation when Linear reports release created. `linear.onReleaseCreated` handles release created in the connected Linear workspace. ```ts automations/watch-linear-release.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On release created", () => { const event = linear.onReleaseCreated() // Sync the Linear release to the release calendar. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearReleaseTrigger = LinearRelease & { event: LinearWebhookEvent } interface LinearRelease { archivedAt?: string | null canceledAt?: string | null commitSha?: string | null completedAt?: string | null createdAt: string description?: string | null id: string name: string pipelineId: string slugId: string stageId: string startDate?: string | null startedAt?: string | null targetDate?: string | null trashed?: boolean | null updatedAt: string url: string version?: string | null } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "Release" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Release events include the pipeline and stage plus optional source commit, dates, and semantic version. Resource objects and the webhook envelope retain extra Linear fields. # On release event Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-release-event Run an automation when Linear reports release changes. `linear.onReleaseEvent` handles release changes in the connected Linear workspace. ```ts automations/watch-linear-release.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On release event", () => { const event = linear.onReleaseEvent() // Route the Linear release event by action. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearReleaseTrigger = LinearRelease & { event: LinearWebhookEvent } interface LinearRelease { archivedAt?: string | null canceledAt?: string | null commitSha?: string | null completedAt?: string | null createdAt: string description?: string | null id: string name: string pipelineId: string slugId: string stageId: string startDate?: string | null startedAt?: string | null targetDate?: string | null trashed?: boolean | null updatedAt: string url: string version?: string | null } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "Release" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Release events include the pipeline and stage plus optional source commit, dates, and semantic version. Resource objects and the webhook envelope retain extra Linear fields. # On release note created Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-release-note-created Run an automation when Linear reports release note created. `linear.onReleaseNoteCreated` handles release note created in the connected Linear workspace. ```ts automations/watch-linear-release-note.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On release note created", () => { const event = linear.onReleaseNoteCreated() // Update the Linear release announcement. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearReleaseNoteTrigger = LinearReleaseNote & { event: LinearWebhookEvent } interface LinearReleaseNote { archivedAt?: string | null content?: string | null createdAt: string id: string pipelineId: string releaseIds: string[] slugId: string title?: string | null updatedAt: string url: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "ReleaseNote" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Release notes can span several releases. `releaseIds` contains every linked release. Resource objects and the webhook envelope retain extra Linear fields. # On release note event Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-release-note-event Run an automation when Linear reports release note changes. `linear.onReleaseNoteEvent` handles release note changes in the connected Linear workspace. ```ts automations/watch-linear-release-note.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On release note event", () => { const event = linear.onReleaseNoteEvent() // Route the Linear release note event by action. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearReleaseNoteTrigger = LinearReleaseNote & { event: LinearWebhookEvent } interface LinearReleaseNote { archivedAt?: string | null content?: string | null createdAt: string id: string pipelineId: string releaseIds: string[] slugId: string title?: string | null updatedAt: string url: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "ReleaseNote" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Release notes can span several releases. `releaseIds` contains every linked release. Resource objects and the webhook envelope retain extra Linear fields. # On release note removed Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-release-note-removed Run an automation when Linear reports release note removed. `linear.onReleaseNoteRemoved` handles release note removed in the connected Linear workspace. ```ts automations/watch-linear-release-note.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On release note removed", () => { const event = linear.onReleaseNoteRemoved() // Update the Linear release announcement. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearReleaseNoteTrigger = LinearReleaseNote & { event: LinearWebhookEvent } interface LinearReleaseNote { archivedAt?: string | null content?: string | null createdAt: string id: string pipelineId: string releaseIds: string[] slugId: string title?: string | null updatedAt: string url: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "ReleaseNote" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Release notes can span several releases. `releaseIds` contains every linked release. Resource objects and the webhook envelope retain extra Linear fields. # On release note updated Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-release-note-updated Run an automation when Linear reports release note updated. `linear.onReleaseNoteUpdated` handles release note updated in the connected Linear workspace. ```ts automations/watch-linear-release-note.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On release note updated", () => { const event = linear.onReleaseNoteUpdated() // Update the Linear release announcement. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearReleaseNoteTrigger = LinearReleaseNote & { event: LinearWebhookEvent } interface LinearReleaseNote { archivedAt?: string | null content?: string | null createdAt: string id: string pipelineId: string releaseIds: string[] slugId: string title?: string | null updatedAt: string url: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "ReleaseNote" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Release notes can span several releases. `releaseIds` contains every linked release. Resource objects and the webhook envelope retain extra Linear fields. # On release removed Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-release-removed Run an automation when Linear reports release removed. `linear.onReleaseRemoved` handles release removed in the connected Linear workspace. ```ts automations/watch-linear-release.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On release removed", () => { const event = linear.onReleaseRemoved() // Sync the Linear release to the release calendar. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearReleaseTrigger = LinearRelease & { event: LinearWebhookEvent } interface LinearRelease { archivedAt?: string | null canceledAt?: string | null commitSha?: string | null completedAt?: string | null createdAt: string description?: string | null id: string name: string pipelineId: string slugId: string stageId: string startDate?: string | null startedAt?: string | null targetDate?: string | null trashed?: boolean | null updatedAt: string url: string version?: string | null } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "Release" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Release events include the pipeline and stage plus optional source commit, dates, and semantic version. Resource objects and the webhook envelope retain extra Linear fields. # On release updated Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-release-updated Run an automation when Linear reports release updated. `linear.onReleaseUpdated` handles release updated in the connected Linear workspace. ```ts automations/watch-linear-release.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On release updated", () => { const event = linear.onReleaseUpdated() // Sync the Linear release to the release calendar. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearReleaseTrigger = LinearRelease & { event: LinearWebhookEvent } interface LinearRelease { archivedAt?: string | null canceledAt?: string | null commitSha?: string | null completedAt?: string | null createdAt: string description?: string | null id: string name: string pipelineId: string slugId: string stageId: string startDate?: string | null startedAt?: string | null targetDate?: string | null trashed?: boolean | null updatedAt: string url: string version?: string | null } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "Release" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` Release events include the pipeline and stage plus optional source commit, dates, and semantic version. Resource objects and the webhook envelope retain extra Linear fields. # On user created Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-user-created Run an automation when Linear reports user created. `linear.onUserCreated` handles user created in the connected Linear workspace. ```ts automations/watch-linear-user.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On user created", () => { const event = linear.onUserCreated() // Sync the Linear user to the team directory. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearUserWebhookDataTrigger = LinearUserWebhookData & { event: LinearWebhookEvent } interface LinearUserWebhookData { active: boolean admin: boolean app: boolean archivedAt?: string | null avatarUrl?: string | null createdAt: string displayName: string email: string guest: boolean id: string name: string owner?: boolean | null timezone?: string | null updatedAt: string url: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "User" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` User events distinguish human members, guests, administrators, owners, and app identities. Disabled users have `active: false`. Resource objects and the webhook envelope retain extra Linear fields. # On user event Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-user-event Run an automation when Linear reports user changes. `linear.onUserEvent` handles user changes in the connected Linear workspace. ```ts automations/watch-linear-user.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On user event", () => { const event = linear.onUserEvent() // Route the Linear user event by action. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearUserWebhookDataTrigger = LinearUserWebhookData & { event: LinearWebhookEvent< LinearUserWebhookData, "create" | "update" | "remove" > } interface LinearUserWebhookData { active: boolean admin: boolean app: boolean archivedAt?: string | null avatarUrl?: string | null createdAt: string displayName: string email: string guest: boolean id: string name: string owner?: boolean | null timezone?: string | null updatedAt: string url: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "User" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` User events distinguish human members, guests, administrators, owners, and app identities. Disabled users have `active: false`. Resource objects and the webhook envelope retain extra Linear fields. # On user removed Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-user-removed Run an automation when Linear reports user removed. `linear.onUserRemoved` handles user removed in the connected Linear workspace. ```ts automations/watch-linear-user.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On user removed", () => { const event = linear.onUserRemoved() // Sync the Linear user to the team directory. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearUserWebhookDataTrigger = LinearUserWebhookData & { event: LinearWebhookEvent } interface LinearUserWebhookData { active: boolean admin: boolean app: boolean archivedAt?: string | null avatarUrl?: string | null createdAt: string displayName: string email: string guest: boolean id: string name: string owner?: boolean | null timezone?: string | null updatedAt: string url: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "User" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` User events distinguish human members, guests, administrators, owners, and app identities. Disabled users have `active: false`. Resource objects and the webhook envelope retain extra Linear fields. # On user updated Source: https://docs.automate.ax/reference/integrations/linear/triggers/on-user-updated Run an automation when Linear reports user updated. `linear.onUserUpdated` handles user updated in the connected Linear workspace. ```ts automations/watch-linear-user.automation.ts theme={null} import { automation } from "automate.ax" import { linear } from "automate.ax/linear" export default automation("On user updated", () => { const event = linear.onUserUpdated() // Sync the Linear user to the team directory. }) ``` Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime. ## Trigger data Returns a `Signal`: ```ts theme={null} type LinearUserWebhookDataTrigger = LinearUserWebhookData & { event: LinearWebhookEvent } interface LinearUserWebhookData { active: boolean admin: boolean app: boolean archivedAt?: string | null avatarUrl?: string | null createdAt: string displayName: string email: string guest: boolean id: string name: string owner?: boolean | null timezone?: string | null updatedAt: string url: string } interface LinearWebhookEvent { action: TAction actor?: LinearActor | null createdAt: string data: TData organizationId: string type: "User" updatedFrom?: Record | null url?: string | null webhookId: string webhookTimestamp: number } interface LinearActor { email?: string id?: string name?: string type?: string url?: string } ``` User events distinguish human members, guests, administrators, owners, and app identities. Disabled users have `active: false`. Resource objects and the webhook envelope retain extra Linear fields. # Add audience users Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/add-audience-users Adds user rows to a custom audience. `metaAds.addAudienceUsers` adds user rows to a custom audience. ```ts automations/meta-ads-add-audience-users.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Add audience users", () => { onDashboardRun({ title: "Add audience users" }) const result = metaAds.addAudienceUsers({ audienceId: "audience-id", payload: { schema: ["EMAIL_SHA256"], data: [["hashed-email"]] }, }) // Use result in the next advertising, reporting, or delivery operation. }) ``` Normalize and SHA-256 hash identifiers before calling unless Meta's selected schema explicitly permits raw values. Optional second argument `{ account }` selects a static project account binding. Returns the audience ID and number of received rows. Replaying the same rows is safe. # Archive ad Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/archive-ad Archives an ad without deleting reporting history. `metaAds.archiveAd` archives an ad without deleting reporting history. ```ts automations/meta-ads-archive-ad.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Archive ad", () => { onDashboardRun({ title: "Archive ad" }) const result = metaAds.archiveAd({ id: "ad-id" }) // Use result in the next advertising, reporting, or delivery operation. }) ``` The action writes `status: "ARCHIVED"`. Optional second argument `{ account }` selects a static project account binding. Returns Meta's mutation result. Archival is not replay-safe. # Archive ad set Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/archive-ad-set Archives an ad set without deleting reporting history. `metaAds.archiveAdSet` archives an ad set without deleting reporting history. ```ts automations/meta-ads-archive-ad-set.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Archive ad set", () => { onDashboardRun({ title: "Archive ad set" }) const result = metaAds.archiveAdSet({ id: "ad-set-id" }) // Use result in the next advertising, reporting, or delivery operation. }) ``` The action writes `status: "ARCHIVED"`. Optional second argument `{ account }` selects a static project account binding. Returns Meta's mutation result. Archival is not replay-safe. # Archive campaign Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/archive-campaign Archives a campaign without deleting reporting history. `metaAds.archiveCampaign` archives a campaign without deleting reporting history. ```ts automations/meta-ads-archive-campaign.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Archive campaign", () => { onDashboardRun({ title: "Archive campaign" }) const result = metaAds.archiveCampaign({ id: "campaign-id" }) // Use result in the next advertising, reporting, or delivery operation. }) ``` The action writes `status: "ARCHIVED"`. Optional second argument `{ account }` selects a static project account binding. Returns Meta's mutation result. Archival is not replay-safe. # Create ad Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/create-ad Creates an ad from an existing ad set and creative. `metaAds.createAd` creates an ad from an existing ad set and creative. ```ts automations/meta-ads-create-ad.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Create ad", () => { onDashboardRun({ title: "Create ad" }) const result = metaAds.createAd({ adAccountId: "123456789", adsetId: "ad-set-id", creativeId: "creative-id", name: "Launch ad", }) // Use result in the next advertising, reporting, or delivery operation. }) ``` `status` defaults to `PAUSED`. Optional second argument `{ account }` selects a static project account binding. Returns the created ad ID. Creation is not replay-safe. # Create ad set Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/create-ad-set Creates an ad set with delivery and targeting configuration. `metaAds.createAdSet` creates an ad set with delivery and targeting configuration. ```ts automations/meta-ads-create-ad-set.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Create ad set", () => { onDashboardRun({ title: "Create ad set" }) const result = metaAds.createAdSet({ adAccountId: "123456789", campaignId: "campaign-id", name: "US prospecting", billingEvent: "IMPRESSIONS", optimizationGoal: "OFFSITE_CONVERSIONS", promotedObject: { customEventType: "PURCHASE", pixelId: "pixel-id", }, dailyBudget: 5000, targeting: { geoLocations: { countries: ["US"] } }, }) // Use result in the next advertising, reporting, or delivery operation. }) ``` Budgets use the ad account currency's minor unit. Omit both budgets when the campaign owns the budget; otherwise set exactly one. Set `promotedObject` when the optimization goal requires a pixel, Page, app, product set, or custom conversion. `status` defaults to `PAUSED`. Optional second argument `{ account }` selects a static project account binding. Returns the created ad-set ID. Creation is not replay-safe. # Create audience Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/create-audience Creates a custom audience. `metaAds.createAudience` creates a custom audience. ```ts automations/meta-ads-create-audience.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Create audience", () => { onDashboardRun({ title: "Create audience" }) const result = metaAds.createAudience({ adAccountId: "123456789", name: "Loyal customers", customerFileSource: "USER_PROVIDED_ONLY", }) // Use result in the next advertising, reporting, or delivery operation. }) ``` `subtype` defaults to `CUSTOM`. Declare the correct customer-file source for uploaded identifiers. Optional second argument `{ account }` selects a static project account binding. Returns the created audience ID. Creation is not replay-safe. # Create campaign Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/create-campaign Creates a campaign in an ad account. `metaAds.createCampaign` creates a campaign in an ad account. ```ts automations/meta-ads-create-campaign.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Create campaign", () => { onDashboardRun({ title: "Create campaign" }) const result = metaAds.createCampaign({ adAccountId: "123456789", name: "Fall launch", objective: "OUTCOME_SALES", }) // Use result in the next advertising, reporting, or delivery operation. }) ``` `status` defaults to `PAUSED`; `specialAdCategories` defaults to an empty array; `isAdsetBudgetSharingEnabled` defaults to `false`. Set `dailyBudget` or `lifetimeBudget` for a campaign-level budget. Optional second argument `{ account }` selects a static project account binding. Returns the created campaign ID. Creation is not replay-safe. # Create creative Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/create-creative Creates an ad creative from a Marketing API creative specification. `metaAds.createCreative` creates an ad creative from a Marketing API creative specification. ```ts automations/meta-ads-create-creative.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Create creative", () => { onDashboardRun({ title: "Create creative" }) const result = metaAds.createCreative({ adAccountId: "123456789", creative: { name: "Launch creative", objectStoryId: "page-id_post-id" }, }) // Use result in the next advertising, reporting, or delivery operation. }) ``` Put provider-supported creative fields in `creative` using public camelCase names. Optional second argument `{ account }` selects a static project account binding. Returns the created creative ID. Creation is not replay-safe. # Create subscription Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/create-subscription Creates a filtered ad-account event subscription. `metaAds.createSubscription` creates a filtered ad-account event subscription. ```ts automations/meta-ads-create-subscription.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Create subscription", () => { onDashboardRun({ title: "Create subscription" }) const result = metaAds.createSubscription({ adAccountId: "123456789", eventType: "INSIGHTS_MILESTONE_REACHED", field: "spent", value: "10000", operator: "EQUAL", filters: [ { field: "entity_type", operator: "EQUAL", value: "CAMPAIGN" }, { field: "time_preset", operator: "EQUAL", value: "LIFETIME" }, ], }) // Use result in the next advertising, reporting, or delivery operation. }) ``` Meta permits campaign, ad-set, ad, and insights events with at most 20 filters. Insights subscriptions require a `time_preset` filter with an uppercase provider value such as `LIFETIME`, `TODAY`, or `LAST_7_DAYS`. Monetary values use minor units. Optional second argument `{ account }` selects a static project account binding. Returns `{ subscriptionId }`. Creation is not replay-safe. # Delete audience Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/delete-audience Deletes a custom audience. `metaAds.deleteAudience` deletes a custom audience. ```ts automations/meta-ads-delete-audience.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Delete audience", () => { onDashboardRun({ title: "Delete audience" }) const result = metaAds.deleteAudience({ id: "audience-id" }) // Use result in the next advertising, reporting, or delivery operation. }) ``` Deletion may fail when the audience is still referenced by delivery configuration. Optional second argument `{ account }` selects a static project account binding. Returns Meta's mutation result. Deletion is not replay-safe. # Delete creative Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/delete-creative Deletes an unused ad creative. `metaAds.deleteCreative` deletes an unused ad creative. ```ts automations/meta-ads-delete-creative.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Delete creative", () => { onDashboardRun({ title: "Delete creative" }) const result = metaAds.deleteCreative({ id: "creative-id" }) // Use result in the next advertising, reporting, or delivery operation. }) ``` Meta rejects deletion while a creative is in use. Optional second argument `{ account }` selects a static project account binding. Returns Meta's mutation result. Deletion is not replay-safe. # Delete Instagram comment Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/delete-instagram-comment Deletes a comment on Instagram media. `metaAds.deleteInstagramComment` permanently deletes a comment on the account's Instagram media. ```ts automations/meta-ads-delete-instagram-comment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Delete Instagram comment", () => { onDashboardRun({ title: "Delete Instagram comment" }) metaAds.deleteInstagramComment({ commentId: "comment-id" }) }) ``` Only the media owner can delete comments, and live-video comments can't be deleted. Prefer [Hide Instagram comment](/reference/integrations/meta-ads/actions/hide-instagram-comment) when you might need the comment later. Optional second argument `{ account }` selects a static project account binding. Returns `success`. Deletion isn't replay-safe. The action needs `instagram_basic`, `instagram_manage_comments`, `pages_read_engagement`, and `pages_show_list`. # Delete Page comment Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/delete-page-comment Deletes a comment on a Facebook Page post. `metaAds.deletePageComment` permanently deletes a comment on a Facebook Page post. ```ts automations/meta-ads-delete-page-comment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Delete Page comment", () => { onDashboardRun({ title: "Delete Page comment" }) metaAds.deletePageComment({ commentId: "comment-id", pageId: "page-id" }) }) ``` Prefer [Hide Page comment](/reference/integrations/meta-ads/actions/hide-page-comment) when you might need the comment later. Optional second argument `{ account }` selects a static project account binding. Returns `success`. Deletion isn't replay-safe. The action needs `pages_show_list` plus either `pages_manage_engagement` or `pages_read_user_content`. # Delete subscription Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/delete-subscription Deletes an ad-account event subscription. `metaAds.deleteSubscription` deletes an ad-account event subscription. ```ts automations/meta-ads-delete-subscription.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Delete subscription", () => { onDashboardRun({ title: "Delete subscription" }) const result = metaAds.deleteSubscription({ adAccountId: "123456789", subscriptionId: "subscription-id", }) // Use result in the next advertising, reporting, or delivery operation. }) ``` This does not remove the Automate.ax app from the ad account's Webhooks subscription. Optional second argument `{ account }` selects a static project account binding. Returns Meta's mutation result. Deletion is not replay-safe. # Get ad Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/get-ad Retrieves one ad by ID. `metaAds.getAd` retrieves one ad by ID. ```ts automations/meta-ads-get-ad.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Get ad", () => { onDashboardRun({ title: "Get ad" }) const result = metaAds.getAd({ id: "ad-id" }) // Use result in the next advertising, reporting, or delivery operation. }) ``` Use `fields` to add fields to the typed ad projection. Optional second argument `{ account }` selects a static project account binding. Returns the ad's hierarchy, creative reference, and delivery status. # Get ad account Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/get-ad-account Retrieves one Meta ad account. `metaAds.getAdAccount` retrieves one Meta ad account. ```ts automations/meta-ads-get-ad-account.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Get ad account", () => { onDashboardRun({ title: "Get ad account" }) const result = metaAds.getAdAccount({ adAccountId: "123456789" }) // Use result in the next advertising, reporting, or delivery operation. }) ``` The ID may include or omit Meta's `act_` prefix. Use `fields` to add fields to the typed default projection. Optional second argument `{ account }` selects a static project account binding. Returns account identity, currency, timezone, balance, and spend data. # Get ad set Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/get-ad-set Retrieves one ad set by ID. `metaAds.getAdSet` retrieves one ad set by ID. ```ts automations/meta-ads-get-ad-set.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Get ad set", () => { onDashboardRun({ title: "Get ad set" }) const result = metaAds.getAdSet({ id: "ad-set-id" }) // Use result in the next advertising, reporting, or delivery operation. }) ``` Use `fields` to add fields to the typed ad-set projection. Optional second argument `{ account }` selects a static project account binding. Returns campaign, budget, targeting, optimization, schedule, and status fields. # Get audience Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/get-audience Retrieves one custom audience. `metaAds.getAudience` retrieves one custom audience. ```ts automations/meta-ads-get-audience.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Get audience", () => { onDashboardRun({ title: "Get audience" }) const result = metaAds.getAudience({ id: "audience-id" }) // Use result in the next advertising, reporting, or delivery operation. }) ``` Use `fields` to add fields to the typed audience projection. Optional second argument `{ account }` selects a static project account binding. Returns the audience ID, name, description, subtype, and account. # Get campaign Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/get-campaign Retrieves one campaign by ID. `metaAds.getCampaign` retrieves one campaign by ID. ```ts automations/meta-ads-get-campaign.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Get campaign", () => { onDashboardRun({ title: "Get campaign" }) const result = metaAds.getCampaign({ id: "campaign-id" }) // Use result in the next advertising, reporting, or delivery operation. }) ``` Use `fields` to add fields to the typed campaign projection. Optional second argument `{ account }` selects a static project account binding. Returns campaign objective, buying type, configured status, and effective status. # Get creative Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/get-creative Retrieves one ad creative by ID. `metaAds.getCreative` retrieves one ad creative by ID. ```ts automations/meta-ads-get-creative.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Get creative", () => { onDashboardRun({ title: "Get creative" }) const result = metaAds.getCreative({ id: "creative-id" }) // Use result in the next advertising, reporting, or delivery operation. }) ``` Use `fields` to add fields to the typed creative projection. Optional second argument `{ account }` selects a static project account binding. Returns the creative identity, story, copy, and status fields. # Get insights Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/get-insights Reads delivery insights for an ad account, campaign, ad set, or ad. `metaAds.getInsights` reads delivery insights for an ad account, campaign, ad set, or ad. ```ts automations/meta-ads-get-insights.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Get insights", () => { onDashboardRun({ title: "Get insights" }) const result = metaAds.getInsights({ objectId: "act_123456789", level: "campaign", datePreset: "last_7d", }) // Use result in the next advertising, reporting, or delivery operation. }) ``` Use `fields`, `breakdowns`, `datePreset` or `timeRange`, `level`, and cursor inputs. Large queries may be rejected or require a narrower range. Optional second argument `{ account }` selects a static project account binding. Returns `{ items, pageInfo }` with string-valued metrics and reporting dates. # Get Instagram comment Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/get-instagram-comment Retrieves one comment on Instagram media. `metaAds.getInstagramComment` retrieves one comment on an Instagram professional account's media. ```ts automations/meta-ads-get-instagram-comment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Get Instagram comment", () => { onDashboardRun({ title: "Get Instagram comment" }) const comment = metaAds.getInstagramComment({ commentId: "comment-id" }) // Decide whether the comment needs a public or private answer. }) ``` `fields` adds Graph fields to the default selection. Meta hides comments from restricted users. Optional second argument `{ account }` selects a static project account binding. Returns `id`, `text`, `timestamp`, `username`, `from`, `hidden`, `likeCount`, `media` with `id` and `mediaProductType`, and `parentId` for replies. The action needs `instagram_basic`, `instagram_manage_comments`, `pages_read_engagement`, and `pages_show_list`. # Get lead Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/get-lead Retrieves one Lead Ads lead. `metaAds.getLead` retrieves one Lead Ads lead. ```ts automations/meta-ads-get-lead.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Get lead", () => { onDashboardRun({ title: "Get lead" }) const result = metaAds.getLead({ leadId: "lead-id", pageId: "page-id" }) // Use result in the next advertising, reporting, or delivery operation. }) ``` Pass the Page that owns the lead so Automate.ax can resolve its Page access token. Lead availability and retention follow Meta's Lead Ads rules. Optional second argument `{ account }` selects a static project account binding. Returns attribution and captured field values for the lead. # Get Page comment Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/get-page-comment Retrieves one comment on a Facebook Page post or ad post. `metaAds.getPageComment` retrieves one comment on a Facebook Page post or ad post. ```ts automations/meta-ads-get-page-comment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Get Page comment", () => { onDashboardRun({ title: "Get Page comment" }) const comment = metaAds.getPageComment({ commentId: "comment-id", pageId: "page-id", }) // Check comment.canReplyPrivately before sending a private reply. }) ``` Pass the Page that owns the post so Automate.ax can act with its Page access token. `fields` adds Graph fields to the default selection. Optional second argument `{ account }` selects a static project account binding. Returns the comment's `id`, `message`, `from`, `createdTime`, `parent`, `commentCount`, `likeCount`, `canComment`, and `canReplyPrivately`. Check `canReplyPrivately` before you send a [private reply](/reference/integrations/meta-ads/actions/private-reply-to-page-comment). # Get subscription Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/get-subscription Retrieves one custom event subscription from an ad account. `metaAds.getSubscription` retrieves one custom event subscription by ID. ```ts automations/meta-ads-get-subscription.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Get subscription", () => { onDashboardRun({ title: "Get subscription" }) const subscription = metaAds.getSubscription({ adAccountId: "123456789", subscriptionId: "subscription-id", }) // Use subscription in the next advertising or reporting operation. }) ``` Returns the subscription ID, event type, condition, filters, and status. Optional second argument `{ account }` selects a static project account binding. # Hide Instagram comment Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/hide-instagram-comment Hides a comment on Instagram media. `metaAds.hideInstagramComment` hides a comment on the account's Instagram media. ```ts automations/meta-ads-hide-instagram-comment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Hide Instagram comment", () => { onDashboardRun({ title: "Hide Instagram comment" }) metaAds.hideInstagramComment({ commentId: "comment-id" }) }) ``` Comments by the media owner always stay visible, and live-video comments can't be hidden. Hiding is safe to retry; use [Unhide Instagram comment](/reference/integrations/meta-ads/actions/unhide-instagram-comment) to restore it. Optional second argument `{ account }` selects a static project account binding. Returns `success`. The action needs `instagram_basic`, `instagram_manage_comments`, `pages_read_engagement`, and `pages_show_list`. # Hide Page comment Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/hide-page-comment Hides a comment on a Facebook Page post without deleting it. `metaAds.hidePageComment` hides a comment on a Facebook Page post without deleting it. ```ts automations/meta-ads-hide-page-comment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Hide Page comment", () => { onDashboardRun({ title: "Hide Page comment" }) metaAds.hidePageComment({ commentId: "comment-id", pageId: "page-id" }) }) ``` Use [Unhide Page comment](/reference/integrations/meta-ads/actions/unhide-page-comment) to restore it. Hiding is safe to retry. Optional second argument `{ account }` selects a static project account binding. Returns `success`. The action needs `pages_manage_engagement`, `pages_read_user_content`, and `pages_show_list`. # List ad accounts Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/list-ad-accounts Lists ad accounts assigned to the connected Meta identity. `metaAds.listAdAccounts` lists ad accounts assigned directly to the connected Meta identity. ```ts automations/meta-ads-list-ad-accounts.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("List ad accounts", () => { onDashboardRun({ title: "List ad accounts" }) const page = metaAds.listAdAccounts({ limit: 25 }) // Use page in the next advertising, reporting, or delivery operation. }) ``` Use `metaAds.listBusinessAdAccounts` for owned or client accounts in a Business portfolio. Optional second argument `{ account }` selects a static project account binding. Returns `{ items, pageInfo }` with account identity, currency, and timezone data. # List ad sets Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/list-ad-sets Lists ad sets in an ad account. `metaAds.listAdSets` lists ad sets in an ad account. ```ts automations/meta-ads-list-ad-sets.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("List ad sets", () => { onDashboardRun({ title: "List ad sets" }) const page = metaAds.listAdSets({ adAccountId: "123456789" }) // Use page in the next advertising, reporting, or delivery operation. }) ``` Use `fields` and cursor inputs to control the result page. Optional second argument `{ account }` selects a static project account binding. Returns `{ items, pageInfo }` with budget, schedule, targeting, optimization, and delivery status. # List ads Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/list-ads Lists ads in an ad account. `metaAds.listAds` lists ads in an ad account. ```ts automations/meta-ads-list-ads.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("List ads", () => { onDashboardRun({ title: "List ads" }) const page = metaAds.listAds({ adAccountId: "123456789" }) // Use page in the next advertising, reporting, or delivery operation. }) ``` Use `fields` and cursor inputs to control the result page. Optional second argument `{ account }` selects a static project account binding. Returns `{ items, pageInfo }` with campaign, ad set, creative, and delivery status. # List audiences Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/list-audiences Lists custom audiences in an ad account. `metaAds.listAudiences` lists custom audiences in an ad account. ```ts automations/meta-ads-list-audiences.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("List audiences", () => { onDashboardRun({ title: "List audiences" }) const page = metaAds.listAudiences({ adAccountId: "123456789" }) // Use page in the next advertising, reporting, or delivery operation. }) ``` Use `fields` and cursor inputs to control the result page. Optional second argument `{ account }` selects a static project account binding. Returns `{ items, pageInfo }` with audience subtype, description, and estimated size bounds. # List business ad accounts Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/list-business-ad-accounts Lists owned or client ad accounts for a Meta Business portfolio. `metaAds.listBusinessAdAccounts` lists owned or client ad accounts for one Meta Business portfolio. ```ts automations/meta-ads-list-business-ad-accounts.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("List business ad accounts", () => { onDashboardRun({ title: "List business ad accounts" }) const page = metaAds.listBusinessAdAccounts({ businessId: "business-id", relationship: "owned", limit: 25, }) // Use page in the next advertising, reporting, or delivery operation. }) ``` Use `relationship: "owned"` for accounts owned by the portfolio or `"client"` for client accounts shared with it. Optional second argument `{ account }` selects a static project account binding. Returns `{ items, pageInfo }` with account identity, currency, timezone, and business data. # List businesses Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/list-businesses Lists Meta Business portfolios visible to the connection. `metaAds.listBusinesses` lists Meta Business portfolios visible to the connection. ```ts automations/meta-ads-list-businesses.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("List businesses", () => { onDashboardRun({ title: "List businesses" }) const page = metaAds.listBusinesses({ limit: 25 }) // Use page in the next advertising, reporting, or delivery operation. }) ``` Use `fields`, `after`, `before`, and `limit` to control the Graph edge. Optional second argument `{ account }` selects a static project account binding. Returns `{ items, pageInfo }` with business IDs, names, and verification status. # List campaigns Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/list-campaigns Lists campaigns in an ad account. `metaAds.listCampaigns` lists campaigns in an ad account. ```ts automations/meta-ads-list-campaigns.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("List campaigns", () => { onDashboardRun({ title: "List campaigns" }) const page = metaAds.listCampaigns({ adAccountId: "123456789" }) // Use page in the next advertising, reporting, or delivery operation. }) ``` Use `effectiveStatus` to limit results and cursor inputs to continue a page. Optional second argument `{ account }` selects a static project account binding. Returns `{ items, pageInfo }` with campaign objective and delivery status. # List creatives Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/list-creatives Lists ad creatives in an ad account. `metaAds.listCreatives` lists ad creatives in an ad account. ```ts automations/meta-ads-list-creatives.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("List creatives", () => { onDashboardRun({ title: "List creatives" }) const page = metaAds.listCreatives({ adAccountId: "123456789" }) // Use page in the next advertising, reporting, or delivery operation. }) ``` Use `fields` and cursor inputs to control the result page. Optional second argument `{ account }` selects a static project account binding. Returns `{ items, pageInfo }` with creative identity, story, copy, and status fields. # List Instagram accounts Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/list-instagram-accounts Lists managed Facebook Pages with their linked Instagram professional accounts. `metaAds.listInstagramAccounts` lists the Facebook Pages the connected identity manages and the Instagram professional account linked to each one. ```ts automations/meta-ads-list-instagram-accounts.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("List Instagram accounts", () => { onDashboardRun({ title: "List Instagram accounts" }) const accounts = metaAds.listInstagramAccounts() // Copy an Instagram account ID into an Instagram comment or message trigger. }) ``` Pass `instagramBusinessAccount.id` as `instagramAccountId` to Instagram actions and triggers. Pages without a linked Instagram account omit `instagramBusinessAccount`. `limit` defaults to `25`; pass `after` or `before` from `pageInfo` to page through results. Optional second argument `{ account }` selects a static project account binding. Each item includes the Page's `id` and `name` and `instagramBusinessAccount` with `id` and `username`. The action never returns Page access tokens. It needs `instagram_basic` and `pages_show_list`; use [List Pages](/reference/integrations/meta-ads/actions/list-pages) when you only need Facebook Pages. # List Instagram conversations Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/list-instagram-conversations Lists an Instagram professional account's direct-message conversations. `metaAds.listInstagramConversations` lists an Instagram professional account's direct-message conversations. ```ts automations/meta-ads-list-instagram-conversations.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("List Instagram conversations", () => { onDashboardRun({ title: "List Instagram conversations" }) const conversations = metaAds.listInstagramConversations({ instagramAccountId: "instagram-account-id", userId: "instagram-scoped-id", }) // Pass a conversation ID to metaAds.listInstagramMessages. }) ``` Find `instagramAccountId` with [List Instagram accounts](/reference/integrations/meta-ads/actions/list-instagram-accounts). Pass `userId`, an IGSID, to find the conversation with one person. `limit` defaults to `25`. Meta limits this edge to 2 calls per second per account and requires the Meta app to belong to a verified business. Optional second argument `{ account }` selects a static project account binding. Returns conversations with `id` and `updatedTime`, plus a `pageInfo` cursor. The action needs `instagram_basic`, `instagram_manage_messages`, `pages_manage_metadata`, and `pages_show_list`. # List Instagram media comments Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/list-instagram-media-comments Lists top-level comments on Instagram media. `metaAds.listInstagramMediaComments` lists top-level comments on one Instagram media object, newest first. ```ts automations/meta-ads-list-instagram-media-comments.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("List Instagram media comments", () => { onDashboardRun({ title: "List Instagram media comments" }) const comments = metaAds.listInstagramMediaComments({ mediaId: "media-id" }) // Review comments that still need an answer. }) ``` For an ad, use the creative's `effective_instagram_media_id` as `mediaId`. Replies aren't included; read them through each comment's `replies` field. `limit` defaults to and can't exceed `50`. Meta offers no time filter. Optional second argument `{ account }` selects a static project account binding. Returns comments with the same fields as [Get Instagram comment](/reference/integrations/meta-ads/actions/get-instagram-comment) and a `pageInfo` cursor. The action needs the same permissions. # List Instagram messages Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/list-instagram-messages Lists recent messages in an Instagram conversation. `metaAds.listInstagramMessages` lists recent messages in one Instagram direct-message conversation. ```ts automations/meta-ads-list-instagram-messages.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("List Instagram messages", () => { onDashboardRun({ title: "List Instagram messages" }) const messages = metaAds.listInstagramMessages({ conversationId: "conversation-id", instagramAccountId: "instagram-account-id", }) // Summarize the thread for the person who answers it. }) ``` Find `instagramAccountId` with [List Instagram accounts](/reference/integrations/meta-ads/actions/list-instagram-accounts). Meta returns details only for a conversation's 20 most recent messages, so the action has no cursor and `limit` defaults to and can't exceed `20`. Optional second argument `{ account }` selects a static project account binding. Returns messages with `id`, `createdTime`, `from`, `to`, and `message` for up to the 20 most recent messages. The action needs the same permissions as [List Instagram conversations](/reference/integrations/meta-ads/actions/list-instagram-conversations). # List lead forms Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/list-lead-forms Lists lead-generation forms owned by a Facebook Page. `metaAds.listLeadForms` lists lead-generation forms owned by a Facebook Page. ```ts automations/meta-ads-list-lead-forms.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("List lead forms", () => { onDashboardRun({ title: "List lead forms" }) const page = metaAds.listLeadForms({ pageId: "page-id" }) // Use page in the next advertising, reporting, or delivery operation. }) ``` The connected identity needs Page visibility and Lead Ads access. Automate.ax resolves the Page access token for `pageId` before listing forms. Optional second argument `{ account }` selects a static project account binding. Returns `{ items, pageInfo }` with form IDs, names, locale, and status. # List leads Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/list-leads Lists leads captured by a lead form. `metaAds.listLeads` lists leads captured by a lead form. ```ts automations/meta-ads-list-leads.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("List leads", () => { onDashboardRun({ title: "List leads" }) const page = metaAds.listLeads({ formId: "form-id", pageId: "page-id" }) // Use page in the next advertising, reporting, or delivery operation. }) ``` Pass the Page that owns the form so Automate.ax can resolve its Page access token. Use cursor inputs for backfills; treat captured field values as personal data. Optional second argument `{ account }` selects a static project account binding. Returns `{ items, pageInfo }` with attribution, capture time, and `fieldData`. # List Messenger conversations Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/list-messenger-conversations Lists a Facebook Page's Messenger conversations. `metaAds.listMessengerConversations` lists a Facebook Page's Messenger conversations. ```ts automations/meta-ads-list-messenger-conversations.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("List Messenger conversations", () => { onDashboardRun({ title: "List Messenger conversations" }) const conversations = metaAds.listMessengerConversations({ pageId: "page-id", userId: "page-scoped-id", }) // Pass a conversation ID to metaAds.listMessengerMessages. }) ``` Pass `userId`, a PSID, to find the conversation with one person. `limit` defaults to `25`. Meta omits Requests-folder conversations that are inactive for 30 days and limits this edge to 2 calls per second per Page. Optional second argument `{ account }` selects a static project account binding. Returns conversations with `id` and `updatedTime`, plus a `pageInfo` cursor. The action needs `pages_manage_metadata`, `pages_messaging`, `pages_read_engagement`, and `pages_show_list`. # List Messenger messages Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/list-messenger-messages Lists recent messages in a Messenger conversation. `metaAds.listMessengerMessages` lists recent messages in one Messenger conversation. ```ts automations/meta-ads-list-messenger-messages.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("List Messenger messages", () => { onDashboardRun({ title: "List Messenger messages" }) const messages = metaAds.listMessengerMessages({ conversationId: "conversation-id", pageId: "page-id", }) // Summarize the thread for the person who answers it. }) ``` Meta returns details only for a conversation's 20 most recent messages, so the action has no cursor and `limit` defaults to and can't exceed `20`. Optional second argument `{ account }` selects a static project account binding. Returns messages with `id`, `createdTime`, `from`, `to`, and `message` for up to the 20 most recent messages. The action needs the same permissions as [List Messenger conversations](/reference/integrations/meta-ads/actions/list-messenger-conversations). # List Pages Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/list-pages Lists Facebook Pages the connected identity manages. `metaAds.listPages` lists Facebook Pages the connected identity manages. ```ts automations/meta-ads-list-pages.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("List Pages", () => { onDashboardRun({ title: "List Pages" }) const pages = metaAds.listPages() // Copy a Page ID into a Page comment or Messenger trigger. }) ``` Use the result to find the `pageId` for Facebook Page comment and Messenger actions and triggers. For Instagram, use [List Instagram accounts](/reference/integrations/meta-ads/actions/list-instagram-accounts). `limit` defaults to `25`; pass `after` or `before` from `pageInfo` to page through results. Optional second argument `{ account }` selects a static project account binding. Each item includes `id`, `name`, `category`, and the person's Page `tasks`. The action never returns Page access tokens. It needs `pages_show_list`. # List pixels Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/list-pixels Lists Meta pixels attached to an ad account. `metaAds.listPixels` lists Meta pixels attached to an ad account. ```ts automations/meta-ads-list-pixels.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("List pixels", () => { onDashboardRun({ title: "List pixels" }) const page = metaAds.listPixels({ adAccountId: "123456789" }) // Use page in the next advertising, reporting, or delivery operation. }) ``` Use `fields` and cursor inputs to control the result page. Optional second argument `{ account }` selects a static project account binding. Returns `{ items, pageInfo }` with pixel identity, availability, code, and last-fired time. # List post comments Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/list-post-comments Lists comments on a Facebook Page post or ad post. `metaAds.listPostComments` lists comments on a Facebook Page post or ad post. ```ts automations/meta-ads-list-post-comments.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("List post comments", () => { onDashboardRun({ title: "List post comments" }) const comments = metaAds.listPostComments({ filter: "stream", pageId: "page-id", postId: "page-id_post-id", }) // Review comments that still need an answer. }) ``` Pass the Page that owns the post; Meta returns no comments to a user token. For an ad, use the creative's `effectiveObjectStoryId` from [Get creative](/reference/integrations/meta-ads/actions/get-creative) as `postId`. `filter: "toplevel"` returns only top-level comments and `filter: "stream"` returns every comment and reply in chronological order; Meta defaults to `toplevel`. `order` accepts `chronological` or `reverse_chronological`. `limit` defaults to `25`. Optional second argument `{ account }` selects a static project account binding. Returns comments with the same fields as [Get Page comment](/reference/integrations/meta-ads/actions/get-page-comment) and a `pageInfo` cursor. # List subscriptions Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/list-subscriptions Lists custom event subscriptions on an ad account. `metaAds.listSubscriptions` lists custom event subscriptions on an ad account. ```ts automations/meta-ads-list-subscriptions.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("List subscriptions", () => { onDashboardRun({ title: "List subscriptions" }) const page = metaAds.listSubscriptions({ adAccountId: "123456789" }) // Use page in the next advertising, reporting, or delivery operation. }) ``` These are Marketing API filtered subscriptions, separate from the app's Webhooks product subscription. Optional second argument `{ account }` selects a static project account binding. Returns `{ items, pageInfo }` with each subscription's ID, event type, condition, filters, and status. # Private reply to Instagram comment Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/private-reply-to-instagram-comment Sends one private Instagram direct message to the author of a comment. `metaAds.privateReplyToInstagramComment` sends one private Instagram direct message to the person who wrote a comment on the account's media. ```ts automations/meta-ads-private-reply-to-instagram-comment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Private reply to Instagram comment", () => { onDashboardRun({ title: "Private reply to Instagram comment" }) metaAds.privateReplyToInstagramComment({ commentId: "comment-id", instagramAccountId: "instagram-account-id", text: "Thanks for asking! Here are our hours and location.", }) }) ``` Find `instagramAccountId` with [List Instagram accounts](/reference/integrations/meta-ads/actions/list-instagram-accounts). Meta allows one private reply per comment, within 7 days of the comment; for live video, only during the broadcast. The message lands in the person's inbox if they follow the account and in Message Requests otherwise. Automate.ax sends through the Facebook Page linked to the Instagram account. `text` must be under 1,000 bytes. Optional second argument `{ account }` selects a static project account binding. Returns `recipientId`, the person's IGSID, and `messageId`. Private replies aren't replay-safe. Meta documents conflicting requirements for this call, so the action requests the stricter set: `instagram_basic`, `instagram_manage_comments`, `instagram_manage_messages`, `pages_messaging`, `pages_read_engagement`, and `pages_show_list`. Meta's Instagram Messaging documentation also lists the Human Agent feature as a requirement for the Meta app. # Private reply to Page comment Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/private-reply-to-page-comment Sends one private Messenger reply to the author of a Facebook Page comment. `metaAds.privateReplyToPageComment` sends one private Messenger message from the Page to the person who wrote a comment. ```ts automations/meta-ads-private-reply-to-page-comment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Private reply to Page comment", () => { onDashboardRun({ title: "Private reply to Page comment" }) metaAds.privateReplyToPageComment({ commentId: "comment-id", pageId: "page-id", text: "Thanks for asking! Here are our hours and location.", }) }) ``` Meta allows one private reply per comment, within 7 days of the comment. After that, you can message the person again only after they reply, using [Send Messenger message](/reference/integrations/meta-ads/actions/send-messenger-message). You can't private-reply to comments posted by another Page. `text` accepts up to 2,000 characters. Optional second argument `{ account }` selects a static project account binding. Returns `recipientId`, the person's PSID, and `messageId`. Meta returns error `10900` when the comment already received a private reply and `10903` when the person can't receive one. Private replies aren't replay-safe. The action needs `pages_messaging` and `pages_show_list`. # Remove audience users Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/remove-audience-users Removes user rows from a custom audience. `metaAds.removeAudienceUsers` removes user rows from a custom audience. ```ts automations/meta-ads-remove-audience-users.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Remove audience users", () => { onDashboardRun({ title: "Remove audience users" }) const result = metaAds.removeAudienceUsers({ audienceId: "audience-id", payload: { schema: ["EMAIL_SHA256"], data: [["hashed-email"]] }, }) // Use result in the next advertising, reporting, or delivery operation. }) ``` Use the same normalization, hashing, schema, and column order used when adding rows. Optional second argument `{ account }` selects a static project account binding. Returns the audience ID and number of received rows. Replaying the same rows is safe. # Reply to Instagram comment Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/reply-to-instagram-comment Publishes a public reply to an Instagram comment. `metaAds.replyToInstagramComment` publishes a public reply to a comment on the account's Instagram media. ```ts automations/meta-ads-reply-to-instagram-comment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Reply to Instagram comment", () => { onDashboardRun({ title: "Reply to Instagram comment" }) metaAds.replyToInstagramComment({ commentId: "comment-id", message: "Thanks! Check your DMs for the details.", }) }) ``` Meta attaches replies to top-level comments; replying to a reply adds to the same top-level thread. You can't reply to hidden comments or live-video comments. Use [Private reply to Instagram comment](/reference/integrations/meta-ads/actions/private-reply-to-instagram-comment) for private details. Optional second argument `{ account }` selects a static project account binding. Returns the new comment's `id`. Replies aren't replay-safe. The action needs `instagram_basic`, `instagram_manage_comments`, `pages_read_engagement`, and `pages_show_list`. # Reply to Page comment Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/reply-to-page-comment Publishes a public reply to a Facebook Page comment as the Page. `metaAds.replyToPageComment` publishes a public reply to a Facebook Page comment as the Page. ```ts automations/meta-ads-reply-to-page-comment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Reply to Page comment", () => { onDashboardRun({ title: "Reply to Page comment" }) metaAds.replyToPageComment({ commentId: "comment-id", message: "Thanks! We just sent you a message with the details.", pageId: "page-id", }) }) ``` Everyone who can see the post can see the reply. Use [Private reply to Page comment](/reference/integrations/meta-ads/actions/private-reply-to-page-comment) for details that belong in a private conversation. Optional second argument `{ account }` selects a static project account binding. Returns the new comment's `id`. Replies aren't replay-safe; an ambiguous failure isn't retried automatically, so check the thread before you retry. The action needs `pages_manage_engagement`, `pages_read_user_content`, and `pages_show_list`. # Send conversion events Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/send-conversion-events Sends server events through Meta's Conversions API. `metaAds.sendConversionEvents` sends server events through Meta's Conversions API. ```ts automations/meta-ads-send-conversion-events.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Send conversion events", () => { onDashboardRun({ title: "Send conversion events" }) const result = metaAds.sendConversionEvents({ pixelId: "pixel-id", events: [ { eventName: "Purchase", eventTime: 1700000000, actionSource: "website", userData: { em: ["sha256-email"] }, customData: { currency: "USD", value: 49.99 }, }, ], }) // Use result in the next advertising, reporting, or delivery operation. }) ``` Send Unix-second event times and normalized, SHA-256 hashed user identifiers. Use `eventId` for browser/server deduplication and `testEventCode` while validating. Optional second argument `{ account }` selects a static project account binding. Returns the accepted event count, messages, and Meta trace ID. Identical event IDs are replay-safe. # Send Instagram message Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/send-instagram-message Sends an Instagram direct message from a professional account. `metaAds.sendInstagramMessage` sends an Instagram direct text message from a professional account to one person. ```ts automations/meta-ads-send-instagram-message.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Send Instagram message", () => { onDashboardRun({ title: "Send Instagram message" }) metaAds.sendInstagramMessage({ instagramAccountId: "instagram-account-id", recipientId: "instagram-scoped-id", text: "Your order is ready for pickup.", }) }) ``` Find `instagramAccountId` with [List Instagram accounts](/reference/integrations/meta-ads/actions/list-instagram-accounts). Pass the person's IGSID as `recipientId`; it's `senderId` in [On Instagram message received](/reference/integrations/meta-ads/triggers/on-instagram-message-received). Automate.ax sends through the Facebook Page linked to the Instagram account. `text` must be under 1,000 bytes. Meta accepts messages only inside the standard messaging window: 24 hours after the person's last message or interaction, or up to 7 days after a Click-to-Instagram-Direct ad conversation starts. Optional second argument `{ account }` selects a static project account binding. Returns `recipientId` and `messageId`. Sends aren't replay-safe. The action needs `instagram_basic`, `instagram_manage_messages`, `pages_read_engagement`, and `pages_show_list`. # Send Messenger message Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/send-messenger-message Sends a Messenger text message from a Facebook Page. `metaAds.sendMessengerMessage` sends a Messenger text message from a Facebook Page to one person. ```ts automations/meta-ads-send-messenger-message.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Send Messenger message", () => { onDashboardRun({ title: "Send Messenger message" }) metaAds.sendMessengerMessage({ pageId: "page-id", recipientId: "page-scoped-id", text: "Your order is ready for pickup.", }) }) ``` Pass the person's PSID as `recipientId`; it's `senderId` in [On Messenger message received](/reference/integrations/meta-ads/triggers/on-messenger-message-received). `text` accepts up to 2,000 characters. `messagingType` defaults to `RESPONSE`; use `UPDATE` for a proactive update. Optional second argument `{ account }` selects a static project account binding. Meta accepts both types only inside the standard messaging window: 24 hours after the person's last message, comment, or other interaction, or up to 7 days after a Click-to-Messenger ad conversation starts. Message tags aren't supported. Meta returns error `551` when the person isn't available. Returns `recipientId` and `messageId`. Sends aren't replay-safe. The action needs `pages_messaging` and `pages_show_list`. # Unhide Instagram comment Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/unhide-instagram-comment Restores a hidden comment on Instagram media. `metaAds.unhideInstagramComment` restores a hidden comment on the account's Instagram media. ```ts automations/meta-ads-unhide-instagram-comment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Unhide Instagram comment", () => { onDashboardRun({ title: "Unhide Instagram comment" }) metaAds.unhideInstagramComment({ commentId: "comment-id" }) }) ``` Restoring a comment is safe to retry. Optional second argument `{ account }` selects a static project account binding. Returns `success`. The action needs `instagram_basic`, `instagram_manage_comments`, `pages_read_engagement`, and `pages_show_list`. # Unhide Page comment Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/unhide-page-comment Restores a hidden comment on a Facebook Page post. `metaAds.unhidePageComment` restores a hidden comment on a Facebook Page post. ```ts automations/meta-ads-unhide-page-comment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Unhide Page comment", () => { onDashboardRun({ title: "Unhide Page comment" }) metaAds.unhidePageComment({ commentId: "comment-id", pageId: "page-id" }) }) ``` Restoring a comment is safe to retry. Optional second argument `{ account }` selects a static project account binding. Returns `success`. The action needs `pages_manage_engagement`, `pages_read_user_content`, and `pages_show_list`. # Update ad Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/update-ad Updates a Meta ad. `metaAds.updateAd` updates a Meta ad. ```ts automations/meta-ads-update-ad.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Update ad", () => { onDashboardRun({ title: "Update ad" }) const result = metaAds.updateAd({ id: "ad-id", changes: { name: "Launch ad v2", status: "PAUSED" }, }) // Use result in the next advertising, reporting, or delivery operation. }) ``` Put mutable Marketing API ad fields in `changes` using public camelCase names. Optional second argument `{ account }` selects a static project account binding. Returns Meta's mutation result. The update is not replay-safe. # Update ad set Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/update-ad-set Updates an ad set. `metaAds.updateAdSet` updates an ad set. ```ts automations/meta-ads-update-ad-set.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Update ad set", () => { onDashboardRun({ title: "Update ad set" }) const result = metaAds.updateAdSet({ id: "ad-set-id", changes: { dailyBudget: 7500, status: "PAUSED" }, }) // Use result in the next advertising, reporting, or delivery operation. }) ``` Put mutable Marketing API ad-set fields in `changes` using public camelCase names. Optional second argument `{ account }` selects a static project account binding. Returns Meta's mutation result. The update is not replay-safe. # Update audience Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/update-audience Updates a custom audience. `metaAds.updateAudience` updates a custom audience. ```ts automations/meta-ads-update-audience.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Update audience", () => { onDashboardRun({ title: "Update audience" }) const result = metaAds.updateAudience({ id: "audience-id", changes: { description: "Customers active in the last 90 days" }, }) // Use result in the next advertising, reporting, or delivery operation. }) ``` Put mutable audience fields in `changes` using public camelCase names. Optional second argument `{ account }` selects a static project account binding. Returns Meta's mutation result. The update is not replay-safe. # Update campaign Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/update-campaign Updates a Meta campaign. `metaAds.updateCampaign` updates a Meta campaign. ```ts automations/meta-ads-update-campaign.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Update campaign", () => { onDashboardRun({ title: "Update campaign" }) const result = metaAds.updateCampaign({ id: "campaign-id", changes: { name: "Fall launch v2", status: "PAUSED" }, }) // Use result in the next advertising, reporting, or delivery operation. }) ``` Put Marketing API campaign fields in `changes` using public camelCase names. Optional second argument `{ account }` selects a static project account binding. Returns Meta's mutation result. The update is not replay-safe. # Update creative Source: https://docs.automate.ax/reference/integrations/meta-ads/actions/update-creative Updates mutable fields on an ad creative. `metaAds.updateCreative` updates mutable fields on an ad creative. ```ts automations/meta-ads-update-creative.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Update creative", () => { onDashboardRun({ title: "Update creative" }) const result = metaAds.updateCreative({ id: "creative-id", changes: { name: "Launch creative v2" }, }) // Use result in the next advertising, reporting, or delivery operation. }) ``` Meta restricts which creative fields can change after use. Optional second argument `{ account }` selects a static project account binding. Returns Meta's mutation result. The update is not replay-safe. # Connect Meta Ads and extend its API Source: https://docs.automate.ax/reference/integrations/meta-ads/authorization-and-raw-api Configure Meta OAuth, Page and Instagram permissions, production access, token lifecycle, Webhooks, versioning, quotas, and custom Graph calls. Automate.ax connects Meta Ads through Meta OAuth. It exchanges Meta's short-lived authorization result for a long-lived user token and records its expiration. Meta does not issue a standard refresh token for this flow, so reconnect the account after expiration or invalidation. Packaged actions request the least permissions they need. Reads use `ads_read` or `ads_management`; writes and managed ad-account webhooks use `ads_management`; Business portfolio inventory also uses `business_management`. Lead reads use `ads_management`, `leads_retrieval`, `pages_manage_ads`, `pages_show_list`, and `pages_read_engagement`; managed lead webhooks also use `pages_manage_metadata`. Page and Instagram actions and triggers use `pages_show_list` plus these permissions: | Actions and triggers | Additional permissions | | - | - | | On Page comment created | `pages_manage_metadata`, `pages_read_user_content` | | Get Page comment, list post comments | `pages_read_engagement`, `pages_read_user_content` | | Reply to, hide, or unhide a Page comment | `pages_manage_engagement`, `pages_read_user_content` | | Delete Page comment | `pages_manage_engagement` or `pages_read_user_content` | | On Messenger message received | `pages_manage_metadata`, `pages_messaging` | | Send Messenger message, private reply to Page comment | `pages_messaging` | | List Messenger conversations or messages | `pages_manage_metadata`, `pages_messaging`, `pages_read_engagement` | | On Instagram comment or mention created | `instagram_basic`, `instagram_manage_comments`, `pages_manage_metadata`, `pages_read_engagement` | | Get, list, reply to, hide, unhide, or delete an Instagram comment | `instagram_basic`, `instagram_manage_comments`, `pages_read_engagement` | | Private reply to Instagram comment | `instagram_basic`, `instagram_manage_comments`, `instagram_manage_messages`, `pages_messaging`, `pages_read_engagement` | | On Instagram message received or deleted | `instagram_basic`, `instagram_manage_messages`, `pages_manage_metadata`, `pages_read_engagement` | | Send Instagram message | `instagram_basic`, `instagram_manage_messages`, `pages_read_engagement` | | List Instagram conversations or messages | `instagram_basic`, `instagram_manage_messages`, `pages_manage_metadata` | | List Pages | None | | List Instagram accounts | `instagram_basic` | Page-scoped calls act with a Page access token that Automate.ax derives from the connected user on each call; the person needs a task on the Page, such as `MODERATE` or `MESSAGING`. Instagram messaging and Instagram triggers go through the Facebook Page linked to the Instagram account. Meta grants Limited Access to development apps. Production use and access to assets owned by another business generally require Business Verification, App Review, and Advanced Access for each permission. Verify access with disposable business, ad-account, Page, pixel, and lead-form resources before relying on a workflow. > [!WARNING] > > Until Meta approves Advanced Access for the Page, Messenger, and Instagram > permissions, comment, mention, and message triggers only receive activity from > people with a role on the Meta app, and messages only reach those people. Real > customers' comments and messages arrive after Advanced Access. Messenger and Instagram sends work inside Meta's standard messaging window: 24 hours after the person's last message or interaction, or up to 7 days after a Click-to-Messenger or Click-to-Instagram-Direct ad conversation starts. A private reply to a comment is limited to one message within 7 days of the comment. The integration pins Graph and Marketing API `v26.0`. Version upgrades are explicit Automate.ax releases. API failures throw `MetaAdsApiError` with the HTTP status, Meta code and subcode, transient marker, trace ID, retry delay, and raw app, ad-account, and business-use-case usage headers. Back off when Meta reports quota pressure. Managed triggers configure the app-level `ad_account` or `page` Webhooks subscription, attach the selected ad account or Page to the app with every field its triggers need, validate Meta's GET challenge, and verify `X-Hub-Signature-256` against the exact request body. Instagram triggers attach the linked Page and route by Instagram account. Status-change events announce a change; read the object to obtain its current status. Filtered `subscriptions` events require a provider subscription created through the subscription actions. Use `getMetaAdsApi(account)` inside a custom account-backed action for an uncovered Graph edge. Paths remain under `https://graph.facebook.com/v26.0/`, query and body keys use public camel case, nested bodies are converted to Meta wire keys, and every response requires a Zod schema. This is an authenticated helper, not a generic packaged action. See Meta's [Marketing API authorization](https://developers.facebook.com/documentation/business-api/marketing-api/authorization), [Graph API versioning](https://developers.facebook.com/docs/graph-api/guides/versioning), [Ads Webhooks](https://developers.facebook.com/documentation/ads-commerce/marketing-api/webhooks/overview), [Lead Ads retrieval](https://developers.facebook.com/docs/marketing-api/guides/lead-ads/retrieving), [Webhooks for Pages](https://developers.facebook.com/documentation/pages-api/webhooks-for-pages), [Messenger webhooks](https://developers.facebook.com/documentation/business-messaging/messenger-platform/webhooks), [Instagram webhooks](https://developers.facebook.com/documentation/instagram-platform/webhooks/setup), [Messenger private replies](https://developers.facebook.com/documentation/business-messaging/messenger-platform/discovery/private-replies), and [Conversions API](https://developers.facebook.com/docs/marketing-api/conversions-api/using-the-api). # Meta Ads Source: https://docs.automate.ax/reference/integrations/meta-ads/index Manage Meta advertising, leads, Facebook Page and Instagram comments, Messenger and Instagram messages, and Webhooks events from Automate.ax. ## Exports ```ts theme={null} import { metaAds, metaAdsAccount, getMetaAdsApi } from "automate.ax/meta-ads" ``` * `metaAds` contains packaged Meta Ads actions and triggers. * `metaAdsAccount("name")` selects a named Meta Ads connection. * `getMetaAdsApi(account)` creates the authenticated, version-pinned Graph API helper for a custom account-backed action. Facebook Page comment and Messenger actions and triggers take a `pageId`; Instagram actions and triggers take an `instagramAccountId` for an Instagram professional account linked to a Page you manage. Use [List Pages](/reference/integrations/meta-ads/actions/list-pages) and [List Instagram accounts](/reference/integrations/meta-ads/actions/list-instagram-accounts) to find them. Read [Connect Meta Ads and extend its API](/reference/integrations/meta-ads/authorization-and-raw-api) before production use. Meta requires App Review, Advanced Access, and Business Verification for many cross-business capabilities. ## Triggers and actions * [On event](/reference/integrations/meta-ads/triggers/on-event) * [On campaign effective status changed](/reference/integrations/meta-ads/triggers/on-campaign-effective-status-changed) * [On ad set effective status changed](/reference/integrations/meta-ads/triggers/on-ad-set-effective-status-changed) * [On ad effective status changed](/reference/integrations/meta-ads/triggers/on-ad-effective-status-changed) * [On object created](/reference/integrations/meta-ads/triggers/on-object-created) * [On object updated](/reference/integrations/meta-ads/triggers/on-object-updated) * [On insights updated](/reference/integrations/meta-ads/triggers/on-insights-updated) * [On insights milestone reached](/reference/integrations/meta-ads/triggers/on-insights-milestone-reached) * [On creative fatigue changed](/reference/integrations/meta-ads/triggers/on-creative-fatigue-changed) * [On ad recommendation](/reference/integrations/meta-ads/triggers/on-ad-recommendation) * [On ad object processing completed](/reference/integrations/meta-ads/triggers/on-ad-object-processing-completed) * [On ad object issues changed](/reference/integrations/meta-ads/triggers/on-ad-object-issues-changed) * [On lead created](/reference/integrations/meta-ads/triggers/on-lead-created) * [On Page comment created](/reference/integrations/meta-ads/triggers/on-page-comment-created) * [On Messenger message received](/reference/integrations/meta-ads/triggers/on-messenger-message-received) * [On Instagram comment created](/reference/integrations/meta-ads/triggers/on-instagram-comment-created) * [On Instagram mention created](/reference/integrations/meta-ads/triggers/on-instagram-mention-created) * [On Instagram message received](/reference/integrations/meta-ads/triggers/on-instagram-message-received) * [On Instagram message deleted](/reference/integrations/meta-ads/triggers/on-instagram-message-deleted) * [List businesses](/reference/integrations/meta-ads/actions/list-businesses) * [List ad accounts](/reference/integrations/meta-ads/actions/list-ad-accounts) * [List business ad accounts](/reference/integrations/meta-ads/actions/list-business-ad-accounts) * [Get ad account](/reference/integrations/meta-ads/actions/get-ad-account) * [List campaigns](/reference/integrations/meta-ads/actions/list-campaigns) * [Get campaign](/reference/integrations/meta-ads/actions/get-campaign) * [Create campaign](/reference/integrations/meta-ads/actions/create-campaign) * [Update campaign](/reference/integrations/meta-ads/actions/update-campaign) * [Archive campaign](/reference/integrations/meta-ads/actions/archive-campaign) * [List ad sets](/reference/integrations/meta-ads/actions/list-ad-sets) * [Get ad set](/reference/integrations/meta-ads/actions/get-ad-set) * [Create ad set](/reference/integrations/meta-ads/actions/create-ad-set) * [Update ad set](/reference/integrations/meta-ads/actions/update-ad-set) * [Archive ad set](/reference/integrations/meta-ads/actions/archive-ad-set) * [List ads](/reference/integrations/meta-ads/actions/list-ads) * [Get ad](/reference/integrations/meta-ads/actions/get-ad) * [Create ad](/reference/integrations/meta-ads/actions/create-ad) * [Update ad](/reference/integrations/meta-ads/actions/update-ad) * [Archive ad](/reference/integrations/meta-ads/actions/archive-ad) * [List creatives](/reference/integrations/meta-ads/actions/list-creatives) * [Get creative](/reference/integrations/meta-ads/actions/get-creative) * [Create creative](/reference/integrations/meta-ads/actions/create-creative) * [Update creative](/reference/integrations/meta-ads/actions/update-creative) * [Delete creative](/reference/integrations/meta-ads/actions/delete-creative) * [List audiences](/reference/integrations/meta-ads/actions/list-audiences) * [Get audience](/reference/integrations/meta-ads/actions/get-audience) * [Create audience](/reference/integrations/meta-ads/actions/create-audience) * [Update audience](/reference/integrations/meta-ads/actions/update-audience) * [Delete audience](/reference/integrations/meta-ads/actions/delete-audience) * [Add audience users](/reference/integrations/meta-ads/actions/add-audience-users) * [Remove audience users](/reference/integrations/meta-ads/actions/remove-audience-users) * [List lead forms](/reference/integrations/meta-ads/actions/list-lead-forms) * [List leads](/reference/integrations/meta-ads/actions/list-leads) * [Get lead](/reference/integrations/meta-ads/actions/get-lead) * [List Pages](/reference/integrations/meta-ads/actions/list-pages) * [List Instagram accounts](/reference/integrations/meta-ads/actions/list-instagram-accounts) * [Get Page comment](/reference/integrations/meta-ads/actions/get-page-comment) * [List post comments](/reference/integrations/meta-ads/actions/list-post-comments) * [Reply to Page comment](/reference/integrations/meta-ads/actions/reply-to-page-comment) * [Hide Page comment](/reference/integrations/meta-ads/actions/hide-page-comment) * [Unhide Page comment](/reference/integrations/meta-ads/actions/unhide-page-comment) * [Delete Page comment](/reference/integrations/meta-ads/actions/delete-page-comment) * [Private reply to Page comment](/reference/integrations/meta-ads/actions/private-reply-to-page-comment) * [Send Messenger message](/reference/integrations/meta-ads/actions/send-messenger-message) * [List Messenger conversations](/reference/integrations/meta-ads/actions/list-messenger-conversations) * [List Messenger messages](/reference/integrations/meta-ads/actions/list-messenger-messages) * [Get Instagram comment](/reference/integrations/meta-ads/actions/get-instagram-comment) * [List Instagram media comments](/reference/integrations/meta-ads/actions/list-instagram-media-comments) * [Reply to Instagram comment](/reference/integrations/meta-ads/actions/reply-to-instagram-comment) * [Hide Instagram comment](/reference/integrations/meta-ads/actions/hide-instagram-comment) * [Unhide Instagram comment](/reference/integrations/meta-ads/actions/unhide-instagram-comment) * [Delete Instagram comment](/reference/integrations/meta-ads/actions/delete-instagram-comment) * [Private reply to Instagram comment](/reference/integrations/meta-ads/actions/private-reply-to-instagram-comment) * [Send Instagram message](/reference/integrations/meta-ads/actions/send-instagram-message) * [List Instagram conversations](/reference/integrations/meta-ads/actions/list-instagram-conversations) * [List Instagram messages](/reference/integrations/meta-ads/actions/list-instagram-messages) * [Get insights](/reference/integrations/meta-ads/actions/get-insights) * [List pixels](/reference/integrations/meta-ads/actions/list-pixels) * [Send conversion events](/reference/integrations/meta-ads/actions/send-conversion-events) * [List subscriptions](/reference/integrations/meta-ads/actions/list-subscriptions) * [Get subscription](/reference/integrations/meta-ads/actions/get-subscription) * [Create subscription](/reference/integrations/meta-ads/actions/create-subscription) * [Delete subscription](/reference/integrations/meta-ads/actions/delete-subscription) # On ad effective status changed Source: https://docs.automate.ax/reference/integrations/meta-ads/triggers/on-ad-effective-status-changed Starts when Meta reports that an ad's effective status changed. `metaAds.onAdEffectiveStatusChanged` starts when Meta reports that an ad's effective status changed. ```ts automations/meta-ads-on-ad-effective-status-changed.automation.ts theme={null} import { automation } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("On ad effective status changed", () => { const event = metaAds.onAdEffectiveStatusChanged({ adAccountId: "123456789" }) metaAds.getAdAccount({ adAccountId: event.accountId }) }) ``` The event identifies the ad in `value.objectId`. Read it to obtain the current effective status. Optional `account` selects a static project account binding. # On ad object issues changed Source: https://docs.automate.ax/reference/integrations/meta-ads/triggers/on-ad-object-issues-changed Starts when a Meta ad object enters an issue state. `metaAds.onAdObjectIssuesChanged` starts when a Meta ad object enters an issue state. ```ts automations/meta-ads-on-ad-object-issues-changed.automation.ts theme={null} import { automation } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("On ad object issues changed", () => { const event = metaAds.onAdObjectIssuesChanged({ adAccountId: "123456789" }) metaAds.getAdAccount({ adAccountId: event.accountId }) }) ``` Use the object ID from `value` to retrieve current issue and delivery state. Optional `account` selects a static project account binding. # On ad object processing completed Source: https://docs.automate.ax/reference/integrations/meta-ads/triggers/on-ad-object-processing-completed Starts when Meta finishes processing an ad object. `metaAds.onAdObjectProcessingCompleted` starts when Meta finishes processing an ad object. ```ts automations/meta-ads-on-ad-object-processing-completed.automation.ts theme={null} import { automation } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("On ad object processing completed", () => { const event = metaAds.onAdObjectProcessingCompleted({ adAccountId: "123456789", }) metaAds.getAdAccount({ adAccountId: event.accountId }) }) ``` Use the object ID from `value` to retrieve the current provider state. Optional `account` selects a static project account binding. # On ad recommendation Source: https://docs.automate.ax/reference/integrations/meta-ads/triggers/on-ad-recommendation Starts when Meta publishes an ad recommendation. `metaAds.onAdRecommendation` starts when Meta publishes an ad recommendation. ```ts automations/meta-ads-on-ad-recommendation.automation.ts theme={null} import { automation } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("On ad recommendation", () => { const event = metaAds.onAdRecommendation({ adAccountId: "123456789" }) metaAds.getAdAccount({ adAccountId: event.accountId }) }) ``` The payload includes recommendation type, stage, message, and affected object IDs when supplied. Optional `account` selects a static project account binding. # On ad set effective status changed Source: https://docs.automate.ax/reference/integrations/meta-ads/triggers/on-ad-set-effective-status-changed Starts when Meta reports that an ad set's effective status changed. `metaAds.onAdSetEffectiveStatusChanged` starts when Meta reports that an ad set's effective status changed. ```ts automations/meta-ads-on-ad-set-effective-status-changed.automation.ts theme={null} import { automation } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("On ad set effective status changed", () => { const event = metaAds.onAdSetEffectiveStatusChanged({ adAccountId: "123456789", }) metaAds.getAdAccount({ adAccountId: event.accountId }) }) ``` The event identifies the ad set in `value.objectId`. Read it to obtain the current effective status. Optional `account` selects a static project account binding. # On campaign effective status changed Source: https://docs.automate.ax/reference/integrations/meta-ads/triggers/on-campaign-effective-status-changed Starts when Meta reports that a campaign's effective status changed. `metaAds.onCampaignEffectiveStatusChanged` starts when Meta reports that a campaign's effective status changed. ```ts automations/meta-ads-on-campaign-effective-status-changed.automation.ts theme={null} import { automation } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("On campaign effective status changed", () => { const event = metaAds.onCampaignEffectiveStatusChanged({ adAccountId: "123456789", }) metaAds.getAdAccount({ adAccountId: event.accountId }) }) ``` The event identifies the campaign in `value.objectId`. Read the campaign to obtain its current effective status. Optional `account` selects a static project account binding. # On creative fatigue changed Source: https://docs.automate.ax/reference/integrations/meta-ads/triggers/on-creative-fatigue-changed Starts when Meta changes a creative-fatigue assessment. `metaAds.onCreativeFatigueChanged` starts when Meta changes a creative-fatigue assessment. ```ts automations/meta-ads-on-creative-fatigue-changed.automation.ts theme={null} import { automation } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("On creative fatigue changed", () => { const event = metaAds.onCreativeFatigueChanged({ adAccountId: "123456789" }) metaAds.getAdAccount({ adAccountId: event.accountId }) }) ``` The payload includes Meta's fatigue level, message, and affected ad group when supplied. Optional `account` selects a static project account binding. # On event Source: https://docs.automate.ax/reference/integrations/meta-ads/triggers/on-event Starts for any supported Meta ad-account webhook change. `metaAds.onEvent` starts for any supported Meta ad-account webhook change. ```ts automations/meta-ads-on-event.automation.ts theme={null} import { automation } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("On event", () => { const event = metaAds.onEvent({ adAccountId: "123456789" }) metaAds.getAdAccount({ adAccountId: event.accountId }) }) ``` Returns `{ accountId, field, occurredAt, value }`. Use `field` to distinguish provider webhook families. Optional `account` selects a static project account binding. # On insights milestone reached Source: https://docs.automate.ax/reference/integrations/meta-ads/triggers/on-insights-milestone-reached Starts when a configured insights milestone is reached. `metaAds.onInsightsMilestoneReached` starts when a configured insights milestone is reached. ```ts automations/meta-ads-on-insights-milestone-reached.automation.ts theme={null} import { automation } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("On insights milestone reached", () => { const event = metaAds.onInsightsMilestoneReached({ adAccountId: "123456789" }) metaAds.getAdAccount({ adAccountId: event.accountId }) }) ``` The provider subscription defines the metric, threshold, entity type, and filters. Optional `account` selects a static project account binding. # On insights updated Source: https://docs.automate.ax/reference/integrations/meta-ads/triggers/on-insights-updated Starts for `INSIGHTS_UPDATED` events from a configured ad-account subscription. `metaAds.onInsightsUpdated` starts for `INSIGHTS_UPDATED` events from a configured ad-account subscription. ```ts automations/meta-ads-on-insights-updated.automation.ts theme={null} import { automation } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("On insights updated", () => { const event = metaAds.onInsightsUpdated({ adAccountId: "123456789" }) metaAds.getAdAccount({ adAccountId: event.accountId }) }) ``` Use `metaAds.getInsights` to read the resulting reporting values. Optional `account` selects a static project account binding. # On Instagram comment created Source: https://docs.automate.ax/reference/integrations/meta-ads/triggers/on-instagram-comment-created Starts when someone comments on Instagram media or an Instagram ad. `metaAds.onInstagramCommentCreated` starts when someone comments on a selected Instagram professional account's media, including ads. ```ts automations/meta-ads-on-instagram-comment-created.automation.ts theme={null} import { automation } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Answer Instagram comments privately", () => { const comment = metaAds.onInstagramCommentCreated({ instagramAccountId: "instagram-account-id", }) metaAds.privateReplyToInstagramComment({ commentId: comment.commentId, instagramAccountId: comment.instagramAccountId, text: "Thanks for asking! Here are the details.", }) }) ``` Find `instagramAccountId` with [List Instagram accounts](/reference/integrations/meta-ads/actions/list-instagram-accounts). The account must be public and linked to a Facebook Page the connection manages; Automate.ax installs delivery on that Page. Comments the account itself posts don't start the trigger. Optional `account` selects a static project account binding. The event includes: * `commentId`, `instagramAccountId`, `text`, and `occurredAt` in Unix seconds * `parentId`, present when the comment replies to another comment * `from`, with the comment author's Instagram-scoped `id` and `username` * `media`, with `id` and `mediaProductType`, plus `adId` and `adTitle` for ad comments Meta can send duplicate notifications for comments on boosted posts and ads; each `commentId` starts at most one run. Meta doesn't include ad IDs for dynamic ads. The trigger needs `instagram_basic`, `instagram_manage_comments`, `pages_manage_metadata`, `pages_read_engagement`, and `pages_show_list`, and the Meta app needs Advanced Access for comment notifications. # On Instagram mention created Source: https://docs.automate.ax/reference/integrations/meta-ads/triggers/on-instagram-mention-created Starts when someone mentions an Instagram account in a caption or comment. `metaAds.onInstagramMentionCreated` starts when someone @mentions a selected Instagram professional account in a media caption or a comment. ```ts automations/meta-ads-on-instagram-mention-created.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Email Instagram mentions", () => { const mention = metaAds.onInstagramMentionCreated({ instagramAccountId: "instagram-account-id", }) sendEmail({ subject: "New Instagram mention", text: mention.mediaId }) }) ``` Find `instagramAccountId` with [List Instagram accounts](/reference/integrations/meta-ads/actions/list-instagram-accounts). The account must be linked to a Facebook Page the connection manages. Meta sends no notification when the media's owner is private, and story mentions arrive as Instagram messages instead. Optional `account` selects a static project account binding. The event includes `instagramAccountId`, `mediaId`, `occurredAt` in Unix seconds, and `kind`. `kind` is `caption` for a caption mention or `comment` for a comment mention; comment mentions also include `commentId`. A mention on another account's media isn't readable with [Get Instagram comment](/reference/integrations/meta-ads/actions/get-instagram-comment); Meta exposes it through the Instagram account's `mentioned_comment` field. The trigger needs the same permissions as [On Instagram comment created](/reference/integrations/meta-ads/triggers/on-instagram-comment-created). # On Instagram message deleted Source: https://docs.automate.ax/reference/integrations/meta-ads/triggers/on-instagram-message-deleted Starts when someone removes a direct message they sent to an Instagram professional account. `metaAds.onInstagramMessageDeleted` starts when someone removes a direct message they sent to a selected Instagram professional account. ```ts automations/meta-ads-on-instagram-message-deleted.automation.ts theme={null} import { automation, sendEmail } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Forward removed Instagram messages", () => { const deleted = metaAds.onInstagramMessageDeleted({ instagramAccountId: "instagram-account-id", }) sendEmail({ subject: "Delete this Instagram message", text: deleted.messageId, }) }) ``` Find `instagramAccountId` with [List Instagram accounts](/reference/integrations/meta-ads/actions/list-instagram-accounts). Meta requires apps to delete stored copies of a message when the person removes it. Use `messageId` to remove the message wherever your automation saved it from [On Instagram message received](/reference/integrations/meta-ads/triggers/on-instagram-message-received). Optional `account` selects a static project account binding. The event includes `instagramAccountId`, `messageId`, `senderId`, the person's Instagram-scoped ID, and `timestamp` in Unix milliseconds. Each `messageId` starts at most one run. The trigger needs the same permissions and account setup as [On Instagram message received](/reference/integrations/meta-ads/triggers/on-instagram-message-received). # On Instagram message received Source: https://docs.automate.ax/reference/integrations/meta-ads/triggers/on-instagram-message-received Starts when someone sends an Instagram professional account a direct message. `metaAds.onInstagramMessageReceived` starts when someone sends a selected Instagram professional account a direct message. ```ts automations/meta-ads-on-instagram-message-received.automation.ts theme={null} import { automation } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Acknowledge Instagram messages", () => { const message = metaAds.onInstagramMessageReceived({ instagramAccountId: "instagram-account-id", }) metaAds.sendInstagramMessage({ instagramAccountId: message.instagramAccountId, recipientId: message.senderId, text: "Thanks for your message! We'll reply shortly.", }) }) ``` Find `instagramAccountId` with [List Instagram accounts](/reference/integrations/meta-ads/actions/list-instagram-accounts). The account must be linked to a Facebook Page the connection manages and must allow connected tools under **Settings > Messages and story replies > Message controls > Connected Tools > Allow access to messages**. Messages the account sends don't start the trigger, and messages a person removes start [On Instagram message deleted](/reference/integrations/meta-ads/triggers/on-instagram-message-deleted) instead. Optional `account` selects a static project account binding. The event includes: * `senderId`, the person's Instagram-scoped ID (IGSID); pass it as `recipientId` to reply * `instagramAccountId`, `recipientId`, `messageId`, and `timestamp` in Unix milliseconds * `text` and `attachments`, such as `image`, `video`, `ig_reel`, `ig_post`, or `story_mention` * `quickReplyPayload`, `replyTo` with a replied-to `messageId` or `story`, and `referral` for Click-to-Instagram-Direct ads * `isUnsupported`, `true` when Meta can't render the message content Each `messageId` starts at most one run. The trigger needs `instagram_basic`, `instagram_manage_messages`, `pages_manage_metadata`, `pages_read_engagement`, and `pages_show_list`. # On lead created Source: https://docs.automate.ax/reference/integrations/meta-ads/triggers/on-lead-created Starts when a selected Facebook Page receives a Lead Ads lead. `metaAds.onLeadCreated` starts when a selected Facebook Page receives a Lead Ads lead. ```ts automations/meta-ads-on-lead-created.automation.ts theme={null} import { automation } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("On lead created", () => { const event = metaAds.onLeadCreated({ pageId: "page-id" }) metaAds.getLead({ leadId: event.leadgenId, pageId: event.pageId }) }) ``` Returns lead, Page, form, ad, and ad-group identifiers plus the provider creation time. Pass the event's `pageId` to `metaAds.getLead` and retrieve the lead promptly. Optional `account` selects a static project account binding. # On Messenger message received Source: https://docs.automate.ax/reference/integrations/meta-ads/triggers/on-messenger-message-received Starts when someone sends a Facebook Page a Messenger message. `metaAds.onMessengerMessageReceived` starts when someone sends a selected Facebook Page a Messenger message. ```ts automations/meta-ads-on-messenger-message-received.automation.ts theme={null} import { automation } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Acknowledge Messenger leads", () => { const message = metaAds.onMessengerMessageReceived({ pageId: "page-id" }) metaAds.sendMessengerMessage({ pageId: message.pageId, recipientId: message.senderId, text: "Thanks for your message! We'll reply shortly.", }) }) ``` Messages the Page sends, read receipts, reactions, and button taps don't start the trigger. Optional `account` selects a static project account binding. The event includes: * `senderId`, the person's Page-scoped ID (PSID); pass it as `recipientId` to reply * `pageId`, `recipientId`, `messageId`, and `timestamp` in Unix milliseconds * `text`, `attachments` with each `type` and provider `payload`, and `quickReplyPayload` * `replyToMessageId` when the person replies to a specific message * `referral` when the message comes from a Click-to-Messenger ad, with `adId`, `source`, `type`, `ref`, and `adsContextData` Each `messageId` starts at most one run. The trigger needs `pages_manage_metadata`, `pages_messaging`, and `pages_show_list`. Until the app has Advanced Access, Meta only delivers messages from people with a role on the Meta app. # On object created Source: https://docs.automate.ax/reference/integrations/meta-ads/triggers/on-object-created Starts for `OBJECT_CREATED` events from a configured ad-account subscription. `metaAds.onObjectCreated` starts for `OBJECT_CREATED` events from a configured ad-account subscription. ```ts automations/meta-ads-on-object-created.automation.ts theme={null} import { automation } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("On object created", () => { const event = metaAds.onObjectCreated({ adAccountId: "123456789" }) metaAds.getAdAccount({ adAccountId: event.accountId }) }) ``` Create the filtered provider subscription separately with `metaAds.createSubscription`. Optional `account` selects a static project account binding. # On object updated Source: https://docs.automate.ax/reference/integrations/meta-ads/triggers/on-object-updated Starts for `OBJECT_UPDATED` events from a configured ad-account subscription. `metaAds.onObjectUpdated` starts for `OBJECT_UPDATED` events from a configured ad-account subscription. ```ts automations/meta-ads-on-object-updated.automation.ts theme={null} import { automation } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("On object updated", () => { const event = metaAds.onObjectUpdated({ adAccountId: "123456789" }) metaAds.getAdAccount({ adAccountId: event.accountId }) }) ``` Create the filtered provider subscription separately with `metaAds.createSubscription`. Optional `account` selects a static project account binding. # On Page comment created Source: https://docs.automate.ax/reference/integrations/meta-ads/triggers/on-page-comment-created Starts when someone comments on a Facebook Page post or ad post. `metaAds.onPageCommentCreated` starts when someone comments on, or replies to a comment on, a selected Facebook Page's organic posts and ad posts. ```ts automations/meta-ads-on-page-comment-created.automation.ts theme={null} import { automation } from "automate.ax" import { metaAds } from "automate.ax/meta-ads" export default automation("Answer ad comments privately", () => { const comment = metaAds.onPageCommentCreated({ pageId: "page-id" }) metaAds.privateReplyToPageComment({ commentId: comment.commentId, pageId: comment.pageId, text: "Thanks for asking! Here are the details.", }) }) ``` Pass the Page ID from [List Pages](/reference/integrations/meta-ads/actions/list-pages). Meta sends comments on ad posts through the Page that runs the ad. The Page's own comments, comment edits, deletions, and reactions don't start the trigger. Optional `account` selects a static project account binding. The event includes: * `commentId`, `postId`, and `pageId` * `parentId`, present only when the comment replies to another comment * `from`, with the comment author's `id` and `name` when Meta includes them * `message`, plus `photo` or `video` when the comment has media * `createdTime` in Unix seconds * `post`, with post context such as `statusType`, `permalinkUrl`, and `promotionStatus` when Meta includes it Meta retries deliveries; each `commentId` starts at most one run. The trigger needs `pages_manage_metadata`, `pages_read_user_content`, and `pages_show_list`. Until the app has Advanced Access, Meta only delivers activity from people with a role on the Meta app. # Delete file Source: https://docs.automate.ax/reference/integrations/millionverifier/actions/delete-file Delete one MillionVerifier bulk verification file. `millionVerifier.deleteFile` deletes an uploaded bulk verification file. ```ts automations/millionverifier-delete-file.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { millionVerifier } from "automate.ax/millionverifier" export default automation("Delete verification file", () => { onDashboardRun({ title: "Delete verification file" }) millionVerifier.deleteFile({ fileId: "123" }) }) ``` Provide the numeric `fileId` as a string or number. An optional second argument `{ account }` selects a named MillionVerifier binding. The action returns no value after MillionVerifier accepts the deletion. Deletion changes provider state, so the action does not retry automatically after an indeterminate failure. # Download report Source: https://docs.automate.ax/reference/integrations/millionverifier/actions/download-report Download a filtered MillionVerifier bulk verification report. `millionVerifier.downloadReport` downloads results for a bulk file. ```ts automations/millionverifier-download-report.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { millionVerifier } from "automate.ax/millionverifier" export default automation("Download usable emails", () => { onDashboardRun({ title: "Download usable emails" }) millionVerifier.downloadReport({ fileId: "123", filter: "okAndCatchAll", }) }) ``` Provide `fileId`. `filter` defaults to `all` and accepts `ok`, `okAndCatchAll`, `unknown`, `invalid`, `all`, or `custom`. With `custom`, select `statuses` from `ok`, `catchAll`, `unknown`, `invalid`, and `disposable`, and optionally set the `free` or `role` flags. An optional second argument `{ account }` selects a named MillionVerifier binding. Returns a `Blob` containing the provider report. MillionVerifier errors returned as JSON are rejected instead of being returned as files. # Get credits Source: https://docs.automate.ax/reference/integrations/millionverifier/actions/get-credits Read the available MillionVerifier credits and plan code. `millionVerifier.getCredits` reads the connected account's current credit balances. ```ts automations/millionverifier-get-credits.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { millionVerifier } from "automate.ax/millionverifier" export default automation("Get credits", () => { onDashboardRun({ title: "Get credits" }) millionVerifier.getCredits() }) ``` No input is required. An optional second argument `{ account }` selects a named MillionVerifier binding. Returns `credits`, `bulkCredits`, `renewingCredits`, and MillionVerifier's numeric `plan` code. # Get file Source: https://docs.automate.ax/reference/integrations/millionverifier/actions/get-file Read the current status and counts for one MillionVerifier bulk file. `millionVerifier.getFile` reads one bulk verification file. ```ts automations/millionverifier-get-file.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { millionVerifier } from "automate.ax/millionverifier" export default automation("Get verification file", () => { onDashboardRun({ title: "Get verification file" }) millionVerifier.getFile({ fileId: "123" }) }) ``` Provide the numeric `fileId` as a string or number. An optional second argument `{ account }` selects a named MillionVerifier binding. Returns the normalized file status, progress, row and result counts, required credits, estimated seconds, provider error text, and provider timestamps. # List files Source: https://docs.automate.ax/reference/integrations/millionverifier/actions/list-files List MillionVerifier bulk files with provider-supported filters. `millionVerifier.listFiles` lists uploaded bulk files. ```ts automations/millionverifier-list-files.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { millionVerifier } from "automate.ax/millionverifier" export default automation("List finished files", () => { onDashboardRun({ title: "List finished files" }) millionVerifier.listFiles({ statuses: ["finished"] }) }) ``` ## Inputs `limit` defaults to 50 and accepts 1–50; `offset` defaults to 0. Filter by `fileIds`, `name`, `statuses`, `hasError`, `percentFrom`, `percentTo`, and created or updated timestamps. Dates can be JavaScript `Date` values or provider-formatted `YYYY-MM-DD HH:mm:ss` strings. Status values are `inProgress`, `error`, `finished`, `canceled`, `paused`, and `inQueueToStart`. An optional second argument `{ account }` selects a named MillionVerifier binding. ## Output Returns `{ files, total }`. Each file uses the same normalized shape as `getFile`. # Stop file Source: https://docs.automate.ax/reference/integrations/millionverifier/actions/stop-file Stop an in-progress MillionVerifier bulk verification file. `millionVerifier.stopFile` stops an in-progress bulk verification. ```ts automations/millionverifier-stop-file.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { millionVerifier } from "automate.ax/millionverifier" export default automation("Stop verification file", () => { onDashboardRun({ title: "Stop verification file" }) millionVerifier.stopFile({ fileId: "123" }) }) ``` Provide the numeric `fileId` as a string or number. An optional second argument `{ account }` selects a named MillionVerifier binding. The action returns no value after MillionVerifier accepts the operation. Stopping changes provider state, so the action does not retry automatically after an indeterminate failure. # Upload file Source: https://docs.automate.ax/reference/integrations/millionverifier/actions/upload-file Upload a CSV or text file for bulk email verification. `millionVerifier.uploadFile` starts bulk verification for a CSV or text file. ```ts automations/millionverifier-upload-file.automation.ts theme={null} import { automation, defineAction, onDashboardRun } from "automate.ax" import { millionVerifier } from "automate.ax/millionverifier" import { z } from "zod" const createEmailFile = defineAction("Create email file") .input(z.object({ email: z.email() })) .output(z.instanceof(File)) .retry({ replaySafety: "safe" }) .handler( ({ input }) => new File([input.email], "emails.csv", { type: "text/csv" }), ) export default automation("Upload email file", () => { onDashboardRun({ title: "Upload email file" }) const file = createEmailFile({ email: "ada@example.com" }) millionVerifier.uploadFile({ file }) }) ``` Provide a `File` containing the addresses to verify. Create the file at runtime in an action handler, as shown; a `File` created directly in the automation body is not deployment-compatible. An optional second argument `{ account }` selects a named MillionVerifier binding. Returns the normalized bulk file, including `fileId`, status, progress, row and result counts, required credits, estimated seconds, provider error text, and provider timestamps. An accepted upload can initially return `unknown`; this output-only status is not accepted by `listFiles.statuses`. Save `fileId` for later status and report actions. An accepted upload can consume credits, so the action does not retry automatically after an indeterminate failure. # Verify email Source: https://docs.automate.ax/reference/integrations/millionverifier/actions/verify-email Validate one email address with MillionVerifier's real-time API. `millionVerifier.verifyEmail` checks one email address and returns MillionVerifier's normalized result. ```ts automations/millionverifier-verify-email.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { millionVerifier } from "automate.ax/millionverifier" export default automation("Verify email", () => { onDashboardRun({ title: "Verify email" }) millionVerifier.verifyEmail({ email: "ada@example.com" }) }) ``` ## Inputs Provide `email`. `timeoutSeconds` defaults to 20 and accepts 2–60 seconds. An optional second argument `{ account }` selects a named MillionVerifier binding. ## Output Returns the normalized email, result, result code, provider sub-result, remaining credits, suggestion, quality when supplied, free and role flags, live-mode flag, and execution time in milliseconds. Results include `ok`, `catchAll`, `unknown`, `disposable`, `invalid`, `unverified`, and `error`. Each call consumes provider credits, including retries or repeated checks of the same address. The action therefore does not retry automatically after an indeterminate failure. # MillionVerifier Source: https://docs.automate.ax/reference/integrations/millionverifier/index Verify individual emails, process bulk files, and react to account and file notifications. Use MillionVerifier to validate one email immediately or process a CSV or text file in bulk: ```ts automations/verify-email.automation.ts theme={null} import { automation, markSignificant, onDashboardRun } from "automate.ax" import { millionVerifier } from "automate.ax/millionverifier" export default automation("Verify email", () => { const run = onDashboardRun({ title: "Verify email", fields: [ { name: "email", type: "email", placeholder: "ada@example.com", }, ], }) const verification = millionVerifier.verifyEmail({ email: run.data.email }) markSignificant(verification) }) ``` Connect an API key from MillionVerifier's API settings. MillionVerifier does not provide per-key scopes, so each connected key can use every endpoint allowed for its account. You can restrict a key to trusted IP addresses in MillionVerifier. Only organization members can submit the dashboard form. The verification result appears in the action output, and `markSignificant` keeps the completed run in the default Recent runs view. Single-email verification uses credits each time it runs, including repeated requests for the same address. Bulk uploads accept CSV or text files and return a file ID for status checks, report downloads, stopping, or deletion. ## Set up notifications MillionVerifier notifications require one manual webhook setup per connected account: 1. Add a MillionVerifier trigger and deploy the automation. 2. Copy its **Webhook URL** from the deployment output. 3. In MillionVerifier, open **Settings → Notifications**, paste the URL, and enable the notifications you need. The URL grants access to deliver events for that connected account. Keep it private and replace it if the account connection changes. MillionVerifier does not sign these callbacks. Automate.ax accepts callbacks only for active deployed triggers and deduplicates repeated file notifications by reason and file ID. Credit notifications can repeat because MillionVerifier does not include a delivery identifier. MillionVerifier supports one notification URL per account. Every active Automate.ax trigger on that connected account receives its matching events from the shared URL. ## Exports ```ts theme={null} import { millionVerifier, millionVerifierAccount, getMillionVerifierApi, } from "automate.ax/millionverifier" ``` * `millionVerifier` contains the packaged MillionVerifier actions and triggers. * `millionVerifierAccount("name")` selects a named MillionVerifier connection. * `getMillionVerifierApi` creates the authenticated MillionVerifier API helper for a custom account-backed action. ## Triggers * [On event](/reference/integrations/millionverifier/triggers/on-event) * [On no credit](/reference/integrations/millionverifier/triggers/on-no-credit) * [On low credit](/reference/integrations/millionverifier/triggers/on-low-credit) * [On file ready](/reference/integrations/millionverifier/triggers/on-file-ready) * [On file deletion scheduled](/reference/integrations/millionverifier/triggers/on-file-deletion-scheduled) ## Actions * [Verify email](/reference/integrations/millionverifier/actions/verify-email) * [Get credits](/reference/integrations/millionverifier/actions/get-credits) * [Upload file](/reference/integrations/millionverifier/actions/upload-file) * [Get file](/reference/integrations/millionverifier/actions/get-file) * [List files](/reference/integrations/millionverifier/actions/list-files) * [Download report](/reference/integrations/millionverifier/actions/download-report) * [Stop file](/reference/integrations/millionverifier/actions/stop-file) * [Delete file](/reference/integrations/millionverifier/actions/delete-file) # On event Source: https://docs.automate.ax/reference/integrations/millionverifier/triggers/on-event Run an automation for any supported MillionVerifier notification. `millionVerifier.onEvent` runs for credit and bulk-file notifications. ```ts automations/millionverifier-on-event.automation.ts theme={null} import { automation } from "automate.ax" import { millionVerifier } from "automate.ax/millionverifier" export default automation("Handle MillionVerifier events", () => { millionVerifier.onEvent() }) ``` `account` selects a static MillionVerifier API-key binding and defaults to the project binding. Runtime signals cannot select the watched account. Returns a discriminated union with `reason`: `noCredit`, `lowCredit`, `fileReady`, or `fileDeletionScheduled`. Narrow on `reason` to access credit or file details. Complete the manual callback setup in the [MillionVerifier overview](/reference/integrations/millionverifier/index) after deployment. # On file deletion scheduled Source: https://docs.automate.ax/reference/integrations/millionverifier/triggers/on-file-deletion-scheduled Run an automation when MillionVerifier schedules a bulk file for deletion. `millionVerifier.onFileDeletionScheduled` runs when MillionVerifier reports that a bulk file will be deleted. ```ts automations/millionverifier-on-file-deletion.automation.ts theme={null} import { automation } from "automate.ax" import { millionVerifier } from "automate.ax/millionverifier" export default automation("Watch file deletion", () => { millionVerifier.onFileDeletionScheduled() }) ``` `account` selects a static MillionVerifier API-key binding and defaults to the project binding. Returns `reason: "fileDeletionScheduled"` and `file` with `fileId`, `fileName`, and the provider's `deletesIn` description. Complete the manual callback setup in the [MillionVerifier overview](/reference/integrations/millionverifier/index) after deployment. # On file ready Source: https://docs.automate.ax/reference/integrations/millionverifier/triggers/on-file-ready Run an automation when a MillionVerifier bulk file is ready. `millionVerifier.onFileReady` runs when bulk verification finishes. ```ts automations/millionverifier-on-file-ready.automation.ts theme={null} import { automation } from "automate.ax" import { millionVerifier } from "automate.ax/millionverifier" export default automation("Download finished verification", () => { const event = millionVerifier.onFileReady() millionVerifier.downloadReport({ fileId: event.file.fileId }) }) ``` `account` selects a static MillionVerifier API-key binding and defaults to the project binding. Returns `reason: "fileReady"` and `file` with the file ID, name, total and unique row counts, and counts for ok, catch-all, unknown, invalid, and disposable results. Complete the manual callback setup in the [MillionVerifier overview](/reference/integrations/millionverifier/index) after deployment. # On low credit Source: https://docs.automate.ax/reference/integrations/millionverifier/triggers/on-low-credit Run an automation when MillionVerifier reaches its low-credit threshold. `millionVerifier.onLowCredit` runs when the account reaches its configured low-credit threshold. ```ts automations/millionverifier-on-low-credit.automation.ts theme={null} import { automation } from "automate.ax" import { millionVerifier } from "automate.ax/millionverifier" export default automation("Watch low credits", () => { millionVerifier.onLowCredit() }) ``` `account` selects a static MillionVerifier API-key binding and defaults to the project binding. Returns `{ reason: "lowCredit", credits }`. Complete the manual callback setup in the [MillionVerifier overview](/reference/integrations/millionverifier/index) after deployment. # On no credit Source: https://docs.automate.ax/reference/integrations/millionverifier/triggers/on-no-credit Run an automation when a MillionVerifier account runs out of credits. `millionVerifier.onNoCredit` runs when MillionVerifier reports that the account has no credits. ```ts automations/millionverifier-on-no-credit.automation.ts theme={null} import { automation } from "automate.ax" import { millionVerifier } from "automate.ax/millionverifier" export default automation("Watch MillionVerifier credits", () => { millionVerifier.onNoCredit() }) ``` `account` selects a static MillionVerifier API-key binding and defaults to the project binding. The trigger returns `{ reason: "noCredit" }`. Complete the manual callback setup in the [MillionVerifier overview](/reference/integrations/millionverifier/index) after deployment. # Append Notion block children Source: https://docs.automate.ax/reference/integrations/notion/actions/append-block-children Append child blocks at the end of a block or at a current API position. `notion.appendBlockChildren` append child blocks at the end of a block or at a current API position. ## Example ```ts automations/notion-append-block-children.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Append Notion block children", () => { onSchedule({ schedule: "0 9 * * *" }) notion.appendBlockChildren({ block_id: "block-id", children: [] }) }) ``` ## Inputs Provide `block_id` and `children`. Optional `position` uses the current API positioning shape; the retired top-level `after` field is rejected. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns a paginated `block` list containing the appended children. # Batch manage Notion agents Source: https://docs.automate.ax/reference/integrations/notion/actions/batch-manage-agents Submit multiple status, credit-limit, or delete operations as one task. `notion.batchManageAgents` submit multiple status, credit-limit, or delete operations as one task. ## Example ```ts automations/notion-batch-manage-agents.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Batch manage Notion agents", () => { onSchedule({ schedule: "0 9 * * *" }) notion.batchManageAgents({ operations: [ { action: "update_status", agent_id: "agent-id", fields: { status: "active" }, }, ], }) }) ``` ## Inputs `operations` is required. Each item is exactly one documented update-status, update-credit-limit, or delete variant. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns a queued `async_task`. Poll it with `getAsyncTask` using the returned ID. # Cancel Notion session Source: https://docs.automate.ax/reference/integrations/notion/actions/cancel-session Cancel a running Notion agent session. `notion.cancelSession` cancel a running Notion agent session. ## Example ```ts automations/notion-cancel-session.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Cancel Notion session", () => { onSchedule({ schedule: "0 9 * * *" }) notion.cancelSession({ session_id: "session-id" }) }) ``` ## Inputs `session_id` is required. Optional `event_id` targets an event boundary supported by Notion. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the updated `session` with its resulting status. # Complete Notion file upload Source: https://docs.automate.ax/reference/integrations/notion/actions/complete-file-upload Finalize a multipart upload after every part has been sent. `notion.completeFileUpload` finalize a multipart upload after every part has been sent. ## Example ```ts automations/notion-complete-file-upload.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Complete Notion file upload", () => { onSchedule({ schedule: "0 9 * * *" }) notion.completeFileUpload({ file_upload_id: "upload-id" }) }) ``` ## Inputs `file_upload_id` is required. Call this only after every numbered part succeeds. OAuth requires no additional content capability; personal access tokens use their normal API access. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the completed `file_upload` and its final status. # Create Notion comment Source: https://docs.automate.ax/reference/integrations/notion/actions/create-comment Create a page comment or reply in an existing discussion. `notion.createComment` create a page comment or reply in an existing discussion. ## Example ```ts automations/notion-create-comment.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Create Notion comment", () => { onSchedule({ schedule: "0 9 * * *" }) notion.createComment({ parent: { page_id: "page-id" }, markdown: "Hello" }) }) ``` ## Inputs Choose exactly one target (`parent` or `discussion_id`) and exactly one content form (`markdown` or `rich_text`). Attachments and display name are optional. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the created full or partial `comment` object. Use the returned `discussion_id` for follow-up replies. # Create Notion data source Source: https://docs.automate.ax/reference/integrations/notion/actions/create-data-source Create a data source and property schema beneath a database. `notion.createDataSource` create a data source and property schema beneath a database. ## Example ```ts automations/notion-create-data-source.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Create Notion data source", () => { onSchedule({ schedule: "0 9 * * *" }) notion.createDataSource({ parent: { type: "database_id", database_id: "database-id" }, properties: {}, }) }) ``` ## Inputs `parent` and `properties` are required. Title and icon are optional. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the created full or partial `data_source` object. # Create Notion database Source: https://docs.automate.ax/reference/integrations/notion/actions/create-database Create a database container and its initial data source. `notion.createDatabase` create a database container and its initial data source. ## Example ```ts automations/notion-create-database.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Create Notion database", () => { onSchedule({ schedule: "0 9 * * *" }) notion.createDatabase({ parent: { type: "page_id", page_id: "page-id" }, initial_data_source: { properties: {} }, }) }) ``` ## Inputs `parent` is required. Add database metadata and `initial_data_source` to define the first schema; title and presentation fields are optional. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the created full or partial `database` object. A database is the container; query rows through its data-source ID. # Create Notion file upload Source: https://docs.automate.ax/reference/integrations/notion/actions/create-file-upload Create a single-part, multipart, or external-URL file upload. `notion.createFileUpload` create a single-part, multipart, or external-URL file upload. ## Example ```ts automations/notion-create-file-upload.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Create Notion file upload", () => { onSchedule({ schedule: "0 9 * * *" }) notion.createFileUpload({ filename: "report.pdf", content_type: "application/pdf", }) }) ``` ## Inputs Choose `single_part`, `multi_part`, or `external_url`; `single_part` is the provider default. Multipart uploads require `filename` and 1 through 10,000 parts. External URLs must use HTTPS. OAuth requires no additional content capability; personal access tokens use their normal API access. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns a `file_upload` with status, upload URLs, expiry, content metadata, and multipart progress when applicable. For uploaded bytes, call `sendFileUpload`; multipart uploads also require `completeFileUpload`. # Create Notion meeting note Source: https://docs.automate.ax/reference/integrations/notion/actions/create-meeting-note Create a Notion meeting note from a block or uploaded recording. `notion.createMeetingNote` create a Notion meeting note from a block or uploaded recording. ## Example ```ts automations/notion-create-meeting-note.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Create Notion meeting note", () => { onSchedule({ schedule: "0 9 * * *" }) notion.createMeetingNote({ source: { type: "block", block_id: "block-id" }, title: "Weekly sync", }) }) ``` ## Inputs Provide `source`. A `block` source must not include `parent`; a `file_upload` source requires a page `parent`. `title`, `language`, and kickoff-summary options are optional. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the created `block`, including meeting-note state when Notion returns the full object. # Create or update Notion session Source: https://docs.automate.ax/reference/integrations/notion/actions/create-or-update-session Start an agent session or send input to an existing session. `notion.createOrUpdateSession` start an agent session or send input to an existing session. ## Example ```ts automations/notion-create-or-update-session.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Create or update Notion session", () => { onSchedule({ schedule: "0 9 * * *" }) notion.createOrUpdateSession({ agent_id: "agent-id", message: "Summarize this workspace", }) }) ``` ## Inputs Choose exactly one mode: `message`, `actions`, or `continue_from`. Action responses and continuations require `session_id`; a first message may use `agent_id`. Attachments, metadata, and prompt context apply only to documented variants. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the current `session` state. When status is `requires_action`, send the selected action response with the same `session_id`. # Create Notion page Source: https://docs.automate.ax/reference/integrations/notion/actions/create-page Create a page with properties and optional initial content. `notion.createPage` create a page with properties and optional initial content. ## Example ```ts automations/notion-create-page.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Create Notion page", () => { onSchedule({ schedule: "0 9 * * *" }) notion.createPage({ parent: { type: "page_id", page_id: "parent-page-id" }, properties: {}, }) }) ``` ## Inputs `parent` and `properties` are optional for connection types that may create a private workspace page. Markdown cannot be combined with `content` or `children`, and templates cannot be combined with `children`. Set `allow_async` with markdown when Notion should create the page as a background task. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the created full or partial `page` object for a synchronous request. An asynchronous markdown request returns an `async_task`; pass its `id` to `getAsyncTask` and respect `poll_after_seconds` while it is pending. # Create Notion view Source: https://docs.automate.ax/reference/integrations/notion/actions/create-view Create a configured view for a data source. `notion.createView` create a configured view for a data source. ## Example ```ts automations/notion-create-view.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Create Notion view", () => { onSchedule({ schedule: "0 9 * * *" }) notion.createView({ data_source_id: "data-source-id", database_id: "database-id", name: "Table", type: "table", }) }) ``` ## Inputs `data_source_id`, `name`, and `type` are required. Choose exactly one destination mode: `database_id`, `view_id`, or `create_database`; configuration varies by view type. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the created full or partial `view` object. # Create Notion view query Source: https://docs.automate.ax/reference/integrations/notion/actions/create-view-query Create a temporary materialized query for a view. `notion.createViewQuery` create a temporary materialized query for a view. ## Example ```ts automations/notion-create-view-query.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Create Notion view query", () => { onSchedule({ schedule: "0 9 * * *" }) notion.createViewQuery({ view_id: "view-id", page_size: 50 }) }) ``` ## Inputs `view_id` is required. Optional `page_size` controls the first result page. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns a `view_query` with its query ID, expiry time, first results, count, and cursor. Keep both `view_id` and the returned query `id` for later pages or deletion. # Delete Notion agent Source: https://docs.automate.ax/reference/integrations/notion/actions/delete-agent Delete a custom Notion agent. `notion.deleteAgent` delete a custom Notion agent. ## Example ```ts automations/notion-delete-agent.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Delete Notion agent", () => { onSchedule({ schedule: "0 9 * * *" }) notion.deleteAgent({ agent_id: "agent-id" }) }) ``` ## Inputs `agent_id` is required. Endpoint-specific restrictions apply to personal-agent identifiers. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the agent ID, `status: "deleted"`, and deletion timestamp. # Delete Notion block Source: https://docs.automate.ax/reference/integrations/notion/actions/delete-block Move a Notion block to the trash. `notion.deleteBlock` move a Notion block to the trash. ## Example ```ts automations/notion-delete-block.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Delete Notion block", () => { onSchedule({ schedule: "0 9 * * *" }) notion.deleteBlock({ block_id: "block-id" }) }) ``` ## Inputs Provide `block_id`. Notion treats deletion as a trash-state transition rather than an immediate permanent erase. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the trashed full or partial `block` object. # Delete Notion comment Source: https://docs.automate.ax/reference/integrations/notion/actions/delete-comment Delete a Notion comment by ID. `notion.deleteComment` delete a Notion comment by ID. ## Example ```ts automations/notion-delete-comment.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Delete Notion comment", () => { onSchedule({ schedule: "0 9 * * *" }) notion.deleteComment({ comment_id: "comment-id" }) }) ``` ## Inputs `comment_id` is required. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the deleted full or partial `comment` object. # Delete Notion view Source: https://docs.automate.ax/reference/integrations/notion/actions/delete-view Delete a Notion database view. `notion.deleteView` delete a Notion database view. ## Example ```ts automations/notion-delete-view.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Delete Notion view", () => { onSchedule({ schedule: "0 9 * * *" }) notion.deleteView({ view_id: "view-id" }) }) ``` ## Inputs `view_id` is required. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the deleted partial `view` reference. # Delete Notion view query Source: https://docs.automate.ax/reference/integrations/notion/actions/delete-view-query Delete a temporary materialized view query. `notion.deleteViewQuery` delete a temporary materialized view query. ## Example ```ts automations/notion-delete-view-query.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Delete Notion view query", () => { onSchedule({ schedule: "0 9 * * *" }) notion.deleteViewQuery({ view_id: "view-id", query_id: "query-id" }) }) ``` ## Inputs `view_id` and `query_id` are required. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns a `view_query` object with `deleted: true`. # Get Notion agent Source: https://docs.automate.ax/reference/integrations/notion/actions/get-agent Retrieve a Notion agent and optional verbose configuration. `notion.getAgent` retrieve a Notion agent and optional verbose configuration. ## Example ```ts automations/notion-get-agent.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Get Notion agent", () => { onSchedule({ schedule: "0 9 * * *" }) notion.getAgent({ agent_id: "agent-id", verbose: true }) }) ``` ## Inputs `agent_id` is required; Notion also accepts its documented personal-agent identifiers. `verbose` requests additional configuration. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the full `agent` object, including status, connections, version, and configuration that the caller may see. # Get Notion agent insights Source: https://docs.automate.ax/reference/integrations/notion/actions/get-agent-insights Retrieve usage and run insights for a Notion agent. `notion.getAgentInsights` retrieve usage and run insights for a Notion agent. ## Example ```ts automations/notion-get-agent-insights.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Get Notion agent insights", () => { onSchedule({ schedule: "0 9 * * *" }) notion.getAgentInsights({ agent_id: "agent-id" }) }) ``` ## Inputs `agent_id` is required. Optional numeric `start_time` and `end_time` bound the provider time range. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns `agent_insights` with status, credit use and limit, completed runs, and creator visibility. # Get Notion background task Source: https://docs.automate.ax/reference/integrations/notion/actions/get-async-task Retrieve the status or result of a Notion background task. `notion.getAsyncTask` retrieve the status or result of a Notion background task. ## Example ```ts automations/notion-get-async-task.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Get Notion async task", () => { onSchedule({ schedule: "0 9 * * *" }) notion.getAsyncTask({ task_id: "task-id" }) }) ``` ## Inputs Provide `task_id`, the ID returned by an asynchronous Notion operation. OAuth requires no additional content capability; personal access tokens use their normal API access. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns an `async_task` object. Queued and running tasks include `poll_after_seconds`; succeeded tasks include `result`; failed tasks include the provider error. Poll no faster than `poll_after_seconds`. The official client retries only safe transient read failures. # Get Notion block Source: https://docs.automate.ax/reference/integrations/notion/actions/get-block Retrieve a block that is shared with the connected Notion integration. `notion.getBlock` retrieve a block that is shared with the connected Notion integration. ## Example ```ts automations/notion-get-block.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Get Notion block", () => { onSchedule({ schedule: "0 9 * * *" }) notion.getBlock({ block_id: "block-id" }) }) ``` ## Inputs Provide `block_id`. The integration must be able to read the page containing the block. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the current typed block variant, or Notion's partial `{ object, id }` shape when the provider omits inaccessible fields. # Get Notion comment Source: https://docs.automate.ax/reference/integrations/notion/actions/get-comment Retrieve a Notion comment by ID. `notion.getComment` retrieve a Notion comment by ID. ## Example ```ts automations/notion-get-comment.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Get Notion comment", () => { onSchedule({ schedule: "0 9 * * *" }) notion.getComment({ comment_id: "comment-id" }) }) ``` ## Inputs `comment_id` is required. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the full comment when readable, including its parent, discussion ID, author, and content, or a partial comment reference. # Get current Notion user Source: https://docs.automate.ax/reference/integrations/notion/actions/get-current-user Retrieve the bot user represented by the connected credential. `notion.getCurrentUser` retrieve the bot user represented by the connected credential. ## Example ```ts automations/notion-get-current-user.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Get current Notion user", () => { onSchedule({ schedule: "0 9 * * *" }) notion.getCurrentUser() }) ``` ## Inputs No input is required. OAuth and personal-access-token connections are supported. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the current full `user` object. Use this action to confirm which bot identity and workspace a credential represents. # Get Notion data source Source: https://docs.automate.ax/reference/integrations/notion/actions/get-data-source Retrieve a data source and its property schema. `notion.getDataSource` retrieve a data source and its property schema. ## Example ```ts automations/notion-get-data-source.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Get Notion data source", () => { onSchedule({ schedule: "0 9 * * *" }) notion.getDataSource({ data_source_id: "data-source-id" }) }) ``` ## Inputs `data_source_id` is required. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the full data source or a partial `data_source` reference. # Get Notion database Source: https://docs.automate.ax/reference/integrations/notion/actions/get-database Retrieve a database container and its data-source references. `notion.getDatabase` retrieve a database container and its data-source references. ## Example ```ts automations/notion-get-database.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Get Notion database", () => { onSchedule({ schedule: "0 9 * * *" }) notion.getDatabase({ database_id: "database-id" }) }) ``` ## Inputs `database_id` is required. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the full database or a partial `database` reference, including visible data sources when available. # Get Notion file upload Source: https://docs.automate.ax/reference/integrations/notion/actions/get-file-upload Retrieve status and metadata for a Notion file upload. `notion.getFileUpload` retrieve status and metadata for a Notion file upload. ## Example ```ts automations/notion-get-file-upload.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Get Notion file upload", () => { onSchedule({ schedule: "0 9 * * *" }) notion.getFileUpload({ file_upload_id: "upload-id" }) }) ``` ## Inputs `file_upload_id` is required. OAuth requires no additional content capability; personal access tokens use their normal API access. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the `file_upload`, including expiry, filename, content type, byte length, status, and import or multipart details. # Get Notion page Source: https://docs.automate.ax/reference/integrations/notion/actions/get-page Retrieve a Notion page and its visible properties. `notion.getPage` retrieve a Notion page and its visible properties. ## Example ```ts automations/notion-get-page.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Get Notion page", () => { onSchedule({ schedule: "0 9 * * *" }) notion.getPage({ page_id: "page-id" }) }) ``` ## Inputs Provide `page_id`. Optional `filter_properties` limits the returned property IDs. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the full page when accessible, or Notion's partial `page` reference. # Get Notion page markdown Source: https://docs.automate.ax/reference/integrations/notion/actions/get-page-markdown Retrieve a Notion page as markdown. `notion.getPageMarkdown` retrieve a Notion page as markdown. ## Example ```ts automations/notion-get-page-markdown.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Get Notion page markdown", () => { onSchedule({ schedule: "0 9 * * *" }) notion.getPageMarkdown({ page_id: "page-id", include_transcript: true }) }) ``` ## Inputs Provide `page_id`. Set `include_transcript` to include supported meeting transcript text. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns `id`, `markdown`, `truncated`, and `unknown_block_ids`. Inspect unknown IDs before assuming the markdown is complete. # Get Notion page property Source: https://docs.automate.ax/reference/integrations/notion/actions/get-page-property Retrieve one page property, including paginated property values. `notion.getPageProperty` retrieve one page property, including paginated property values. ## Example ```ts automations/notion-get-page-property.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Get Notion page property", () => { onSchedule({ schedule: "0 9 * * *" }) notion.getPageProperty({ page_id: "page-id", property_id: "property-id", page_size: 50, }) }) ``` ## Inputs Provide `page_id` and `property_id`. Optional `start_cursor` and `page_size` paginate title, rich-text, people, relation, and roll-up values. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns a typed `property_item` or a `list` of property items, depending on the property type, including roll-up values. # Get Notion session Source: https://docs.automate.ax/reference/integrations/notion/actions/get-session Retrieve a Notion agent session and its current state. `notion.getSession` retrieve a Notion agent session and its current state. ## Example ```ts automations/notion-get-session.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Get Notion session", () => { onSchedule({ schedule: "0 9 * * *" }) notion.getSession({ session_id: "session-id" }) }) ``` ## Inputs `session_id` is required. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the full `session`, including status, timestamps, pending actions, and provider error details when present. # Get Notion user Source: https://docs.automate.ax/reference/integrations/notion/actions/get-user Retrieve a Notion user by ID. `notion.getUser` retrieve a Notion user by ID. ## Example ```ts automations/notion-get-user.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Get Notion user", () => { onSchedule({ schedule: "0 9 * * *" }) notion.getUser({ user_id: "user-id" }) }) ``` ## Inputs `user_id` is required. OAuth can use the user-information capability; a personal token can retrieve only its owner. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the full `user` object. # Get Notion view Source: https://docs.automate.ax/reference/integrations/notion/actions/get-view Retrieve a Notion database view. `notion.getView` retrieve a Notion database view. ## Example ```ts automations/notion-get-view.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Get Notion view", () => { onSchedule({ schedule: "0 9 * * *" }) notion.getView({ view_id: "view-id" }) }) ``` ## Inputs `view_id` is required. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the full view configuration or a partial `view` reference. # Get Notion view query results Source: https://docs.automate.ax/reference/integrations/notion/actions/get-view-query-results Retrieve another page from an existing view query. `notion.getViewQueryResults` retrieve another page from an existing view query. ## Example ```ts automations/notion-get-view-query-results.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Get Notion view query results", () => { onSchedule({ schedule: "0 9 * * *" }) notion.getViewQueryResults({ view_id: "view-id", query_id: "query-id", page_size: 50, }) }) ``` ## Inputs `view_id` and `query_id` are required. Use `start_cursor` and `page_size` for pagination. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns a paginated `page` list. Queries expire at the time reported by `createViewQuery`. # List Notion block children Source: https://docs.automate.ax/reference/integrations/notion/actions/list-block-children List the direct children of a Notion block with cursor pagination. `notion.listBlockChildren` list the direct children of a Notion block with cursor pagination. ## Example ```ts automations/notion-list-block-children.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("List Notion block children", () => { onSchedule({ schedule: "0 9 * * *" }) notion.listBlockChildren({ block_id: "block-id", page_size: 50 }) }) ``` ## Inputs Provide `block_id`. Optional `start_cursor` continues a previous page, and `page_size` accepts 1 through 100. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns a `block` list with `results`, `has_more`, and `next_cursor`. It does not recursively fetch descendants. # List Notion comments Source: https://docs.automate.ax/reference/integrations/notion/actions/list-comments List comments attached to a block or page. `notion.listComments` list comments attached to a block or page. ## Example ```ts automations/notion-list-comments.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("List Notion comments", () => { onSchedule({ schedule: "0 9 * * *" }) notion.listComments({ block_id: "block-id", page_size: 50 }) }) ``` ## Inputs `block_id` is required. Optional cursor and page size paginate 1 through 100 results. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns a paginated `comment` list. Preserve each result's `discussion_id` when creating a reply. # List Notion custom emoji Source: https://docs.automate.ax/reference/integrations/notion/actions/list-custom-emojis List custom emoji visible in the connected workspace. `notion.listCustomEmojis` list custom emoji visible in the connected workspace. ## Example ```ts automations/notion-list-custom-emojis.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("List Notion custom emoji", () => { onSchedule({ schedule: "0 9 * * *" }) notion.listCustomEmojis({ name: "party", page_size: 50 }) }) ``` ## Inputs All fields are optional. Filter by `name`, or paginate with `start_cursor` and `page_size`. OAuth requires no additional content capability; personal access tokens use their normal API access. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns a paginated `custom_emoji` list. # List Notion data source templates Source: https://docs.automate.ax/reference/integrations/notion/actions/list-data-source-templates List page templates available in a data source. `notion.listDataSourceTemplates` list page templates available in a data source. ## Example ```ts automations/notion-list-data-source-templates.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("List Notion data source templates", () => { onSchedule({ schedule: "0 9 * * *" }) notion.listDataSourceTemplates({ data_source_id: "data-source-id", page_size: 50, }) }) ``` ## Inputs `data_source_id` is required. `name` filters templates; `start_cursor` and `page_size` paginate results. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns `templates`, `has_more`, and `next_cursor`; each template includes its ID, name, and default flag. # List Notion file uploads Source: https://docs.automate.ax/reference/integrations/notion/actions/list-file-uploads List file uploads visible to the connected account. `notion.listFileUploads` list file uploads visible to the connected account. ## Example ```ts automations/notion-list-file-uploads.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("List Notion file uploads", () => { onSchedule({ schedule: "0 9 * * *" }) notion.listFileUploads({ status: "uploaded", page_size: 50 }) }) ``` ## Inputs All fields are optional. Filter by `status`, or paginate with `start_cursor` and `page_size`. OAuth requires no additional content capability; personal access tokens use their normal API access. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns a paginated `file_upload` list. # List Notion users Source: https://docs.automate.ax/reference/integrations/notion/actions/list-users List workspace users through an OAuth connection. `notion.listUsers` list workspace users through an OAuth connection. ## Example ```ts automations/notion-list-users.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("List Notion users", () => { onSchedule({ schedule: "0 9 * * *" }) notion.listUsers({ page_size: 50 }) }) ``` ## Inputs Optional `start_cursor` and `page_size` paginate workspace users. This action requires OAuth; personal access tokens cannot satisfy it. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns a paginated `user` list. # List Notion views Source: https://docs.automate.ax/reference/integrations/notion/actions/list-views List views for a database or data source. `notion.listViews` list views for a database or data source. ## Example ```ts automations/notion-list-views.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("List Notion views", () => { onSchedule({ schedule: "0 9 * * *" }) notion.listViews({ database_id: "database-id", page_size: 50 }) }) ``` ## Inputs Provide `database_id`, `data_source_id`, or both. Optional cursor and page size paginate results. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns a paginated `view` list. # Move Notion page Source: https://docs.automate.ax/reference/integrations/notion/actions/move-page Move a page beneath another supported Notion parent. `notion.movePage` move a page beneath another supported Notion parent. ## Example ```ts automations/notion-move-page.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Move Notion page", () => { onSchedule({ schedule: "0 9 * * *" }) notion.movePage({ page_id: "page-id", parent: { type: "page_id", page_id: "new-parent-id" }, }) }) ``` ## Inputs Provide `page_id` and a page, database, or data-source `parent` accepted by the current Notion API. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the moved full or partial `page` object. # Query Notion agents Source: https://docs.automate.ax/reference/integrations/notion/actions/query-agents Query accessible Notion agents with filters and pagination. `notion.queryAgents` query accessible Notion agents with filters and pagination. ## Example ```ts automations/notion-query-agents.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Query Notion agents", () => { onSchedule({ schedule: "0 9 * * *" }) notion.queryAgents({ query: "support", page_size: 50 }) }) ``` ## Inputs All fields are optional. Use text query, filters, sorts, cursor, page size, verbose output, or deleted-agent inclusion. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns a paginated `agent` list. Notion agent APIs are public beta and require an eligible workspace and integration. # Query Notion data source Source: https://docs.automate.ax/reference/integrations/notion/actions/query-data-source Query pages from a data source with filters and sorts. `notion.queryDataSource` query pages from a data source with filters and sorts. ## Example ```ts automations/notion-query-data-source.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Query Notion data source", () => { onSchedule({ schedule: "0 9 * * *" }) notion.queryDataSource({ data_source_id: "data-source-id", page_size: 50 }) }) ``` ## Inputs `data_source_id` is required. Optional filters, sorts, property projections, cursor, page size, trash state, and result type follow the current API. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns a paginated `page_or_data_source` list. Use `next_cursor` until `has_more` is false. The retired `archived` filter is rejected. # Query Notion meeting notes Source: https://docs.automate.ax/reference/integrations/notion/actions/query-meeting-notes Query meeting notes with provider filters and sorting. `notion.queryMeetingNotes` query meeting notes with provider filters and sorting. ## Example ```ts automations/notion-query-meeting-notes.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Query Notion meeting notes", () => { onSchedule({ schedule: "0 9 * * *" }) notion.queryMeetingNotes({ limit: 25 }) }) ``` ## Inputs All fields are optional. Use `filter`, `sort`, and `limit`; `limit` accepts 1 through 50 and defaults according to Notion. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns `results` and `has_more`. Each result is a typed meeting-notes block. # Query Notion session events Source: https://docs.automate.ax/reference/integrations/notion/actions/query-session-events Query the ordered events emitted within an agent session. `notion.querySessionEvents` query the ordered events emitted within an agent session. ## Example ```ts automations/notion-query-session-events.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Query Notion session events", () => { onSchedule({ schedule: "0 9 * * *" }) notion.querySessionEvents({ session_id: "session-id", page_size: 50 }) }) ``` ## Inputs `session_id` is required. Optional filters, sorts, cursor, and page size narrow the event stream. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns a paginated `session_event` list with typed user messages, agent messages, tool activity, and other documented variants. # Query Notion sessions Source: https://docs.automate.ax/reference/integrations/notion/actions/query-sessions Query Notion agent sessions with filters and sorting. `notion.querySessions` query Notion agent sessions with filters and sorting. ## Example ```ts automations/notion-query-sessions.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Query Notion sessions", () => { onSchedule({ schedule: "0 9 * * *" }) notion.querySessions({ page_size: 50 }) }) ``` ## Inputs All fields are optional. Search titles, filter session fields and time ranges, sort, and paginate with a cursor. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns a paginated `session` list. # Search Notion Source: https://docs.automate.ax/reference/integrations/notion/actions/search Search pages and data sources shared with the integration. `notion.search` search pages and data sources shared with the integration. ## Example ```ts automations/notion-search.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Search Notion", () => { onSchedule({ schedule: "0 9 * * *" }) notion.search({ query: "Roadmap", page_size: 50 }) }) ``` ## Inputs All fields are optional. Search by title, sort by last edited time or relevance, filter object type or trash state, and paginate with a cursor. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns a paginated `page_or_data_source` list. Search does not bypass Notion sharing; absent results may mean the integration lacks access. # Send Notion file upload Source: https://docs.automate.ax/reference/integrations/notion/actions/send-file-upload Send file bytes or one numbered part to a pending upload. `notion.sendFileUpload` send file bytes or one numbered part to a pending upload. ## Example ```ts automations/notion-send-file-upload.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Send Notion file upload", () => { onSchedule({ schedule: "0 9 * * *" }) notion.sendFileUpload({ file_upload_id: "upload-id", file: { data: new Blob(["hello"], { type: "text/plain; charset=utf-8" }), filename: "hello.txt", }, }) }) ``` ## Inputs `file_upload_id` and `file` are required. Filenames are limited to 900 bytes. When the create step records or infers a content type, use a `Blob` with the same media type for the file data. Provide `part_number` as a string from `1` through `10000` for multipart uploads. OAuth requires no additional content capability; personal access tokens use their normal API access. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the updated `file_upload` object. This request uses `multipart/form-data`; do not base64-wrap ordinary text or `Blob` input unless the file format itself requires it. # Update Notion agent credit limit Source: https://docs.automate.ax/reference/integrations/notion/actions/update-agent-credit-limit Set or clear a Notion agent credit limit. `notion.updateAgentCreditLimit` set or clear a Notion agent credit limit. ## Example ```ts automations/notion-update-agent-credit-limit.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Update Notion agent credit limit", () => { onSchedule({ schedule: "0 9 * * *" }) notion.updateAgentCreditLimit({ agent_id: "agent-id", credit_limit: 100 }) }) ``` ## Inputs `agent_id` and `credit_limit` are required. Use a nonnegative integer, or `null` to clear the editor-set limit. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the agent ID, effective editor-set credit limit, and last-edited time. # Update Notion agent status Source: https://docs.automate.ax/reference/integrations/notion/actions/update-agent-status Enable or disable a Notion agent. `notion.updateAgentStatus` enable or disable a Notion agent. ## Example ```ts automations/notion-update-agent-status.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Update Notion agent status", () => { onSchedule({ schedule: "0 9 * * *" }) notion.updateAgentStatus({ agent_id: "agent-id", status: "disabled" }) }) ``` ## Inputs `agent_id` and `status` (`active` or `disabled`) are required. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the agent ID, resulting status, pause reason, and last-edited time. # Update Notion block Source: https://docs.automate.ax/reference/integrations/notion/actions/update-block Update a supported Notion block body or its trash state. `notion.updateBlock` update a supported Notion block body or its trash state. ## Example ```ts automations/notion-update-block.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Update Notion block", () => { onSchedule({ schedule: "0 9 * * *" }) notion.updateBlock({ block_id: "block-id", in_trash: false }) }) ``` ## Inputs Provide `block_id` plus fields for exactly one current block variant, or `in_trash` to restore or trash it. The retired `archived` field is rejected. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the updated full or partial `block` object. A 500 response is not retried because repeating a mutation could duplicate side effects. Rate limits and service overload responses remain safe to retry. # Update Notion comment Source: https://docs.automate.ax/reference/integrations/notion/actions/update-comment Replace a comment body with markdown or rich text. `notion.updateComment` replace a comment body with markdown or rich text. ## Example ```ts automations/notion-update-comment.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Update Notion comment", () => { onSchedule({ schedule: "0 9 * * *" }) notion.updateComment({ comment_id: "comment-id", markdown: "Updated" }) }) ``` ## Inputs `comment_id` is required. Choose exactly one of `markdown` or `rich_text`. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the updated full or partial `comment` object. # Update Notion data source Source: https://docs.automate.ax/reference/integrations/notion/actions/update-data-source Update a data-source schema, metadata, parent, or trash state. `notion.updateDataSource` update a data-source schema, metadata, parent, or trash state. ## Example ```ts automations/notion-update-data-source.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Update Notion data source", () => { onSchedule({ schedule: "0 9 * * *" }) notion.updateDataSource({ data_source_id: "data-source-id", title: [] }) }) ``` ## Inputs `data_source_id` is required. Supply title, icon, property-schema changes, parent, or `in_trash`. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the updated full or partial `data_source` object. # Update Notion database Source: https://docs.automate.ax/reference/integrations/notion/actions/update-database Update database metadata, parent, lock, or trash state. `notion.updateDatabase` update database metadata, parent, lock, or trash state. ## Example ```ts automations/notion-update-database.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Update Notion database", () => { onSchedule({ schedule: "0 9 * * *" }) notion.updateDatabase({ database_id: "database-id", in_trash: false }) }) ``` ## Inputs `database_id` is required. Supply any current metadata, parent, icon, cover, lock, or `in_trash` fields. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the updated full or partial `database` object. # Update Notion page Source: https://docs.automate.ax/reference/integrations/notion/actions/update-page Update page properties, presentation, lock state, or trash state. `notion.updatePage` update page properties, presentation, lock state, or trash state. ## Example ```ts automations/notion-update-page.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Update Notion page", () => { onSchedule({ schedule: "0 9 * * *" }) notion.updatePage({ page_id: "page-id", in_trash: false }) }) ``` ## Inputs Provide `page_id` and any current update fields: properties, icon, cover, lock, template, content erasure, or `in_trash`. Retired archive aliases are rejected. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the updated full or partial `page` object. # Update Notion page markdown Source: https://docs.automate.ax/reference/integrations/notion/actions/update-page-markdown Insert, replace, or update page content through Notion's markdown API. `notion.updatePageMarkdown` insert, replace, or update page content through Notion's markdown API. ## Example ```ts automations/notion-update-page-markdown.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Update Notion page markdown", () => { onSchedule({ schedule: "0 9 * * *" }) notion.updatePageMarkdown({ page_id: "page-id", type: "insert_content", insert_content: { content: "## Update" }, }) }) ``` ## Inputs Provide `page_id` and exactly one discriminated operation: `insert_content`, `replace_content_range`, `update_content`, or `replace_content`. Mixed operation bodies fail before execution, and `insert_content` cannot provide both `after` and `position`. Set `allow_async` for a background update; markdown is governed by Notion's 500 KB request limit rather than the 2,000-character rich-text limit. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the updated `page_markdown` object with completeness metadata for a synchronous request. An asynchronous update returns an `async_task`; pass its `id` to `getAsyncTask` and respect `poll_after_seconds` while it is pending. # Update Notion view Source: https://docs.automate.ax/reference/integrations/notion/actions/update-view Update a view name, filters, sorts, quick filters, or configuration. `notion.updateView` update a view name, filters, sorts, quick filters, or configuration. ## Example ```ts automations/notion-update-view.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Update Notion view", () => { onSchedule({ schedule: "0 9 * * *" }) notion.updateView({ view_id: "view-id", name: "Updated" }) }) ``` ## Inputs `view_id` is required. Other fields are optional and follow the selected view type. Every input accepts a compatible signal, and an optional second argument can select a named account. ## Output Returns the updated full or partial `view` object. # Notion Source: https://docs.automate.ax/reference/integrations/notion/index Manage Notion pages, databases, data sources, comments, views, file uploads, agents, and verified workspace events. The integration targets Notion API version `2026-03-11` and preserves Notion's snake-case request and response fields. Inputs and outputs use the official `@notionhq/client` types. ## Connect to Notion OAuth is the preferred connection. It supports actions and webhook triggers across content, comments, users, and Notion agents. A personal access token can run actions with its Notion API capability, but it can't own a webhook subscription or list every workspace user. Use `notionAccount("name")` to select a named project account. Each action declares its least Notion capability, and deployment fails when the selected connection can't satisfy it. ## Example ```ts automations/archive-completed-notion-pages.automation.ts theme={null} import { automation } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("Archive completed Notion pages", () => { const updated = notion.onPagePropertiesUpdated() notion.updatePage({ page_id: updated.entity.id, in_trash: true, }) }) ``` Every authenticated webhook delivery starts an ordinary root context. Use correlation when a later Notion event belongs with an earlier action occurrence. Notion's current limits are checked before execution, including cursor page sizes, array bounds, URL and expression lengths, current field names, and file-upload mode invariants. The client retries rate limits and safe transient failures according to the official SDK policy. Notion webhooks require OAuth. Automate.ax verifies the signature over the exact request body, routes by stable workspace ID, and deduplicates retries by Notion event ID. ## Provider setup Configure the OAuth client ID and secret plus the verification token for the static Notion webhook subscription. Notion sends the verification token during subscription setup; capture it with a disposable secret-safe endpoint, configure `NOTION_WEBHOOK_VERIFICATION_TOKEN`, then set the production callback to `/api/v1/events/notion`. Notion agent APIs are public beta and additionally require a workspace plan and integration access that supports agents. ## Exports ```ts theme={null} import { notion, notionAccount, NotionClient, getNotionApi, } from "automate.ax/notion" ``` * `notion` contains the packaged Notion actions and triggers. * `notionAccount("name")` selects a named Notion connection. * `NotionClient` is the official Notion client class returned by `getNotionApi`. * `getNotionApi` creates the authenticated Notion API helper for a custom account-backed action. ## Triggers * [On Notion event](/reference/integrations/notion/triggers/on-event) * [On Notion comment created](/reference/integrations/notion/triggers/on-comment-created) * [On Notion comment deleted](/reference/integrations/notion/triggers/on-comment-deleted) * [On Notion comment updated](/reference/integrations/notion/triggers/on-comment-updated) * [On Notion database created](/reference/integrations/notion/triggers/on-database-created) * [On Notion database deleted](/reference/integrations/notion/triggers/on-database-deleted) * [On Notion database moved](/reference/integrations/notion/triggers/on-database-moved) * [On Notion database restored](/reference/integrations/notion/triggers/on-database-undeleted) * [On Notion data source content updated](/reference/integrations/notion/triggers/on-data-source-content-updated) * [On Notion data source created](/reference/integrations/notion/triggers/on-data-source-created) * [On Notion data source deleted](/reference/integrations/notion/triggers/on-data-source-deleted) * [On Notion data source moved](/reference/integrations/notion/triggers/on-data-source-moved) * [On Notion data source schema updated](/reference/integrations/notion/triggers/on-data-source-schema-updated) * [On Notion data source restored](/reference/integrations/notion/triggers/on-data-source-undeleted) * [On Notion file upload completed](/reference/integrations/notion/triggers/on-file-upload-completed) * [On Notion file upload created](/reference/integrations/notion/triggers/on-file-upload-created) * [On Notion file upload expired](/reference/integrations/notion/triggers/on-file-upload-expired) * [On Notion file upload failed](/reference/integrations/notion/triggers/on-file-upload-failed) * [On Notion page content updated](/reference/integrations/notion/triggers/on-page-content-updated) * [On Notion page created](/reference/integrations/notion/triggers/on-page-created) * [On Notion page deleted](/reference/integrations/notion/triggers/on-page-deleted) * [On Notion page locked](/reference/integrations/notion/triggers/on-page-locked) * [On Notion page moved](/reference/integrations/notion/triggers/on-page-moved) * [On Notion page properties updated](/reference/integrations/notion/triggers/on-page-properties-updated) * [On Notion page transcript deleted](/reference/integrations/notion/triggers/on-page-transcript-deleted) * [On Notion page restored](/reference/integrations/notion/triggers/on-page-undeleted) * [On Notion page unlocked](/reference/integrations/notion/triggers/on-page-unlocked) * [On Notion view created](/reference/integrations/notion/triggers/on-view-created) * [On Notion view deleted](/reference/integrations/notion/triggers/on-view-deleted) * [On Notion view updated](/reference/integrations/notion/triggers/on-view-updated) ## Actions * [Get Notion background task](/reference/integrations/notion/actions/get-async-task) * [Get Notion block](/reference/integrations/notion/actions/get-block) * [List Notion block children](/reference/integrations/notion/actions/list-block-children) * [Update Notion block](/reference/integrations/notion/actions/update-block) * [Delete Notion block](/reference/integrations/notion/actions/delete-block) * [Append Notion block children](/reference/integrations/notion/actions/append-block-children) * [Create Notion meeting note](/reference/integrations/notion/actions/create-meeting-note) * [Query Notion meeting notes](/reference/integrations/notion/actions/query-meeting-notes) * [Create Notion page](/reference/integrations/notion/actions/create-page) * [Get Notion page](/reference/integrations/notion/actions/get-page) * [Get Notion page property](/reference/integrations/notion/actions/get-page-property) * [Get Notion page markdown](/reference/integrations/notion/actions/get-page-markdown) * [Update Notion page](/reference/integrations/notion/actions/update-page) * [Move Notion page](/reference/integrations/notion/actions/move-page) * [Update Notion page markdown](/reference/integrations/notion/actions/update-page-markdown) * [Create Notion database](/reference/integrations/notion/actions/create-database) * [Get Notion database](/reference/integrations/notion/actions/get-database) * [Update Notion database](/reference/integrations/notion/actions/update-database) * [Create Notion data source](/reference/integrations/notion/actions/create-data-source) * [Get Notion data source](/reference/integrations/notion/actions/get-data-source) * [List Notion data source templates](/reference/integrations/notion/actions/list-data-source-templates) * [Query Notion data source](/reference/integrations/notion/actions/query-data-source) * [Update Notion data source](/reference/integrations/notion/actions/update-data-source) * [Create Notion comment](/reference/integrations/notion/actions/create-comment) * [Update Notion comment](/reference/integrations/notion/actions/update-comment) * [Delete Notion comment](/reference/integrations/notion/actions/delete-comment) * [Get Notion comment](/reference/integrations/notion/actions/get-comment) * [List Notion comments](/reference/integrations/notion/actions/list-comments) * [Create Notion view](/reference/integrations/notion/actions/create-view) * [Get Notion view](/reference/integrations/notion/actions/get-view) * [List Notion views](/reference/integrations/notion/actions/list-views) * [Create Notion view query](/reference/integrations/notion/actions/create-view-query) * [Get Notion view query results](/reference/integrations/notion/actions/get-view-query-results) * [Delete Notion view query](/reference/integrations/notion/actions/delete-view-query) * [Update Notion view](/reference/integrations/notion/actions/update-view) * [Delete Notion view](/reference/integrations/notion/actions/delete-view) * [Create Notion file upload](/reference/integrations/notion/actions/create-file-upload) * [Send Notion file upload](/reference/integrations/notion/actions/send-file-upload) * [Complete Notion file upload](/reference/integrations/notion/actions/complete-file-upload) * [Get Notion file upload](/reference/integrations/notion/actions/get-file-upload) * [List Notion file uploads](/reference/integrations/notion/actions/list-file-uploads) * [Search Notion](/reference/integrations/notion/actions/search) * [Get current Notion user](/reference/integrations/notion/actions/get-current-user) * [Get Notion user](/reference/integrations/notion/actions/get-user) * [List Notion users](/reference/integrations/notion/actions/list-users) * [List Notion custom emoji](/reference/integrations/notion/actions/list-custom-emojis) * [Query Notion agents](/reference/integrations/notion/actions/query-agents) * [Get Notion agent](/reference/integrations/notion/actions/get-agent) * [Get Notion agent insights](/reference/integrations/notion/actions/get-agent-insights) * [Update Notion agent status](/reference/integrations/notion/actions/update-agent-status) * [Update Notion agent credit limit](/reference/integrations/notion/actions/update-agent-credit-limit) * [Delete Notion agent](/reference/integrations/notion/actions/delete-agent) * [Batch manage Notion agents](/reference/integrations/notion/actions/batch-manage-agents) * [Create or update Notion session](/reference/integrations/notion/actions/create-or-update-session) * [Get Notion session](/reference/integrations/notion/actions/get-session) * [Query Notion sessions](/reference/integrations/notion/actions/query-sessions) * [Query Notion session events](/reference/integrations/notion/actions/query-session-events) * [Cancel Notion session](/reference/integrations/notion/actions/cancel-session) # On Notion comment created Source: https://docs.automate.ax/reference/integrations/notion/triggers/on-comment-created Start an automation when Notion creates a comment. `notion.onCommentCreated` start an automation when Notion creates a comment. ## Example ```ts automations/notion-on-comment-created.automation.ts theme={null} import { automation } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("On Notion comment created", () => { const event = notion.onCommentCreated() event.transform(({ entity }) => entity.id) }) ``` ## Configuration The trigger takes no event filters. Its optional static `account` selects a named OAuth binding and defaults to the project's Notion binding. Personal access tokens cannot own webhook subscriptions. ## Event Returns the typed `comment.created` payload. `entity` identifies the comment; `data.pageId` and `data.parent` identify its page and parent block. The event is narrowed to `comment.created`; consumers do not need to inspect the raw type. Automate.ax verifies the Notion signature, routes only to an eligible workspace principal, and deduplicates provider retries by event ID. # On Notion comment deleted Source: https://docs.automate.ax/reference/integrations/notion/triggers/on-comment-deleted Start an automation when Notion deletes a comment. `notion.onCommentDeleted` start an automation when Notion deletes a comment. ## Example ```ts automations/notion-on-comment-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("On Notion comment deleted", () => { const event = notion.onCommentDeleted() event.transform(({ entity }) => entity.id) }) ``` ## Configuration The trigger takes no event filters. Its optional static `account` selects a named OAuth binding and defaults to the project's Notion binding. Personal access tokens cannot own webhook subscriptions. ## Event Returns the typed `comment.deleted` payload with the comment entity, page ID, and parent block reference. The event is narrowed to `comment.deleted`; consumers do not need to inspect the raw type. Automate.ax verifies the Notion signature, routes only to an eligible workspace principal, and deduplicates provider retries by event ID. # On Notion comment updated Source: https://docs.automate.ax/reference/integrations/notion/triggers/on-comment-updated Start an automation when Notion updates a comment. `notion.onCommentUpdated` start an automation when Notion updates a comment. ## Example ```ts automations/notion-on-comment-updated.automation.ts theme={null} import { automation } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("On Notion comment updated", () => { const event = notion.onCommentUpdated() event.transform(({ entity }) => entity.id) }) ``` ## Configuration The trigger takes no event filters. Its optional static `account` selects a named OAuth binding and defaults to the project's Notion binding. Personal access tokens cannot own webhook subscriptions. ## Event Returns the typed `comment.updated` payload with the comment entity, page ID, and parent block reference. The event is narrowed to `comment.updated`; consumers do not need to inspect the raw type. Automate.ax verifies the Notion signature, routes only to an eligible workspace principal, and deduplicates provider retries by event ID. # On Notion data source content updated Source: https://docs.automate.ax/reference/integrations/notion/triggers/on-data-source-content-updated Start an automation when content changes in a data source. `notion.onDataSourceContentUpdated` start an automation when content changes in a data source. ## Example ```ts automations/notion-on-data-source-content-updated.automation.ts theme={null} import { automation } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("On Notion data source content updated", () => { const event = notion.onDataSourceContentUpdated() event.transform(({ entity }) => entity.id) }) ``` ## Configuration The trigger takes no event filters. Its optional static `account` selects a named OAuth binding and defaults to the project's Notion binding. Personal access tokens cannot own webhook subscriptions. ## Event Returns the typed content-update payload. `data.updatedBlocks` lists affected page, database, or block references, and `data.parent` identifies the container. The event is narrowed to `data_source.content_updated`; consumers do not need to inspect the raw type. Automate.ax verifies the Notion signature, routes only to an eligible workspace principal, and deduplicates provider retries by event ID. # On Notion data source created Source: https://docs.automate.ax/reference/integrations/notion/triggers/on-data-source-created Start an automation when Notion creates a data source. `notion.onDataSourceCreated` start an automation when Notion creates a data source. ## Example ```ts automations/notion-on-data-source-created.automation.ts theme={null} import { automation } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("On Notion data source created", () => { const event = notion.onDataSourceCreated() event.transform(({ entity }) => entity.id) }) ``` ## Configuration The trigger takes no event filters. Its optional static `account` selects a named OAuth binding and defaults to the project's Notion binding. Personal access tokens cannot own webhook subscriptions. ## Event Returns the typed `data_source.created` payload with the data-source entity and parent. The event is narrowed to `data_source.created`; consumers do not need to inspect the raw type. Automate.ax verifies the Notion signature, routes only to an eligible workspace principal, and deduplicates provider retries by event ID. # On Notion data source deleted Source: https://docs.automate.ax/reference/integrations/notion/triggers/on-data-source-deleted Start an automation when Notion deletes a data source. `notion.onDataSourceDeleted` start an automation when Notion deletes a data source. ## Example ```ts automations/notion-on-data-source-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("On Notion data source deleted", () => { const event = notion.onDataSourceDeleted() event.transform(({ entity }) => entity.id) }) ``` ## Configuration The trigger takes no event filters. Its optional static `account` selects a named OAuth binding and defaults to the project's Notion binding. Personal access tokens cannot own webhook subscriptions. ## Event Returns the typed `data_source.deleted` payload with the deleted entity and parent. The event is narrowed to `data_source.deleted`; consumers do not need to inspect the raw type. Automate.ax verifies the Notion signature, routes only to an eligible workspace principal, and deduplicates provider retries by event ID. # On Notion data source moved Source: https://docs.automate.ax/reference/integrations/notion/triggers/on-data-source-moved Start an automation when Notion moves a data source. `notion.onDataSourceMoved` start an automation when Notion moves a data source. ## Example ```ts automations/notion-on-data-source-moved.automation.ts theme={null} import { automation } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("On Notion data source moved", () => { const event = notion.onDataSourceMoved() event.transform(({ entity }) => entity.id) }) ``` ## Configuration The trigger takes no event filters. Its optional static `account` selects a named OAuth binding and defaults to the project's Notion binding. Personal access tokens cannot own webhook subscriptions. ## Event Returns the typed `data_source.moved` payload with the entity and resulting parent. The event is narrowed to `data_source.moved`; consumers do not need to inspect the raw type. Automate.ax verifies the Notion signature, routes only to an eligible workspace principal, and deduplicates provider retries by event ID. # On Notion data source schema updated Source: https://docs.automate.ax/reference/integrations/notion/triggers/on-data-source-schema-updated Start an automation when a data-source property schema changes. `notion.onDataSourceSchemaUpdated` start an automation when a data-source property schema changes. ## Example ```ts automations/notion-on-data-source-schema-updated.automation.ts theme={null} import { automation } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("On Notion data source schema updated", () => { const event = notion.onDataSourceSchemaUpdated() event.transform(({ entity }) => entity.id) }) ``` ## Configuration The trigger takes no event filters. Its optional static `account` selects a named OAuth binding and defaults to the project's Notion binding. Personal access tokens cannot own webhook subscriptions. ## Event Returns the typed schema-update payload. Optional `data.updatedProperties` identifies created, updated, or deleted property IDs and names. The event is narrowed to `data_source.schema_updated`; consumers do not need to inspect the raw type. Automate.ax verifies the Notion signature, routes only to an eligible workspace principal, and deduplicates provider retries by event ID. # On Notion data source restored Source: https://docs.automate.ax/reference/integrations/notion/triggers/on-data-source-undeleted Start an automation when Notion restores a data source. `notion.onDataSourceUndeleted` start an automation when Notion restores a data source. ## Example ```ts automations/notion-on-data-source-undeleted.automation.ts theme={null} import { automation } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("On Notion data source undeleted", () => { const event = notion.onDataSourceUndeleted() event.transform(({ entity }) => entity.id) }) ``` ## Configuration The trigger takes no event filters. Its optional static `account` selects a named OAuth binding and defaults to the project's Notion binding. Personal access tokens cannot own webhook subscriptions. ## Event Returns the typed `data_source.undeleted` payload with the restored entity and parent. The event is narrowed to `data_source.undeleted`; consumers do not need to inspect the raw type. Automate.ax verifies the Notion signature, routes only to an eligible workspace principal, and deduplicates provider retries by event ID. # On Notion database created Source: https://docs.automate.ax/reference/integrations/notion/triggers/on-database-created Start an automation when Notion creates a database. `notion.onDatabaseCreated` start an automation when Notion creates a database. ## Example ```ts automations/notion-on-database-created.automation.ts theme={null} import { automation } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("On Notion database created", () => { const event = notion.onDatabaseCreated() event.transform(({ entity }) => entity.id) }) ``` ## Configuration The trigger takes no event filters. Its optional static `account` selects a named OAuth binding and defaults to the project's Notion binding. Personal access tokens cannot own webhook subscriptions. ## Event Returns the typed `database.created` payload. `entity` identifies the database or related block/data source and `data.parent` identifies its container. The event is narrowed to `database.created`; consumers do not need to inspect the raw type. Automate.ax verifies the Notion signature, routes only to an eligible workspace principal, and deduplicates provider retries by event ID. # On Notion database deleted Source: https://docs.automate.ax/reference/integrations/notion/triggers/on-database-deleted Start an automation when Notion deletes a database. `notion.onDatabaseDeleted` start an automation when Notion deletes a database. ## Example ```ts automations/notion-on-database-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("On Notion database deleted", () => { const event = notion.onDatabaseDeleted() event.transform(({ entity }) => entity.id) }) ``` ## Configuration The trigger takes no event filters. Its optional static `account` selects a named OAuth binding and defaults to the project's Notion binding. Personal access tokens cannot own webhook subscriptions. ## Event Returns the typed `database.deleted` payload with the database entity and previous parent. The event is narrowed to `database.deleted`; consumers do not need to inspect the raw type. Automate.ax verifies the Notion signature, routes only to an eligible workspace principal, and deduplicates provider retries by event ID. # On Notion database moved Source: https://docs.automate.ax/reference/integrations/notion/triggers/on-database-moved Start an automation when Notion moves a database. `notion.onDatabaseMoved` start an automation when Notion moves a database. ## Example ```ts automations/notion-on-database-moved.automation.ts theme={null} import { automation } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("On Notion database moved", () => { const event = notion.onDatabaseMoved() event.transform(({ entity }) => entity.id) }) ``` ## Configuration The trigger takes no event filters. Its optional static `account` selects a named OAuth binding and defaults to the project's Notion binding. Personal access tokens cannot own webhook subscriptions. ## Event Returns the typed `database.moved` payload with the database entity and its resulting parent. The event is narrowed to `database.moved`; consumers do not need to inspect the raw type. Automate.ax verifies the Notion signature, routes only to an eligible workspace principal, and deduplicates provider retries by event ID. # On Notion database restored Source: https://docs.automate.ax/reference/integrations/notion/triggers/on-database-undeleted Start an automation when Notion restores a database. `notion.onDatabaseUndeleted` start an automation when Notion restores a database. ## Example ```ts automations/notion-on-database-undeleted.automation.ts theme={null} import { automation } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("On Notion database undeleted", () => { const event = notion.onDatabaseUndeleted() event.transform(({ entity }) => entity.id) }) ``` ## Configuration The trigger takes no event filters. Its optional static `account` selects a named OAuth binding and defaults to the project's Notion binding. Personal access tokens cannot own webhook subscriptions. ## Event Returns the typed `database.undeleted` payload with the restored entity and parent. The event is narrowed to `database.undeleted`; consumers do not need to inspect the raw type. Automate.ax verifies the Notion signature, routes only to an eligible workspace principal, and deduplicates provider retries by event ID. # On Notion event Source: https://docs.automate.ax/reference/integrations/notion/triggers/on-event Start an automation for any supported Notion webhook event. `notion.onEvent` start an automation for any supported Notion webhook event. ## Example ```ts automations/notion-on-event.automation.ts theme={null} import { automation } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("On Notion event", () => { const event = notion.onEvent() event.transform(({ entity }) => entity.id) }) ``` ## Configuration The trigger takes no event filters. Its optional static `account` selects a named OAuth binding and defaults to the project's Notion binding. Personal access tokens cannot own webhook subscriptions. ## Event Returns `NotionWebhookEvent`, discriminated by `type`, with delivery IDs, workspace metadata, authors, access principals, entity, and event-specific data. Every property uses camel case, including nested provider fields such as `workspaceId`, `data.updatedProperties`, and `data.parent.dataSourceId`. Inspect `event.type` or use a semantic trigger when the automation handles one event shape. Automate.ax verifies the Notion signature, routes only to an eligible workspace principal, and deduplicates provider retries by event ID. # On Notion file upload completed Source: https://docs.automate.ax/reference/integrations/notion/triggers/on-file-upload-completed Start an automation when a Notion file upload completes. `notion.onFileUploadCompleted` start an automation when a Notion file upload completes. ## Example ```ts automations/notion-on-file-upload-completed.automation.ts theme={null} import { automation } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("On Notion file upload completed", () => { const event = notion.onFileUploadCompleted() event.transform(({ entity }) => entity.id) }) ``` ## Configuration The trigger takes no event filters. Its optional static `account` selects a named OAuth binding and defaults to the project's Notion binding. Personal access tokens cannot own webhook subscriptions. ## Event Returns the typed completion payload whose `entity` is the file-upload ID. The event is narrowed to `file_upload.completed`; consumers do not need to inspect the raw type. Automate.ax verifies the Notion signature, routes only to an eligible workspace principal, and deduplicates provider retries by event ID. # On Notion file upload created Source: https://docs.automate.ax/reference/integrations/notion/triggers/on-file-upload-created Start an automation when Notion creates a file upload. `notion.onFileUploadCreated` start an automation when Notion creates a file upload. ## Example ```ts automations/notion-on-file-upload-created.automation.ts theme={null} import { automation } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("On Notion file upload created", () => { const event = notion.onFileUploadCreated() event.transform(({ entity }) => entity.id) }) ``` ## Configuration The trigger takes no event filters. Its optional static `account` selects a named OAuth binding and defaults to the project's Notion binding. Personal access tokens cannot own webhook subscriptions. ## Event Returns the typed creation payload whose `entity` is the file-upload ID. The event is narrowed to `file_upload.created`; consumers do not need to inspect the raw type. Automate.ax verifies the Notion signature, routes only to an eligible workspace principal, and deduplicates provider retries by event ID. # On Notion file upload expired Source: https://docs.automate.ax/reference/integrations/notion/triggers/on-file-upload-expired Start an automation when a pending Notion file upload expires. `notion.onFileUploadExpired` start an automation when a pending Notion file upload expires. ## Example ```ts automations/notion-on-file-upload-expired.automation.ts theme={null} import { automation } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("On Notion file upload expired", () => { const event = notion.onFileUploadExpired() event.transform(({ entity }) => entity.id) }) ``` ## Configuration The trigger takes no event filters. Its optional static `account` selects a named OAuth binding and defaults to the project's Notion binding. Personal access tokens cannot own webhook subscriptions. ## Event Returns the typed expiry payload whose `entity` is the expired file-upload ID. The event is narrowed to `file_upload.expired`; consumers do not need to inspect the raw type. Automate.ax verifies the Notion signature, routes only to an eligible workspace principal, and deduplicates provider retries by event ID. # On Notion file upload failed Source: https://docs.automate.ax/reference/integrations/notion/triggers/on-file-upload-failed Start an automation when a Notion upload or external import fails. `notion.onFileUploadFailed` start an automation when a Notion upload or external import fails. ## Example ```ts automations/notion-on-file-upload-failed.automation.ts theme={null} import { automation } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("On Notion file upload failed", () => { const event = notion.onFileUploadFailed() event.transform(({ entity }) => entity.id) }) ``` ## Configuration The trigger takes no event filters. Its optional static `account` selects a named OAuth binding and defaults to the project's Notion binding. Personal access tokens cannot own webhook subscriptions. ## Event Returns the typed failed-upload payload. `data.fileImportResult` includes the import time and the provider error or success variant. The event is narrowed to `file_upload.upload_failed`; consumers do not need to inspect the raw type. Automate.ax verifies the Notion signature, routes only to an eligible workspace principal, and deduplicates provider retries by event ID. # On Notion page content updated Source: https://docs.automate.ax/reference/integrations/notion/triggers/on-page-content-updated Start an automation when blocks in a Notion page change. `notion.onPageContentUpdated` start an automation when blocks in a Notion page change. ## Example ```ts automations/notion-on-page-content-updated.automation.ts theme={null} import { automation } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("On Notion page content updated", () => { const event = notion.onPageContentUpdated() event.transform(({ entity }) => entity.id) }) ``` ## Configuration The trigger takes no event filters. Its optional static `account` selects a named OAuth binding and defaults to the project's Notion binding. Personal access tokens cannot own webhook subscriptions. ## Event Returns the typed content-update payload. `data.updatedBlocks` identifies changed page, database, or block references and `data.parent` identifies the container. The event is narrowed to `page.content_updated`; consumers do not need to inspect the raw type. Automate.ax verifies the Notion signature, routes only to an eligible workspace principal, and deduplicates provider retries by event ID. # On Notion page created Source: https://docs.automate.ax/reference/integrations/notion/triggers/on-page-created Start an automation when Notion creates a page. `notion.onPageCreated` start an automation when Notion creates a page. ## Example ```ts automations/notion-on-page-created.automation.ts theme={null} import { automation } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("On Notion page created", () => { const event = notion.onPageCreated() event.transform(({ entity }) => entity.id) }) ``` ## Configuration The trigger takes no event filters. Its optional static `account` selects a named OAuth binding and defaults to the project's Notion binding. Personal access tokens cannot own webhook subscriptions. ## Event Returns the typed `page.created` payload with the page entity and parent. The event is narrowed to `page.created`; consumers do not need to inspect the raw type. Automate.ax verifies the Notion signature, routes only to an eligible workspace principal, and deduplicates provider retries by event ID. # On Notion page deleted Source: https://docs.automate.ax/reference/integrations/notion/triggers/on-page-deleted Start an automation when Notion deletes a page. `notion.onPageDeleted` start an automation when Notion deletes a page. ## Example ```ts automations/notion-on-page-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("On Notion page deleted", () => { const event = notion.onPageDeleted() event.transform(({ entity }) => entity.id) }) ``` ## Configuration The trigger takes no event filters. Its optional static `account` selects a named OAuth binding and defaults to the project's Notion binding. Personal access tokens cannot own webhook subscriptions. ## Event Returns the typed `page.deleted` payload with the page entity and parent. The event is narrowed to `page.deleted`; consumers do not need to inspect the raw type. Automate.ax verifies the Notion signature, routes only to an eligible workspace principal, and deduplicates provider retries by event ID. # On Notion page locked Source: https://docs.automate.ax/reference/integrations/notion/triggers/on-page-locked Start an automation when a Notion page becomes locked. `notion.onPageLocked` start an automation when a Notion page becomes locked. ## Example ```ts automations/notion-on-page-locked.automation.ts theme={null} import { automation } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("On Notion page locked", () => { const event = notion.onPageLocked() event.transform(({ entity }) => entity.id) }) ``` ## Configuration The trigger takes no event filters. Its optional static `account` selects a named OAuth binding and defaults to the project's Notion binding. Personal access tokens cannot own webhook subscriptions. ## Event Returns the typed `page.locked` payload with the page entity and parent. The event is narrowed to `page.locked`; consumers do not need to inspect the raw type. Automate.ax verifies the Notion signature, routes only to an eligible workspace principal, and deduplicates provider retries by event ID. # On Notion page moved Source: https://docs.automate.ax/reference/integrations/notion/triggers/on-page-moved Start an automation when Notion moves a page. `notion.onPageMoved` start an automation when Notion moves a page. ## Example ```ts automations/notion-on-page-moved.automation.ts theme={null} import { automation } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("On Notion page moved", () => { const event = notion.onPageMoved() event.transform(({ entity }) => entity.id) }) ``` ## Configuration The trigger takes no event filters. Its optional static `account` selects a named OAuth binding and defaults to the project's Notion binding. Personal access tokens cannot own webhook subscriptions. ## Event Returns the typed `page.moved` payload with the page entity and resulting parent. The event is narrowed to `page.moved`; consumers do not need to inspect the raw type. Automate.ax verifies the Notion signature, routes only to an eligible workspace principal, and deduplicates provider retries by event ID. # On Notion page properties updated Source: https://docs.automate.ax/reference/integrations/notion/triggers/on-page-properties-updated Start an automation when Notion page properties change. `notion.onPagePropertiesUpdated` start an automation when Notion page properties change. ## Example ```ts automations/notion-on-page-properties-updated.automation.ts theme={null} import { automation } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("On Notion page properties updated", () => { const event = notion.onPagePropertiesUpdated() event.transform(({ entity }) => entity.id) }) ``` ## Configuration The trigger takes no event filters. Its optional static `account` selects a named OAuth binding and defaults to the project's Notion binding. Personal access tokens cannot own webhook subscriptions. ## Event Returns the typed property-update payload. `data.updatedProperties` contains the changed property IDs and `data.parent` identifies the page container. The event is narrowed to `page.properties_updated`; consumers do not need to inspect the raw type. Automate.ax verifies the Notion signature, routes only to an eligible workspace principal, and deduplicates provider retries by event ID. # On Notion page transcript deleted Source: https://docs.automate.ax/reference/integrations/notion/triggers/on-page-transcript-deleted Start an automation when Notion deletes a meeting transcript. `notion.onPageTranscriptDeleted` start an automation when Notion deletes a meeting transcript. ## Example ```ts automations/notion-on-page-transcript-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("On Notion page transcript deleted", () => { const event = notion.onPageTranscriptDeleted() event.transform(({ entity }) => entity.id) }) ``` ## Configuration The trigger takes no event filters. Its optional static `account` selects a named OAuth binding and defaults to the project's Notion binding. Personal access tokens cannot own webhook subscriptions. ## Event Returns the typed transcript-deletion payload with `data.target` and nullable `data.transcriptId`. The event is narrowed to `page.transcription_block.transcript_deleted`; consumers do not need to inspect the raw type. Automate.ax verifies the Notion signature, routes only to an eligible workspace principal, and deduplicates provider retries by event ID. # On Notion page restored Source: https://docs.automate.ax/reference/integrations/notion/triggers/on-page-undeleted Start an automation when Notion restores a page. `notion.onPageUndeleted` start an automation when Notion restores a page. ## Example ```ts automations/notion-on-page-undeleted.automation.ts theme={null} import { automation } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("On Notion page undeleted", () => { const event = notion.onPageUndeleted() event.transform(({ entity }) => entity.id) }) ``` ## Configuration The trigger takes no event filters. Its optional static `account` selects a named OAuth binding and defaults to the project's Notion binding. Personal access tokens cannot own webhook subscriptions. ## Event Returns the typed `page.undeleted` payload with the restored page entity and parent. The event is narrowed to `page.undeleted`; consumers do not need to inspect the raw type. Automate.ax verifies the Notion signature, routes only to an eligible workspace principal, and deduplicates provider retries by event ID. # On Notion page unlocked Source: https://docs.automate.ax/reference/integrations/notion/triggers/on-page-unlocked Start an automation when a Notion page becomes unlocked. `notion.onPageUnlocked` start an automation when a Notion page becomes unlocked. ## Example ```ts automations/notion-on-page-unlocked.automation.ts theme={null} import { automation } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("On Notion page unlocked", () => { const event = notion.onPageUnlocked() event.transform(({ entity }) => entity.id) }) ``` ## Configuration The trigger takes no event filters. Its optional static `account` selects a named OAuth binding and defaults to the project's Notion binding. Personal access tokens cannot own webhook subscriptions. ## Event Returns the typed `page.unlocked` payload with the page entity and parent. The event is narrowed to `page.unlocked`; consumers do not need to inspect the raw type. Automate.ax verifies the Notion signature, routes only to an eligible workspace principal, and deduplicates provider retries by event ID. # On Notion view created Source: https://docs.automate.ax/reference/integrations/notion/triggers/on-view-created Start an automation when Notion creates a database view. `notion.onViewCreated` start an automation when Notion creates a database view. ## Example ```ts automations/notion-on-view-created.automation.ts theme={null} import { automation } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("On Notion view created", () => { const event = notion.onViewCreated() event.transform(({ entity }) => entity.id) }) ``` ## Configuration The trigger takes no event filters. Its optional static `account` selects a named OAuth binding and defaults to the project's Notion binding. Personal access tokens cannot own webhook subscriptions. ## Event Returns the typed `view.created` payload with the view entity, parent, and `data.viewType`. The event is narrowed to `view.created`; consumers do not need to inspect the raw type. Automate.ax verifies the Notion signature, routes only to an eligible workspace principal, and deduplicates provider retries by event ID. # On Notion view deleted Source: https://docs.automate.ax/reference/integrations/notion/triggers/on-view-deleted Start an automation when Notion deletes a database view. `notion.onViewDeleted` start an automation when Notion deletes a database view. ## Example ```ts automations/notion-on-view-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("On Notion view deleted", () => { const event = notion.onViewDeleted() event.transform(({ entity }) => entity.id) }) ``` ## Configuration The trigger takes no event filters. Its optional static `account` selects a named OAuth binding and defaults to the project's Notion binding. Personal access tokens cannot own webhook subscriptions. ## Event Returns the typed `view.deleted` payload with the view entity and parent. The event is narrowed to `view.deleted`; consumers do not need to inspect the raw type. Automate.ax verifies the Notion signature, routes only to an eligible workspace principal, and deduplicates provider retries by event ID. # On Notion view updated Source: https://docs.automate.ax/reference/integrations/notion/triggers/on-view-updated Start an automation when Notion updates a database view. `notion.onViewUpdated` start an automation when Notion updates a database view. ## Example ```ts automations/notion-on-view-updated.automation.ts theme={null} import { automation } from "automate.ax" import { notion } from "automate.ax/notion" export default automation("On Notion view updated", () => { const event = notion.onViewUpdated() event.transform(({ entity }) => entity.id) }) ``` ## Configuration The trigger takes no event filters. Its optional static `account` selects a named OAuth binding and defaults to the project's Notion binding. Personal access tokens cannot own webhook subscriptions. ## Event Returns the typed `view.updated` payload. `data.updated_fields` lists changed name, filter, sorts, or configuration fields. The event is narrowed to `view.updated`; consumers do not need to inspect the raw type. Automate.ax verifies the Notion signature, routes only to an eligible workspace principal, and deduplicates provider retries by event ID. # Add attachment Source: https://docs.automate.ax/reference/integrations/outlook/actions/add-attachment Add a file up to 150 MB to an Outlook draft. `outlook.addAttachment` attaches a file to an unsent draft. ```ts automations/add-outlook-attachment.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Attach Outlook report", () => { const draft = outlook.draftEmail({ to: "reader@example.com", subject: "Report", body: "Attached.", }) outlook.addAttachment({ messageId: draft.messageId, file: new File(["report"], "report.txt", { type: "text/plain" }), }) }) ``` Provide `messageId` and `file: File`. Optional `inline` defaults to false. `contentId` identifies an inline file referenced by HTML. Optional second argument `{ account }` selects the binding. Files through 3,000,000 bytes use Graph's direct attachment API. Larger files use a resumable upload session in 3,276,800-byte chunks. The maximum size is 150,000,000 bytes. Returns the attachment with its new `attachmentId` and decoded file data when Graph supplies it. # Clear flag Source: https://docs.automate.ax/reference/integrations/outlook/actions/clear-flag Remove an Outlook message's follow-up flag. `outlook.clearMessageFlag` sets an Outlook message's flag status to `notFlagged`. ```ts automations/clear-outlook-flag.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Clear Outlook flag", () => { outlook.clearMessageFlag({ messageId: "AAMkAGI2..." }) }) ``` Required `messageId` identifies the message and optional second argument `{ account }` selects the binding. Returns the updated `OutlookMessage` with `flag.status: "notFlagged"`. # Complete flag Source: https://docs.automate.ax/reference/integrations/outlook/actions/complete-flag Complete an Outlook message's follow-up flag. `outlook.completeMessageFlag` changes the follow-up status to `complete`. ```ts automations/complete-outlook-flag.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Complete Outlook follow-up", () => { outlook.completeMessageFlag({ messageId: "AAMkAGI2..." }) }) ``` Required `messageId` identifies the message. Optional second argument `{ account }` selects the Microsoft binding. Returns the updated `OutlookMessage`, including the flag status and any completion timestamp supplied by Graph. # Copy mail folder Source: https://docs.automate.ax/reference/integrations/outlook/actions/copy-mail-folder Copies a folder and returns the copied Outlook mail folder. `outlook.copyMailFolder` copies a folder and returns the copied Outlook mail folder. ## Example ```ts automations/outlook-copy-mail-folder.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Copy mail folder", () => { outlook.copyMailFolder({ folder: "Customers", destinationFolder: "Archive" }) }) ``` ## Inputs Pass `{ folder: "Customers", destinationFolder: "Archive" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Copies a folder and returns the copied Outlook mail folder. Microsoft Graph requires the scopes declared by the action. IDs are opaque and should be passed through unchanged. # Copy message Source: https://docs.automate.ax/reference/integrations/outlook/actions/copy-message Copy an Outlook message without moving the original. `outlook.copyMessage` leaves the source in place and creates a copy in another folder. ```ts automations/copy-outlook-message.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Copy Outlook message", () => { outlook.copyMessage({ messageId: "AAMkAGI2...", destinationFolder: "Cases/Launch", }) }) ``` Required `messageId` identifies the source. `destinationFolder` accepts an exact display path, ID, or well-known name. Optional second argument `{ account }` selects the binding. Returns the newly copied `OutlookMessage`, whose `messageId` differs from the source. Use a folder path or ID when display names repeat. # Create category Source: https://docs.automate.ax/reference/integrations/outlook/actions/create-category Creates and returns an Outlook master category. `outlook.createCategory` creates and returns an Outlook master category. ## Example ```ts automations/outlook-create-category.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Create category", () => { outlook.createCategory({ displayName: "Customers", color: "preset0" }) }) ``` ## Inputs Pass `{ displayName: "Customers", color: "preset0" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Creates and returns an Outlook master category. Microsoft Graph requires the scopes declared by the action. IDs are opaque and should be passed through unchanged. # Create mail folder Source: https://docs.automate.ax/reference/integrations/outlook/actions/create-mail-folder Creates and returns a top-level or child Outlook mail folder. `outlook.createMailFolder` creates and returns a top-level or child Outlook mail folder. ## Example ```ts automations/outlook-create-mail-folder.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Create mail folder", () => { outlook.createMailFolder({ displayName: "Customers", parentFolder: "Archive", }) }) ``` ## Inputs Pass `{ displayName: "Customers", parentFolder: "Archive" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Creates and returns a top-level or child Outlook mail folder. Microsoft Graph requires the scopes declared by the action. IDs are opaque and should be passed through unchanged. # Create Inbox rule Source: https://docs.automate.ax/reference/integrations/outlook/actions/create-message-rule Creates and returns an Inbox rule. `outlook.createMessageRule` creates and returns an Inbox rule. ## Example ```ts automations/outlook-create-message-rule.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Create Inbox rule", () => { outlook.createMessageRule({ displayName: "Flag customers", sequence: 1, isEnabled: true, conditions: { subjectContains: ["customer"] }, actions: { assignCategories: ["Customers"] }, }) }) ``` ## Inputs Pass `{ displayName: "Flag customers", sequence: 1, isEnabled: true, conditions: { subjectContains: ["customer"] }, actions: { assignCategories: ["Customers"] } }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Creates and returns an Inbox rule. Microsoft Graph requires the scopes declared by the action. IDs are opaque and should be passed through unchanged. # Delete attachment Source: https://docs.automate.ax/reference/integrations/outlook/actions/delete-attachment Delete an attachment from an unsent Outlook draft. `outlook.deleteAttachment` removes one attachment from an unsent draft. ```ts automations/delete-outlook-attachment.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Delete Outlook attachment", () => { outlook.deleteAttachment({ messageId: "AAMkAGI2...", attachmentId: "AAMkAGI2AAAB...", }) }) ``` Provide `messageId` and `attachmentId`. Optional second argument `{ account }` selects the Microsoft binding. Returns `Signal`. Graph rejects removal from messages whose current state doesn't permit attachment edits. # Delete category Source: https://docs.automate.ax/reference/integrations/outlook/actions/delete-category Deletes a master category and completes without output. `outlook.deleteCategory` deletes a master category and completes without output. ## Example ```ts automations/outlook-delete-category.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Delete category", () => { outlook.deleteCategory({ categoryId: "category-id" }) }) ``` ## Inputs Pass `{ categoryId: "category-id" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Deletes a master category and completes without output. Microsoft Graph requires the scopes declared by the action. IDs are opaque and should be passed through unchanged. # Delete mail folder Source: https://docs.automate.ax/reference/integrations/outlook/actions/delete-mail-folder Moves a mail folder to Deleted Items and completes without output. `outlook.deleteMailFolder` moves a mail folder to Deleted Items and completes without output. ## Example ```ts automations/outlook-delete-mail-folder.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Delete mail folder", () => { outlook.deleteMailFolder({ folder: "Customers" }) }) ``` ## Inputs Pass `{ folder: "Customers" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Moves a mail folder to Deleted Items and completes without output. Microsoft Graph requires the scopes declared by the action. IDs are opaque and should be passed through unchanged. # Delete message Source: https://docs.automate.ax/reference/integrations/outlook/actions/delete-message Delete an Outlook message. `outlook.deleteMessage` deletes a message from its current folder. ```ts automations/delete-outlook-message.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Delete Outlook message", () => { outlook.deleteMessage({ messageId: "AAMkAGI2..." }) }) ``` Required `messageId` identifies the message. Optional second argument `{ account }` selects the Microsoft binding. Returns `Signal`. The action doesn't provide a permanent-delete option. Outlook controls whether the mailbox can recover a message deleted from the current folder. # Delete Inbox rule Source: https://docs.automate.ax/reference/integrations/outlook/actions/delete-message-rule Deletes an Inbox rule and completes without output. `outlook.deleteMessageRule` deletes an Inbox rule and completes without output. ## Example ```ts automations/outlook-delete-message-rule.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Delete Inbox rule", () => { outlook.deleteMessageRule({ ruleId: "rule-id" }) }) ``` ## Inputs Pass `{ ruleId: "rule-id" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Deletes an Inbox rule and completes without output. Microsoft Graph requires the scopes declared by the action. IDs are opaque and should be passed through unchanged. # Draft email Source: https://docs.automate.ax/reference/integrations/outlook/actions/draft-email Create an Outlook email draft. `outlook.draftEmail` creates a draft and returns its message record. Use `messageId` to update, attach files, or send it. ## Example ```ts automations/draft-outlook-email.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Draft Outlook email", () => { outlook.draftEmail({ to: "reviewer@example.com", subject: "Draft launch note", body: "Please review this note before sending.", }) }) ``` ## Inputs Requires non-empty `to`, `subject`, and `body`. `bodyType` defaults to `text`. Optional `cc`, `bcc`, and `replyTo` accept email strings or `{ address, name? }` objects. Each field accepts one recipient or an array. `importance`, receipt-request booleans, and `attachments: File[]` are optional. Optional second argument `{ account }` selects the Microsoft binding. Direct attachments are each limited to 3,000,000 bytes. ## Output Returns the created `OutlookMessage`, normally with `isDraft: true`, its stable `messageId`, and Graph's available recipients, body, state, IDs, timestamps, and web metadata. Pass `messageId` to `outlook.sendDraft` after review. # Draft forward Source: https://docs.automate.ax/reference/integrations/outlook/actions/draft-forward Create an Outlook forward draft. `outlook.draftForward` creates an unsent forward without requiring recipients. Add them later with `outlook.updateMessage`. ```ts automations/draft-outlook-forward.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Draft Outlook forward", () => { outlook.draftForward({ messageId: "AAMkAGI2...", to: "reviewer@example.com", comment: "Please review the original message below.", }) }) ``` Provide `messageId`. Optional `comment` appears before the forwarded message. Optional `to` accepts one or more email strings or `{ address, name? }` objects. Optional second argument `{ account }` selects the binding. Returns the created normalized draft. Pass its `messageId` to `outlook.addAttachment`, `outlook.updateMessage`, or `outlook.sendDraft`. # Draft reply Source: https://docs.automate.ax/reference/integrations/outlook/actions/draft-reply Create an Outlook reply draft. `outlook.draftReply` creates an unsent reply to the original sender. Use its ID to add attachments, edit, or send it. ```ts automations/draft-outlook-reply.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Draft Outlook reply", () => { outlook.draftReply({ messageId: "AAMkAGI2...", body: "Proposed response." }) }) ``` Provide `messageId`. Optional `body` adds content before the quoted message. Optional `bodyType` is `text` or `html` and defaults to text when a body is present. Optional second argument `{ account }` selects the binding. Returns the created `OutlookMessage`, normally with `isDraft: true`. # Draft reply all Source: https://docs.automate.ax/reference/integrations/outlook/actions/draft-reply-all Create an unsent Outlook reply to all recipients. `outlook.draftReplyAll` creates an unsent reply to all recipients selected by Outlook. ```ts automations/draft-outlook-reply-all.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Draft Outlook reply all", () => { outlook.draftReplyAll({ messageId: "AAMkAGI2...", bodyType: "html", body: "

Proposed response.

", }) }) ``` Provide `messageId`. `body` and `bodyType` are optional. Body type defaults to text when you supply content. Optional second argument `{ account }` selects the binding. Returns the draft `OutlookMessage`. Review its recipients before sending because Outlook may include the original message's full recipient set. # Flag message Source: https://docs.automate.ax/reference/integrations/outlook/actions/flag-message Add a follow-up flag to an Outlook message. `outlook.flagMessage` sets the message's follow-up flag status to `flagged`. ```ts automations/flag-outlook-message.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Flag Outlook message", () => { outlook.flagMessage({ messageId: "AAMkAGI2..." }) }) ``` Required `messageId` accepts a compatible signal. Optional second argument `{ account }` selects the Microsoft binding. Returns the updated `OutlookMessage` with `flag.status: "flagged"`. This action can't set due dates. # Forward Source: https://docs.automate.ax/reference/integrations/outlook/actions/forward Forward an Outlook message to new recipients. `outlook.forwardMessage` sends a message to specified recipients with new content before the forwarded content. ```ts automations/forward-outlook-message.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Forward Outlook message", () => { outlook.forwardMessage({ messageId: "AAMkAGI2...", to: [ "owner@example.com", { address: "ops@example.com", name: "Operations" }, ], body: "Please review the message below.", }) }) ``` Provide `messageId`, non-empty `to`, and `body`. Recipients are email strings or `{ address, name? }`. `bodyType` defaults to text. Optional second argument `{ account }` selects the binding. Returns `Signal`. Outlook builds the forwarded content and preserves the source message's included material. # Get attachment Source: https://docs.automate.ax/reference/integrations/outlook/actions/get-attachment Get an Outlook attachment and its available file contents. `outlook.getAttachment` returns an attachment by message and attachment ID. ```ts automations/get-outlook-attachment.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Get Outlook attachment", () => { outlook.getAttachment({ messageId: "AAMkAGI2...", attachmentId: "AAMkAGI2AAAB...", }) }) ``` Provide opaque Graph IDs in `messageId` and `attachmentId`. Optional second argument `{ account }` selects the Microsoft binding. Returns `attachmentId`, `name`, type, size, inline state, optional content metadata, and `file: File` when Graph returns base64 file bytes. Item and reference attachments generally don't produce a `File`. # Get category Source: https://docs.automate.ax/reference/integrations/outlook/actions/get-category Returns one Outlook master category. `outlook.getCategory` returns one Outlook master category. ## Example ```ts automations/outlook-get-category.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Get category", () => { outlook.getCategory({ categoryId: "category-id" }) }) ``` ## Inputs Pass `{ categoryId: "category-id" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Returns one Outlook master category. Microsoft Graph requires the scopes declared by the action. IDs are opaque and should be passed through unchanged. # Get mail folder Source: https://docs.automate.ax/reference/integrations/outlook/actions/get-mail-folder Returns one Outlook mail folder and its message counts. `outlook.getMailFolder` returns one Outlook mail folder and its message counts. ## Example ```ts automations/outlook-get-mail-folder.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Get mail folder", () => { outlook.getMailFolder({ folder: "Customers" }) }) ``` ## Inputs Pass `{ folder: "Customers" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Returns one Outlook mail folder and its message counts. Microsoft Graph requires the scopes declared by the action. IDs are opaque and should be passed through unchanged. # Get MailTips Source: https://docs.automate.ax/reference/integrations/outlook/actions/get-mail-tips Returns delivery warnings and automatic replies for each recipient. `outlook.getMailTips` returns delivery warnings and automatic replies for each recipient. ## Example ```ts automations/outlook-get-mail-tips.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Get MailTips", () => { outlook.getMailTips({ emailAddresses: ["person@example.com"], mailTipsOptions: ["automaticReplies", "mailboxFullStatus"], }) }) ``` ## Inputs Pass recipient addresses and optional MailTips flags such as `automaticReplies`, `mailboxFullStatus`, `customMailTip`, or `deliveryRestriction`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Returns delivery warnings and automatic replies for each recipient. Microsoft Graph requires the scopes declared by the action. IDs are opaque and should be passed through unchanged. # Get mailbox settings Source: https://docs.automate.ax/reference/integrations/outlook/actions/get-mailbox-settings Returns the connected mailbox's locale, timezone, working hours, and automatic reply settings. `outlook.getMailboxSettings` returns the connected mailbox's locale, timezone, working hours, and automatic reply settings. ## Example ```ts automations/outlook-get-mailbox-settings.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Get mailbox settings", () => { outlook.getMailboxSettings({}) }) ``` ## Inputs Pass `{}`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Returns the connected mailbox's locale, timezone, working hours, and automatic reply settings. Microsoft Graph requires the scopes declared by the action. IDs are opaque and should be passed through unchanged. # Get message Source: https://docs.automate.ax/reference/integrations/outlook/actions/get-message Get an Outlook message by ID. `outlook.getMessage` returns a message's body and metadata. ## Example ```ts automations/get-outlook-message.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Get Outlook message", () => { outlook.getMessage({ messageId: "AAMkAGI2..." }) }) ``` ## Inputs Required `messageId: string` is Outlook's opaque message ID. Optional second argument `{ account }` defaults to the project Microsoft binding. The action doesn't accept a conversation ID. ## Output Returns a complete `OutlookMessage`, including body, preview, recipients, sender, subject, timestamps, categories, importance, flag, folder and conversation IDs, read/draft/attachment state, Focused Inbox classification, web link, and ETag where available. `hasAttachments` indicates that attachments exist but doesn't include their contents. Use [List attachments](/reference/integrations/outlook/actions/list-attachments). # Get message MIME Source: https://docs.automate.ax/reference/integrations/outlook/actions/get-message-mime Returns the RFC 5322 message as a `File`. `outlook.getMessageMime` returns the RFC 5322 message as a `File`. ## Example ```ts automations/outlook-get-message-mime.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Get message MIME", () => { outlook.getMessageMime({ messageId: "AAMkAGI2..." }) }) ``` ## Inputs Pass `{ messageId: "AAMkAGI2..." }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Returns the RFC 5322 message as a `File`. Microsoft Graph requires the scopes declared by the action. IDs are opaque and should be passed through unchanged. # Get Inbox rule Source: https://docs.automate.ax/reference/integrations/outlook/actions/get-message-rule Returns one Inbox rule. `outlook.getMessageRule` returns one Inbox rule. ## Example ```ts automations/outlook-get-message-rule.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Get Inbox rule", () => { outlook.getMessageRule({ ruleId: "rule-id" }) }) ``` ## Inputs Pass `{ ruleId: "rule-id" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Returns one Inbox rule. Microsoft Graph requires the scopes declared by the action. IDs are opaque and should be passed through unchanged. # Get profile Source: https://docs.automate.ax/reference/integrations/outlook/actions/get-profile Get the connected Microsoft user's mail identity. `outlook.getProfile` returns the user behind an Outlook binding. ## Example ```ts automations/get-outlook-profile.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Get Outlook profile", () => { outlook.getProfile() }) ``` ## Inputs The action has no schema input fields. Its optional second argument `{ account: string | IntegrationAccountReference<"microsoft"> }` defaults to the project Microsoft binding. ## Output Returns `userId`, `displayName`, `userPrincipalName`, and optional primary `email`. The primary email can be absent. The sign-in principal remains present. # List attachments Source: https://docs.automate.ax/reference/integrations/outlook/actions/list-attachments List attachments on an Outlook message. `outlook.listAttachments` returns metadata for file, item, and reference attachments across all Graph pages without downloading their contents. ```ts automations/list-outlook-attachments.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("List Outlook attachments", () => { outlook.listAttachments({ messageId: "AAMkAGI2...", limit: 100 }) }) ``` Provide `messageId`. Optional `limit` defaults to 100 and permits 1–10,000 across pages. Optional second argument `{ account }` selects the binding. Returns attachments with `attachmentId`, `name`, `size`, `isInline`, and optional `MIME` type. `type` accepts `file`, `item`, `reference`, or `unknown`. Use `outlook.getAttachment` when you need subtype metadata or one attachment's contents. # List categories Source: https://docs.automate.ax/reference/integrations/outlook/actions/list-categories Returns all Outlook master categories. `outlook.listCategories` returns all Outlook master categories. ## Example ```ts automations/outlook-list-categories.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("List categories", () => { outlook.listCategories({}) }) ``` ## Inputs Pass `{}`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Returns all Outlook master categories. Microsoft Graph requires the scopes declared by the action. IDs are opaque and should be passed through unchanged. # List mail folders Source: https://docs.automate.ax/reference/integrations/outlook/actions/list-mail-folders List Outlook mail folders and message counts. `outlook.listMailFolders` returns top-level folders or a selected folder's direct children. ## Example ```ts automations/list-outlook-folders.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("List Outlook folders", () => { outlook.listMailFolders({ parentFolder: "Archive", includeHidden: false, limit: 100, }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `parentFolder` | `string` | No | Mailbox root | Display path, ID, or well-known name. The action returns its direct children. | | `includeHidden` | `boolean` | No | `false` | Includes hidden folders. | | `limit` | `number` | No | `100` | Maximum across Graph pages, 1–10,000. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"microsoft">` | No | Project default | Microsoft binding. | ## Output Returns folders with `folderId`, `displayName`, `childFolderCount`, `totalItemCount`, `unreadItemCount`, and `isHidden`. Numeric counts default to zero and `isHidden` to false if Graph omits them. Folder names match case-insensitively across the full hierarchy. Use a path such as `Projects/Launch` or an ID when duplicate names would be ambiguous. # List message metadata Source: https://docs.automate.ax/reference/integrations/outlook/actions/list-message-metadata List Outlook messages without bodies or previews. `outlook.listMessageMetadata` returns mailbox or folder message metadata for routing by headers or state. ## Example ```ts automations/list-unread-mail.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("List unread Outlook mail", () => { outlook.listMessageMetadata({ folder: "inbox", filter: "isRead eq false", orderBy: "receivedDateTime desc", limit: 50, }) }) ``` ## Inputs `folder` optionally accepts a display path, ID, or well-known name. `filter` and `orderBy` are Microsoft Graph OData expressions. `limit` defaults to 100 and accepts 1–10,000. Second argument `{ account }` defaults to the project Microsoft binding. ## Output Returns `OutlookMessage[]` without `body` or `preview`. Each record includes `messageId`, subject, recipients, read/draft/attachment state, categories, importance, flag, folders, conversation and internet IDs, timestamps, sender, Focused Inbox classification, web link, and ETag when Graph supplies them. Invalid OData expressions fail at Microsoft Graph. # List Inbox rules Source: https://docs.automate.ax/reference/integrations/outlook/actions/list-message-rules Returns Inbox rules in evaluation order. `outlook.listMessageRules` returns Inbox rules in evaluation order. ## Example ```ts automations/outlook-list-message-rules.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("List Inbox rules", () => { outlook.listMessageRules({}) }) ``` ## Inputs Optional `limit` controls the maximum rules returned, from 1 through 10,000, and defaults to 100. The optional second argument `{ account }` selects a Microsoft binding. ## Output Returns Inbox rules in evaluation order. Use each opaque `ruleId` with the get, update, or delete action. Microsoft Graph requires the scopes declared by the action. IDs are opaque and should be passed through unchanged. # List messages Source: https://docs.automate.ax/reference/integrations/outlook/actions/list-messages List Outlook messages from a mailbox or folder. `outlook.listMessages` returns messages with body and preview. ## Example ```ts automations/list-recent-outlook-mail.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("List recent Outlook mail", () => { outlook.listMessages({ folder: "inbox", orderBy: "receivedDateTime desc", limit: 25, }) }) ``` ## Inputs Optional `folder` is a display path, folder ID, or well-known name. Optional `filter` and `orderBy` are OData expressions. `limit` defaults to 100 and permits 1–10,000 across Graph pages. Second argument `{ account }` selects the Microsoft binding. ## Output Returns `OutlookMessage[]`. A message contains `messageId`, `subject`, optional `body: { content; contentType: "text" | "html" }`, preview, recipients, sender, timestamps, IDs, read/draft/attachment state, categories, importance, flag, Focused Inbox classification, folder, web link, and ETag. Recipient arrays and categories default to `[]`. Subject defaults to an empty string. This action doesn't download attachments. Use `outlook.listAttachments` or `outlook.getAttachment` with the message ID. # Mark as read Source: https://docs.automate.ax/reference/integrations/outlook/actions/mark-as-read Mark an Outlook message as read. `outlook.markMessageAsRead` sets `isRead` to true. ```ts automations/mark-outlook-read.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Mark Outlook mail read", () => { const email = outlook.onNewEmail() outlook.markMessageAsRead({ messageId: email.messageId }) }) ``` Required `messageId` identifies the message. Optional second argument `{ account }` defaults to the project Microsoft binding. Returns the updated `OutlookMessage` with `isRead: true`. Reapplying the action is harmless provider-side. # Mark as unread Source: https://docs.automate.ax/reference/integrations/outlook/actions/mark-as-unread Mark an Outlook message as unread. `outlook.markMessageAsUnread` sets `isRead` to false. ```ts automations/mark-outlook-unread.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Mark Outlook mail unread", () => { outlook.markMessageAsUnread({ messageId: "AAMkAGI2..." }) }) ``` Required `messageId` identifies the message. Optional second argument `{ account }` selects the Microsoft binding. Returns the updated `OutlookMessage` with `isRead: false`. # Move mail folder Source: https://docs.automate.ax/reference/integrations/outlook/actions/move-mail-folder Moves a folder and returns the moved Outlook mail folder. `outlook.moveMailFolder` moves a folder and returns the moved Outlook mail folder. ## Example ```ts automations/outlook-move-mail-folder.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Move mail folder", () => { outlook.moveMailFolder({ folder: "Customers", destinationFolder: "Archive" }) }) ``` ## Inputs Pass `{ folder: "Customers", destinationFolder: "Archive" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Moves a folder and returns the moved Outlook mail folder. Microsoft Graph requires the scopes declared by the action. IDs are opaque and should be passed through unchanged. # Move message Source: https://docs.automate.ax/reference/integrations/outlook/actions/move-message Move an Outlook message to another mail folder. `outlook.moveMessage` moves a message and returns its destination record. ```ts automations/archive-outlook-message.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Archive Outlook message", () => { outlook.moveMessage({ messageId: "AAMkAGI2...", destinationFolder: "Archive/2026", }) }) ``` Provide `messageId` and `destinationFolder`. The destination accepts an exact display path, folder ID, or well-known name. Optional second argument `{ account }` selects the Microsoft binding. Returns the relocated `OutlookMessage`. Moving can change the provider message ID. Use the returned `messageId` for later actions rather than retaining only the source ID. Ambiguous folder names fail. A path or ID resolves the ambiguity. # Permanently delete mail folder Source: https://docs.automate.ax/reference/integrations/outlook/actions/permanently-delete-mail-folder Permanently deletes a mail folder without using Deleted Items. `outlook.permanentlyDeleteMailFolder` permanently deletes a mail folder without using Deleted Items. ## Example ```ts automations/outlook-permanently-delete-mail-folder.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Permanently delete mail folder", () => { outlook.permanentlyDeleteMailFolder({ folder: "Customers" }) }) ``` ## Inputs Pass `{ folder: "Customers" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Permanently deletes a mail folder without using Deleted Items. Microsoft Graph requires the scopes declared by the action. IDs are opaque and should be passed through unchanged. # Permanently delete message Source: https://docs.automate.ax/reference/integrations/outlook/actions/permanently-delete-message Permanently deletes a message without using Deleted Items. `outlook.permanentlyDeleteMessage` permanently deletes a message without using Deleted Items. ## Example ```ts automations/outlook-permanently-delete-message.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Permanently delete message", () => { outlook.permanentlyDeleteMessage({ messageId: "AAMkAGI2..." }) }) ``` ## Inputs Pass `{ messageId: "AAMkAGI2..." }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Permanently deletes a message without using Deleted Items. Microsoft Graph requires the scopes declared by the action. IDs are opaque and should be passed through unchanged. # Reply Source: https://docs.automate.ax/reference/integrations/outlook/actions/reply Reply to an Outlook message's sender. `outlook.replyToMessage` sends an immediate reply to the original sender. Use `outlook.draftReply` for review, edits, or attachments. ```ts automations/reply-outlook-message.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Reply to Outlook mail", () => { const email = outlook.onNewEmail() outlook.replyToMessage({ messageId: email.messageId, body: "Thanks, we received your message.", }) }) ``` Required `messageId` and `body` accept compatible signals. `bodyType` is `"text" | "html"` and defaults to text. Optional second argument `{ account }` selects the binding. Returns `Signal`. Graph chooses the reply recipient from the original message. # Reply all Source: https://docs.automate.ax/reference/integrations/outlook/actions/reply-all Reply to all recipients selected by Outlook. `outlook.replyAllToMessage` sends an immediate reply to all recipients selected by Outlook. ```ts automations/reply-all-outlook.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Reply all in Outlook", () => { outlook.replyAllToMessage({ messageId: "AAMkAGI2...", bodyType: "html", body: "

Confirmed for everyone.

", }) }) ``` Required `messageId` and `body` identify the source and content. `bodyType` defaults to `text`. Optional second argument `{ account }` selects the binding. Returns `Signal`. This can send to every recipient selected by Outlook, so use `outlook.replyToMessage` when only the sender should receive the response. # Search messages Source: https://docs.automate.ax/reference/integrations/outlook/actions/search-messages Search Outlook messages with Microsoft Graph syntax. `outlook.searchMessages` returns matching message metadata. ## Example ```ts automations/search-outlook-mail.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Find launch mail", () => { outlook.searchMessages({ folder: "inbox", query: "subject:launch from:alex@example.com", limit: 50, }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `query` | `string` | Yes | None | Microsoft Graph message search expression. The action escapes quotes before submission. | | `folder` | `string` | No | Entire mailbox | Display path, ID, or well-known folder name. | | `limit` | `number` | No | `100` | Maximum results across pages, 1–10,000. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"microsoft">` | No | Project default | Microsoft binding. | ## Output Returns matching message metadata without body or preview. Microsoft Graph controls search syntax and index availability. Malformed expressions fail at the provider. # Send draft Source: https://docs.automate.ax/reference/integrations/outlook/actions/send-draft Send an Outlook draft. `outlook.sendDraft` sends a draft created by `outlook.draftEmail`, `outlook.draftReply`, `outlook.draftReplyAll`, or `outlook.draftForward`. ```ts automations/send-outlook-draft.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Send Outlook draft", () => { const draft = outlook.draftEmail({ to: "reader@example.com", subject: "Ready", body: "Approved.", }) outlook.sendDraft({ messageId: draft.messageId }) }) ``` Required `messageId` must identify an unsent draft in the selected mailbox. Optional second argument `{ account }` defaults to the project Microsoft binding. Returns `Signal`. Graph rejects non-draft or unavailable message IDs. # Send email Source: https://docs.automate.ax/reference/integrations/outlook/actions/send-email Send a plain-text, Markdown, or HTML email through Outlook. `outlook.sendEmail` sends a new message and saves it to Sent Items. Use `outlook.draftEmail` when it needs review first. ## Example ```ts automations/send-outlook-report.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Send Outlook report", () => { onDashboardRun({ title: "Send Outlook report" }) outlook.sendEmail({ to: { address: "reader@example.com", name: "Report reader" }, subject: "Weekly report", markdown: "# Report ready\n\nThe weekly report is **available**.", requestReadReceipt: true, }) }) ``` ## Inputs `to` is one recipient or a non-empty array. Recipients are email strings or `{ address, name? }`. Provide `subject` and at least one of `text`, `markdown`, or `html`. `cc`, `bcc`, and `replyTo` use the same recipient format. `importance` is `low`, `normal`, or `high`. `requestDeliveryReceipt` and `requestReadReceipt` are optional booleans. `attachments?: File[]` attaches files directly, and second argument `{ account }` selects the Microsoft binding. Outlook accepts one body representation. Automate.ax sends HTML when you provide HTML or Markdown, preferring supplied HTML over generated Markdown HTML. A text-only body remains plain text. Each direct attachment must be 3,000,000 bytes or smaller. The action fails before sending if any file exceeds that limit. ## Output Returns `Signal`. Microsoft Graph doesn't return the sent message from this endpoint. Create and then send a draft when later steps need its ID. # Set categories Source: https://docs.automate.ax/reference/integrations/outlook/actions/set-categories Replace an Outlook message's categories. `outlook.setMessageCategories` replaces the entire message category list. It doesn't merge with existing categories. ```ts automations/categorize-outlook-message.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Categorize Outlook message", () => { outlook.setMessageCategories({ messageId: "AAMkAGI2...", categories: ["Customer", "Urgent"], }) }) ``` Required `messageId` identifies the message and `categories: string[]` is the complete replacement. Pass `[]` to clear categories. Optional second argument `{ account }` selects the binding. Returns the updated normalized `OutlookMessage`. # Update category Source: https://docs.automate.ax/reference/integrations/outlook/actions/update-category Updates and returns an Outlook master category. `outlook.updateCategory` updates and returns an Outlook master category. ## Example ```ts automations/outlook-update-category.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Update category", () => { outlook.updateCategory({ categoryId: "category-id", color: "preset4" }) }) ``` ## Inputs Pass `{ categoryId: "category-id", color: "preset4" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Updates and returns an Outlook master category. Microsoft Graph requires the scopes declared by the action. IDs are opaque and should be passed through unchanged. # Update mail folder Source: https://docs.automate.ax/reference/integrations/outlook/actions/update-mail-folder Renames and returns an Outlook mail folder. `outlook.updateMailFolder` renames and returns an Outlook mail folder. ## Example ```ts automations/outlook-update-mail-folder.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Update mail folder", () => { outlook.updateMailFolder({ folder: "Customers", displayName: "Clients" }) }) ``` ## Inputs Pass `{ folder: "Customers", displayName: "Clients" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Renames and returns an Outlook mail folder. Microsoft Graph requires the scopes declared by the action. IDs are opaque and should be passed through unchanged. # Update mailbox settings Source: https://docs.automate.ax/reference/integrations/outlook/actions/update-mailbox-settings Updates mailbox settings and returns the provider-confirmed settings. `outlook.updateMailboxSettings` updates mailbox settings and returns the provider-confirmed settings. ## Example ```ts automations/outlook-update-mailbox-settings.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Update mailbox settings", () => { outlook.updateMailboxSettings({ timeZone: "Pacific Standard Time" }) }) ``` ## Inputs Pass one or more writable settings: `automaticRepliesSetting`, `dateFormat`, `delegateMeetingMessageDeliveryOptions`, `language`, `timeFormat`, `timeZone`, or `workingHours`. Read-only fields such as `archiveFolder` and `userPurpose` aren't accepted. The optional second argument `{ account }` selects a Microsoft binding. ## Output Returns the updated mailbox settings, including locale, time zone, working hours, and automatic reply configuration when present. Microsoft Graph requires the scopes declared by the action. IDs are opaque and should be passed through unchanged. # Update message Source: https://docs.automate.ax/reference/integrations/outlook/actions/update-message Update an Outlook message or draft. `outlook.updateMessage` changes selected fields. Recipients, subject, and body are generally draft-only. Read state, flags, categories, and importance can also apply to received mail when Microsoft allows. ## Example ```ts automations/update-outlook-draft.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Update Outlook draft", () => { outlook.updateMessage({ messageId: "AAMkAGI2...", subject: "Updated launch note", bodyType: "html", body: "

Approved copy.

", categories: ["Launch"], }) }) ``` ## Inputs Provide `messageId`. Optional replacements are `to`, `cc`, `bcc`, `subject`, `body`, `bodyType`, `categories`, `importance`, `isRead`, and `flagStatus`. `flagStatus` accepts `notFlagged`, `complete`, or `flagged`. `bodyType` only matters when replacing `body` and defaults to text for that update. Recipient lists replace, rather than append to, their existing fields. Second argument `{ account }` selects the binding. ## Output Returns Graph's updated normalized `OutlookMessage`. Microsoft rejects fields that aren't writable for the message's current state. # Update Inbox rule Source: https://docs.automate.ax/reference/integrations/outlook/actions/update-message-rule Updates and returns an Inbox rule. `outlook.updateMessageRule` updates and returns an Inbox rule. ## Example ```ts automations/outlook-update-message-rule.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Update Inbox rule", () => { outlook.updateMessageRule({ ruleId: "rule-id", isEnabled: false }) }) ``` ## Inputs Pass `{ ruleId: "rule-id", isEnabled: false }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Updates and returns an Inbox rule. Microsoft Graph requires the scopes declared by the action. IDs are opaque and should be passed through unchanged. # Outlook Source: https://docs.automate.ax/reference/integrations/outlook/index Send and organize Outlook mail, attachments, folders, categories, and Inbox rules, or react to message changes. ## Exports ```ts theme={null} import { outlook, microsoftAccount, getOutlookGraphApi, } from "automate.ax/outlook" ``` * `outlook` contains the packaged Outlook actions and triggers. * `microsoftAccount("name")` selects a named Microsoft connection. * `getOutlookGraphApi` creates the authenticated Outlook API helper for a custom account-backed action. ## Triggers * [On new email](/reference/integrations/outlook/triggers/on-new-email) * [On message event](/reference/integrations/outlook/triggers/on-message-event) * [On message created](/reference/integrations/outlook/triggers/on-message-created) * [On message updated](/reference/integrations/outlook/triggers/on-message-updated) * [On message deleted](/reference/integrations/outlook/triggers/on-message-deleted) ## Actions * [Add attachment](/reference/integrations/outlook/actions/add-attachment) * [Clear flag](/reference/integrations/outlook/actions/clear-flag) * [Complete flag](/reference/integrations/outlook/actions/complete-flag) * [Copy message](/reference/integrations/outlook/actions/copy-message) * [Delete attachment](/reference/integrations/outlook/actions/delete-attachment) * [Delete message](/reference/integrations/outlook/actions/delete-message) * [Draft email](/reference/integrations/outlook/actions/draft-email) * [Draft forward](/reference/integrations/outlook/actions/draft-forward) * [Draft reply all](/reference/integrations/outlook/actions/draft-reply-all) * [Draft reply](/reference/integrations/outlook/actions/draft-reply) * [Flag message](/reference/integrations/outlook/actions/flag-message) * [Forward](/reference/integrations/outlook/actions/forward) * [Get attachment](/reference/integrations/outlook/actions/get-attachment) * [Get message](/reference/integrations/outlook/actions/get-message) * [Get profile](/reference/integrations/outlook/actions/get-profile) * [List attachments](/reference/integrations/outlook/actions/list-attachments) * [List mail folders](/reference/integrations/outlook/actions/list-mail-folders) * [List message metadata](/reference/integrations/outlook/actions/list-message-metadata) * [List messages](/reference/integrations/outlook/actions/list-messages) * [Mark as read](/reference/integrations/outlook/actions/mark-as-read) * [Mark as unread](/reference/integrations/outlook/actions/mark-as-unread) * [Move message](/reference/integrations/outlook/actions/move-message) * [Reply all](/reference/integrations/outlook/actions/reply-all) * [Reply](/reference/integrations/outlook/actions/reply) * [Search messages](/reference/integrations/outlook/actions/search-messages) * [Send draft](/reference/integrations/outlook/actions/send-draft) * [Send email](/reference/integrations/outlook/actions/send-email) * [Set categories](/reference/integrations/outlook/actions/set-categories) * [Update message](/reference/integrations/outlook/actions/update-message) * [Copy mail folder](/reference/integrations/outlook/actions/copy-mail-folder) * [Create category](/reference/integrations/outlook/actions/create-category) * [Create Inbox rule](/reference/integrations/outlook/actions/create-message-rule) * [Create mail folder](/reference/integrations/outlook/actions/create-mail-folder) * [Delete category](/reference/integrations/outlook/actions/delete-category) * [Delete Inbox rule](/reference/integrations/outlook/actions/delete-message-rule) * [Delete mail folder](/reference/integrations/outlook/actions/delete-mail-folder) * [Get category](/reference/integrations/outlook/actions/get-category) * [Get Inbox rule](/reference/integrations/outlook/actions/get-message-rule) * [Get mail folder](/reference/integrations/outlook/actions/get-mail-folder) * [Get mailbox settings](/reference/integrations/outlook/actions/get-mailbox-settings) * [Get MailTips](/reference/integrations/outlook/actions/get-mail-tips) * [Get message MIME](/reference/integrations/outlook/actions/get-message-mime) * [List categories](/reference/integrations/outlook/actions/list-categories) * [List Inbox rules](/reference/integrations/outlook/actions/list-message-rules) * [Move mail folder](/reference/integrations/outlook/actions/move-mail-folder) * [Permanently delete mail folder](/reference/integrations/outlook/actions/permanently-delete-mail-folder) * [Permanently delete message](/reference/integrations/outlook/actions/permanently-delete-message) * [Update category](/reference/integrations/outlook/actions/update-category) * [Update Inbox rule](/reference/integrations/outlook/actions/update-message-rule) * [Update mail folder](/reference/integrations/outlook/actions/update-mail-folder) * [Update mailbox settings](/reference/integrations/outlook/actions/update-mailbox-settings) # On message created Source: https://docs.automate.ax/reference/integrations/outlook/triggers/on-message-created Runs when a message is created and returns the message change event. `outlook.onMessageCreated` subscribes to Microsoft Graph mailbox notifications. ## Example ```ts automations/outlook-on-message-created.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("On message created", () => { const event = outlook.onMessageCreated({ folder: "Customers" }) return event }) ``` ## Options Optional `folder` accepts an exact display path, provider ID, or well-known name. Omit it to watch the mailbox. Optional `account` selects a Microsoft binding. ## Event Runs when a message is created and returns the message change event. Created and updated events include the normalized message. Deleted events include `changeType`, `messageId`, and the known `folderId` without fetching the deleted resource. # On message deleted Source: https://docs.automate.ax/reference/integrations/outlook/triggers/on-message-deleted Runs when a message is deleted and returns an ID-only tombstone. `outlook.onMessageDeleted` subscribes to Microsoft Graph mailbox notifications. ## Example ```ts automations/outlook-on-message-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("On message deleted", () => { const event = outlook.onMessageDeleted({ folder: "Customers" }) return event }) ``` ## Options Optional `folder` accepts an exact display path, provider ID, or well-known name. Omit it to watch the mailbox. Optional `account` selects a Microsoft binding. ## Event Runs when a message is deleted and returns an ID-only tombstone. Created and updated events include the normalized message. Deleted events include `changeType`, `messageId`, and the known `folderId` without fetching the deleted resource. # On message event Source: https://docs.automate.ax/reference/integrations/outlook/triggers/on-message-event Runs for message creation, update, or deletion and returns a change event. `outlook.onMessageEvent` subscribes to Microsoft Graph mailbox notifications. ## Example ```ts automations/outlook-on-message-event.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("On message event", () => { const event = outlook.onMessageEvent({ folder: "Customers" }) return event }) ``` ## Options Optional `folder` accepts an exact display path, provider ID, or well-known name. Omit it to watch the mailbox. Optional `account` selects a Microsoft binding. ## Event Runs for message creation, update, or deletion and returns a change event. Created and updated events include the normalized message. Deleted events include `changeType`, `messageId`, and the known `folderId` without fetching the deleted resource. # On message updated Source: https://docs.automate.ax/reference/integrations/outlook/triggers/on-message-updated Runs when a message is updated and returns the message change event. `outlook.onMessageUpdated` subscribes to Microsoft Graph mailbox notifications. ## Example ```ts automations/outlook-on-message-updated.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("On message updated", () => { const event = outlook.onMessageUpdated({ folder: "Customers" }) return event }) ``` ## Options Optional `folder` accepts an exact display path, provider ID, or well-known name. Omit it to watch the mailbox. Optional `account` selects a Microsoft binding. ## Event Runs when a message is updated and returns the message change event. Created and updated events include the normalized message. Deleted events include `changeType`, `messageId`, and the known `folderId` without fetching the deleted resource. # On new email Source: https://docs.automate.ax/reference/integrations/outlook/triggers/on-new-email Run an automation when a message arrives in an Outlook Inbox. `outlook.onNewEmail` handles messages created in the connected account's Inbox. ## Example ```ts automations/process-outlook-mail.automation.ts theme={null} import { automation } from "automate.ax" import { outlook } from "automate.ax/outlook" export default automation("Process Outlook mail", () => { const email = outlook.onNewEmail() outlook.markMessageAsRead({ messageId: email.messageId }) }) ``` ## Options Optional static `account: string | IntegrationAccountReference<"microsoft">` selects the mailbox and defaults to the project binding. The mailbox can't change at runtime. ## Trigger data Returns `Signal` with `messageId`, subject, body, preview, recipients, sender, timestamps, conversation and folder IDs, read/draft and attachment state, categories, importance, flag, Focused Inbox classification, web link, and ETag where Microsoft supplies them. Recipient arrays and categories default to `[]`. Subject defaults to an empty string. The trigger watches message creation in Inbox. It reports `hasAttachments` but doesn't embed attachment data. Call `outlook.listAttachments` with `messageId` to read attachments. # Execute statement Source: https://docs.automate.ax/reference/integrations/postgres/actions/execute-statement Execute one parameterized read/write PostgreSQL statement. `postgres.execute` executes exactly one statement in its own implicit PostgreSQL transaction. Use it for `INSERT`, `UPDATE`, `DELETE`, DDL, and other work that can change database state. ## Example ```ts automations/update-customer.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { postgres } from "automate.ax/postgres" import { z } from "zod" export default automation("Activate customer", () => { const request = onHttpRequest({ body: z.object({ customerId: z.string() }), scope: "automation", }) postgres.execute({ sql: ` update customers set status = $1 where id = $2 returning id, status `, parameters: ["active", request.body.customerId], }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `sql` | `string` | Yes | None | Exactly one non-empty SQL statement. | | `parameters` | `(JsonValue \| bigint \| Date \| Uint8Array)[]` | No | `[]` | Values bound to `$1`, `$2`, and later placeholders. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"postgres">` | No | Project default | Connected PostgreSQL database. | Use parameters for values. PostgreSQL does not accept parameters for schema, table, or column identifiers. ## Output Returns `command`, `rowCount`, `rows`, and `fields` in the same shape as [Run query](/reference/integrations/postgres/actions/run-query). Add `RETURNING` to a mutation when you need changed rows. ## Permissions and retries Grant the connected role only the privileges required by the statement. Common mutations need schema `USAGE`, the matching table privilege, and sequence `USAGE` for generated identifiers. DDL usually requires object ownership or schema `CREATE`. This action is not replay-safe. If PostgreSQL accepts a mutation but the connection fails before Automate.ax receives the result, Automate.ax does not repeat the statement automatically. Use database constraints or an idempotency key in your schema when callers can retry the automation. For several changes that must commit together, use [Run transaction](/reference/integrations/postgres/actions/run-transaction). # Run query Source: https://docs.automate.ax/reference/integrations/postgres/actions/run-query Execute one parameterized PostgreSQL statement in a read-only transaction. `postgres.query` executes one statement inside a PostgreSQL `READ ONLY` transaction. PostgreSQL blocks its documented set of data-changing and DDL commands, but `READ ONLY` is not a pure-read sandbox. `NOTIFY` and routines can still create external effects. ## Example ```ts automations/query-postgres.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { postgres } from "automate.ax/postgres" export default automation("Find recent pro customers", () => { onDashboardRun({ title: "Find recent pro customers" }) postgres.query({ sql: ` select id, email from customers where plan = $1 and created_at >= $2 order by created_at desc `, parameters: ["pro", new Date("2026-01-01T00:00:00Z")], }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `sql` | `string` | Yes | None | Exactly one non-empty SQL statement. | | `parameters` | `(JsonValue \| bigint \| Date \| Uint8Array)[]` | No | `[]` | Values bound to `$1`, `$2`, and later placeholders. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"postgres">` | No | Project default | Connected PostgreSQL database. | > [!WARNING] > > Use parameters for untrusted values. Placeholders can't represent table or > column names; don't concatenate untrusted identifiers into SQL. ## Output Returns a signal with: | Property | Type | Description | | - | - | - | | `command` | `string` | PostgreSQL command tag, usually `SELECT`. | | `rowCount` | `number \| null` | Returned row count when PostgreSQL supplies one. | | `rows` | `Record[]` | Result rows keyed by the database column names. | | `fields` | `PostgresField[]` | Metadata for returned fields. | Each field contains `name`, `columnId`, `tableId`, `dataTypeId`, `dataTypeSize`, `dataTypeModifier`, and `format`. Database column names and nested JSON keys remain unchanged because they belong to your schema; the PostgreSQL metadata property names use camel case. ## Permissions and failures Grant the connected role `CONNECT` on the database, `USAGE` on referenced schemas, and only the `SELECT` or routine privileges the query needs. PostgreSQL returns SQLSTATE-backed errors for syntax, permissions, missing objects, timeouts, and data failures. Commands that PostgreSQL classifies as disallowed in a read-only transaction fail with SQLSTATE `25006` (`read_only_sql_transaction`); notifications and routines with external effects do not. Automate.ax rejects multiple statements before connecting. It does not automatically retry this action because a read-only statement can still invoke a routine with an external side effect or send a PostgreSQL notification. Use [Execute statement](/reference/integrations/postgres/actions/execute-statement) for one read/write statement or [Run transaction](/reference/integrations/postgres/actions/run-transaction) for several atomic statements. ## Connection security Use a `postgres://` or `postgresql://` connection string for a dedicated least-privilege role. Prefer `sslmode=verify-full` with a trusted server certificate. With the current PostgreSQL client, `sslmode=require` verifies the server certificate unless you also set `uselibpqcompat=true`; that compatibility option encrypts without verifying server identity. # Run transaction Source: https://docs.automate.ax/reference/integrations/postgres/actions/run-transaction Execute ordered parameterized PostgreSQL statements atomically. `postgres.transaction` executes 1–100 statements on one connection between `BEGIN` and `COMMIT`. PostgreSQL rolls the complete transaction back after the first failure. ## Example ```ts automations/create-order.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { postgres } from "automate.ax/postgres" import { z } from "zod" export default automation("Create order", () => { const request = onHttpRequest({ body: z.object({ customerId: z.string(), orderId: z.string(), quantity: z.number().int().positive(), sku: z.string(), }), scope: "automation", }) postgres.transaction({ statements: [ { sql: "insert into orders (id, customer_id) values ($1, $2)", parameters: [request.body.orderId, request.body.customerId], }, { sql: "update inventory set available = available - $1 where sku = $2", parameters: [request.body.quantity, request.body.sku], }, ], }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `statements` | `PostgresStatement[]` | Yes | None | 1–100 statements executed in order. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"postgres">` | No | Project default | Connected PostgreSQL database. | Each statement contains one non-empty `sql` string and optional `(JsonValue | bigint | Date | Uint8Array)[]` `parameters`. Transaction-control statements such as `BEGIN`, `COMMIT`, `ROLLBACK`, and `SAVEPOINT` are rejected because the action owns the transaction boundary. ## Output Returns `{ results }`. `results` contains one `command`, `rowCount`, `rows`, and `fields` envelope per statement in input order. ## Permissions, failures, and retries The connected role needs the union of the exact database privileges required by every statement. The first PostgreSQL failure stops execution and rolls back earlier changes. If rollback itself fails, the action reports both failures. This action is not replay-safe. A connection loss during `COMMIT` can leave transaction resolution unknown, so Automate.ax does not repeat the transaction automatically. Use durable business keys and constraints when a caller may retry the automation. # PostgreSQL Source: https://docs.automate.ax/reference/integrations/postgres/index Run parameterized PostgreSQL queries, single statements, and transactions through a connected database role. ## Exports ```ts theme={null} import { postgres, postgresAccount, getPostgresClient, } from "automate.ax/postgres" ``` * `postgres` contains the packaged PostgreSQL actions. * `postgresAccount("name")` selects a named PostgreSQL connection. * `getPostgresClient` creates the authenticated PostgreSQL client for a custom account-backed action. ## Actions * [Run query](/reference/integrations/postgres/actions/run-query) * [Execute statement](/reference/integrations/postgres/actions/execute-statement) * [Run transaction](/reference/integrations/postgres/actions/run-transaction) # Approve content Source: https://docs.automate.ax/reference/integrations/reddit/actions/approve-content Approve a moderated Reddit post or comment and clear its reports. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.approveContent` approve a moderated Reddit post or comment and clear its reports. ```ts automations/reddit-approve-content.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("Approve content", () => { const result = reddit.approveContent({ contentId: "t1_abc123" }) }) ``` ## Inputs Set `contentId` to a post or comment fullname in a subreddit the account can moderate. Compatible signals are accepted. Use the optional second argument `{ account }` to select a named Reddit binding. ## Output Returns no value. # Create comment Source: https://docs.automate.ax/reference/integrations/reddit/actions/create-comment Reply to a Reddit post or comment. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.createComment` reply to a Reddit post or comment. ```ts automations/reddit-create-comment.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("Create comment", () => { const result = reddit.createComment({ parentId: "t3_abc123", text: "Thanks for the feedback.", }) }) ``` ## Inputs Set `parentId` to a post (`t3_...`) or comment (`t1_...`) fullname and provide Markdown `text`. Compatible signals are accepted. Use the optional second argument `{ account }` to select a named Reddit binding. ## Output Returns the normalized created `RedditComment`. # Create link post Source: https://docs.automate.ax/reference/integrations/reddit/actions/create-link-post Publish a link post to one subreddit. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.createLinkPost` publish a link post to one subreddit. ```ts automations/reddit-create-link-post.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("Create link post", () => { const result = reddit.createLinkPost({ subreddit: "AutomateAx", title: "Release notes", url: "https://automate.ax/changelog", }) }) ``` ## Inputs Set `subreddit`, `title`, and an absolute `url`. Optional fields select `flairId`, NSFW and spoiler state, and reply notifications. Compatible signals are accepted. Use the optional second argument `{ account }` to select a named Reddit binding. ## Output Returns the new post's fullname, short ID, and URL. # Create text post Source: https://docs.automate.ax/reference/integrations/reddit/actions/create-text-post Publish a self post with a Markdown body. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.createTextPost` publish a self post with a Markdown body. ```ts automations/reddit-create-text-post.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("Create text post", () => { const result = reddit.createTextPost({ subreddit: "AutomateAx", title: "Weekly update", text: "What shipped this week...", }) }) ``` ## Inputs Set `subreddit`, `title`, and optional `text`. Titles are capped at 300 characters. Optional fields select `flairId`, NSFW and spoiler state, and reply notifications. Compatible signals are accepted. Use the optional second argument `{ account }` to select a named Reddit binding. ## Output Returns the new post's fullname, short ID, and URL. Submission is not automatically replayed after an ambiguous provider failure. # Delete content Source: https://docs.automate.ax/reference/integrations/reddit/actions/delete-content Delete an owned Reddit post or comment. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.deleteContent` delete an owned Reddit post or comment. ```ts automations/reddit-delete-content.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("Delete content", () => { const result = reddit.deleteContent({ contentId: "t1_abc123" }) }) ``` ## Inputs Set `contentId` to an owned post or comment fullname. Compatible signals are accepted. Use the optional second argument `{ account }` to select a named Reddit binding. ## Output Returns no value. Reddit preserves the thread position while replacing deleted author content according to provider behavior. # Edit content Source: https://docs.automate.ax/reference/integrations/reddit/actions/edit-content Replace the body of an owned self post or comment. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.editContent` replace the body of an owned self post or comment. ```ts automations/reddit-edit-content.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("Edit content", () => { const result = reddit.editContent({ contentId: "t1_abc123", text: "Updated response", }) }) ``` ## Inputs Set `contentId` to an owned post or comment fullname and provide the complete replacement `text`. Compatible signals are accepted. Use the optional second argument `{ account }` to select a named Reddit binding. ## Output Returns the updated `RedditPost` or `RedditComment`. # Get post Source: https://docs.automate.ax/reference/integrations/reddit/actions/get-post Retrieve one Reddit post by fullname. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.getPost` retrieve one Reddit post by fullname. ```ts automations/reddit-get-post.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("Get post", () => { const result = reddit.getPost({ postId: "t3_abc123" }) }) ``` ## Inputs Set `postId` to the `t3_...` fullname, not the short ID from a Reddit URL. Compatible signals are accepted. Use the optional second argument `{ account }` to select a named Reddit binding. ## Output Returns one normalized `RedditPost`. It includes both `id` and `shortId`. # Get profile Source: https://docs.automate.ax/reference/integrations/reddit/actions/get-profile Return the connected Reddit user's identity and karma totals. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.getProfile` return the connected Reddit user's identity and karma totals. ```ts automations/reddit-get-profile.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("Get profile", () => { const result = reddit.getProfile({}) }) ``` ## Inputs No fields. Use the optional second argument to select a named Reddit account. Compatible signals are accepted. Use the optional second argument `{ account }` to select a named Reddit binding. ## Output Returns a `RedditProfile` with the username, stable user ID, karma totals, account creation time, employee and moderator flags, and verified-email state. # Get subreddit Source: https://docs.automate.ax/reference/integrations/reddit/actions/get-subreddit Retrieve public metadata and subscription state for one subreddit. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.getSubreddit` retrieve public metadata and subscription state for one subreddit. ```ts automations/reddit-get-subreddit.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("Get subreddit", () => { const result = reddit.getSubreddit({ subreddit: "AutomateAx" }) }) ``` ## Inputs Set `subreddit` to the community name without `r/`. Compatible signals are accepted. Use the optional second argument `{ account }` to select a named Reddit binding. ## Output Returns a `RedditSubreddit` with its stable fullname, descriptions, subscriber counts, NSFW state, URL, and whether the connected account subscribes. # Hide posts Source: https://docs.automate.ax/reference/integrations/reddit/actions/hide-posts Hide up to 100 Reddit posts from default listings. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.hidePosts` hide up to 100 Reddit posts from default listings. ```ts automations/reddit-hide-posts.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("Hide posts", () => { const result = reddit.hidePosts({ postIds: ["t3_abc123", "t3_def456"] }) }) ``` ## Inputs Provide one to 100 post fullnames. Automate.ax splits them into provider-safe batches of 50. Compatible signals are accepted. Use the optional second argument `{ account }` to select a named Reddit binding. ## Output Returns no value. # List comments Source: https://docs.automate.ax/reference/integrations/reddit/actions/list-comments Retrieve a post and its available nested comment tree. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.listComments` retrieve a post and its available nested comment tree. ```ts automations/reddit-list-comments.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("List comments", () => { const result = reddit.listComments({ postId: "t3_abc123", sort: "top", limit: 100, }) }) ``` ## Inputs Set the post fullname. `sort` defaults to `confidence`; `limit` defaults to 100 and is capped at 500. Optional `depth` is capped at 10. Compatible signals are accepted. Use the optional second argument `{ account }` to select a named Reddit binding. ## Output Returns `{ post, comments }`. Comments are flattened in Reddit display order. Reddit may return `more` placeholders when it truncates a large tree; this action omits those unavailable descendants. # List inbox Source: https://docs.automate.ax/reference/integrations/reddit/actions/list-inbox List inbox, unread, or sent records for the connected account. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.listInbox` list inbox, unread, or sent records for the connected account. ```ts automations/reddit-list-inbox.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("List inbox", () => { const result = reddit.listInbox({ view: "unread", limit: 25 }) }) ``` ## Inputs Set `view` to `inbox`, `unread`, or `sent`; it defaults to `inbox`. `limit` defaults to 25 and is capped at 100. Pass `after` to continue. Compatible signals are accepted. Use the optional second argument `{ account }` to select a named Reddit binding. ## Output Returns `messages` and `pageInfo`. Private-message fullnames begin with `t4_`; comment notifications use `t1_` and set `wasComment` to `true`. Both retain their Reddit context when Reddit provides it. # List mod queue Source: https://docs.automate.ax/reference/integrations/reddit/actions/list-mod-queue List posts and comments awaiting moderator review. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.listModQueue` list posts and comments awaiting moderator review. ```ts automations/reddit-list-mod-queue.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("List mod queue", () => { const result = reddit.listModQueue({ subreddit: "AutomateAx", limit: 25 }) }) ``` ## Inputs Set a subreddit the connected account moderates. Optional `only` restricts results to `links` or `comments`; `limit` defaults to 25 and is capped at 100. Pass `after` to continue. Compatible signals are accepted. Use the optional second argument `{ account }` to select a named Reddit binding. ## Output Returns mixed `content` plus `pageInfo`. The account needs Reddit's `read` scope and suitable moderator permissions for the subreddit. # List post flairs Source: https://docs.automate.ax/reference/integrations/reddit/actions/list-post-flairs List post flair templates available to the connected user. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.listPostFlairs` list post flair templates available to the connected user. ```ts automations/reddit-list-post-flairs.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("List post flairs", () => { const result = reddit.listPostFlairs({ subreddit: "AutomateAx" }) }) ``` ## Inputs Set the subreddit name without `r/`. Compatible signals are accepted. Use the optional second argument `{ account }` to select a named Reddit binding. ## Output Returns `flairs` with template IDs, text, editability, CSS class, and colors. # List posts Source: https://docs.automate.ax/reference/integrations/reddit/actions/list-posts List ranked posts from one subreddit. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.listPosts` list ranked posts from one subreddit. ```ts automations/reddit-list-posts.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("List posts", () => { const result = reddit.listPosts({ subreddit: "AutomateAx", sort: "new", limit: 25, }) }) ``` ## Inputs Set `subreddit`. `sort` defaults to `new`; use `hot`, `rising`, `top`, or `controversial`. `limit` defaults to 25 and is capped at 100. Pass `after` from the prior page; `time` applies to `top` and `controversial`. Compatible signals are accepted. Use the optional second argument `{ account }` to select a named Reddit binding. ## Output Returns `posts` and `pageInfo`. Post fullnames begin with `t3_`; timestamps are `Date` values. # Lock content Source: https://docs.automate.ax/reference/integrations/reddit/actions/lock-content Prevent new replies to a moderated Reddit post or comment. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.lockContent` prevent new replies to a moderated Reddit post or comment. ```ts automations/reddit-lock-content.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("Lock content", () => { const result = reddit.lockContent({ contentId: "t3_abc123" }) }) ``` ## Inputs Set `contentId` to a post or comment fullname. Compatible signals are accepted. Use the optional second argument `{ account }` to select a named Reddit binding. ## Output Returns no value. # Mark messages read Source: https://docs.automate.ax/reference/integrations/reddit/actions/mark-messages-read Mark Reddit inbox items as read. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.markMessagesRead` mark Reddit inbox items as read. ```ts automations/reddit-mark-messages-read.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("Mark messages read", () => { const result = reddit.markMessagesRead({ messageIds: ["t4_abc123"] }) }) ``` ## Inputs Provide one to 100 inbox item fullnames. Automate.ax splits them into provider-safe batches of 25. Comment notifications may use `t1_...` fullnames. Compatible signals are accepted. Use the optional second argument `{ account }` to select a named Reddit binding. ## Output Returns no value. # Mark messages unread Source: https://docs.automate.ax/reference/integrations/reddit/actions/mark-messages-unread Mark Reddit inbox items as unread. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.markMessagesUnread` mark Reddit inbox items as unread. ```ts automations/reddit-mark-messages-unread.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("Mark messages unread", () => { const result = reddit.markMessagesUnread({ messageIds: ["t4_abc123"] }) }) ``` ## Inputs Provide one to 100 inbox item fullnames. Automate.ax splits them into provider-safe batches of 25. Comment notifications may use `t1_...` fullnames. Compatible signals are accepted. Use the optional second argument `{ account }` to select a named Reddit binding. ## Output Returns no value. # Remove content Source: https://docs.automate.ax/reference/integrations/reddit/actions/remove-content Remove a moderated Reddit post or comment. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.removeContent` remove a moderated Reddit post or comment. ```ts automations/reddit-remove-content.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("Remove content", () => { const result = reddit.removeContent({ contentId: "t1_abc123", spam: true }) }) ``` ## Inputs Set `contentId`. `spam` defaults to `false`; set it only when the content should train Reddit's spam systems. Compatible signals are accepted. Use the optional second argument `{ account }` to select a named Reddit binding. ## Output Returns no value. Removal is not automatically replayed after an ambiguous provider failure. # Reply to message Source: https://docs.automate.ax/reference/integrations/reddit/actions/reply-to-message Reply within an existing Reddit private-message thread. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.replyToMessage` replies within an existing Reddit private-message thread. ```ts automations/reddit-reply-to-message.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("Reply to Reddit message", () => { const received = reddit.onNewInboxItem() if (!received.message.wasComment) { reddit.replyToMessage({ messageId: received.message.id, text: "Thanks for your message.", }) } }) ``` ## Inputs Set `messageId` to a `t4_...` private-message fullname and provide Markdown `text`. Inbox comment notifications use `t1_...` fullnames and must be answered with `reddit.createComment` instead. Compatible signals are accepted. Use the optional second argument `{ account }` to select a named Reddit binding. ## Output Returns the created `RedditMessage`. Submission is not automatically replayed after an ambiguous provider failure. # Report content Source: https://docs.automate.ax/reference/integrations/reddit/actions/report-content Report a Reddit post, comment, or inbox item. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.reportContent` report a Reddit post, comment, or inbox item. ```ts automations/reddit-report-content.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("Report content", () => { const result = reddit.reportContent({ contentId: "t3_abc123", reason: "Spam", }) }) ``` ## Inputs Set the thing fullname and a provider-valid `reason`. Optional `customText` is capped at 2,000 characters. Compatible signals are accepted. Use the optional second argument `{ account }` to select a named Reddit binding. ## Output Returns no value. Reporting public content also hides it for the connected account. This action is not automatically replayed. # Save content Source: https://docs.automate.ax/reference/integrations/reddit/actions/save-content Save a Reddit post or comment to the connected account. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.saveContent` save a Reddit post or comment to the connected account. ```ts automations/reddit-save-content.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("Save content", () => { const result = reddit.saveContent({ contentId: "t3_abc123" }) }) ``` ## Inputs Set `contentId` to a post or comment fullname. Compatible signals are accepted. Use the optional second argument `{ account }` to select a named Reddit binding. ## Output Returns no value. Repeating the action keeps the item saved. # Search posts Source: https://docs.automate.ax/reference/integrations/reddit/actions/search-posts Search Reddit globally or within one subreddit. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.searchPosts` search Reddit globally or within one subreddit. ```ts automations/reddit-search-posts.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("Search posts", () => { const result = reddit.searchPosts({ query: "workflow automation", subreddit: "AutomateAx", }) }) ``` ## Inputs Set `query` to at most 512 characters. Omit `subreddit` for global search. `sort` defaults to `relevance`, `time` to `all`, and `limit` to 25. Pass `after` to continue. Compatible signals are accepted. Use the optional second argument `{ account }` to select a named Reddit binding. ## Output Returns matching `posts` and `pageInfo`. # Send private message Source: https://docs.automate.ax/reference/integrations/reddit/actions/send-private-message Send one private message to a consenting Reddit user. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.sendPrivateMessage` send one private message to a consenting Reddit user. ```ts automations/reddit-send-private-message.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("Send private message", () => { const result = reddit.sendPrivateMessage({ to: "ada", subject: "Follow-up", text: "Thanks for opting in.", }) }) ``` ## Inputs Set `to`, `subject` (at most 100 characters), and Markdown `text`. Optional `fromSubreddit` sends as a moderated subreddit when Reddit permits it. Compatible signals are accepted. Use the optional second argument `{ account }` to select a named Reddit binding. ## Output Returns no value. Only message recipients who explicitly consented; Reddit prohibits unsolicited automated messages. Submission is not automatically replayed. # Set post flair Source: https://docs.automate.ax/reference/integrations/reddit/actions/set-post-flair Apply a flair template to one Reddit post. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.setPostFlair` apply a flair template to one Reddit post. ```ts automations/reddit-set-post-flair.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("Set post flair", () => { const result = reddit.setPostFlair({ subreddit: "AutomateAx", postId: "t3_abc123", flairId: "template-id", }) }) ``` ## Inputs Set the subreddit, post fullname, and flair template ID. Optional `text` customizes an editable template and is capped at 64 characters. Compatible signals are accepted. Use the optional second argument `{ account }` to select a named Reddit binding. ## Output Returns no value. # Subscribe to subreddit Source: https://docs.automate.ax/reference/integrations/reddit/actions/subscribe-subreddit Subscribe the connected account to a subreddit. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.subscribeSubreddit` subscribe the connected account to a subreddit. ```ts automations/reddit-subscribe-subreddit.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("Subscribe to subreddit", () => { const result = reddit.subscribeSubreddit({ subreddit: "AutomateAx" }) }) ``` ## Inputs Set the subreddit name without `r/`. Compatible signals are accepted. Use the optional second argument `{ account }` to select a named Reddit binding. ## Output Returns no value. Repeating the action keeps the subscription active. # Unhide posts Source: https://docs.automate.ax/reference/integrations/reddit/actions/unhide-posts Restore hidden Reddit posts to account listings. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.unhidePosts` restore hidden Reddit posts to account listings. ```ts automations/reddit-unhide-posts.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("Unhide posts", () => { const result = reddit.unhidePosts({ postIds: ["t3_abc123"] }) }) ``` ## Inputs Provide one to 100 post fullnames. Automate.ax splits them into provider-safe batches of 50. Compatible signals are accepted. Use the optional second argument `{ account }` to select a named Reddit binding. ## Output Returns no value. # Unlock content Source: https://docs.automate.ax/reference/integrations/reddit/actions/unlock-content Allow replies to a locked Reddit post or comment. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.unlockContent` allow replies to a locked Reddit post or comment. ```ts automations/reddit-unlock-content.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("Unlock content", () => { const result = reddit.unlockContent({ contentId: "t3_abc123" }) }) ``` ## Inputs Set `contentId` to a post or comment fullname. Compatible signals are accepted. Use the optional second argument `{ account }` to select a named Reddit binding. ## Output Returns no value. # Unsave content Source: https://docs.automate.ax/reference/integrations/reddit/actions/unsave-content Remove a Reddit post or comment from saved items. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.unsaveContent` remove a Reddit post or comment from saved items. ```ts automations/reddit-unsave-content.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("Unsave content", () => { const result = reddit.unsaveContent({ contentId: "t3_abc123" }) }) ``` ## Inputs Set `contentId` to a post or comment fullname. Compatible signals are accepted. Use the optional second argument `{ account }` to select a named Reddit binding. ## Output Returns no value. # Unsubscribe from subreddit Source: https://docs.automate.ax/reference/integrations/reddit/actions/unsubscribe-subreddit Unsubscribe the connected account from a subreddit. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.unsubscribeSubreddit` unsubscribe the connected account from a subreddit. ```ts automations/reddit-unsubscribe-subreddit.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("Unsubscribe from subreddit", () => { const result = reddit.unsubscribeSubreddit({ subreddit: "AutomateAx" }) }) ``` ## Inputs Set the subreddit name without `r/`. Compatible signals are accepted. Use the optional second argument `{ account }` to select a named Reddit binding. ## Output Returns no value. # Reddit Source: https://docs.automate.ax/reference/integrations/reddit/index Automate Reddit publishing, discovery, inboxes, moderation, and community events. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. Import Reddit actions and triggers from `automate.ax/reddit`: ```ts automations/watch-reddit.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("Watch product feedback", () => { const event = reddit.onSubredditEvent({ subreddit: "AutomateAx" }) if (event.action === "postCreated") { reddit.saveContent({ contentId: event.post.id }) } }) ``` Connect Reddit with OAuth. Automate.ax always requests `identity` so it can label the account, then adds the least Reddit scopes required by your deployed actions and triggers. Reddit issues one-hour access tokens and permanent refresh tokens. ## Content and IDs Reddit fullnames include a type prefix: posts use `t3_`, comments use `t1_`, private messages use `t4_`, and subreddits use `t5_`. Actions that accept `postId`, `contentId`, `parentId`, or message IDs require these fullnames. Normalized records also expose the provider's short ID. List actions return `pageInfo.after`. Pass it as the next action's `after` input. Provider timestamps become JavaScript `Date` values. ## Trigger polling Reddit does not provide Data API webhooks. Automate.ax polls the required listing once per minute, creates an initial baseline, and emits only records first observed afterward. A trigger added to an already shared poll also starts from its own baseline, so it does not replay older records. New-post, new-comment, and broad subreddit triggers share one poll per Reddit account and subreddit. Inbox and moderation triggers use separate polls so a missing moderation permission cannot stall public subreddit events. Each poll reads up to 1,000 of the newest records in a demanded listing; events beyond that safety bound between polls can be missed. ## Safety and provider behavior Automate.ax does not expose voting actions because Reddit prohibits automated vote and karma manipulation. Send private messages only after the recipient explicitly consents. Reddit validation errors are returned as action failures, polling and trigger setup honor provider retry delays, and unsafe submissions are not automatically replayed after ambiguous failures. ## Exports ```ts theme={null} import { reddit, redditAccount } from "automate.ax/reddit" ``` * `reddit` contains the packaged Reddit actions and triggers. * `redditAccount("name")` selects a named Reddit connection. ## Triggers * [Subreddit event](/reference/integrations/reddit/triggers/on-subreddit-event) * [New post](/reference/integrations/reddit/triggers/on-new-post) * [New comment](/reference/integrations/reddit/triggers/on-new-comment) * [New inbox item](/reference/integrations/reddit/triggers/on-new-inbox-item) * [New mod queue item](/reference/integrations/reddit/triggers/on-new-mod-queue-item) ## Actions * [Get profile](/reference/integrations/reddit/actions/get-profile) * [Get subreddit](/reference/integrations/reddit/actions/get-subreddit) * [List posts](/reference/integrations/reddit/actions/list-posts) * [Search posts](/reference/integrations/reddit/actions/search-posts) * [Get post](/reference/integrations/reddit/actions/get-post) * [List comments](/reference/integrations/reddit/actions/list-comments) * [Create text post](/reference/integrations/reddit/actions/create-text-post) * [Create link post](/reference/integrations/reddit/actions/create-link-post) * [Create comment](/reference/integrations/reddit/actions/create-comment) * [Edit content](/reference/integrations/reddit/actions/edit-content) * [Delete content](/reference/integrations/reddit/actions/delete-content) * [Save content](/reference/integrations/reddit/actions/save-content) * [Unsave content](/reference/integrations/reddit/actions/unsave-content) * [Report content](/reference/integrations/reddit/actions/report-content) * [Hide posts](/reference/integrations/reddit/actions/hide-posts) * [Unhide posts](/reference/integrations/reddit/actions/unhide-posts) * [Subscribe to subreddit](/reference/integrations/reddit/actions/subscribe-subreddit) * [Unsubscribe from subreddit](/reference/integrations/reddit/actions/unsubscribe-subreddit) * [List inbox](/reference/integrations/reddit/actions/list-inbox) * [Mark messages read](/reference/integrations/reddit/actions/mark-messages-read) * [Mark messages unread](/reference/integrations/reddit/actions/mark-messages-unread) * [Send private message](/reference/integrations/reddit/actions/send-private-message) * [Reply to message](/reference/integrations/reddit/actions/reply-to-message) * [List mod queue](/reference/integrations/reddit/actions/list-mod-queue) * [Approve content](/reference/integrations/reddit/actions/approve-content) * [Remove content](/reference/integrations/reddit/actions/remove-content) * [Lock content](/reference/integrations/reddit/actions/lock-content) * [Unlock content](/reference/integrations/reddit/actions/unlock-content) * [List post flairs](/reference/integrations/reddit/actions/list-post-flairs) * [Set post flair](/reference/integrations/reddit/actions/set-post-flair) # New comment Source: https://docs.automate.ax/reference/integrations/reddit/triggers/on-new-comment Start when Automate.ax first observes a new comment in one subreddit. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.onNewComment` start when Automate.ax first observes a new comment in one subreddit. ```ts automations/reddit-on-new-comment.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("New comment", () => { const event = reddit.onNewComment({ subreddit: "AutomateAx" }) }) ``` ## Configuration Set `subreddit` to the community name without `r/`. Use optional `account` to select a named Reddit binding. ## Event Returns `{ action: "commentCreated", comment }` with a normalized `RedditComment`. Automate.ax polls once per minute. It establishes a baseline when the trigger becomes active and emits only items observed afterward. Temporary provider failures retry; missing permissions or inaccessible subreddits appear as a trigger reconciliation error. # New inbox item Source: https://docs.automate.ax/reference/integrations/reddit/triggers/on-new-inbox-item Start when Automate.ax first observes an unread Reddit inbox item. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.onNewInboxItem` start when Automate.ax first observes an unread Reddit inbox item. ```ts automations/reddit-on-new-inbox-item.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("New inbox item", () => { const event = reddit.onNewInboxItem({}) }) ``` ## Configuration No provider filter is required. Use optional `account` to select a named Reddit binding. ## Event Returns `{ action: "inboxItemCreated", message }` with a normalized `RedditMessage`. Private messages use `t4_...` fullnames. Comment notifications use `t1_...` and set `message.wasComment` to `true`. Automate.ax polls once per minute. It establishes a baseline when the trigger becomes active and emits only items observed afterward. Temporary provider failures retry; missing permissions or inaccessible subreddits appear as a trigger reconciliation error. # New mod queue item Source: https://docs.automate.ax/reference/integrations/reddit/triggers/on-new-mod-queue-item Start when Automate.ax first observes a post or comment in a subreddit moderation queue. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.onNewModQueueItem` start when Automate.ax first observes a post or comment in a subreddit moderation queue. ```ts automations/reddit-on-new-mod-queue-item.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("New mod queue item", () => { const event = reddit.onNewModQueueItem({ subreddit: "AutomateAx" }) }) ``` ## Configuration Set `subreddit` to the community name without `r/`. Use optional `account` to select a named Reddit binding. ## Event Returns `{ kind: "post", post }` or `{ kind: "comment", comment }`. The connected account needs Reddit's `read` scope and suitable moderator permissions for the subreddit. Automate.ax polls once per minute. It establishes a baseline when the trigger becomes active and emits only items observed afterward. Temporary provider failures retry; missing permissions or inaccessible subreddits appear as a trigger reconciliation error. # New post Source: https://docs.automate.ax/reference/integrations/reddit/triggers/on-new-post Start when Automate.ax first observes a new post in one subreddit. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.onNewPost` start when Automate.ax first observes a new post in one subreddit. ```ts automations/reddit-on-new-post.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("New post", () => { const event = reddit.onNewPost({ subreddit: "AutomateAx" }) }) ``` ## Configuration Set `subreddit` to the community name without `r/`. Use optional `account` to select a named Reddit binding. ## Event Returns `{ action: "postCreated", post }` with a normalized `RedditPost`. Automate.ax polls once per minute. It establishes a baseline when the trigger becomes active and emits only items observed afterward. Temporary provider failures retry; missing permissions or inaccessible subreddits appear as a trigger reconciliation error. # Subreddit event Source: https://docs.automate.ax/reference/integrations/reddit/triggers/on-subreddit-event Start from a newly observed post or comment in one subreddit. > [!WARNING] > > Reddit connections are temporarily unavailable while Automate.ax awaits > Reddit's approval for commercial Data API access. You can connect a Reddit > account after the integration is approved and enabled. `reddit.onSubredditEvent` start from a newly observed post or comment in one subreddit. ```ts automations/reddit-on-subreddit-event.automation.ts theme={null} import { automation } from "automate.ax" import { reddit } from "automate.ax/reddit" export default automation("Subreddit event", () => { const event = reddit.onSubredditEvent({ subreddit: "AutomateAx" }) }) ``` ## Configuration Set `subreddit` to the community name without `r/`. Use optional `account` to select a named Reddit binding. ## Event Returns a discriminated event. `action` is `postCreated` with `post`, or `commentCreated` with `comment`. Automate.ax polls once per minute. It establishes a baseline when the trigger becomes active and emits only items observed afterward. Temporary provider failures retry; missing permissions or inaccessible subreddits appear as a trigger reconciliation error. # Add contact to segment Source: https://docs.automate.ax/reference/integrations/resend/actions/add-contact-to-segment Add a Resend contact to a segment. `resend.addContactToSegment` adds one contact to one segment. ```ts automations/add-resend-segment-member.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Add Resend segment member", () => { resend.addContactToSegment({ contactId: "person@example.com", segmentId: "segment_123", }) }) ``` `contactId` accepts a contact ID or email. `segmentId` is the existing segment ID. Optional second argument `{ account }` selects the binding. Returns `{ object: "contact_segment"; contactId; segmentId }`. # Add suppression records in a batch Source: https://docs.automate.ax/reference/integrations/resend/actions/add-suppressions-batch Suppress up to 100 Resend recipients. `resend.addSuppressionsBatch` adds between 1 and 100 email addresses to the suppression list. ```ts automations/add-resend-suppressions.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Suppress Resend recipients", () => { resend.addSuppressionsBatch({ emails: ["one@example.com", "two@example.com"], }) }) ``` The result contains one suppression ID for each address accepted by Resend. # Cancel broadcast Source: https://docs.automate.ax/reference/integrations/resend/actions/cancel-broadcast Cancel a scheduled Resend broadcast. `resend.cancelBroadcast` cancel a scheduled Resend broadcast. ```ts automations/resend-cancelBroadcast.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Cancel broadcast", () => { resend.cancelBroadcast({ broadcastId: "broadcast_123" }) }) ``` Cancellation succeeds only before Resend starts sending the broadcast. Returns the broadcast ID and object type. Optional second argument `{ account }` selects the Resend account binding. # Cancel scheduled email Source: https://docs.automate.ax/reference/integrations/resend/actions/cancel-scheduled-email Cancel a scheduled Resend email. `resend.cancelScheduledEmail` prevents Resend from sending a pending scheduled email. ```ts automations/cancel-resend-email.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Cancel Resend email", () => { resend.cancelScheduledEmail({ emailId: "email_123" }) }) ``` The action requires the `emailId` from the original send. Optional second argument `{ account }` selects the Resend binding. Returns `{ id: string; object: string }`. Resend rejects an email that has already started delivery or isn't a cancelable scheduled message. # Create broadcast Source: https://docs.automate.ax/reference/integrations/resend/actions/create-broadcast Create a Resend segment broadcast. `resend.createBroadcast` create a Resend segment broadcast. ```ts automations/resend-createBroadcast.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Create broadcast", () => { resend.createBroadcast({ segmentId: "78261eea-8f8b-4381-83c6-79fa7120f1cf", from: "News ", subject: "August news", markdown: "# What shipped", }) }) ``` Provide a verified sender, subject, segment ID, and at least one body format. Set `send: true` to send immediately or combine it with `scheduledAt`; a schedule is invalid when `send` is false. Optional second argument `{ account }` selects the Resend account binding. # Create contact Source: https://docs.automate.ax/reference/integrations/resend/actions/create-contact Create a Resend contact with properties and subscriptions. `resend.createContact` creates a contact with optional segments and topic preferences. ```ts automations/create-resend-contact.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Create Resend contact", () => { resend.createContact({ email: "person@example.com", firstName: "Ada", lastName: "Lovelace", properties: { customer_tier: "pro", lifetime_value: 1200 }, segments: [{ id: "segment_123" }], topics: [{ id: "topic_123", subscription: "opt_in" }], }) }) ``` The action requires `email`. Optional fields are `firstName`, `lastName`, string, number, or null `properties`, `segments` as `{ id }` objects, topic choices with `opt_in` or `opt_out`, and global `unsubscribed`. Optional second argument `{ account }` selects the binding. Returns `{ id: string; object: "contact" }`. # Create contact import Source: https://docs.automate.ax/reference/integrations/resend/actions/create-contact-import Upload a CSV and queue an asynchronous Resend contact import. `resend.createContactImport({ file, ... })` uploads a CSV file up to 50 MB. Optional `columnMap` maps contact or property keys to CSV columns. `onConflict` is `skip` or `upsert`; `segments` use `{ id }` objects and `topics` use `{ id, subscription }`. The result is `{ id, object: "contact_import" }`. # Create contact property Source: https://docs.automate.ax/reference/integrations/resend/actions/create-contact-property Create a typed Resend contact property. `resend.createContactProperty` create a typed Resend contact property. ```ts automations/resend-createContactProperty.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Create contact property", () => { resend.createContactProperty({ key: "plan", type: "string", fallbackValue: "free", }) }) ``` Keys accept up to 50 alphanumeric or underscore characters. `type` is `string` or `number`; when supplied, `fallbackValue` must match it. Optional second argument `{ account }` selects the Resend account binding. # Create custom event definition Source: https://docs.automate.ax/reference/integrations/resend/actions/create-custom-event-definition Define a custom event for Resend Automations. `resend.createCustomEventDefinition({ name, schema? })` defines a custom event. The optional flat schema maps keys to `string`, `number`, `boolean`, or `date`. Names cannot start with the reserved `resend:` prefix. # Create domain Source: https://docs.automate.ax/reference/integrations/resend/actions/create-domain Add a sending or receiving domain to Resend. `resend.createDomain` adds a domain and returns the DNS records required for verification. ```ts automations/create-resend-domain.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Create Resend domain", () => { resend.createDomain({ name: "example.com", region: "us-east-1", capabilities: { sending: "enabled", receiving: "disabled" }, }) }) ``` Optional fields configure a custom return path, tracking subdomain, click and open tracking, TLS policy, and sending or receiving capabilities. At least one capability must remain enabled. The returned domain includes its status, capabilities, region, and typed DNS records. # Create domain claim Source: https://docs.automate.ax/reference/integrations/resend/actions/create-domain-claim Claim a domain verified by another Resend account. `resend.createDomainClaim` starts an ownership claim and returns the TXT proof record. ```ts automations/create-resend-domain-claim.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Claim Resend domain", () => { resend.createDomainClaim({ name: "example.com", region: "us-east-1" }) }) ``` The result includes the claim ID, proof record, expiration, status, and any blocking or failure reason reported by Resend. # Create segment Source: https://docs.automate.ax/reference/integrations/resend/actions/create-segment Create a Resend contact segment. `resend.createSegment` creates a named contact group. ```ts automations/create-resend-segment.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Create Resend segment", () => { resend.createSegment({ name: "Customers" }) }) ``` The action requires a non-empty `name`. Optional second argument `{ account }` selects the binding. Returns `{ id: string; name: string; object: string }`. Preserve the stable ID when configuration shouldn't depend on a mutable or duplicated name. # Create suppression Source: https://docs.automate.ax/reference/integrations/resend/actions/create-suppression Add an address to the Resend suppression list. `resend.createSuppression({ email })` manually suppresses one recipient. ```ts automations/create-resend-suppression.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Suppress Resend recipient", () => { resend.createSuppression({ email: "blocked@example.com" }) }) ``` The result contains the new suppression ID. Suppressed recipients are excluded from subsequent Resend deliveries. # Create template Source: https://docs.automate.ax/reference/integrations/resend/actions/create-template Create a draft Resend email template. `resend.createTemplate` create a draft Resend email template. ```ts automations/resend-createTemplate.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Create template", () => { resend.createTemplate({ name: "Welcome", markdown: "# Welcome, {{{NAME}}}", variables: [{ key: "NAME", type: "string", fallbackValue: "friend" }], }) }) ``` Provide at least one of `html`, `markdown`, or `text`. Templates accept up to 50 typed `string` or `number` variables; fallback values must match their declared types. Returns the new template ID and object type. Optional second argument `{ account }` selects the Resend account binding. # Create topic Source: https://docs.automate.ax/reference/integrations/resend/actions/create-topic Create a Resend subscription topic. `resend.createTopic` create a Resend subscription topic. ```ts automations/resend-createTopic.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Create topic", () => { resend.createTopic({ name: "Newsletter", defaultSubscription: "opt_in", visibility: "public", }) }) ``` Names accept up to 50 characters and descriptions up to 200. `defaultSubscription` is `opt_in` or `opt_out` and cannot be changed later. Visibility defaults to `private`. Optional second argument `{ account }` selects the Resend account binding. # Delete broadcast Source: https://docs.automate.ax/reference/integrations/resend/actions/delete-broadcast Delete a draft Resend broadcast. `resend.deleteBroadcast` delete a draft Resend broadcast. ```ts automations/resend-deleteBroadcast.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Delete broadcast", () => { resend.deleteBroadcast({ broadcastId: "broadcast_123" }) }) ``` Deletion is permanent and is intended for draft broadcasts. Returns the deleted ID and status. Optional second argument `{ account }` selects the Resend account binding. # Delete contact Source: https://docs.automate.ax/reference/integrations/resend/actions/delete-contact Delete a Resend contact. `resend.deleteContact` permanently removes a contact by ID or email address. ```ts automations/delete-resend-contact.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Delete Resend contact", () => { resend.deleteContact({ contactId: "person@example.com" }) }) ``` The action requires `contactId`. Optional second argument `{ account }` selects the binding. Returns `{ deleted: boolean; id: string; object: "contact" }`. Deletion is different from setting `unsubscribed: true`: deletion removes the record, while unsubscribing preserves it and its history. # Delete contact property Source: https://docs.automate.ax/reference/integrations/resend/actions/delete-contact-property Delete a Resend contact property. `resend.deleteContactProperty` delete a Resend contact property. ```ts automations/resend-deleteContactProperty.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Delete contact property", () => { resend.deleteContactProperty({ propertyId: "property_123" }) }) ``` Deletion is permanent and returns the deleted property ID and status. Optional second argument `{ account }` selects the Resend account binding. # Delete custom event definition Source: https://docs.automate.ax/reference/integrations/resend/actions/delete-custom-event-definition Delete a Resend custom-event definition. `resend.deleteCustomEventDefinition({ event })` permanently deletes the definition identified by its ID or exact name. The output confirms the event ID and `deleted` state. # Delete domain Source: https://docs.automate.ax/reference/integrations/resend/actions/delete-domain Permanently remove a domain from Resend. `resend.deleteDomain({ domainId })` permanently removes one Resend domain. The result returns the deleted domain ID and Resend's `deleted` confirmation. ```ts automations/delete-resend-domain.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Delete Resend domain", () => { resend.deleteDomain({ domainId: "domain_123" }) }) ``` # Delete segment Source: https://docs.automate.ax/reference/integrations/resend/actions/delete-segment Permanently delete a Resend contact segment. `resend.deleteSegment` removes a segment by stable ID. ```ts automations/delete-resend-segment.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Delete Resend segment", () => { resend.deleteSegment({ segmentId: "78261eea-8f8b-4381-83c6-79fa7120f1cf" }) }) ``` The action requires `segmentId`. Optional second argument `{ account }` selects the binding. Returns `{ deleted: boolean; id: string; object: "segment" }`. Deleting a segment removes the grouping, not the underlying contacts. # Delete suppression Source: https://docs.automate.ax/reference/integrations/resend/actions/delete-suppression Remove an address from the Resend suppression list. `resend.deleteSuppression` removes one suppression by its ID or email address. ```ts automations/delete-resend-suppression.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Remove Resend suppression", () => { resend.deleteSuppression({ suppression: "blocked@example.com" }) }) ``` The result returns the suppression ID and Resend's `deleted` confirmation. # Delete template Source: https://docs.automate.ax/reference/integrations/resend/actions/delete-template Delete a Resend email template. `resend.deleteTemplate` delete a Resend email template. ```ts automations/resend-deleteTemplate.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Delete template", () => { resend.deleteTemplate({ template: "welcome-email" }) }) ``` `template` accepts an ID or alias. Deletion is permanent and returns the deleted ID, object type, and `deleted` status. Optional second argument `{ account }` selects the Resend account binding. # Delete topic Source: https://docs.automate.ax/reference/integrations/resend/actions/delete-topic Delete a Resend subscription topic. `resend.deleteTopic` delete a Resend subscription topic. ```ts automations/resend-deleteTopic.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Delete topic", () => { resend.deleteTopic({ topicId: "topic_123" }) }) ``` Deletion is permanent and returns the deleted topic ID and status. Optional second argument `{ account }` selects the Resend account binding. # Duplicate template Source: https://docs.automate.ax/reference/integrations/resend/actions/duplicate-template Duplicate a Resend email template. `resend.duplicateTemplate` duplicate a Resend email template. ```ts automations/resend-duplicateTemplate.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Duplicate template", () => { resend.duplicateTemplate({ template: "welcome-email" }) }) ``` `template` accepts an ID or alias. The action creates a separate draft and returns its new template ID. Optional second argument `{ account }` selects the Resend account binding. # Get broadcast Source: https://docs.automate.ax/reference/integrations/resend/actions/get-broadcast Get a Resend broadcast. `resend.getBroadcast` get a Resend broadcast. ```ts automations/resend-getBroadcast.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Get broadcast", () => { resend.getBroadcast({ broadcastId: "broadcast_123" }) }) ``` Returns content, segment, topic, schedule, sent timestamp, and current status. Draft and unscheduled fields may be null. Optional second argument `{ account }` selects the Resend account binding. # Get contact Source: https://docs.automate.ax/reference/integrations/resend/actions/get-contact Get a Resend contact by ID or email. `resend.getContact` returns a contact's profile and global subscription state. ```ts automations/get-resend-contact.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Get Resend contact", () => { resend.getContact({ contactId: "person@example.com" }) }) ``` `contactId` accepts a Resend contact ID or email address. Optional second argument `{ account }` selects the binding. Returns `id`, `object`, `email`, optional nullable `firstName` and `lastName`, `properties`, `unsubscribed`, and `createdAt`. Use `resend.listContactSegments` to list segment memberships separately. # Get contact import Source: https://docs.automate.ax/reference/integrations/resend/actions/get-contact-import Retrieve one Resend contact import. `resend.getContactImport({ contactImportId })` retrieves import status, `createdAt`, optional nullable `completedAt`, and status-dependent row `counts`. Resend supplies total, created, updated, skipped, and failed counts after the import completes or fails; queued and in-progress imports can omit them. # Get contact property Source: https://docs.automate.ax/reference/integrations/resend/actions/get-contact-property Get a Resend contact property. `resend.getContactProperty` get a Resend contact property. ```ts automations/resend-getContactProperty.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Get contact property", () => { resend.getContactProperty({ propertyId: "property_123" }) }) ``` Returns the stable ID, key, exact `string` or `number` type, nullable matching fallback value, and creation time. Optional second argument `{ account }` selects the Resend account binding. # Get custom event definition Source: https://docs.automate.ax/reference/integrations/resend/actions/get-custom-event-definition Retrieve a Resend custom-event definition. `resend.getCustomEventDefinition({ event })` accepts an event ID or exact name and returns its name, optional flat payload schema, and normalized timestamps. # Get domain Source: https://docs.automate.ax/reference/integrations/resend/actions/get-domain Retrieve a Resend domain and its DNS records. `resend.getDomain` retrieves one domain by its Resend ID. ```ts automations/get-resend-domain.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Get Resend domain", () => { resend.getDomain({ domainId: "domain_123" }) }) ``` The result includes verification status, region, capabilities, tracking settings, and the current SPF, DKIM, receiving, tracking, and CAA records returned by Resend. # Get domain claim Source: https://docs.automate.ax/reference/integrations/resend/actions/get-domain-claim Retrieve a Resend domain ownership claim. `resend.getDomainClaim({ domainId })` retrieves the current ownership claim for a domain. ```ts automations/get-resend-domain-claim.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Get Resend domain claim", () => { resend.getDomainClaim({ domainId: "domain_123" }) }) ``` The result includes the proof record, expiration, claim status, and nullable blocking or failure reason. # Get email Source: https://docs.automate.ax/reference/integrations/resend/actions/get-email Get a sent or scheduled Resend email by ID. `resend.getEmail` returns message content and the most recent delivery event. ```ts automations/get-resend-email.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Get Resend email", () => { resend.getEmail({ emailId: "email_123" }) }) ``` The action requires the `emailId` that send actions return. Optional second argument `{ account }` selects the Resend binding and defaults to the project binding. Returns `id`, `object`, `from`, `to`, `cc`, `bcc`, `replyTo`, `subject`, nullable `html` and `text`, `tags`, `createdAt`, nullable `scheduledAt`, `lastEvent`, and optional nullable provider `messageId` and `topicId`. `lastEvent` is a status string, not a timestamp. # Get email attachment Source: https://docs.automate.ax/reference/integrations/resend/actions/get-email-attachment Retrieve a sent-email attachment and temporary download URL. `resend.getEmailAttachment({ emailId, attachmentId })` retrieves one sent-email attachment. The result includes `contentType`, `contentDisposition`, `size`, `expiresAt`, and `downloadUrl`. Resend may omit `filename`; `contentId` is present for inline attachments and omitted for ordinary attachments. # Get email metrics Source: https://docs.automate.ax/reference/integrations/resend/actions/get-email-metrics Retrieve Resend delivery and engagement metrics. `resend.getEmailMetrics(...)` returns totals and optional dimension rows. Filter by up to 100 `domainIds`, `emailIds`, or `broadcastIds`; choose documented metrics, `dimensions`, date bounds, `timezone`, and `daily`, `hourly`, `weekly`, or `monthly` granularity. Email and broadcast filters or dimensions are mutually exclusive. # Get log Source: https://docs.automate.ax/reference/integrations/resend/actions/get-log Retrieve one Resend API request log. `resend.getLog({ logId })` retrieves request and response details for one Resend API log. ```ts automations/get-resend-log.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Get Resend log", () => { resend.getLog({ logId: "80df8f31-bd01-4a63-a60b-9a97b9da18e7" }) }) ``` The result includes the endpoint, method, response status, user agent, and nullable JSON request and response bodies. # Get received email Source: https://docs.automate.ax/reference/integrations/resend/actions/get-received-email Retrieve an inbound Resend email with content and headers. `resend.getReceivedEmail({ emailId })` retrieves an inbound email. The normalized result includes `createdAt`, `messageId`, optional `receivedFor`, `replyTo`, address fields, headers, HTML and text content, and attachment metadata. `contentId` and `contentDisposition` can be `null` for ordinary attachments. When Resend provides the optional nullable `raw` object, its `downloadUrl` and `expiresAt` fields expose a temporary copy of the original message. # Get received email attachment Source: https://docs.automate.ax/reference/integrations/resend/actions/get-received-email-attachment Retrieve an inbound-email attachment and download URL. `resend.getReceivedEmailAttachment({ emailId, attachmentId })` retrieves one inbound-email attachment with normalized MIME metadata, expiry, size, and temporary `downloadUrl`. # Get segment Source: https://docs.automate.ax/reference/integrations/resend/actions/get-segment Get a Resend contact segment. `resend.getSegment` returns a segment by stable ID. ```ts automations/get-resend-segment.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Get Resend segment", () => { resend.getSegment({ segmentId: "78261eea-8f8b-4381-83c6-79fa7120f1cf" }) }) ``` The action requires `segmentId`. Optional second argument `{ account }` selects the binding. Returns `id`, `name`, `object`, and `createdAt`. # Get suppression Source: https://docs.automate.ax/reference/integrations/resend/actions/get-suppression Retrieve one Resend suppression. `resend.getSuppression` accepts either a suppression ID or email address. ```ts automations/get-resend-suppression.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Get Resend suppression", () => { resend.getSuppression({ suppression: "blocked@example.com" }) }) ``` The result includes the suppression ID, email, origin, creation time, and nullable provider source ID. # Get template Source: https://docs.automate.ax/reference/integrations/resend/actions/get-template Get a Resend email template. `resend.getTemplate` get a Resend email template. ```ts automations/resend-getTemplate.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Get template", () => { resend.getTemplate({ template: "welcome-email" }) }) ``` `template` accepts a template ID or alias. The output preserves nullable subject, sender, reply address, text, variables, alias, and publication timestamp fields. Optional second argument `{ account }` selects the Resend account binding. # Get topic Source: https://docs.automate.ax/reference/integrations/resend/actions/get-topic Get a Resend subscription topic. `resend.getTopic` get a Resend subscription topic. ```ts automations/resend-getTopic.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Get topic", () => { resend.getTopic({ topicId: "topic_123" }) }) ``` Returns the topic name, optional description, immutable default subscription, visibility, and creation time. Optional second argument `{ account }` selects the Resend account binding. # List broadcast clicked links Source: https://docs.automate.ax/reference/integrations/resend/actions/list-broadcast-clicked-links List clicked links for a Resend broadcast. `resend.listBroadcastClickedLinks` list clicked links for a Resend broadcast. ```ts automations/resend-listBroadcastClickedLinks.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("List broadcast clicked links", () => { resend.listBroadcastClickedLinks({ broadcastId: "broadcast_123", limit: 50, }) }) ``` Returns each URL with total and unique click counts. `after` and `before` are mutually exclusive cursors. Optional second argument `{ account }` selects the Resend account binding. # List broadcast recipients Source: https://docs.automate.ax/reference/integrations/resend/actions/list-broadcast-recipients List Resend broadcast recipients by delivery event. `resend.listBroadcastRecipients` lists Resend broadcast recipients by delivery event. ```ts automations/resend-listBroadcastRecipients.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("List broadcast recipients", () => { resend.listBroadcastRecipients({ broadcastId: "broadcast_123", type: "bounced", bounceType: "permanent", limit: 50, }) }) ``` `type` is one of `sent`, `delivered`, `opened`, `clicked`, `bounced`, `complained`, `unsubscribed`, or `suppressed`. `bounceType` is valid only for bounced recipients. Returned bounce types are normalized to lowercase `permanent`, `transient`, or `undetermined`; the field is `null` or omitted when Resend does not provide it. Results may be cached by Resend for 15 minutes. Optional second argument `{ account }` selects the Resend account binding. # List broadcasts Source: https://docs.automate.ax/reference/integrations/resend/actions/list-broadcasts List Resend broadcasts. `resend.listBroadcasts` list Resend broadcasts. ```ts automations/resend-listBroadcasts.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("List broadcasts", () => { resend.listBroadcasts({ limit: 50 }) }) ``` `limit` accepts 1–100 and defaults to 20. `after` and `before` are mutually exclusive cursors. Broadcast states are `draft`, `queued`, or `sent`. Each result includes its normalized `topicId` when Resend associates the broadcast with a topic. Optional second argument `{ account }` selects the Resend account binding. # List contact imports Source: https://docs.automate.ax/reference/integrations/resend/actions/list-contact-imports List Resend contact imports and processing status. `resend.listContactImports({ status?, limit?, after?, before? })` lists imports. Status is `queued`, `in_progress`, `completed`, or `failed`; `limit` accepts 1–100 and cursors are mutually exclusive. Each result includes normalized timestamps. Resend provides row `counts` after an import completes or fails, so they can be absent while work is queued or in progress. # List contact properties Source: https://docs.automate.ax/reference/integrations/resend/actions/list-contact-properties List Resend contact properties. `resend.listContactProperties` list Resend contact properties. ```ts automations/resend-listContactProperties.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("List contact properties", () => { resend.listContactProperties({ limit: 50 }) }) ``` `limit` accepts 1–100 and defaults to 20. Returns typed fallback values and cursor pagination state. Optional second argument `{ account }` selects the Resend account binding. # List contact segments Source: https://docs.automate.ax/reference/integrations/resend/actions/list-contact-segments List Resend segments containing a contact. `resend.listContactSegments` returns a contact's paginated segment memberships. ```ts automations/list-contact-segments.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("List contact segments", () => { resend.listContactSegments({ contactId: "person@example.com", limit: 100 }) }) ``` `contactId` accepts an ID or email address. `limit` accepts 1–100. `after` and `before` are optional mutually exclusive cursors. Optional second argument `{ account }` selects the binding. Returns `{ data, hasMore, object }`. Each segment summary has `id`, `name`, and `createdAt`. # List contact topics Source: https://docs.automate.ax/reference/integrations/resend/actions/list-contact-topics List topic subscriptions for a Resend contact. `resend.listContactTopics({ contactId, limit?, after?, before? })` accepts a contact ID or email address. Each topic includes its ID, name, description, and `opt_in` or `opt_out` subscription. # List contacts Source: https://docs.automate.ax/reference/integrations/resend/actions/list-contacts List Resend contacts, optionally by segment. `resend.listContacts` returns paginated contact summaries, optionally for one segment. ```ts automations/list-resend-customers.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("List Resend customers", () => { resend.listContacts({ segmentId: "segment_123", limit: 100 }) }) ``` Optional `segmentId` restricts results to one existing segment. `limit` accepts 1–100. You can't combine the `after` and `before` cursors. Optional second argument `{ account }` selects the binding. Returns `{ data, hasMore, object: "list" }`. Summaries contain `id`, `email`, nullable names, `unsubscribed`, and `createdAt`. # List custom event definitions Source: https://docs.automate.ax/reference/integrations/resend/actions/list-custom-event-definitions List custom-event definitions for Resend Automations. `resend.listCustomEventDefinitions({ limit?, after?, before? })` lists event definitions with normalized `createdAt` and nullable `updatedAt`. `limit` accepts 1–100 and cursors are mutually exclusive. # List domains Source: https://docs.automate.ax/reference/integrations/resend/actions/list-domains List Resend domains with cursor pagination. `resend.listDomains` lists the domains in a Resend account. ```ts automations/list-resend-domains.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("List Resend domains", () => { resend.listDomains({ limit: 50 }) }) ``` `limit` accepts 1–100. Use either `after` or `before`, but not both. The result contains `data`, `hasMore`, and `object`; each item includes the domain's verification state, region, capabilities, and tracking settings. # List email attachments Source: https://docs.automate.ax/reference/integrations/resend/actions/list-email-attachments List attachments for a sent Resend email. `resend.listEmailAttachments({ emailId, limit?, after?, before? })` lists sent-email attachments. `limit` accepts 1–100; don't combine `after` and `before`. Each item includes its MIME metadata, size, expiry, and temporary `downloadUrl`. Resend may omit `filename`; `contentId` is present for inline attachments and omitted for ordinary attachments. # List emails Source: https://docs.automate.ax/reference/integrations/resend/actions/list-emails List sent and scheduled Resend emails. `resend.listEmails` returns recent email summaries. ```ts automations/list-resend-emails.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("List Resend emails", () => { resend.listEmails({ limit: 50 }) }) ``` `limit` accepts 1–100 and defaults to 20. You can't use the `after` and `before` email-ID cursors together. Optional second argument `{ account }` selects the binding. Returns `{ data, hasMore, object }`. Each summary has `id`, sender, recipients, subject, `createdAt`, most recent event, nullable schedule time, and optional nullable provider message and topic IDs. For forward pagination, use the last returned ID as `after`. For backward pagination, use `before` according to Resend's cursor semantics. # List logs Source: https://docs.automate.ax/reference/integrations/resend/actions/list-logs List Resend API request logs. `resend.listLogs` lists API requests made by the connected Resend account. ```ts automations/list-resend-logs.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("List Resend logs", () => { resend.listLogs({ limit: 50 }) }) ``` `limit` accepts 1–100. Use either `after` or `before`, but not both. Each summary includes its UUID, endpoint, method, response status, creation time, and nullable user agent. # List received email attachments Source: https://docs.automate.ax/reference/integrations/resend/actions/list-received-email-attachments List attachments for an inbound Resend email. `resend.listReceivedEmailAttachments({ emailId, limit?, after?, before? })` lists downloadable inbound-email attachments. `limit` accepts 1–100; don't combine `after` and `before`. # List received emails Source: https://docs.automate.ax/reference/integrations/resend/actions/list-received-emails List inbound emails received by Resend. `resend.listReceivedEmails({ limit?, after?, before? })` lists inbound email summaries. `limit` accepts 1–100; don't combine `after` and `before`. Use `getReceivedEmail` for headers and message bodies. # List segments Source: https://docs.automate.ax/reference/integrations/resend/actions/list-segments List Resend contact segments. `resend.listSegments` returns segment summaries. ```ts automations/list-resend-segments.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("List Resend segments", () => { resend.listSegments({ limit: 100 }) }) ``` Optional `limit` accepts 1–100. `after` and `before` are mutually exclusive ID cursors. Optional second argument `{ account }` selects the binding. Returns `{ data: { id; name; createdAt }[]; hasMore; object }`. # List suppression records Source: https://docs.automate.ax/reference/integrations/resend/actions/list-suppressions List suppressed Resend recipients. `resend.listSuppressions` lists suppressed recipients with optional origin filtering. ```ts automations/list-resend-suppressions.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("List Resend suppressions", () => { resend.listSuppressions({ limit: 50, origin: "manual" }) }) ``` `origin` accepts `bounce`, `complaint`, or `manual`. `limit` accepts 1–100; use either `after` or `before`, but not both. Each item includes the address, origin, creation time, and nullable source ID. # List templates Source: https://docs.automate.ax/reference/integrations/resend/actions/list-templates List Resend email templates. `resend.listTemplates` list Resend email templates. ```ts automations/resend-listTemplates.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("List templates", () => { resend.listTemplates({ limit: 50 }) }) ``` `limit` accepts 1–100 and defaults to 20. `after` and `before` are mutually exclusive cursors. Returns draft and published template summaries with `hasMore`. Optional second argument `{ account }` selects the Resend account binding. # List topics Source: https://docs.automate.ax/reference/integrations/resend/actions/list-topics List Resend subscription topics. `resend.listTopics` list Resend subscription topics. ```ts automations/resend-listTopics.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("List topics", () => { resend.listTopics({ limit: 50 }) }) ``` `limit` accepts 1–100 and defaults to 20. Returns default subscription, visibility, timestamps, and pagination state. Optional second argument `{ account }` selects the Resend account binding. # Publish template Source: https://docs.automate.ax/reference/integrations/resend/actions/publish-template Publish the current version of a Resend template. `resend.publishTemplate` publish the current version of a Resend template. ```ts automations/resend-publishTemplate.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Publish template", () => { resend.publishTemplate({ template: "welcome-email" }) }) ``` `template` accepts an ID or alias. Publishing makes the current version available to email sends and returns the template ID. Optional second argument `{ account }` selects the Resend account binding. # Remove contact from segment Source: https://docs.automate.ax/reference/integrations/resend/actions/remove-contact-from-segment Remove a Resend contact from a segment. `resend.removeContactFromSegment` removes membership without deleting the contact. ```ts automations/remove-resend-segment-member.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Remove Resend segment member", () => { resend.removeContactFromSegment({ contactId: "person@example.com", segmentId: "segment_123", }) }) ``` `contactId` is an ID or email and `segmentId` is the existing segment ID. Optional second argument `{ account }` selects the binding. Returns `{ object: "contact_segment"; contactId; segmentId; deleted }`. The contact remains in Resend and retains memberships in other segments. # Remove suppression records in a batch Source: https://docs.automate.ax/reference/integrations/resend/actions/remove-suppressions-batch Remove up to 100 Resend suppression records. `resend.removeSuppressionsBatch` removes between 1 and 100 suppression records by IDs or email addresses. ```ts automations/remove-resend-suppressions.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Unsuppress Resend recipients", () => { resend.removeSuppressionsBatch({ emails: ["one@example.com", "two@example.com"], }) }) ``` Supply exactly one of `ids` or `emails`. The result identifies each suppression Resend reports as deleted. # Send batch emails Source: https://docs.automate.ax/reference/integrations/resend/actions/send-batch-emails Send up to 100 Resend emails in one request. `resend.sendEmailBatch` creates up to 100 independent transactional emails in one request. ## Example ```ts automations/send-resend-batch.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Send Resend batch", () => { resend.sendEmailBatch({ idempotencyKey: "digest-batch-2026-08-05", emails: [ { from: "Reports ", to: "ada@example.com", subject: "Digest", markdown: "## Your digest\n\nThe latest report is ready.", }, { from: "Reports ", to: "grace@example.com", subject: "Digest", text: "Your digest.", }, ], }) }) ``` ## Inputs `emails` is an array of 1–100 items using the same fields, body derivation, and custom-content or template rules as `resend.sendEmail`. Batch sends don't support attachments and fail before the request if any item contains them. Resend ignores per-email `idempotencyKey` values. Use the optional batch-level `idempotencyKey`, which Resend retains for 24 hours. Optional second argument `{ account }` selects the Resend binding. ## Output Returns `{ data: { id: string }[] }`. IDs use the same order as the input emails, so keep positional correspondence when storing results. # Send broadcast Source: https://docs.automate.ax/reference/integrations/resend/actions/send-broadcast Send or schedule a Resend broadcast. `resend.sendBroadcast` send or schedule a Resend broadcast. ```ts automations/resend-sendBroadcast.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Send broadcast", () => { resend.sendBroadcast({ broadcastId: "broadcast_123", scheduledAt: "in 1 hour", }) }) ``` Omit `scheduledAt` to send now. Resend also accepts supported relative delivery times. Optional second argument `{ account }` selects the Resend account binding. # Send custom event Source: https://docs.automate.ax/reference/integrations/resend/actions/send-custom-event Send a custom event to Resend for one contact. `resend.sendCustomEvent({ event, contactId?, email?, payload? })` sends an event that can activate enabled Resend Automations. Provide exactly one of `contactId` or `email`. The optional JSON payload must satisfy the event's provider-defined schema or Resend rejects it with `422`. # Send email Source: https://docs.automate.ax/reference/integrations/resend/actions/send-email Send or schedule a transactional email through Resend. `resend.sendEmail` sends custom content or a published template immediately or later. ## Example ```ts automations/send-resend-welcome.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Send Resend welcome", () => { onDashboardRun({ title: "Send Resend welcome" }) resend.sendEmail({ from: "Acme ", to: "person@example.com", subject: "Welcome", markdown: "# Welcome\n\nThanks for joining **Acme**.", tags: [{ name: "kind", value: "welcome" }], idempotencyKey: "welcome-person-123", }) }) ``` ## Inputs `to` accepts one address or up to 50 addresses. Optional `cc`, `bcc`, and `replyTo` accept one or more addresses. Custom content requires `from`, `subject`, and at least one of `text`, `markdown`, or `html`. Automate.ax preserves supplied plain-text and HTML bodies. Markdown generates either missing alternative. Otherwise, HTML generates plain text, and plain text generates HTML. For a template, provide `template: { id; variables? }` without a custom body. The published template may supply sender and subject. Optional fields include `headers`, `scheduledAt`, `topicId`, and `tags`. `scheduledAt` accepts natural language or an `ISO 8601` value. Tag names and values allow letters, digits, `_`, and `-`. Resend limits them to 256 characters. Template variable names use the same basic character set without dashes. Values are strings up to 2,000 characters or numbers. Resend retains `idempotencyKey` for 24 hours and limits it to 256 characters. Attachments are either `{ content, filename, contentType?, contentId? }` with base64 content or `{ path, filename?, contentType?, contentId? }` with a public URL. Resend enforces its provider size limits. ## Output Returns `{ id: string }`. Save the ID to retrieve delivery state, update a scheduled send, cancel it, or correlate webhook events. # Share email Source: https://docs.automate.ax/reference/integrations/resend/actions/share-email Create a temporary Resend-hosted email preview link. `resend.shareEmail({ emailId, expiresIn? })` creates a preview URL for a sent or received email. Resend limits the link lifetime to 48 hours. The output contains the email `id`, `object`, and `url`. # Update broadcast Source: https://docs.automate.ax/reference/integrations/resend/actions/update-broadcast Update a draft Resend broadcast. `resend.updateBroadcast` update a draft Resend broadcast. ```ts automations/resend-updateBroadcast.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Update broadcast", () => { resend.updateBroadcast({ broadcastId: "broadcast_123", patch: { subject: "Updated news", markdown: "# Updated" }, }) }) ``` The patch must contain at least one mutable field. Update a broadcast before it begins sending. Optional second argument `{ account }` selects the Resend account binding. # Update contact Source: https://docs.automate.ax/reference/integrations/resend/actions/update-contact Update a Resend contact's profile or subscriptions. `resend.updateContact` changes selected fields but not the contact's email address. ```ts automations/update-resend-contact.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Update Resend contact", () => { resend.updateContact({ contactId: "person@example.com", patch: { firstName: "Ada", unsubscribed: false, segments: ["Customers"] }, }) }) ``` `contactId` is a contact ID or email. `patch` must include at least one of `firstName`, `lastName`, string `properties`, `segments`, `topics`, or `unsubscribed`. Segment references are exact names or IDs. Optional second argument `{ account }` selects the binding. Returns `{ id: string; object: string }`. Values in the patch are provider updates, and supplying segment membership can replace membership according to Resend's contact update semantics. # Update contact property Source: https://docs.automate.ax/reference/integrations/resend/actions/update-contact-property Update a Resend contact property's fallback. `resend.updateContactProperty` update a Resend contact property's fallback. ```ts automations/resend-updateContactProperty.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Update contact property", () => { resend.updateContactProperty({ propertyId: "property_123", fallbackValue: null, }) }) ``` `fallbackValue` accepts a string, number, or null to clear it. A non-null value must match the property's existing type. Optional second argument `{ account }` selects the Resend account binding. # Update contact topics Source: https://docs.automate.ax/reference/integrations/resend/actions/update-contact-topics Update topic subscriptions for a Resend contact. `resend.updateContactTopics({ contactId, topics })` accepts a contact ID or email address and one or more `{ id, subscription }` updates. `subscription` is `opt_in` or `opt_out`. The output identifies the contact and updated topic choices. # Update custom event definition Source: https://docs.automate.ax/reference/integrations/resend/actions/update-custom-event-definition Replace or clear a Resend custom-event schema. `resend.updateCustomEventDefinition({ event, schema })` accepts an event ID or exact name. Provide a flat key/type map to replace the schema or `null` to clear it. # Update domain Source: https://docs.automate.ax/reference/integrations/resend/actions/update-domain Update a Resend domain's capabilities and tracking settings. `resend.updateDomain` updates one domain. ```ts automations/update-resend-domain.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Update Resend domain", () => { resend.updateDomain({ domainId: "domain_123", patch: { openTracking: true, tls: "enforced" }, }) }) ``` The patch may change click tracking, open tracking, the tracking subdomain, TLS policy, or sending and receiving capabilities. It must contain at least one field, and at least one capability must remain enabled when capabilities are supplied. # Update scheduled email Source: https://docs.automate.ax/reference/integrations/resend/actions/update-scheduled-email Reschedule a pending Resend email. `resend.updateScheduledEmail` changes a pending email's future delivery time. ```ts automations/reschedule-resend-email.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Reschedule Resend email", () => { resend.updateScheduledEmail({ emailId: "email_123", scheduledAt: "2026-08-12T16:00:00Z", }) }) ``` The action requires `emailId`. `scheduledAt` must be an `ISO 8601` datetime with an offset or `Z`. Unlike initial scheduling, this action doesn't accept natural language. Optional second argument `{ account }` selects the binding. Returns `{ id: string; object: string }`. Resend rejects emails after delivery begins or after a cancellation. # Update template Source: https://docs.automate.ax/reference/integrations/resend/actions/update-template Update a Resend email template. `resend.updateTemplate` update a Resend email template. ```ts automations/resend-updateTemplate.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Update template", () => { resend.updateTemplate({ template: "welcome-email", patch: { markdown: "# Updated welcome" }, }) }) ``` The patch must contain at least one mutable field. Body fields accept HTML, Markdown, or text; variable definitions remain limited to 50 typed values. Optional second argument `{ account }` selects the Resend account binding. # Update topic Source: https://docs.automate.ax/reference/integrations/resend/actions/update-topic Update a Resend subscription topic. `resend.updateTopic` update a Resend subscription topic. ```ts automations/resend-updateTopic.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Update topic", () => { resend.updateTopic({ topicId: "topic_123", patch: { visibility: "public" }, }) }) ``` The patch must update at least one of `name`, `description`, or `visibility`. A topic's default subscription is immutable. Optional second argument `{ account }` selects the Resend account binding. # Verify domain Source: https://docs.automate.ax/reference/integrations/resend/actions/verify-domain Ask Resend to verify a domain's DNS records. `resend.verifyDomain({ domainId })` starts verification for a Resend domain after its DNS records have been configured. ```ts automations/verify-resend-domain.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Verify Resend domain", () => { resend.verifyDomain({ domainId: "domain_123" }) }) ``` Use `resend.getDomain` afterward or subscribe to a domain trigger to observe the resulting verification state. # Verify domain claim Source: https://docs.automate.ax/reference/integrations/resend/actions/verify-domain-claim Check a Resend domain claim's TXT proof. `resend.verifyDomainClaim({ domainId })` asks Resend to check the TXT record for a domain ownership claim. ```ts automations/verify-resend-domain-claim.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Verify Resend domain claim", () => { resend.verifyDomainClaim({ domainId: "domain_123" }) }) ``` The returned claim describes the new status and any provider-reported blocking or failure reason. # Connect Resend and receive verified events Source: https://docs.automate.ax/reference/integrations/resend/authorization-and-raw-api Choose send-only or full-access Resend credentials, call uncovered REST endpoints, and avoid mutating Automate.ax-managed webhooks. Automate.ax connects Resend through OAuth 2.1 or a Resend API key. OAuth is preferred, while API keys remain available for accounts that don't use an OAuth application connection. ## Choose Resend access Resend defines two OAuth scopes: `emails:send` and `full_access`. Email and batch-send actions accept either scope. Sending an existing broadcast also accepts either OAuth scope, but Resend API keys require `full_access` for that action. Every other packaged action and all managed triggers require `full_access` because they access account resources or create provider webhooks. Resend API keys may likewise be restricted to sending access or granted full access. Automate.ax represents a send-only key as `emails:send`, so the same action requirements apply to both connection methods. SMTP credentials aren't supported because they cover only sending and can't satisfy the wider automation surface. Automate.ax resolves the OAuth token or API key only inside account-backed actions and never places it in action inputs or outputs. ## Call an uncovered endpoint Use `getResendApi` inside a custom Resend-account-backed action when a public provider endpoint doesn't have a packaged action. Supply a Zod schema for every successful response: ```ts automations/list-resend-domains-raw.automation.ts theme={null} import { automation, defineAction, markSignificant, onDashboardRun, } from "automate.ax" import { getResendApi } from "automate.ax/resend" import { z } from "zod" const listDomainsRaw = defineAction("List Resend domains with raw API") .account("resend", "full_access") .input(z.object({ limit: z.number().int().min(1).max(100) })) .output(z.object({ id: z.string(), name: z.string() }).array()) .handler(async ({ account, input }) => { const response = await getResendApi(account).call("domains", { query: { limit: input.limit }, responseSchema: z.object({ data: z.object({ id: z.string(), name: z.string() }).array(), has_more: z.boolean(), object: z.literal("list"), }), }) return response.data }) export default automation("Inspect Resend domains", () => { onDashboardRun({ title: "Inspect Resend domains" }) const domains = listDomainsRaw({ limit: 50 }) markSignificant(domains) }) ``` Paths are relative to `https://api.resend.com/`; the helper rejects another origin and adds `Authorization`, `Accept`, and `User-Agent` headers. Query arrays become repeated parameters. Plain request bodies are encoded as JSON; pass `FormData` for multipart requests without setting its `Content-Type` boundary yourself. Successful responses are validated with `responseSchema`, including empty responses when the schema is `z.undefined()`. Failures throw `ResendApiError` with the path, HTTP status, provider error name and status code when present, `Retry-After`, rate-limit values, and available daily or monthly quota metadata. Don't use the raw helper to update or delete an Automate.ax-managed webhook. Managed triggers persist the webhook ID and one-time signing secret, so changing that webhook outside the trigger lifecycle can stop delivery or make otherwise valid callbacks fail signature verification. ### Know what remains unsupported The packaged surface excludes provider credential administration (API-key CRUD and OAuth grant revocation), public webhook CRUD, Resend-native automation graphs, deprecated Audiences and `audience_id` workflows, private-beta metrics or inspection endpoints, and generic segment-filter operations. Use the raw helper for a current public endpoint only when it doesn't mutate an Automate.ax-managed webhook or another platform-owned resource. SMTP is intentionally unsupported. ## Receive verified Resend events Triggers create and remove account webhooks automatically. Automate.ax verifies the exact raw request body with Resend's webhook signing secret and the `svix-id`, `svix-timestamp`, and `svix-signature` headers. Requests outside the five-minute timestamp tolerance or with an invalid signature are rejected before event classification. Resend webhooks are at-least-once and aren't guaranteed to arrive in order. Automate.ax uses the `svix-id` as delivery evidence so provider retries don't create duplicate events for the same subscription. A valid callback is acknowledged with an exact `200` response; the webhook delivery remains an ordinary root context and is joined to related automation work through correlation when applicable. ## Confirm Resend behavior * [OAuth introduction](https://resend.com/docs/dashboard/oauth/introduction) * [API keys](https://resend.com/docs/dashboard/api-keys/introduction) * [API reference](https://resend.com/docs/api-reference/introduction) * [Webhook introduction](https://resend.com/docs/dashboard/webhooks/introduction) * [Verify webhook requests](https://resend.com/docs/dashboard/webhooks/verify-webhooks-requests) * [Webhook event types](https://resend.com/docs/dashboard/webhooks/event-types) # Resend Source: https://docs.automate.ax/reference/integrations/resend/index Send email, manage Resend broadcasts, contacts, domains, templates, and topics, or react to verified account events. ## Exports ```ts theme={null} import { resend, resendAccount, getResendApi } from "automate.ax/resend" ``` * `resend` contains the packaged Resend actions and triggers. * `resendAccount("name")` selects a named Resend connection. * `getResendApi` creates the authenticated Resend API helper for a custom account-backed action. Read [Connect Resend and receive verified events](/reference/integrations/resend/authorization-and-raw-api) for send-only credentials, raw REST calls, webhook ownership, and signature checks. ## Triggers * [On Resend contact created](/reference/integrations/resend/triggers/on-resend-contact-created) * [On Resend contact deleted](/reference/integrations/resend/triggers/on-resend-contact-deleted) * [On Resend contact event](/reference/integrations/resend/triggers/on-resend-contact-event) * [On Resend contact updated](/reference/integrations/resend/triggers/on-resend-contact-updated) * [On Resend domain created](/reference/integrations/resend/triggers/on-resend-domain-created) * [On Resend domain deleted](/reference/integrations/resend/triggers/on-resend-domain-deleted) * [On Resend domain event](/reference/integrations/resend/triggers/on-resend-domain-event) * [On Resend domain updated](/reference/integrations/resend/triggers/on-resend-domain-updated) * [On Resend email bounced](/reference/integrations/resend/triggers/on-resend-email-bounced) * [On Resend email clicked](/reference/integrations/resend/triggers/on-resend-email-clicked) * [On Resend email complained](/reference/integrations/resend/triggers/on-resend-email-complained) * [On Resend email delivered](/reference/integrations/resend/triggers/on-resend-email-delivered) * [On Resend email delivery delayed](/reference/integrations/resend/triggers/on-resend-email-delivery-delayed) * [On Resend email event](/reference/integrations/resend/triggers/on-resend-email-event) * [On Resend email failed](/reference/integrations/resend/triggers/on-resend-email-failed) * [On Resend email opened](/reference/integrations/resend/triggers/on-resend-email-opened) * [On Resend email received](/reference/integrations/resend/triggers/on-resend-email-received) * [On Resend email scheduled](/reference/integrations/resend/triggers/on-resend-email-scheduled) * [On Resend email sent](/reference/integrations/resend/triggers/on-resend-email-sent) * [On Resend email suppressed](/reference/integrations/resend/triggers/on-resend-email-suppressed) * [On Resend event](/reference/integrations/resend/triggers/on-resend-event) * [On Resend suppression added](/reference/integrations/resend/triggers/on-resend-suppression-added) * [On Resend suppression event](/reference/integrations/resend/triggers/on-resend-suppression-event) * [On Resend suppression removed](/reference/integrations/resend/triggers/on-resend-suppression-removed) ## Actions * [Add contact to segment](/reference/integrations/resend/actions/add-contact-to-segment) * [Add suppression records in a batch](/reference/integrations/resend/actions/add-suppressions-batch) * [Cancel broadcast](/reference/integrations/resend/actions/cancel-broadcast) * [Cancel scheduled email](/reference/integrations/resend/actions/cancel-scheduled-email) * [Create broadcast](/reference/integrations/resend/actions/create-broadcast) * [Create contact](/reference/integrations/resend/actions/create-contact) * [Create contact import](/reference/integrations/resend/actions/create-contact-import) * [Create contact property](/reference/integrations/resend/actions/create-contact-property) * [Create custom event definition](/reference/integrations/resend/actions/create-custom-event-definition) * [Create domain](/reference/integrations/resend/actions/create-domain) * [Create domain claim](/reference/integrations/resend/actions/create-domain-claim) * [Create segment](/reference/integrations/resend/actions/create-segment) * [Create suppression](/reference/integrations/resend/actions/create-suppression) * [Create template](/reference/integrations/resend/actions/create-template) * [Create topic](/reference/integrations/resend/actions/create-topic) * [Delete broadcast](/reference/integrations/resend/actions/delete-broadcast) * [Delete contact](/reference/integrations/resend/actions/delete-contact) * [Delete contact property](/reference/integrations/resend/actions/delete-contact-property) * [Delete custom event definition](/reference/integrations/resend/actions/delete-custom-event-definition) * [Delete domain](/reference/integrations/resend/actions/delete-domain) * [Delete segment](/reference/integrations/resend/actions/delete-segment) * [Delete suppression](/reference/integrations/resend/actions/delete-suppression) * [Delete template](/reference/integrations/resend/actions/delete-template) * [Delete topic](/reference/integrations/resend/actions/delete-topic) * [Duplicate template](/reference/integrations/resend/actions/duplicate-template) * [Get broadcast](/reference/integrations/resend/actions/get-broadcast) * [Get contact](/reference/integrations/resend/actions/get-contact) * [Get contact import](/reference/integrations/resend/actions/get-contact-import) * [Get contact property](/reference/integrations/resend/actions/get-contact-property) * [Get custom event definition](/reference/integrations/resend/actions/get-custom-event-definition) * [Get domain](/reference/integrations/resend/actions/get-domain) * [Get domain claim](/reference/integrations/resend/actions/get-domain-claim) * [Get email](/reference/integrations/resend/actions/get-email) * [Get email attachment](/reference/integrations/resend/actions/get-email-attachment) * [Get email metrics](/reference/integrations/resend/actions/get-email-metrics) * [Get log](/reference/integrations/resend/actions/get-log) * [Get received email](/reference/integrations/resend/actions/get-received-email) * [Get received email attachment](/reference/integrations/resend/actions/get-received-email-attachment) * [Get segment](/reference/integrations/resend/actions/get-segment) * [Get suppression](/reference/integrations/resend/actions/get-suppression) * [Get template](/reference/integrations/resend/actions/get-template) * [Get topic](/reference/integrations/resend/actions/get-topic) * [List broadcast clicked links](/reference/integrations/resend/actions/list-broadcast-clicked-links) * [List broadcast recipients](/reference/integrations/resend/actions/list-broadcast-recipients) * [List broadcasts](/reference/integrations/resend/actions/list-broadcasts) * [List contact imports](/reference/integrations/resend/actions/list-contact-imports) * [List contact properties](/reference/integrations/resend/actions/list-contact-properties) * [List contact segments](/reference/integrations/resend/actions/list-contact-segments) * [List contact topics](/reference/integrations/resend/actions/list-contact-topics) * [List contacts](/reference/integrations/resend/actions/list-contacts) * [List custom event definitions](/reference/integrations/resend/actions/list-custom-event-definitions) * [List domains](/reference/integrations/resend/actions/list-domains) * [List email attachments](/reference/integrations/resend/actions/list-email-attachments) * [List emails](/reference/integrations/resend/actions/list-emails) * [List logs](/reference/integrations/resend/actions/list-logs) * [List received email attachments](/reference/integrations/resend/actions/list-received-email-attachments) * [List received emails](/reference/integrations/resend/actions/list-received-emails) * [List segments](/reference/integrations/resend/actions/list-segments) * [List suppression records](/reference/integrations/resend/actions/list-suppressions) * [List templates](/reference/integrations/resend/actions/list-templates) * [List topics](/reference/integrations/resend/actions/list-topics) * [Publish template](/reference/integrations/resend/actions/publish-template) * [Remove contact from segment](/reference/integrations/resend/actions/remove-contact-from-segment) * [Remove suppression records in a batch](/reference/integrations/resend/actions/remove-suppressions-batch) * [Send batch emails](/reference/integrations/resend/actions/send-batch-emails) * [Send broadcast](/reference/integrations/resend/actions/send-broadcast) * [Send custom event](/reference/integrations/resend/actions/send-custom-event) * [Send email](/reference/integrations/resend/actions/send-email) * [Share email](/reference/integrations/resend/actions/share-email) * [Update broadcast](/reference/integrations/resend/actions/update-broadcast) * [Update contact](/reference/integrations/resend/actions/update-contact) * [Update contact property](/reference/integrations/resend/actions/update-contact-property) * [Update contact topics](/reference/integrations/resend/actions/update-contact-topics) * [Update custom event definition](/reference/integrations/resend/actions/update-custom-event-definition) * [Update domain](/reference/integrations/resend/actions/update-domain) * [Update scheduled email](/reference/integrations/resend/actions/update-scheduled-email) * [Update template](/reference/integrations/resend/actions/update-template) * [Update topic](/reference/integrations/resend/actions/update-topic) * [Verify domain](/reference/integrations/resend/actions/verify-domain) * [Verify domain claim](/reference/integrations/resend/actions/verify-domain-claim) # On Resend contact created Source: https://docs.automate.ax/reference/integrations/resend/triggers/on-resend-contact-created Run an automation when a Resend contact is created. `resend.onContactCreated` handles `contact.created`. ```ts automations/resend-contact-created.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Resend contact created", () => { resend.onContactCreated().transform(({ email, id }) => ({ email, id })) }) ``` Optional static `account` selects the Resend binding. # On Resend contact deleted Source: https://docs.automate.ax/reference/integrations/resend/triggers/on-resend-contact-deleted Run an automation when a Resend contact is deleted. `resend.onContactDeleted` handles `contact.deleted`. ```ts automations/resend-contact-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Resend contact deleted", () => { resend.onContactDeleted().transform(({ email, id }) => ({ email, id })) }) ``` # On Resend contact event Source: https://docs.automate.ax/reference/integrations/resend/triggers/on-resend-contact-event Run an automation for any Resend contact lifecycle event. `resend.onContactEvent` handles `contact.created`, `contact.updated`, and `contact.deleted`. ```ts automations/watch-resend-contacts.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Watch Resend contacts", () => { const contact = resend.onContactEvent() contact.transform(({ email, event, id }) => ({ email, id, type: event.type })) }) ``` The signal includes `id`, `email`, `createdAt`, `updatedAt`, `unsubscribed`, optional names, audience and segment IDs, plus the original `event` envelope. # On Resend contact updated Source: https://docs.automate.ax/reference/integrations/resend/triggers/on-resend-contact-updated Run an automation when a Resend contact is updated. `resend.onContactUpdated` handles `contact.updated` and returns the updated contact fields plus the original webhook envelope. ```ts automations/resend-contact-updated.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Resend contact updated", () => { resend .onContactUpdated() .transform(({ id, unsubscribed }) => ({ id, unsubscribed })) }) ``` # On Resend domain created Source: https://docs.automate.ax/reference/integrations/resend/triggers/on-resend-domain-created Run an automation when a Resend domain is created. `resend.onDomainCreated` handles `domain.created`. ```ts automations/resend-domain-created.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Resend domain created", () => { resend.onDomainCreated().transform(({ id, name }) => ({ id, name })) }) ``` # On Resend domain deleted Source: https://docs.automate.ax/reference/integrations/resend/triggers/on-resend-domain-deleted Run an automation when a Resend domain is deleted. `resend.onDomainDeleted` handles `domain.deleted`. ```ts automations/resend-domain-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Resend domain deleted", () => { resend.onDomainDeleted().transform(({ id, name }) => ({ id, name })) }) ``` # On Resend domain event Source: https://docs.automate.ax/reference/integrations/resend/triggers/on-resend-domain-event Run an automation for any Resend domain lifecycle event. `resend.onDomainEvent` handles `domain.created`, `domain.updated`, and `domain.deleted`. ```ts automations/watch-resend-domains.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Watch Resend domains", () => { resend.onDomainEvent().transform(({ event, id, name, status }) => ({ id, name, status, type: event.type, })) }) ``` The signal includes the domain ID, name, status, region, DNS records, optional sending and receiving capabilities, and original `event` envelope. # On Resend domain updated Source: https://docs.automate.ax/reference/integrations/resend/triggers/on-resend-domain-updated Run an automation when a Resend domain changes. `resend.onDomainUpdated` handles `domain.updated`. ```ts automations/resend-domain-updated.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Resend domain updated", () => { resend.onDomainUpdated().transform(({ id, status }) => ({ id, status })) }) ``` # On Resend email bounced Source: https://docs.automate.ax/reference/integrations/resend/triggers/on-resend-email-bounced Run an automation when a Resend email bounces. `resend.onEmailBounced` handles `email.bounced` for permanent recipient-server rejections. Use it to suppress invalid recipients or alert an owner. ```ts automations/handle-resend-bounce.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Handle Resend bounces", () => { const bounced = resend.onEmailBounced() bounced.transform(({ bounce, createdAt, emailId }) => ({ bounceType: bounce.type, createdAt, emailId, message: bounce.message, })) }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns the shared [Resend outbound event fields](/reference/integrations/resend/triggers/on-resend-email-event#trigger-data), plus bounce details: ```ts theme={null} type ResendEmailBouncedEvent = ResendOutboundEvent<"email.bounced"> & { bounce: ResendBounce } ``` `event` preserves the original Resend envelope. # On Resend email clicked Source: https://docs.automate.ax/reference/integrations/resend/triggers/on-resend-email-clicked Run an automation when Resend records a link click. `resend.onEmailClicked` handles `email.clicked` for tracked links. Security scanners can generate clicks, so don't use this event alone for security confirmation. ```ts automations/record-resend-click.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Record Resend clicks", () => { const clicked = resend.onEmailClicked() clicked.transform(({ click, createdAt, emailId }) => ({ createdAt, emailId, link: click.link, userAgent: click.userAgent, })) }) ``` Optional static `account` selects the Resend binding. ## Trigger data Returns the shared [Resend outbound event fields](/reference/integrations/resend/triggers/on-resend-email-event#trigger-data), plus click details: ```ts theme={null} type ResendEmailClickedEvent = ResendOutboundEvent<"email.clicked"> & { click: ResendClick } ``` `event` preserves the original Resend envelope. # On Resend email complained Source: https://docs.automate.ax/reference/integrations/resend/triggers/on-resend-email-complained Run an automation when a recipient reports a Resend email as spam. `resend.onEmailComplained` handles `email.complained`. Use it to suppress further mail and investigate sending practices. ```ts automations/handle-resend-complaint.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Handle Resend complaints", () => { const complaint = resend.onEmailComplained() complaint.transform(({ createdAt, emailId, to }) => ({ createdAt, emailId, recipients: to, })) }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns the shared [Resend outbound event fields](/reference/integrations/resend/triggers/on-resend-email-event#trigger-data) with `event.type: "email.complained"`: ```ts theme={null} type ResendEmailComplainedEvent = ResendOutboundEvent<"email.complained"> ``` `event` preserves the original Resend envelope. # On Resend email delivered Source: https://docs.automate.ax/reference/integrations/resend/triggers/on-resend-email-delivered Run an automation when a mail server accepts a Resend email. `resend.onEmailDelivered` handles `email.delivered` when the recipient's server accepts a message. Acceptance doesn't mean a person read it. ```ts automations/record-resend-delivery.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Record Resend deliveries", () => { const delivered = resend.onEmailDelivered() delivered.transform(({ createdAt, emailId, to }) => ({ createdAt, emailId, recipients: to, })) }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns the shared [Resend outbound event fields](/reference/integrations/resend/triggers/on-resend-email-event#trigger-data) with `event.type: "email.delivered"`: ```ts theme={null} type ResendEmailDeliveredEvent = ResendOutboundEvent<"email.delivered"> ``` `event` preserves the original Resend envelope. # On Resend email delivery delayed Source: https://docs.automate.ax/reference/integrations/resend/triggers/on-resend-email-delivery-delayed Run an automation when Resend reports a delivery delay. `resend.onEmailDeliveryDelayed` handles `email.delivery_delayed` for temporary deferrals. ```ts automations/monitor-resend-delay.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Monitor Resend delays", () => { const delayed = resend.onEmailDeliveryDelayed() delayed.transform(({ createdAt, emailId, to }) => ({ createdAt, emailId, recipients: to, })) }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns the shared [Resend outbound event fields](/reference/integrations/resend/triggers/on-resend-email-event#trigger-data) with `event.type: "email.delivery_delayed"`: ```ts theme={null} type ResendEmailDeliveryDelayedEvent = ResendOutboundEvent<"email.delivery_delayed"> ``` `event` preserves the original Resend envelope. Resend can continue retrying after this event, so wait for delivered, bounced, or failed events for a final outcome. # On Resend email event Source: https://docs.automate.ax/reference/integrations/resend/triggers/on-resend-email-event Run an automation for any Resend email event. `resend.onEmailEvent` handles send, delivery, engagement, failure, suppression, scheduling, and inbound events. Use a specific trigger for one category. ```ts automations/watch-all-resend-events.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Watch all Resend events", () => { const email = resend.onEmailEvent() email.transform(({ emailId, event, to }) => ({ emailId, recipients: to, type: event.type, })) }) ``` Optional static `account: string | IntegrationAccountReference<"resend">` defaults to the project binding. The account can't change at runtime. ## Trigger data Returns `Signal`. `event.type` identifies the event: ```ts theme={null} type ResendEmailEvent = | ResendOutboundEvent<"email.sent"> | ResendOutboundEvent<"email.delivered"> | (ResendOutboundEvent<"email.bounced"> & { bounce: ResendBounce }) | ResendOutboundEvent<"email.opened"> | (ResendOutboundEvent<"email.clicked"> & { click: ResendClick }) | ResendOutboundEvent<"email.complained"> | ResendOutboundEvent<"email.delivery_delayed"> | ResendOutboundEvent<"email.scheduled"> | (ResendOutboundEvent<"email.failed"> & { failed: { reason: string } }) | (ResendOutboundEvent<"email.suppressed"> & { suppressed: { diagnosticCode?: (string | null)[] message: string reason?: string type: string } }) | (ResendReceivedEmail & { event: ResendWebhook<"email.received"> }) type ResendOutboundEvent = ResendOutboundEmail & { event: ResendWebhook } interface ResendOutboundEmail { broadcastId?: string createdAt: string emailId: string from: string messageId: string subject: string tags?: Record templateId?: string to: string[] } interface ResendReceivedEmail { attachments: { contentDisposition: string | null contentId: string | null contentType: string filename: string | null id: string }[] bcc: string[] cc: string[] createdAt: string emailId: string from: string messageId: string receivedFor?: string[] subject: string to: string[] } interface ResendBounce { diagnosticCode?: string[] message: string subType: string type: string } interface ResendClick { ipAddress: string link: string timestamp: string userAgent: string } interface ResendWebhook { created_at: string data: Record type: TType } ``` Every event includes camel-cased fields such as `emailId`, `messageId`, `createdAt`, `from`, `to`, and `subject`. Outbound events can also include `broadcastId`, `templateId`, and `tags`. Bounce, click, failure, suppression, and inbound events add their fields. `event` preserves Resend's webhook envelope, including provider-native `created_at` and `data`. # On Resend email failed Source: https://docs.automate.ax/reference/integrations/resend/triggers/on-resend-email-failed Run an automation when Resend fails to send an email. `resend.onEmailFailed` handles `email.failed`, a send failure rather than a recipient-server bounce. ```ts automations/handle-resend-failure.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Handle Resend failures", () => { const failed = resend.onEmailFailed() failed.transform(({ createdAt, emailId, failed }) => ({ createdAt, emailId, reason: failed.reason, })) }) ``` Optional static `account` selects the binding. ## Trigger data Returns the shared [Resend outbound event fields](/reference/integrations/resend/triggers/on-resend-email-event#trigger-data), plus failure details: ```ts theme={null} type ResendEmailFailedEvent = ResendOutboundEvent<"email.failed"> & { failed: { reason: string } } ``` `event` preserves the original Resend envelope. # On Resend email opened Source: https://docs.automate.ax/reference/integrations/resend/triggers/on-resend-email-opened Run an automation when Resend records an email open. `resend.onEmailOpened` handles `email.opened`. Privacy proxies, image blocking, and scanners affect tracking, so an open doesn't prove a person read the message. ```ts automations/record-resend-open.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Record Resend opens", () => { const opened = resend.onEmailOpened() opened.transform(({ createdAt, emailId }) => ({ createdAt, emailId, })) }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns the shared [Resend outbound event fields](/reference/integrations/resend/triggers/on-resend-email-event#trigger-data) with `event.type: "email.opened"`: ```ts theme={null} type ResendEmailOpenedEvent = ResendOutboundEvent<"email.opened"> ``` `event` preserves the original Resend envelope. # On Resend email received Source: https://docs.automate.ax/reference/integrations/resend/triggers/on-resend-email-received Run an automation when Resend receives an email. `resend.onEmailReceived` handles `email.received` for inbound routing or reply processing. ```ts automations/route-resend-inbound.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Route Resend inbound mail", () => { const received = resend.onEmailReceived() received.transform(({ attachments, createdAt, emailId, from, to }) => ({ attachmentCount: attachments.length, createdAt, emailId, from, to, })) }) ``` Optional static `account` selects the binding. ## Trigger data Returns the [Resend inbound email fields](/reference/integrations/resend/triggers/on-resend-email-event#trigger-data), including attachment metadata: ```ts theme={null} type ResendEmailReceivedEvent = ResendReceivedEmail & { event: ResendWebhook<"email.received"> } ``` `event` preserves the original Resend envelope. The webhook doesn't contain the message body or attachment contents. Retrieve those through Resend's receiving APIs using `emailId`. # On Resend email scheduled Source: https://docs.automate.ax/reference/integrations/resend/triggers/on-resend-email-scheduled Run an automation when Resend schedules an email. `resend.onEmailScheduled` handles `email.scheduled` after Resend accepts a future delivery time. ```ts automations/record-resend-schedule.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Record Resend schedules", () => { const scheduled = resend.onEmailScheduled() scheduled.transform(({ createdAt, emailId, to }) => ({ createdAt, emailId, recipients: to, })) }) ``` Optional static `account` selects the binding. ## Trigger data Returns the shared [Resend outbound event fields](/reference/integrations/resend/triggers/on-resend-email-event#trigger-data) with `event.type: "email.scheduled"`: ```ts theme={null} type ResendEmailScheduledEvent = ResendOutboundEvent<"email.scheduled"> ``` `event` preserves the original Resend envelope. The event confirms scheduling, not delivery. Use `emailId` with update or cancellation actions while the email remains pending. # On Resend email sent Source: https://docs.automate.ax/reference/integrations/resend/triggers/on-resend-email-sent Run an automation when Resend accepts an email for sending. `resend.onEmailSent` handles `email.sent` after Resend accepts a message for delivery. The recipient server may not have accepted it. ```ts automations/record-resend-send.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Record Resend sends", () => { const sent = resend.onEmailSent() sent.transform(({ createdAt, emailId, to }) => ({ createdAt, emailId, recipients: to, })) }) ``` Optional static `account` defaults to the project Resend binding. ## Trigger data Returns the shared [Resend outbound event fields](/reference/integrations/resend/triggers/on-resend-email-event#trigger-data) with `event.type: "email.sent"`: ```ts theme={null} type ResendEmailSentEvent = ResendOutboundEvent<"email.sent"> ``` `event` preserves the original Resend envelope. Use the delivered trigger for downstream-server acceptance. # On Resend email suppressed Source: https://docs.automate.ax/reference/integrations/resend/triggers/on-resend-email-suppressed Run an automation when Resend suppresses an email. `resend.onEmailSuppressed` handles `email.suppressed` when recipient or account policy prevents sending. ```ts automations/handle-resend-suppression.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Handle Resend suppression", () => { const suppressed = resend.onEmailSuppressed() suppressed.transform(({ createdAt, emailId, suppressed }) => ({ createdAt, emailId, message: suppressed.message, suppressionType: suppressed.type, })) }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns the shared [Resend outbound event fields](/reference/integrations/resend/triggers/on-resend-email-event#trigger-data), plus suppression details: ```ts theme={null} type ResendEmailSuppressedEvent = ResendOutboundEvent<"email.suppressed"> & { suppressed: { diagnosticCode?: (string | null)[] message: string reason?: string type: string } } ``` `diagnosticCode` can contain `null` when Resend suppresses an address without an SMTP response. `event` preserves the original Resend envelope. A suppressed event is distinct from a failed attempt or recipient-server bounce. # On Resend event Source: https://docs.automate.ax/reference/integrations/resend/triggers/on-resend-event Run an automation for any supported Resend webhook event. `resend.onEvent` handles every supported email, contact, domain, and suppression event. Prefer a family or semantic trigger when the automation only needs one category. ```ts automations/watch-resend.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Watch Resend", () => { const event = resend.onEvent() event.transform(({ event }) => ({ type: event.type })) }) ``` Optional static `account: string | IntegrationAccountReference<"resend">` defaults to the project binding. Returns the matching email, contact, domain, or suppression event, with the provider envelope preserved in `event`. # On Resend suppression added Source: https://docs.automate.ax/reference/integrations/resend/triggers/on-resend-suppression-added Run an automation when an address is suppressed in Resend. `resend.onSuppressionAdded` handles `suppression.added`. ```ts automations/resend-suppression-added.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Resend suppression added", () => { resend .onSuppressionAdded() .transform(({ email, origin }) => ({ email, origin })) }) ``` # On Resend suppression event Source: https://docs.automate.ax/reference/integrations/resend/triggers/on-resend-suppression-event Run an automation for Resend suppression-list changes. `resend.onSuppressionEvent` handles `suppression.added` and `suppression.removed`. ```ts automations/watch-resend-suppressions.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Watch Resend suppressions", () => { resend.onSuppressionEvent().transform(({ email, event, origin }) => ({ email, origin, type: event.type, })) }) ``` The signal includes `id`, `email`, `origin`, nullable `sourceId`, `createdAt`, and the original `event` envelope. # On Resend suppression removed Source: https://docs.automate.ax/reference/integrations/resend/triggers/on-resend-suppression-removed Run an automation when an address leaves the Resend suppression list. `resend.onSuppressionRemoved` handles `suppression.removed`. ```ts automations/resend-suppression-removed.automation.ts theme={null} import { automation } from "automate.ax" import { resend } from "automate.ax/resend" export default automation("Resend suppression removed", () => { resend.onSuppressionRemoved().transform(({ email, id }) => ({ email, id })) }) ``` # Cancel Scrapfly crawl Source: https://docs.automate.ax/reference/integrations/scrapfly/actions/cancel-crawl Cancel a pending or running Scrapfly crawler job. `scrapfly.cancelCrawl` stops a crawler job. ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { scrapfly } from "automate.ax/scrapfly" export default automation("Cancel crawl", () => { const request = onInvocation() scrapfly.cancelCrawl({ crawlerId: request.input.crawlerId }) }) ``` `crawlerId` is required. Returns `{ cancelled: true }` when Scrapfly accepts the request. Scrapfly treats cancellation idempotently: a completed or already-cancelled job remains a successful no-op. # Capture Scrapfly screenshot Source: https://docs.automate.ax/reference/integrations/scrapfly/actions/capture-screenshot Capture a viewport, full page, or selected page element as an image. `scrapfly.captureScreenshot` renders a page and returns its screenshot as a `Blob`. ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { scrapfly } from "automate.ax/scrapfly" export default automation("Capture pricing", () => { onInvocation() scrapfly.captureScreenshot({ url: "https://example.com/pricing", capture: "fullpage", format: "png", resolution: "1440x900", }) }) ``` | Input | Type | Required | Default | Description | | - | - | - | - | - | | `url` | `string` | Yes | — | Complete page URL. | | `capture` | `string` | No | Viewport | Viewport, full-page, vertical, CSS, or XPath capture target. | | `format` | `'jpg' \| 'png' \| 'webp' \| 'gif'` | No | JPEG | Image format. | | `resolution` | `` `${number}x${number}` `` | No | Provider default | Browser viewport. | | `waitForSelector`, `renderingWait`, `javascript`, `autoScroll` | Render controls | No | Provider defaults | Prepare the page before capture. | | `country`, `visionDeficiency`, `options`, `timeout`, `cache`, `cacheClear`, `cacheTtl`, `webhookName` | Advanced controls | No | Provider defaults | Configure network, accessibility simulation, rendering, cache, timeout, or callback behavior. | Returns `{ image, metadata }`. `image` is a typed `Blob`; metadata includes `extensionName`, `upstreamStatusCode`, and `upstreamUrl`. # Classify response with Scrapfly Source: https://docs.automate.ax/reference/integrations/scrapfly/actions/classify-response Classify an HTTP response for anti-bot blocking. `scrapfly.classifyResponse` runs Scrapfly's anti-bot classifier against a response fetched elsewhere. Scrapfly charges one API credit per call. ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { scrapfly } from "automate.ax/scrapfly" export default automation("Classify response", () => { onInvocation() scrapfly.classifyResponse({ url: "https://example.com", statusCode: 403, body: "Checking your browser…", }) }) ``` | Input | Type | Required | Default | Description | | - | - | - | - | - | | `url` | `string` | Yes | — | URL that produced the response. | | `statusCode` | `number` | Yes | — | HTTP status from 100 through 599. | | `method` | `string` | No | `GET` | Original HTTP method. | | `headers` | `Record` | No | None | Original response headers. | | `body` | `string \| null` | No | None | Original response body. | Returns `{ blocked, antibot, cost }`. `antibot` is `null` when Scrapfly does not identify a vendor. # Download Scrapfly crawl artifact Source: https://docs.automate.ax/reference/integrations/scrapfly/actions/download-crawl-artifact Download a completed Scrapfly crawl as WARC or HAR. `scrapfly.downloadCrawlArtifact` returns the crawler's archival artifact as a durable `Blob`. ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { scrapfly } from "automate.ax/scrapfly" export default automation("Download crawl archive", () => { onInvocation() scrapfly.downloadCrawlArtifact({ crawlerId: "crawl-id", type: "warc" }) }) ``` `crawlerId` is required. `type` is `warc` or `har` and defaults to `warc`. Returns `{ artifact, type }`; WARC blobs use `application/gzip` and HAR blobs use `application/json`. Request the artifact after the crawler reaches a terminal state. # Extract content with Scrapfly Source: https://docs.automate.ax/reference/integrations/scrapfly/actions/extract-content Extract prompted or structured data from supplied document content. `scrapfly.extractContent` runs Scrapfly extraction on content you already have. ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { scrapfly } from "automate.ax/scrapfly" export default automation("Extract price", () => { onInvocation() scrapfly.extractContent({ body: "
$42
", contentType: "text/html", prompt: "Return the price as JSON", }) }) ``` | Input | Type | Required | Default | Description | | - | - | - | - | - | | `body` | `string` | Yes | — | HTML, Markdown, text, or XML document. | | `contentType` | `'text/html' \| 'text/markdown' \| 'text/plain' \| 'text/xml'` | Yes | — | Body media type. | | `prompt`, `model`, `template`, `ephemeralTemplate` | Extraction selector | Exactly one | — | Natural-language prompt, automatic model, saved template, or inline template. | | `charset`, `url`, `timeout`, `webhookName` | Optional controls | No | Provider defaults | Supply source metadata, timeout in seconds, or a dashboard webhook. | Returns `{ contentType, data }`. JSON responses are decoded into JSON values; other content remains a string. # Get Scrapfly account Source: https://docs.automate.ax/reference/integrations/scrapfly/actions/get-account Read the connected Scrapfly project's quota, subscription, concurrency, and usage. `scrapfly.getAccount` reads project and subscription details for the connected API key without spending a scrape credit. ```ts theme={null} import { automation, onSchedule } from "automate.ax" import { scrapfly } from "automate.ax/scrapfly" export default automation("Inspect Scrapfly quota", () => { onSchedule({ schedule: "0 8 * * *" }) scrapfly.getAccount() }) ``` The action has no input. It returns camelCase `account`, `project`, and `subscription` objects, including request quota, current usage, concurrency, billing, and subscription period. Pass `{ account }` as the first argument to select a named binding: `scrapfly.getAccount({ account: "production" })`. # Get Scrapfly crawl contents Source: https://docs.automate.ax/reference/integrations/scrapfly/actions/get-crawl-contents Read paginated or single-page content from a Scrapfly crawl. `scrapfly.getCrawlContents` reads one content format from a crawl. ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { scrapfly } from "automate.ax/scrapfly" export default automation("Read crawled Markdown", () => { onInvocation() scrapfly.getCrawlContents({ crawlerId: "crawl-id", format: "markdown", limit: 50, }) }) ``` `crawlerId` and `format` are required. Formats are `html`, `clean_html`, `markdown`, `text`, `json`, `extracted_data`, and `page_metadata`. Map mode accepts `limit` (1–50) and `offset`; it returns `{ mode: "map", contents, links }`. Plain mode requires both `plain: true` and one `url`; it returns `{ mode: "plain", content }`. # Get Scrapfly crawl contents batch Source: https://docs.automate.ax/reference/integrations/scrapfly/actions/get-crawl-contents-batch Retrieve multiple formats for up to 100 crawled URLs. `scrapfly.getCrawlContentsBatch` retrieves selected formats for an explicit URL set in one request. ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { scrapfly } from "automate.ax/scrapfly" export default automation("Read crawl batch", () => { onInvocation() scrapfly.getCrawlContentsBatch({ crawlerId: "crawl-id", urls: ["https://example.com/a", "https://example.com/b"], formats: ["markdown", "page_metadata"], }) }) ``` `crawlerId`, one to 100 `urls`, and at least one `formats` entry are required. The supported formats match `scrapfly.getCrawlContents`. Returns `{ contents }`, keyed first by URL and then by format. Scrapfly omits formats it did not store for a URL. # Get Scrapfly crawl status Source: https://docs.automate.ax/reference/integrations/scrapfly/actions/get-crawl-status Read crawler state, progress counters, and terminal outcome. `scrapfly.getCrawlStatus` reads the current state of one crawler job. ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { scrapfly } from "automate.ax/scrapfly" export default automation("Inspect crawl", () => { const request = onInvocation() scrapfly.getCrawlStatus({ crawlerId: request.input.crawlerId }) }) ``` `crawlerId` is required. The result contains `status`, `isFinished`, nullable `isSuccess`, and counters under `state`: visited, extracted, failed, skipped, queued URLs, API credits, duration, start/stop times, and stop reason. A finished job uses `status: "DONE"`; inspect `isSuccess` to distinguish success from failure. # Get Scrapfly monitoring metrics Source: https://docs.automate.ax/reference/integrations/scrapfly/actions/get-monitoring-metrics Read aggregate or per-domain Scrapfly monitoring metrics. `scrapfly.getMonitoringMetrics` reads Enterprise monitoring data for Scrape, Screenshot, Extraction, or Crawler requests. ```ts theme={null} import { automation, onSchedule } from "automate.ax" import { scrapfly } from "automate.ax/scrapfly" export default automation("Monitor scraping", () => { onSchedule({ schedule: "0 * * * *" }) scrapfly.getMonitoringMetrics({ product: "scrape", domain: "example.com", period: "last1h", }) }) ``` | Input | Type | Required | Default | Description | | - | - | - | - | - | | `product` | `'scrape' \| 'screenshot' \| 'extraction' \| 'crawler'` | Yes | — | Product metric family. | | `period` | `'last5m' \| 'last1h' \| 'last7d' \| 'last24h' \| 'subscription'` | No | Provider default; `last24h` per domain | Rolling window. | | `aggregation` | `('account' \| 'project' \| 'target')[]` | No | Provider default | Aggregate grouping; unavailable with `domain`. | | `domain`, `groupSubdomain` | Target controls | No | Aggregate metrics | Read one target domain and optionally combine subdomains. | | `start`, `end` | `Date` | No | Period | Exact target window. Supply both; requires `domain`. | | `includeWebhook` | `boolean` | No | `false` | Include work executed by Scrapfly webhook workers. | Returns Scrapfly's structured metrics with provider keys converted to camelCase. Scrapfly restricts this API to eligible Enterprise plans. # List Scrapfly crawl URLs Source: https://docs.automate.ax/reference/integrations/scrapfly/actions/list-crawl-urls List visited, pending, failed, or skipped crawler URLs. `scrapfly.listCrawlUrls` reads one materialized page from Scrapfly's streaming URL endpoint. ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { scrapfly } from "automate.ax/scrapfly" export default automation("List failed crawl URLs", () => { onInvocation() scrapfly.listCrawlUrls({ crawlerId: "crawl-id", status: "failed", perPage: 250, }) }) ``` | Input | Type | Required | Default | Description | | - | - | - | - | - | | `crawlerId` | `string` | Yes | — | Crawler job ID. | | `status` | `'visited' \| 'pending' \| 'failed' \| 'skipped'` | No | Visited | URL state filter. | | `page` | `number` | No | `1` | One-based page. | | `perPage` | `number` | No | `100` | Records per page, up to 1,000. | Returns `{ page, perPage, urls }`. Failed and skipped entries can include `reason`. Scrapfly does not return a global total; increment `page` until `urls` is empty. # Scrape URL with Scrapfly Source: https://docs.automate.ax/reference/integrations/scrapfly/actions/scrape-url Scrape one URL with Scrapfly proxy, rendering, extraction, and screenshot controls. `scrapfly.scrapeUrl` retrieves one URL through Scrapfly. Use it when you need the response body plus request, proxy, cost, cache, screenshot, and monitoring details. ```ts theme={null} import { automation, onSchedule } from "automate.ax" import { scrapfly } from "automate.ax/scrapfly" export default automation("Read release notes", () => { onSchedule({ schedule: "0 7 * * *" }) scrapfly.scrapeUrl({ url: "https://example.com/releases", format: "markdown", renderJs: true, asp: true, }) }) ``` Inputs accept literal values or compatible signals. Pass `{ account }` as the optional second argument to select a named Scrapfly binding. | Input | Type | Required | Default | Description | | - | - | - | - | - | | `url` | `string` | Yes | — | Complete target URL. | | `format` | `'json' \| 'text' \| 'markdown' \| 'clean_html' \| 'raw'` | No | Scrapfly default | Response representation. | | `method`, `body`, `headers`, `cookies` | Request controls | No | GET, no body | Configure the upstream request. | | `renderJs`, `renderingStage`, `renderingWait`, `waitForSelector`, `javascript`, `javascriptScenario`, `autoScroll` | Browser controls | No | Provider defaults | Render or interact with the page before capture. | | `asp`, `country`, `proxyPool`, `session`, `sessionStickyProxy`, `browserBrand`, `os`, `languages`, `geolocation` | Network controls | No | Provider defaults | Configure Scrapfly's proxy and anti-bot behavior. | | `cache`, `cacheClear`, `cacheTtl` | Cache controls | No | Provider defaults | Reuse, evict, or set the lifetime of a matching result. | | `extractionPrompt`, `extractionModel`, `extractionTemplate` | Extraction controls | No | None | Ask Scrapfly to extract data during the scrape. | | `screenshots`, `screenshotFlags` | Screenshot controls | No | None | Capture named full-page, CSS, or XPath screenshots. | | `formatOptions`, `raiseOnUpstreamError`, `costBudget`, `timeout`, `tags`, `correlationId`, `webhookName`, `dns`, `ssl` | Advanced controls | No | Provider defaults | Apply output filters, limits, monitoring metadata, webhook delivery, or diagnostics. | The result contains `content`, `data?`, response status and headers, timing, cache, cost, proxy context, screenshots, Scrapfly log URL, and request UUID. This action rejects Scrapfly's raw proxified-response mode because native `Response` values are not durable automation outputs. # Scrape URLs with Scrapfly Source: https://docs.automate.ax/reference/integrations/scrapfly/actions/scrape-urls Scrape up to 100 independently configured URLs through Scrapfly's streaming batch endpoint. `scrapfly.scrapeUrls` sends one atomic batch while preserving a correlation ID for every result. Scrapfly offers the Batch API on paid plans. Free-plan requests fail before any URL is scraped. ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { scrapfly } from "automate.ax/scrapfly" export default automation("Scrape product pages", () => { onInvocation() scrapfly.scrapeUrls({ requests: [ { correlationId: "starter", url: "https://example.com/starter", format: "markdown", }, { correlationId: "pro", url: "https://example.com/pro", renderJs: true }, ], }) }) ``` | Input | Type | Required | Default | Description | | - | - | - | - | - | | `requests` | `ScrapflyScrapeInput[]` | Yes | — | One to 100 inputs accepted by `scrapfly.scrapeUrl`. | | `requests[].correlationId` | `string` | No | `request-1`, `request-2`, … | Stable ID used to match streamed parts. Values must be unique. | Returns `{ results }`. Each entry contains `correlationId` and either the same `result` shape as `scrapfly.scrapeUrl` or `{ error: { name, message } }`. Scrapfly can complete parts out of order; use `correlationId`, not array position, to join them. # Start Scrapfly crawl Source: https://docs.automate.ax/reference/integrations/scrapfly/actions/start-crawl Start a Scrapfly crawler job and return its identity immediately. `scrapfly.startCrawl` submits a recursive crawl, an inline URL list, or a remote URL list. It does not poll for completion. ```ts theme={null} import { automation, onInvocation } from "automate.ax" import { scrapfly } from "automate.ax/scrapfly" export default automation("Start docs crawl", () => { onInvocation() scrapfly.startCrawl({ url: "https://example.com/docs", contentFormats: ["markdown", "page_metadata"], maxDepth: 3, pageLimit: 500, }) }) ``` Supply exactly one of `url`, `urlList` (up to an API-supported uploaded list), or `remoteUrlList`. Crawl controls include `maxDepth`, `pageLimit`, `maxDuration`, `maxApiCredit`, `maxConcurrency`, `delay`, path filters, domain/subdomain rules, sitemap and robots behavior, rendering, cache, ASP, proxy, headers, extraction rules, output formats, and dashboard webhook name/events. `excludePaths` and `includeOnlyPaths` are mutually exclusive. Returns `{ crawlerId, status }`. Status is `PENDING`, `RUNNING`, `DONE`, or `CANCELLED`. Use `scrapfly.getCrawlStatus` and the content actions to inspect subsequent work. # Scrapfly Source: https://docs.automate.ax/reference/integrations/scrapfly/index Scrape pages, capture screenshots, extract content, and manage Scrapfly crawls and crawl artifacts. ## Exports ```ts theme={null} import { scrapfly, scrapflyAccount, getScrapflyClient, } from "automate.ax/scrapfly" ``` * `scrapfly` contains the packaged Scrapfly actions. * `scrapflyAccount("name")` selects a named Scrapfly connection. * `getScrapflyClient` creates the authenticated Scrapfly client for a custom account-backed action. ## Actions * [Scrape URL with Scrapfly](/reference/integrations/scrapfly/actions/scrape-url) * [Scrape URLs with Scrapfly](/reference/integrations/scrapfly/actions/scrape-urls) * [Capture Scrapfly screenshot](/reference/integrations/scrapfly/actions/capture-screenshot) * [Extract content with Scrapfly](/reference/integrations/scrapfly/actions/extract-content) * [Classify response with Scrapfly](/reference/integrations/scrapfly/actions/classify-response) * [Get Scrapfly account](/reference/integrations/scrapfly/actions/get-account) * [Get Scrapfly monitoring metrics](/reference/integrations/scrapfly/actions/get-monitoring-metrics) * [Start Scrapfly crawl](/reference/integrations/scrapfly/actions/start-crawl) * [Get Scrapfly crawl status](/reference/integrations/scrapfly/actions/get-crawl-status) * [List Scrapfly crawl URLs](/reference/integrations/scrapfly/actions/list-crawl-urls) * [Get Scrapfly crawl contents](/reference/integrations/scrapfly/actions/get-crawl-contents) * [Get Scrapfly crawl contents batch](/reference/integrations/scrapfly/actions/get-crawl-contents-batch) * [Download Scrapfly crawl artifact](/reference/integrations/scrapfly/actions/download-crawl-artifact) * [Cancel Scrapfly crawl](/reference/integrations/scrapfly/actions/cancel-crawl) # Add bookmark Source: https://docs.automate.ax/reference/integrations/slack/actions/add-bookmark Add an external-link bookmark to a Slack conversation. `slack.addBookmark` adds a link bookmark to a conversation. ## Example ```ts automations/add-bookmark.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Add bookmark", () => { onDashboardRun({ title: "Add bookmark" }) slack.addBookmark({ conversationId: "C01234567", title: "Incident runbook", url: "https://example.com/runbook", emoji: ":book:", }) }) ``` ## Inputs Requires `conversationId`, `title`, and an HTTP or HTTPS `url`. `emoji` is optional. Slack currently supports creating only `link` bookmarks. ## Output Returns the created bookmark. Requires `bookmarks:write`; conversations are limited to 100 bookmarks. # Add reaction Source: https://docs.automate.ax/reference/integrations/slack/actions/add-reaction Add an emoji reaction to a Slack message. `slack.addReaction` adds the installed bot's emoji to a message. ## Example ```ts automations/react-to-slack-message.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Acknowledge Slack messages", () => { const posted = slack.onMessagePosted() slack.addReaction({ conversationId: posted.conversationId, emoji: "eyes", timestamp: posted.message.transform((message) => message.timestamp), }) }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `conversationId` | `string` | Yes | Conversation containing the message. | | `timestamp` | `string` | Yes | Target message timestamp. | | `emoji` | `string` | Yes | Emoji name without surrounding colons, such as `eyes`. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"slack">` | No | Slack binding. | ## Output Returns `Signal`. Slack can reject an unknown emoji or a duplicate reaction from the same bot. # Archive private channel Source: https://docs.automate.ax/reference/integrations/slack/actions/archive-private-channel Archive a private Slack channel. `slack.archivePrivateChannel` archives a private channel. ## Example ```ts automations/archive-private-channel.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Archive private channel", () => { onDashboardRun({ title: "Archive private channel" }) slack.archivePrivateChannel({ channelId: "G01234567" }) }) ``` ## Inputs Requires the stable private `channelId`. ## Output Completes without a value. Requires `groups:write`. # Archive public channel Source: https://docs.automate.ax/reference/integrations/slack/actions/archive-public-channel Archive a public Slack channel. `slack.archivePublicChannel` archives a public channel. ## Example ```ts automations/archive-public-channel.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Archive public channel", () => { onDashboardRun({ title: "Archive public channel" }) slack.archivePublicChannel({ channelId: "C01234567" }) }) ``` ## Inputs Requires the stable public `channelId`. ## Output Completes without a value. Requires the bot scope `channels:manage`. # Cancel scheduled message Source: https://docs.automate.ax/reference/integrations/slack/actions/cancel-scheduled-message Cancel a pending Slack message before delivery. `slack.cancelScheduledMessage` removes an undelivered scheduled message. ## Example ```ts automations/cancel-slack-message.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Cancel Slack reminder", () => { slack.cancelScheduledMessage({ conversationId: "C01234567", scheduledMessageId: "Q01234567", }) }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `conversationId` | `string` | Yes | Destination returned by `slack.scheduleMessage`. | | `scheduledMessageId` | `string` | Yes | Scheduled message ID returned by `slack.scheduleMessage`. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"slack">` | No | Slack binding. | ## Output Returns `Signal`. Slack rejects an ID after delivering or canceling the message, or when the ID belongs to a different conversation. # Close group direct message Source: https://docs.automate.ax/reference/integrations/slack/actions/close-group-direct-message Close a multi-person Slack direct message. `slack.closeGroupDirectMessage` closes the installed bot's view of a group direct message. ## Example ```ts automations/close-group-direct-message.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Close group direct message", () => { onDashboardRun({ title: "Close group direct message" }) slack.closeGroupDirectMessage({ conversationId: "G01234567" }) }) ``` ## Inputs Requires the group direct-message `conversationId`. ## Output Returns `alreadyClosed`, which is true when Slack reports that no state change was needed. Requires `mpim:write`. # Create canvas Source: https://docs.automate.ax/reference/integrations/slack/actions/create-canvas Create a standalone Slack Canvas. `slack.createCanvas` creates a Slack Canvas with optional Markdown content. Set `channelId` to add the new canvas as a channel tab; Slack requires a channel for Canvas creation on free workspaces. ## Example ```ts automations/create-slack-canvas.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Create launch canvas", () => { onDashboardRun({ title: "Create launch canvas" }) slack.createCanvas({ channelId: "C01234567", documentContent: { markdown: "# Launch plan\n\nOwners and milestones.", type: "markdown", }, title: "Launch plan", }) }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `title` | `string` | No | Initial canvas title. | | `documentContent` | `{ type: "markdown"; markdown: string }` | No | Initial Markdown content, up to Slack's 1 MiB limit. | | `channelId` | `string` | No | Channel that receives a tab for the canvas. Required by Slack on free plans. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"slack">` | No | Slack binding. | ## Output Returns `{ canvasId }` with the stable Slack Canvas ID. # Create List Source: https://docs.automate.ax/reference/integrations/slack/actions/create-list Create a Slack List on a paid workspace. `slack.createList` creates a standalone List. Slack Lists require a paid workspace. ```ts automations/create-release-list.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Create release List", () => { onDashboardRun({ title: "Create release List" }) slack.createList({ name: "Releases", schema: [ { key: "name", name: "Name", type: "text", isPrimaryColumn: true }, { key: "due", name: "Due", type: "date" }, ], todoMode: true, }) }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `name` | `string` | Yes | List name. | | `descriptionBlocks` | Slack rich-text blocks | No | Rich-text List description. | | `schema` | `SlackListColumn[]` | No | Column definitions. Slack creates one text column when omitted. | | `todoMode` | `boolean` | No | Adds Slack's completed, assignee, and due-date task fields. | | `copyFromListId` | `string` | No | Existing List whose structure is copied. | | `includeCopiedListRecords` | `boolean` | No | Also copies records; requires `copyFromListId`. | Column types are `text`, `message`, `number`, `select`, `date`, `user`, `attachment`, `checkbox`, `email`, `phone`, `channel`, `rating`, `created_by`, `last_edited_by`, `created_time`, `last_edited_time`, `vote`, `canvas`, `reference`, and `link`. A List can have at most one primary column, and it must be `text`. ## Output Returns `listId` and optional `metadata` with Slack's generated column IDs, subtask columns, integrations, and views. Preserve generated column IDs when creating or updating items. # Create List item Source: https://docs.automate.ax/reference/integrations/slack/actions/create-list-item Create an item, duplicate, or subtask in a Slack List. `slack.createListItem` creates a record in a List on a paid Slack workspace. ```ts automations/create-release-item.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Create release item", () => { onDashboardRun({ title: "Create release item" }) slack.createListItem({ listId: "F012ABCD3EF", fields: [ { columnId: "ColName", type: "richText", value: [] }, { columnId: "ColStatus", type: "select", value: ["OptReady"] }, ], }) }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `listId` | `string` | Yes | List receiving the item. | | `fields` | `SlackListItemField[]` | No | Initial typed cell values. | | `duplicatedItemId` | `string` | No | Existing item to copy. | | `parentItemId` | `string` | No | Parent item when creating a subtask. | Each field has `columnId`, a `type`, and a matching `value`. Supported types are `attachment`, `channel`, `checkbox`, `date`, `email`, `link`, `message`, `number`, `phone`, `rating`, `reference`, `richText`, `select`, `timestamp`, and `user`. Dates use `YYYY-MM-DD`; message values are Slack message URLs; references accept Slack file IDs. ## Output Returns the created item with `id`, `listId`, `createdAt`, typed `fields`, and available creator, update, archive, parent, and subscription metadata. # Create private channel Source: https://docs.automate.ax/reference/integrations/slack/actions/create-private-channel Create a private Slack channel. `slack.createPrivateChannel` creates a private channel. ## Example ```ts automations/create-private-channel.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Create private channel", () => { onDashboardRun({ title: "Create private channel" }) slack.createPrivateChannel({ name: "incident-response" }) }) ``` ## Inputs `name` is required, may contain lowercase letters, numbers, hyphens, and underscores, and may be at most 80 characters. ## Output Returns the created Slack conversation. Requires `groups:write`. # Create public channel Source: https://docs.automate.ax/reference/integrations/slack/actions/create-public-channel Create a public Slack channel. `slack.createPublicChannel` creates a public channel. ## Example ```ts automations/create-public-channel.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Create public channel", () => { onDashboardRun({ title: "Create public channel" }) slack.createPublicChannel({ name: "release-status" }) }) ``` ## Inputs `name` is required, may contain lowercase letters, numbers, hyphens, and underscores, and may be at most 80 characters. ## Output Returns the created Slack conversation. Requires the bot scope `channels:manage`. # Create user group Source: https://docs.automate.ax/reference/integrations/slack/actions/create-user-group Create a Slack user group and its channel preferences. `slack.createUserGroup` creates a workspace user group. ## Example ```ts automations/create-user-group.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Create user group", () => { onDashboardRun({ title: "Create user group" }) slack.createUserGroup({ name: "Incident Response", handle: "incident-response", channelIds: ["C01234567"], }) }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `name` | `string` | Yes | Unique group name. | | `handle` | `string` | No | Unique mention handle. | | `description` | `string` | No | Group description. | | `channelIds` | `string[]` | No | Default channel IDs. | | `additionalChannelIds` | `string[]` | No | Extra channels members may add. | | `enableSection` | `boolean` | No | Show default channels as a sidebar section. | | `includeCount` | `boolean` | No | Include the member count in the response. | ## Output Returns the created user group. Requires `usergroups:write`, a paid Slack plan, and workspace permissions that allow the installed bot to manage user groups. # Delete canvas Source: https://docs.automate.ax/reference/integrations/slack/actions/delete-canvas Permanently delete a Slack Canvas. `slack.deleteCanvas` permanently deletes a Slack Canvas that the connected app can manage. ## Example ```ts automations/delete-slack-canvas.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Delete obsolete canvas", () => { onDashboardRun({ title: "Delete obsolete canvas" }) slack.deleteCanvas({ canvasId: "F01234567" }) }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `canvasId` | `string` | Yes | Stable Slack Canvas ID. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"slack">` | No | Slack binding. | ## Output Returns no value after Slack deletes the canvas. # Delete canvas access Source: https://docs.automate.ax/reference/integrations/slack/actions/delete-canvas-access Revoke users' or channels' access to a Slack Canvas. `slack.deleteCanvasAccess` revokes Canvas access from one or more users or channels. ## Example ```ts automations/revoke-slack-canvas-access.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Revoke canvas access", () => { onDashboardRun({ title: "Revoke canvas access" }) slack.deleteCanvasAccess({ canvasId: "F01234567", subject: { ids: ["U01234567"], type: "users" }, }) }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `canvasId` | `string` | Yes | Stable Slack Canvas ID. | | `subject` | `{ type: "channels" \| "users"; ids: string[] }` | Yes | One or more channels or users losing access. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"slack">` | No | Slack binding. | ## Output Returns no value after Slack updates access. # Delete file Source: https://docs.automate.ax/reference/integrations/slack/actions/delete-file Permanently delete a Slack file. `slack.deleteFile` permanently deletes a file the installed bot is allowed to delete. ## Example ```ts automations/delete-file.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Delete file", () => { onDashboardRun({ title: "Delete file" }) slack.deleteFile({ fileId: "F01234567" }) }) ``` ## Inputs Requires the stable Slack `fileId`. ## Output Completes without a value. Requires `files:write`. This operation is destructive and Slack does not provide a restore action. # Delete List access Source: https://docs.automate.ax/reference/integrations/slack/actions/delete-list-access Revoke channel or user access to a Slack List. `slack.deleteListAccess` revokes access for channels or users. ```ts automations/unshare-release-list.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Unshare release List", () => { onDashboardRun({ title: "Unshare release List" }) slack.deleteListAccess({ listId: "F012ABCD3EF", subject: { type: "users", ids: ["U012ABCD3EF"] }, }) }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `listId` | `string` | Yes | List whose access changes. | | `subject` | `{ type: "channels" \| "users"; ids: string[] }` | Yes | One or more channels or users. | ## Output Returns `Signal`. # Delete List item Source: https://docs.automate.ax/reference/integrations/slack/actions/delete-list-item Delete one item from a Slack List. `slack.deleteListItem` permanently deletes one List item. ```ts automations/delete-list-item.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Delete List item", () => { onDashboardRun({ title: "Delete List item" }) slack.deleteListItem({ listId: "F012ABCD3EF", itemId: "Rec012ABCD3E" }) }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `listId` | `string` | Yes | List containing the item. | | `itemId` | `string` | Yes | Item to delete. | ## Output Returns `Signal`. # Delete List items Source: https://docs.automate.ax/reference/integrations/slack/actions/delete-list-items Delete several items from a Slack List. `slack.deleteListItems` permanently deletes several List items in one request. ```ts automations/delete-list-items.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Delete List items", () => { onDashboardRun({ title: "Delete List items" }) slack.deleteListItems({ listId: "F012ABCD3EF", itemIds: ["Rec012ABCD3E", "Rec012ABCD4F"], }) }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `listId` | `string` | Yes | List containing the items. | | `itemIds` | `string[]` | Yes | One or more item IDs to delete. | ## Output Returns `Signal`. # Delete message Source: https://docs.automate.ax/reference/integrations/slack/actions/delete-message Delete a message posted by the installed Slack bot. `slack.deleteMessage` permanently deletes a bot-authored message. ## Example ```ts automations/delete-slack-message.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Delete Slack message", () => { slack.deleteMessage({ conversationId: "C01234567", timestamp: "1700000000.000001", }) }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `conversationId` | `string` | Yes | Conversation containing the message. | | `timestamp` | `string` | Yes | Slack timestamp identifying the message. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"slack">` | No | Slack binding. Defaults to the project binding. | ## Output Returns `{ conversationId: string; timestamp: string }` for the deleted message. The action fails when the bot didn't post the message or Slack no longer permits deletion. # Disable user group Source: https://docs.automate.ax/reference/integrations/slack/actions/disable-user-group Disable a Slack user group without deleting it. `slack.disableUserGroup` disables a user group while retaining its definition. ## Example ```ts automations/disable-user-group.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Disable user group", () => { onDashboardRun({ title: "Disable user group" }) slack.disableUserGroup({ userGroupId: "S01234567" }) }) ``` ## Inputs Requires the stable Slack `userGroupId`. ## Output Returns the disabled user group. Requires `usergroups:write`, a paid Slack plan, and sufficient workspace permissions. # Edit canvas Source: https://docs.automate.ax/reference/integrations/slack/actions/edit-canvas Apply one content or title change to a Slack Canvas. `slack.editCanvas` applies one edit operation per Slack API call. Workspace plan restrictions and the caller's Canvas permissions still apply. ## Example ```ts automations/edit-slack-canvas.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Append canvas section", () => { onDashboardRun({ title: "Append canvas section" }) slack.editCanvas({ canvasId: "F01234567", change: { documentContent: { markdown: "## Next steps", type: "markdown" }, operation: "insert_at_end", }, }) }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `canvasId` | `string` | Yes | Stable Slack Canvas ID. | | `change` | Canvas edit operation | Yes | One `insert_after`, `insert_before`, `insert_at_start`, `insert_at_end`, `replace`, `delete`, or `rename` operation with its required content or section ID. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"slack">` | No | Slack binding. | ## Output Returns no value after Slack accepts the edit. # Enable user group Source: https://docs.automate.ax/reference/integrations/slack/actions/enable-user-group Enable a previously disabled Slack user group. `slack.enableUserGroup` restores a disabled user group. ## Example ```ts automations/enable-user-group.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Enable user group", () => { onDashboardRun({ title: "Enable user group" }) slack.enableUserGroup({ userGroupId: "S01234567" }) }) ``` ## Inputs Requires the stable Slack `userGroupId`. ## Output Returns the enabled user group. Requires `usergroups:write`, a paid Slack plan, and sufficient workspace permissions. # Find conversation Source: https://docs.automate.ax/reference/integrations/slack/actions/find-conversation Find an accessible Slack channel by exact name or ID. `slack.findConversation` resolves an exact public or private channel name to a stable ID. It also accepts an ID directly. ## Example ```ts automations/find-support-channel.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Find support channel", () => { slack.findConversation({ conversation: "#support" }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `conversation` | `string` | Yes | None | Exact channel name, optionally beginning with `#`, or conversation ID. | | `includeArchived` | `boolean` | No | `false` | Includes archived channels in name lookup. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"slack">` | No | Project default | Slack workspace binding. | ## Output Returns a `SlackConversation` with stable `id` and available name, visibility, membership, topic, purpose, creation, creator, and member metadata. Lookup compares names case-insensitively across every accessible public and private channel. It fails if there is no match or if an exact name matches more than one channel. Use an ID to avoid ambiguity. # Find member by email Source: https://docs.automate.ax/reference/integrations/slack/actions/find-member-by-email Find an active Slack workspace member by email address. `slack.findMemberByEmail` resolves an active workspace member from their registered email address. ## Example ```ts automations/find-member-by-email.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Find member by email", () => { onDashboardRun({ title: "Find member by email" }) slack.findMemberByEmail({ email: "ada@example.com" }) }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `email` | `string` | Yes | Registered workspace email address. | ## Output Returns a normalized Slack member and profile. Requires `users:read` together with the sensitive `users:read.email` scope and does not return deactivated users. # Get conversation Source: https://docs.automate.ax/reference/integrations/slack/actions/get-conversation Get a Slack conversation's metadata. `slack.getConversation` returns a public channel, private channel, direct message, or group direct message by stable ID. ## Example ```ts automations/get-slack-conversation.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Get Slack conversation", () => { slack.getConversation({ conversationId: "C01234567", includeMemberCount: true, }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `conversationId` | `string` | Yes | None | Stable Slack conversation ID. | | `includeMemberCount` | `boolean` | No | Slack default | Asks Slack to include `memberCount`. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"slack">` | No | Project default | Slack workspace binding. | ## Output Returns `Signal`. It always contains `id`. Applicable optional fields include `name`, `userId`, `memberCount`, `topic`, `purpose`, and flags describing archive, membership, privacy, sharing, and conversation type. The connection needs read access to public channels, private channels, DMs, and group DMs. # Get conversation history Source: https://docs.automate.ax/reference/integrations/slack/actions/get-conversation-history Read one page of messages from a Slack conversation. `slack.getConversationHistory` reads a public channel, private channel, DM, or group DM. Use [Get thread replies](/reference/integrations/slack/actions/get-thread-replies) for all replies to a parent message. ## Example ```ts automations/read-slack-history.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Read Slack history", () => { slack.getConversationHistory({ conversationId: "C01234567", limit: 15, oldest: "1700000000.000000", }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `conversationId` | `string` | Yes | None | Stable Slack conversation ID. | | `cursor` | `string` | No | First page | Opaque cursor from a preceding page. | | `limit` | `number` | No | Slack default | Page size from 1 to 15. Slack applies this limit to newly distributed non-Marketplace apps. | | `oldest` | `string` | No | Unbounded | Only return messages after this Slack timestamp. | | `latest` | `string` | No | Unbounded | Only return messages before this Slack timestamp. | | `inclusive` | `boolean` | No | Slack default | Includes messages exactly matching `oldest` or `latest`. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"slack">` | No | Project default | Slack workspace binding. | ## Output Returns `messages: SlackMessage[]`, `hasMore: boolean`, and `responseMetadata.nextCursor`. Each message contains `text`, `timestamp`, and `type`, plus available author, thread, block, attachment, file, reaction, reply, app, bot, and subtype fields. `hasMore` describes Slack's time-window results. Use `nextCursor` for cursor pagination when present. # Get file Source: https://docs.automate.ax/reference/integrations/slack/actions/get-file Get metadata for a Slack file. `slack.getFile` retrieves normalized metadata for one Slack file. ## Example ```ts automations/get-file.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Get file", () => { onDashboardRun({ title: "Get file" }) slack.getFile({ fileId: "F01234567" }) }) ``` ## Inputs Requires the stable Slack `fileId`. ## Output Returns file identity, nullable name, title, type, size, creation time, permalink, and shared channel IDs when Slack supplies them. Requires `files:read`. # Get List download Source: https://docs.automate.ax/reference/integrations/slack/actions/get-list-download Get the status and completed URL for a Slack List export. `slack.getListDownload` retrieves the URL for an export started with `slack.startListDownload`. ```ts automations/get-release-list-export.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Get release List export", () => { onDashboardRun({ title: "Get release List export" }) slack.getListDownload({ listId: "F012ABCD3EF", jobId: "Le012ABCD3E", format: "json", includeThreads: true, includeAttachments: true, }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `listId` | `string` | Yes | None | Exported List. | | `jobId` | `string` | Yes | None | Job returned by `startListDownload`. | | `format` | `"csv" \| "json"` | No | `csv` | Must match the start request. | | `includeThreads` | `boolean` | No | Slack default | Must match the start request; JSON only. | | `includeAttachments` | `boolean` | No | Slack default | Must match the start request; JSON only. | ## Output Returns `{ status: "IN_PROGRESS" }` while Slack is still preparing the export, or `{ status: "COMPLETED"; downloadUrl: string }` when the export is ready. Poll this action with the same inputs until the job is complete; the URL points to the generated Slack export. # Get List item Source: https://docs.automate.ax/reference/integrations/slack/actions/get-list-item Get one Slack List item and its subtasks. `slack.getListItem` gets one List record and any subtasks beneath it. ```ts automations/get-release-item.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Get release item", () => { onDashboardRun({ title: "Get release item" }) slack.getListItem({ listId: "F012ABCD3EF", itemId: "Rec012ABCD3E", includeSubscription: true, }) }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `listId` | `string` | Yes | List containing the item. | | `itemId` | `string` | Yes | Item to retrieve. | | `includeSubscription` | `boolean` | No | Asks Slack to return `isSubscribed`. | ## Output Returns `{ item, list, subtasks }`. Item fields preserve Slack's typed cell values, including normalized message and reference metadata. `list.metadata` includes the column schema needed to interpret those fields. # Get member Source: https://docs.automate.ax/reference/integrations/slack/actions/get-member Get a Slack workspace member and profile. `slack.getMember` retrieves a Slack user by stable user ID. ## Example ```ts automations/get-slack-member.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Get Slack member", () => { slack.getMember({ userId: "U01234567", includeLocale: true }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `userId` | `string` | Yes | None | Stable Slack user ID. | | `includeLocale` | `boolean` | No | Slack default | Asks Slack to include locale data. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"slack">` | No | Project default | Slack binding. | ## Output Returns `Signal` with `id`, nested `profile`, and available account status, role, bot/app, name, workspace, time-zone, and update fields. Profile email is absent unless the Slack installation already has `users:read.email`. # Get member presence Source: https://docs.automate.ax/reference/integrations/slack/actions/get-member-presence Get a Slack member's current active or away presence. `slack.getMemberPresence` reads Slack's current aggregate presence for a member. ## Example ```ts automations/get-member-presence.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Get member presence", () => { onDashboardRun({ title: "Get member presence" }) slack.getMemberPresence({ userId: "U01234567" }) }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `userId` | `string` | No | Member to inspect; omit for the authenticated bot. | ## Output Returns `presence` as `active` or `away`. Requests for the authenticated bot may also include connection, activity, and automatic or manual away details. Requires `users:read`. # Get member profile Source: https://docs.automate.ax/reference/integrations/slack/actions/get-member-profile Get a Slack member's workspace profile and custom status. `slack.getMemberProfile` retrieves standard profile fields and custom status details. ## Example ```ts automations/get-member-profile.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Get member profile", () => { onDashboardRun({ title: "Get member profile" }) slack.getMemberProfile({ userId: "U01234567" }) }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `userId` | `string` | No | Member to inspect; omit for the authenticated bot. | | `includeLabels` | `boolean` | No | Include custom-field labels; Slack heavily rate-limits this option. | ## Output Returns names, avatar URLs, title, pronouns, email when available, and custom status fields. Requires `users.profile:read`. # Get message permalink Source: https://docs.automate.ax/reference/integrations/slack/actions/get-message-permalink Get Slack's permanent URL for a message. `slack.getMessagePermalink` returns a durable Slack URL for a message. ## Example ```ts automations/get-message-permalink.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Get message permalink", () => { onDashboardRun({ title: "Get message permalink" }) slack.getMessagePermalink({ conversationId: "C01234567", timestamp: "1700000000.000001", }) }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `conversationId` | `string` | Yes | Conversation containing the message. | | `timestamp` | `string` | Yes | Slack message timestamp. | ## Output Returns the normalized `conversationId` and `permalink` URL. # Get message reactions Source: https://docs.automate.ax/reference/integrations/slack/actions/get-message-reactions Get emoji reactions attached to a Slack message. `slack.getMessageReactions` retrieves a message and its reaction summaries. ## Example ```ts automations/get-message-reactions.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Get message reactions", () => { onDashboardRun({ title: "Get message reactions" }) slack.getMessageReactions({ conversationId: "C01234567", timestamp: "1700000000.000001", includeAllUsers: true, }) }) ``` ## Inputs Requires `conversationId` and message `timestamp`. `includeAllUsers` asks Slack for the complete reacting-user list when available. ## Output Returns the normalized `message` and its `reactions`. Reaction counts can exceed the returned user-ID sample. Requires `reactions:read`. # Get thread replies Source: https://docs.automate.ax/reference/integrations/slack/actions/get-thread-replies Read one page of a Slack message thread. `slack.getThreadReplies` reads a parent message and its thread replies. Slack identifies the thread with the parent message's `timestamp`, exposed here as `threadTimestamp`. ## Example ```ts automations/read-slack-thread.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Read Slack thread", () => { slack.getThreadReplies({ conversationId: "C01234567", threadTimestamp: "1700000000.000001", limit: 15, }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `conversationId` | `string` | Yes | None | Conversation containing the thread. | | `threadTimestamp` | `string` | Yes | None | Timestamp of the thread's parent message. | | `cursor` | `string` | No | First page | Cursor from a preceding page. | | `limit` | `number` | No | Slack default | Page size from 1 to 15. | | `oldest` / `latest` | `string` | No | Unbounded | Slack timestamp bounds. | | `inclusive` | `boolean` | No | Slack default | Includes exact timestamp bounds. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"slack">` | No | Project default | Slack workspace binding. | ## Output Returns `messages: SlackMessage[]`, `hasMore`, and pagination `responseMetadata.nextCursor`. Preserve `conversationId` together with message timestamps: timestamps are only meaningful as message identifiers inside their conversation. # Get workspace Source: https://docs.automate.ax/reference/integrations/slack/actions/get-workspace Get Slack workspace metadata and icon URLs. `slack.getWorkspace` retrieves metadata for the workspace represented by the connected account. ## Example ```ts automations/get-workspace.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Get workspace", () => { onDashboardRun({ title: "Get workspace" }) slack.getWorkspace() }) ``` ## Output Returns the workspace ID, name, domain, email domain, icon variants, and Enterprise Grid organization metadata when applicable. Requires `team:read`. # Get workspace identity Source: https://docs.automate.ax/reference/integrations/slack/actions/get-workspace-identity Get the Slack workspace and bot represented by an account binding. `slack.getWorkspaceIdentity` identifies the workspace and bot for a Slack binding. Use it to compare event workspace IDs. ## Example ```ts automations/get-slack-identity.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Get Slack identity", () => { slack.getWorkspaceIdentity() }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"slack">` | No | Slack binding. Defaults to the project binding. | ## Output Returns `workspace`, `workspaceId`, and authenticated `userId`, plus optional `user`, `botId`, workspace `url`, and Enterprise Grid `enterpriseId`. # Invite users to private channel Source: https://docs.automate.ax/reference/integrations/slack/actions/invite-users-to-private-channel Invite Slack members to a private channel. `slack.inviteUsersToPrivateChannel` invites up to 1,000 members at once. ## Example ```ts automations/invite-users-to-private-channel.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Invite users to private channel", () => { onDashboardRun({ title: "Invite users to private channel" }) slack.inviteUsersToPrivateChannel({ channelId: "G01234567", userIds: ["U01234567", "U07654321"], }) }) ``` ## Inputs Requires `channelId` and a non-empty `userIds` array. Set `force` to continue inviting valid users if another supplied user is invalid. ## Output Returns the updated conversation. Requires either `groups:write` or `groups:write.invites`. # Invite users to public channel Source: https://docs.automate.ax/reference/integrations/slack/actions/invite-users-to-public-channel Invite Slack members to a public channel. `slack.inviteUsersToPublicChannel` invites up to 1,000 members at once. ## Example ```ts automations/invite-users-to-public-channel.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Invite users to public channel", () => { onDashboardRun({ title: "Invite users to public channel" }) slack.inviteUsersToPublicChannel({ channelId: "C01234567", userIds: ["U01234567", "U07654321"], }) }) ``` ## Inputs Requires `channelId` and a non-empty `userIds` array. Set `force` to continue inviting valid users if another supplied user is invalid. ## Output Returns the updated conversation. Requires either `channels:manage` or `channels:write.invites`. # Join public channel Source: https://docs.automate.ax/reference/integrations/slack/actions/join-public-channel Join an existing public Slack channel. `slack.joinPublicChannel` adds the installed bot to an existing public channel. ## Example ```ts automations/join-public-channel.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Join public channel", () => { onDashboardRun({ title: "Join public channel" }) slack.joinPublicChannel({ channelId: "C01234567" }) }) ``` ## Inputs Requires the stable public `channelId`. ## Output Returns the joined conversation. Requires `channels:join`. # Leave private channel Source: https://docs.automate.ax/reference/integrations/slack/actions/leave-private-channel Leave a private Slack channel. `slack.leavePrivateChannel` removes the installed bot from a private channel. ## Example ```ts automations/leave-private-channel.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Leave private channel", () => { onDashboardRun({ title: "Leave private channel" }) slack.leavePrivateChannel({ channelId: "G01234567" }) }) ``` ## Inputs Requires the stable private `channelId`. ## Output Completes without a value. Requires `groups:write`. # Leave public channel Source: https://docs.automate.ax/reference/integrations/slack/actions/leave-public-channel Leave a public Slack channel. `slack.leavePublicChannel` removes the installed bot from a public channel. ## Example ```ts automations/leave-public-channel.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Leave public channel", () => { onDashboardRun({ title: "Leave public channel" }) slack.leavePublicChannel({ channelId: "C01234567" }) }) ``` ## Inputs Requires the stable public `channelId`. ## Output Completes without a value. Requires the bot scope `channels:manage`. # List bookmarks Source: https://docs.automate.ax/reference/integrations/slack/actions/list-bookmarks List bookmarks in a Slack conversation. `slack.listBookmarks` lists a conversation's link bookmarks. ## Example ```ts automations/list-bookmarks.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("List bookmarks", () => { onDashboardRun({ title: "List bookmarks" }) slack.listBookmarks({ conversationId: "C01234567" }) }) ``` ## Inputs Requires the stable Slack `conversationId`. ## Output Returns normalized bookmarks with IDs, titles, URLs, emoji, and audit timestamps when Slack supplies them. Requires `bookmarks:read`. # List conversation members Source: https://docs.automate.ax/reference/integrations/slack/actions/list-conversation-members List the Slack user IDs belonging to a conversation. `slack.listConversationMembers` returns a page of member IDs for any conversation type. Pass them to [Get member](/reference/integrations/slack/actions/get-member) for profiles. ## Example ```ts automations/list-channel-members.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("List channel members", () => { slack.listConversationMembers({ conversationId: "C01234567", limit: 200 }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `conversationId` | `string` | Yes | None | Stable Slack conversation ID. | | `cursor` | `string` | No | First page | `nextCursor` from the previous page. | | `limit` | `number` | No | Slack default | Requested page size from 1 to 200. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"slack">` | No | Project default | Slack workspace binding. | ## Output Returns `Signal<{ memberIds: string[]; responseMetadata: { nextCursor?: string } }>`. The values are Slack user IDs. They aren't email addresses or display names. # List custom emoji Source: https://docs.automate.ax/reference/integrations/slack/actions/list-custom-emoji List custom Slack emoji names and their image URLs or aliases. `slack.listCustomEmoji` lists the workspace's custom emoji map. ## Example ```ts automations/list-custom-emoji.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("List custom emoji", () => { onDashboardRun({ title: "List custom emoji" }) slack.listCustomEmoji() }) ``` ## Output Returns a record keyed by emoji name. Values are image URLs or `alias:name` references. Requires `emoji:read`. # List direct messages Source: https://docs.automate.ax/reference/integrations/slack/actions/list-direct-messages List one-to-one Slack direct-message conversations visible to the bot. `slack.listDirectMessages` returns conversation IDs for message and history actions. ## Example ```ts automations/list-slack-dms.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("List Slack DMs", () => { slack.listDirectMessages({ limit: 100 }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `cursor` | `string` | No | First page | Opaque cursor from the previous page. | | `limit` | `number` | No | Slack default | Requested page size from 1 to 200. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"slack">` | No | Project default | Slack workspace binding. | ## Output Returns `conversations` and `responseMetadata.nextCursor`. A direct-message conversation has `id`, usually `userId`, and `isDirectMessage`. Other common conversation metadata may also be present. # List files Source: https://docs.automate.ax/reference/integrations/slack/actions/list-files List Slack files with channel, owner, time, and type filters. `slack.listFiles` searches the workspace's Slack files using provider-supported filters. ## Example ```ts automations/list-files.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("List files", () => { onDashboardRun({ title: "List files" }) slack.listFiles({ conversationId: "C01234567", count: 100, page: 1 }) }) ``` ## Inputs Optional filters are `conversationId`, `userId`, `startAt`, `endAt`, and comma-separated `types`. Slack uses legacy pagination through one-based `page` and `count`; `showFilesHiddenByLimit` requests truncated metadata for plan-hidden files. ## Output Returns normalized `files` plus `page`, `pageCount`, `pageSize`, and `total`. Requires `files:read`. # List group direct messages Source: https://docs.automate.ax/reference/integrations/slack/actions/list-group-direct-messages List Slack multi-person direct-message conversations visible to the bot. `slack.listGroupDirectMessages` returns group-DM conversation IDs rather than channel IDs. ## Example ```ts automations/list-group-dms.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("List Slack group DMs", () => { slack.listGroupDirectMessages({ limit: 100 }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `cursor` | `string` | No | First page | Opaque cursor returned by the preceding page. | | `limit` | `number` | No | Slack default | Requested page size from 1 to 200. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"slack">` | No | Project default | Slack workspace binding. | ## Output Returns `Signal<{ conversations: SlackConversation[]; responseMetadata: { nextCursor?: string } }>`. Group DMs report `isGroupDirectMessage` when Slack supplies the flag. Continue pagination with `nextCursor`. # Get Slack List items Source: https://docs.automate.ax/reference/integrations/slack/actions/list-list-items Get a cursor-paginated page of Slack List items. `slack.listListItems` reads normal or archived records from a List on a paid Slack workspace. ```ts automations/read-release-items.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Read release items", () => { onDashboardRun({ title: "Read release items" }) slack.listListItems({ listId: "F012ABCD3EF", limit: 100 }) }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `listId` | `string` | Yes | List to read. | | `archived` | `boolean` | No | Select archived items instead of normal items. | | `cursor` | `string` | No | Opaque cursor from the previous page. | | `limit` | `number` | No | Maximum records Slack should return. | ## Output Returns `{ items, nextCursor? }`. Each item contains typed fields plus stable IDs and available creation, update, archive, parent, and subscription metadata. # List members Source: https://docs.automate.ax/reference/integrations/slack/actions/list-members List Slack workspace members with profile details. `slack.listMembers` returns invited, active, bot, and deactivated accounts. Use `deleted` and the member-type flags to filter for active humans. ## Example ```ts automations/list-slack-members.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("List Slack members", () => { slack.listMembers({ includeLocale: true, limit: 200 }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `cursor` | `string` | No | First page | Cursor from the preceding page. | | `limit` | `number` | No | Slack default | Requested page size from 1 to 200. | | `includeLocale` | `boolean` | No | Slack default | Asks Slack to include locale data. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"slack">` | No | Project default | Slack binding. | ## Output Returns `members: SlackMember[]` and `responseMetadata.nextCursor`. A member contains `id`, `profile`, and available role, account-state, workspace, time-zone, name, and update metadata. The profile may include names, avatar URLs, title, pronouns, and custom status. Access to email addresses requires the installed Slack account to have `users:read.email`. This action doesn't request that sensitive scope. # List pinned messages Source: https://docs.automate.ax/reference/integrations/slack/actions/list-pinned-messages List messages pinned to a Slack conversation. `slack.listPinnedMessages` lists a conversation's pinned messages. ## Example ```ts automations/list-pinned-messages.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("List pinned messages", () => { onDashboardRun({ title: "List pinned messages" }) slack.listPinnedMessages({ conversationId: "C01234567" }) }) ``` ## Inputs Requires the stable Slack `conversationId`. ## Output Returns pinned messages with the pin creation time and member who pinned each message. Requires `pins:read` and access to the conversation. # List private channels Source: https://docs.automate.ax/reference/integrations/slack/actions/list-private-channels List private Slack channels accessible to the installed bot. `slack.listPrivateChannels` can't reveal channels unless the bot has joined them or Slack has granted access. ## Example ```ts automations/list-private-channels.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("List private Slack channels", () => { slack.listPrivateChannels({ excludeArchived: true, limit: 50 }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `cursor` | `string` | No | First page | Opaque cursor returned by the preceding page. | | `limit` | `number` | No | Slack default | Requested page size from 1 to 200. | | `excludeArchived` | `boolean` | No | Slack default | Excludes archived channels when true. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"slack">` | No | Project default | Slack workspace binding. | ## Output Returns a signal with `conversations: SlackConversation[]` and `responseMetadata.nextCursor`. Conversations include stable `id`, name, visibility and membership flags, and available topic, purpose, creator, creation, and member-count metadata. # List public channels Source: https://docs.automate.ax/reference/integrations/slack/actions/list-public-channels List public Slack channels visible to the installed bot. `slack.listPublicChannels` returns one page of public channels and their IDs. ## Example ```ts automations/list-slack-channels.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("List Slack channels", () => { slack.listPublicChannels({ excludeArchived: true, limit: 100 }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `cursor` | `string` | No | First page | Opaque `nextCursor` from the previous page. | | `limit` | `number` | No | Slack default | Requested page size from 1 to 200. | | `excludeArchived` | `boolean` | No | Slack default | Omits archived channels when true. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"slack">` | No | Project default | Slack workspace binding. | Every input also accepts a compatible `Signal`. ## Output Returns `Signal<{ conversations: SlackConversation[]; responseMetadata: { nextCursor?: string } }>`. Each conversation includes `id`, optional `name`, membership and privacy flags, creation and creator metadata, optional topic and purpose, and optional member count. Pass `responseMetadata.nextCursor` back as `cursor` to continue. The result includes only public channels allowed by the bot installation and scopes. # List scheduled messages Source: https://docs.automate.ax/reference/integrations/slack/actions/list-scheduled-messages List pending messages scheduled through the connected Slack account. `slack.listScheduledMessages` lists pending messages created with the same Slack token. ## Example ```ts automations/list-scheduled-messages.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("List scheduled messages", () => { onDashboardRun({ title: "List scheduled messages" }) slack.listScheduledMessages({ conversationId: "C01234567", limit: 20 }) }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `conversationId` | `string` | No | Restrict results to one conversation. | | `cursor` | `string` | No | Cursor from the preceding page. | | `oldest` | `number` | No | Earliest scheduled Unix timestamp. | | `latest` | `number` | No | Latest scheduled Unix timestamp. | | `limit` | `number` | No | Maximum results to request. | ## Output Returns `scheduledMessages` with IDs, conversation IDs, text, creation times, post times, and blocks, plus `nextCursor` when another page exists. # List user group members Source: https://docs.automate.ax/reference/integrations/slack/actions/list-user-group-members List all member IDs in a Slack user group. `slack.listUserGroupMembers` returns the complete membership of one user group. ## Example ```ts automations/list-user-group-members.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("List user group members", () => { onDashboardRun({ title: "List user group members" }) slack.listUserGroupMembers({ userGroupId: "S01234567" }) }) ``` ## Inputs Requires `userGroupId`; set `includeDisabled` to inspect a disabled group. ## Output Returns an array of Slack member IDs. Requires `usergroups:read`. # List user groups Source: https://docs.automate.ax/reference/integrations/slack/actions/list-user-groups List Slack user groups in the current workspace. `slack.listUserGroups` lists workspace user groups and their channel preferences. ## Example ```ts automations/list-user-groups.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("List user groups", () => { onDashboardRun({ title: "List user groups" }) slack.listUserGroups({ includeCount: true, includeUsers: true }) }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `includeCount` | `boolean` | No | Include member counts. | | `includeDisabled` | `boolean` | No | Include disabled groups. | | `includeUsers` | `boolean` | No | Include member IDs. | ## Output Returns normalized user groups with IDs, names, handles, state, audit metadata, channel preferences, and requested membership fields. Requires `usergroups:read` and a Slack plan that supports user groups. # List user reactions Source: https://docs.automate.ax/reference/integrations/slack/actions/list-user-reactions List Slack messages and files reacted to by a member. `slack.listUserReactions` lists items to which a member has reacted. ## Example ```ts automations/list-user-reactions.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("List user reactions", () => { onDashboardRun({ title: "List user reactions" }) slack.listUserReactions({ userId: "U01234567", limit: 100 }) }) ``` ## Inputs `userId`, `cursor`, `limit`, and `includeAllUsers` are optional. Omitting `userId` uses Slack's authenticated identity behavior. ## Output Returns discriminated message, file, and file-comment items plus `responseMetadata.nextCursor`. Requires `reactions:read`. # Look up canvas sections Source: https://docs.automate.ax/reference/integrations/slack/actions/lookup-canvas-sections Find section IDs within a Slack Canvas. `slack.lookupCanvasSections` finds sections by contained text, section type, or both. Use the returned IDs with `slack.editCanvas`. ## Example ```ts automations/find-slack-canvas-section.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Find canvas owners", () => { onDashboardRun({ title: "Find canvas owners" }) slack.lookupCanvasSections({ canvasId: "F01234567", containsText: "Owners", sectionTypes: ["h1", "h2"], }) }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `canvasId` | `string` | Yes | Stable Slack Canvas ID. | | `containsText` | `string` | No | Text that matching sections must contain. | | `sectionTypes` | `SlackCanvasSectionType[]` | No | One or more documented Slack section categories. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"slack">` | No | Slack binding. | ## Output Returns `{ sectionIds }` with every matching Slack section ID. # Open direct message Source: https://docs.automate.ax/reference/integrations/slack/actions/open-direct-message Open or resume a one-to-one Slack direct message. `slack.openDirectMessage` resolves a member's DM conversation from their Slack user ID. ## Example ```ts automations/open-slack-dm.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Open Slack DM", () => { slack.openDirectMessage({ userId: "U01234567" }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `userId` | `string` | Yes | None | Slack user ID of the other participant. | | `preventCreation` | `boolean` | No | `false` | Fails rather than creating a DM when none exists. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"slack">` | No | Project default | Slack workspace binding. | ## Output Returns `{ alreadyOpen: boolean; conversation: SlackConversation }`. Pass `conversation.id` to `slack.sendMessage`. With `preventCreation`, Slack can reject the request if the two users have no existing DM. # Open group direct message Source: https://docs.automate.ax/reference/integrations/slack/actions/open-group-direct-message Open or resume a multi-person Slack direct message. `slack.openGroupDirectMessage` opens or resumes a group direct message with at least two other members. ## Example ```ts automations/open-group-direct-message.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Open group direct message", () => { onDashboardRun({ title: "Open group direct message" }) slack.openGroupDirectMessage({ userIds: ["U01234567", "U07654321"], }) }) ``` ## Inputs Requires a `userIds` array containing at least two member IDs. Set `preventCreation` to return an error instead of creating a new conversation. ## Output Returns `conversation` and `alreadyOpen`. Requires `mpim:write`. # Pin message Source: https://docs.automate.ax/reference/integrations/slack/actions/pin-message Pin a Slack message to its conversation. `slack.pinMessage` pins one message. ## Example ```ts automations/pin-message.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Pin message", () => { onDashboardRun({ title: "Pin message" }) slack.pinMessage({ conversationId: "C01234567", timestamp: "1700000000.000001", }) }) ``` ## Inputs Requires the containing `conversationId` and message `timestamp`. ## Output Completes without a value. Requires `pins:write` and access to the conversation. # Remove bookmark Source: https://docs.automate.ax/reference/integrations/slack/actions/remove-bookmark Remove a bookmark from a Slack conversation. `slack.removeBookmark` removes one conversation bookmark. ## Example ```ts automations/remove-bookmark.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Remove bookmark", () => { onDashboardRun({ title: "Remove bookmark" }) slack.removeBookmark({ conversationId: "C01234567", bookmarkId: "Bk01234567", }) }) ``` ## Inputs Requires the containing `conversationId` and stable `bookmarkId`. ## Output Completes without a value. Requires `bookmarks:write`. # Remove reaction Source: https://docs.automate.ax/reference/integrations/slack/actions/remove-reaction Remove the installed bot's emoji reaction from a Slack message. `slack.removeReaction` removes only the installed bot's matching reaction. It can't remove a reaction added by another member. ## Example ```ts automations/remove-slack-reaction.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Remove Slack reaction", () => { slack.removeReaction({ conversationId: "C01234567", emoji: "eyes", timestamp: "1700000000.000001", }) }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `conversationId` | `string` | Yes | Conversation containing the message. | | `timestamp` | `string` | Yes | Target message timestamp. | | `emoji` | `string` | Yes | Emoji name without colons. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"slack">` | No | Slack binding. | ## Output Returns `Signal`. Slack rejects the operation when the installed bot doesn't have that reaction on the target. # Remove user from private channel Source: https://docs.automate.ax/reference/integrations/slack/actions/remove-user-from-private-channel Remove a Slack member from a private channel. `slack.removeUserFromPrivateChannel` removes one member from a private channel. ## Example ```ts automations/remove-user-from-private-channel.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Remove user from private channel", () => { onDashboardRun({ title: "Remove user from private channel" }) slack.removeUserFromPrivateChannel({ channelId: "G01234567", userId: "U01234567", }) }) ``` ## Inputs Requires the private `channelId` and target `userId`. ## Output Completes without a value. Requires `groups:write`. # Remove user from public channel Source: https://docs.automate.ax/reference/integrations/slack/actions/remove-user-from-public-channel Remove a Slack member from a public channel. `slack.removeUserFromPublicChannel` removes one member from a public channel. ## Example ```ts automations/remove-user-from-public-channel.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Remove user from public channel", () => { onDashboardRun({ title: "Remove user from public channel" }) slack.removeUserFromPublicChannel({ channelId: "C01234567", userId: "U01234567", }) }) ``` ## Inputs Requires the public `channelId` and target `userId`. ## Output Completes without a value. Requires `channels:manage`. # Rename private channel Source: https://docs.automate.ax/reference/integrations/slack/actions/rename-private-channel Rename a private Slack channel. `slack.renamePrivateChannel` changes a private channel's name. ## Example ```ts automations/rename-private-channel.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Rename private channel", () => { onDashboardRun({ title: "Rename private channel" }) slack.renamePrivateChannel({ channelId: "G01234567", name: "responders" }) }) ``` ## Inputs Requires `channelId` and a valid lowercase `name` of at most 80 characters. ## Output Returns the updated conversation. Requires `groups:write`. # Rename public channel Source: https://docs.automate.ax/reference/integrations/slack/actions/rename-public-channel Rename a public Slack channel. `slack.renamePublicChannel` changes a public channel's name. ## Example ```ts automations/rename-public-channel.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Rename public channel", () => { onDashboardRun({ title: "Rename public channel" }) slack.renamePublicChannel({ channelId: "C01234567", name: "launches" }) }) ``` ## Inputs Requires `channelId` and a valid lowercase `name` of at most 80 characters. ## Output Returns the updated conversation. Requires the bot scope `channels:manage`. # Reply to thread Source: https://docs.automate.ax/reference/integrations/slack/actions/reply-to-thread Reply to a Slack message thread. `slack.replyToThread` posts beneath a parent message. Use the parent's `timestamp`, not a reply timestamp, as `threadTimestamp`. ## Example ```ts automations/reply-to-slack-thread.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Reply to Slack mentions", () => { const mention = slack.onAppMention() slack.replyToThread({ conversation: mention.conversationId, threadTimestamp: mention.message.transform((message) => message.timestamp), text: "I received your request.", }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `conversation` | `string` | Yes | None | Conversation containing the parent. | | `threadTimestamp` | `string` | Yes | None | Parent message timestamp. | | `replyBroadcast` | `boolean` | No | `false` | Also shows the reply in the conversation timeline. | | `text` | `string` | One content field | None | Plain-text content or fallback. | | `blocks` | `Record[]` | One content field | None | Up to 50 Block Kit blocks. | | `attachments` | `Record[]` | One content field | None | Up to 100 legacy attachments. | | `unfurlLinks` / `unfurlMedia` | `boolean` | No | Slack default | Link and media unfurl behavior. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"slack">` | No | Project default | Slack binding. | ## Output Returns the reply's `conversationId`, `timestamp`, and `message`. The returned timestamp identifies the reply. Continue using the parent timestamp to address the thread. # Schedule message Source: https://docs.automate.ax/reference/integrations/slack/actions/schedule-message Schedule a Slack message for future delivery. `slack.scheduleMessage` schedules a top-level message or thread reply up to 120 days ahead. ## Example ```ts automations/schedule-slack-message.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Schedule Slack reminder", () => { slack.scheduleMessage({ conversation: "C01234567", postAt: new Date("2026-08-12T16:00:00Z"), text: "Time for the weekly review.", }) }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `conversation` | `string` | Yes | Conversation that receives the message. | | `postAt` | `Date \| number` | Yes | Delivery time as a Date or Unix timestamp in seconds. The action rounds dates down to whole seconds. | | `threadTimestamp` | `string` | No | Parent timestamp for a scheduled thread reply. | | `text`, `blocks`, `attachments` | Slack message content | At least one | Message content. | | `unfurlLinks`, `unfurlMedia` | `boolean` | No | Slack unfurl behavior. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"slack">` | No | Slack binding. | ## Output Returns `conversationId`, `postAt`, `scheduledMessageId`, and Slack's optional `message` preview. Save `scheduledMessageId` with `conversationId`. [Cancel scheduled message](/reference/integrations/slack/actions/cancel-scheduled-message) needs both. # Send ephemeral message Source: https://docs.automate.ax/reference/integrations/slack/actions/send-ephemeral-message Send a Slack message visible only to one channel member. `slack.sendEphemeralMessage` sends a non-persistent message that only one member can see. ## Example ```ts automations/send-ephemeral-message.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Send ephemeral message", () => { onDashboardRun({ title: "Send ephemeral message" }) slack.sendEphemeralMessage({ conversationId: "C01234567", userId: "U01234567", text: "This approval is assigned to you.", }) }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `conversationId` | `string` | Yes | Destination conversation ID. | | `userId` | `string` | Yes | Member who can see the message. | | `text`, `blocks`, or `attachments` | Message content | Yes | Ephemeral message content. | | `threadTimestamp` | `string` | No | Parent message timestamp. | ## Output Returns the `conversationId` and Slack `timestamp` for the ephemeral delivery. Requires `chat:write`; the recipient must belong to the conversation. # Send message Source: https://docs.automate.ax/reference/integrations/slack/actions/send-message Send a text, Block Kit, or legacy attachment message to Slack. `slack.sendMessage` posts a top-level message to a channel or direct conversation. Provide text, Block Kit `blocks`, legacy `attachments`, or a combination. ## Example ```ts automations/post-slack-update.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Post Slack update", () => { onDashboardRun({ title: "Post Slack update" }) slack.sendMessage({ conversation: "C01234567", text: "Deployment completed successfully.", blocks: [ { type: "section", text: { type: "mrkdwn", text: "*Deployment completed* :white_check_mark:", }, }, ], unfurlLinks: false, }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `conversation` | `string` | Yes | None | Conversation ID or accepted Slack destination. The action removes a leading `#`. | | `text` | `string` | One content field | None | Plain text or accessibility fallback. | | `blocks` | `Record[]` | One content field | None | Up to 50 Block Kit blocks. | | `attachments` | `Record[]` | One content field | None | Up to 100 legacy attachments. | | `unfurlLinks` | `boolean` | No | Slack default | Whether Slack parses and unfurls links. | | `unfurlMedia` | `boolean` | No | Slack default | Whether Slack unfurls media. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"slack">` | No | Project default | Slack workspace binding. | ## Output Returns `conversationId`, the stable message `timestamp`, and `message` with Slack's text, content, author, thread, reaction, and file metadata. Keep both identifiers for updates, deletion, reactions, or replies. The bot needs access to the destination. Supplying `text` alongside blocks gives notifications and assistive technology a useful fallback. # Send message to public channel Source: https://docs.automate.ax/reference/integrations/slack/actions/send-message-to-public-channel Send a Slack message to a public channel without joining it first. `slack.sendMessageToPublicChannel` posts to a public channel even when the installed bot is not a member. Prefer `slack.sendMessage` when the bot already belongs to the destination because it needs only `chat:write`. ## Example ```ts automations/post-public-slack-update.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Post public Slack update", () => { onDashboardRun({ title: "Post public Slack update" }) slack.sendMessageToPublicChannel({ channelId: "C01234567", text: "Deployment completed successfully.", }) }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `channelId` | `string` | Yes | Stable public-channel ID. | | `text` | `string` | One content field | Plain text or accessibility fallback. | | `blocks` | `Record[]` | One content field | Up to 50 Block Kit blocks. | | `attachments` | `Record[]` | One content field | Up to 100 legacy attachments. | | `unfurlLinks` | `boolean` | No | Whether Slack unfurls links. | | `unfurlMedia` | `boolean` | No | Whether Slack unfurls media. | ## Output Returns `conversationId`, the stable message `timestamp`, and Slack's normalized `message` object. This action requires both `chat:write` and `chat:write.public`. # Set canvas access Source: https://docs.automate.ax/reference/integrations/slack/actions/set-canvas-access Grant users or channels access to a Slack Canvas. `slack.setCanvasAccess` grants read, write, or owner access to a Canvas. Owner access is available only for users, not channels. ## Example ```ts automations/share-slack-canvas.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Share launch canvas", () => { onDashboardRun({ title: "Share launch canvas" }) slack.setCanvasAccess({ accessLevel: "write", canvasId: "F01234567", subject: { ids: ["C01234567"], type: "channels" }, }) }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `canvasId` | `string` | Yes | Stable Slack Canvas ID. | | `accessLevel` | `"read" \| "write" \| "owner"` | Yes | Access to grant. `owner` requires a user subject. | | `subject` | `{ type: "channels" \| "users"; ids: string[] }` | Yes | One or more channels or users receiving access. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"slack">` | No | Slack binding. | ## Output Returns no value after Slack updates access. # Set List access Source: https://docs.automate.ax/reference/integrations/slack/actions/set-list-access Grant channel or user access to a Slack List. `slack.setListAccess` grants `read`, `write`, or user-only `owner` access. ```ts automations/share-release-list.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Share release List", () => { onDashboardRun({ title: "Share release List" }) slack.setListAccess({ listId: "F012ABCD3EF", accessLevel: "write", subject: { type: "channels", ids: ["C012ABCD3EF"] }, }) }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `listId` | `string` | Yes | List whose access changes. | | `accessLevel` | `"read" \| "write" \| "owner"` | Yes | Access to grant. Only users can become owners. | | `subject` | `{ type: "channels" \| "users"; ids: string[] }` | Yes | One or more channels or users. | ## Output Returns `Signal`. # Set private channel purpose Source: https://docs.automate.ax/reference/integrations/slack/actions/set-private-channel-purpose Set a private Slack channel's description. `slack.setPrivateChannelPurpose` replaces a private channel's plain-text purpose. ## Example ```ts automations/set-private-channel-purpose.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Set private channel purpose", () => { onDashboardRun({ title: "Set private channel purpose" }) slack.setPrivateChannelPurpose({ channelId: "G01234567", purpose: "Private incident coordination", }) }) ``` ## Inputs Requires `channelId` and the new `purpose`. Pass an empty string to clear it. ## Output Returns the updated conversation. Requires either `groups:write` or `groups:write.topic`. # Set private channel topic Source: https://docs.automate.ax/reference/integrations/slack/actions/set-private-channel-topic Set a private Slack channel's topic. `slack.setPrivateChannelTopic` replaces a private channel's plain-text topic. ## Example ```ts automations/set-private-channel-topic.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Set private channel topic", () => { onDashboardRun({ title: "Set private channel topic" }) slack.setPrivateChannelTopic({ channelId: "G01234567", topic: "Severity 1 response", }) }) ``` ## Inputs Requires `channelId` and the new `topic`. Pass an empty string to clear it. ## Output Returns the updated conversation. Requires either `groups:write` or `groups:write.topic`. # Set public channel purpose Source: https://docs.automate.ax/reference/integrations/slack/actions/set-public-channel-purpose Set a public Slack channel's description. `slack.setPublicChannelPurpose` replaces a public channel's plain-text purpose. ## Example ```ts automations/set-public-channel-purpose.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Set public channel purpose", () => { onDashboardRun({ title: "Set public channel purpose" }) slack.setPublicChannelPurpose({ channelId: "C01234567", purpose: "Deployment announcements and follow-up", }) }) ``` ## Inputs Requires `channelId` and the new `purpose`. Pass an empty string to clear it. ## Output Returns the updated conversation. Requires either `channels:manage` or `channels:write.topic`. # Set public channel topic Source: https://docs.automate.ax/reference/integrations/slack/actions/set-public-channel-topic Set a public Slack channel's topic. `slack.setPublicChannelTopic` replaces a public channel's plain-text topic. ## Example ```ts automations/set-public-channel-topic.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Set public channel topic", () => { onDashboardRun({ title: "Set public channel topic" }) slack.setPublicChannelTopic({ channelId: "C01234567", topic: "Current release: v2.4.0", }) }) ``` ## Inputs Requires `channelId` and the new `topic`. Pass an empty string to clear it. ## Output Returns the updated conversation. Requires either `channels:manage` or `channels:write.topic`. # Start List download Source: https://docs.automate.ax/reference/integrations/slack/actions/start-list-download Start an asynchronous CSV or JSON export of a Slack List. `slack.startListDownload` starts an export job. Use `slack.getListDownload` with the returned job ID. ```ts automations/export-release-list.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Export release List", () => { onDashboardRun({ title: "Export release List" }) slack.startListDownload({ listId: "F012ABCD3EF", format: "json", includeThreads: true, includeAttachments: true, }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `listId` | `string` | Yes | None | List to export. | | `format` | `"csv" \| "json"` | No | `csv` | JSON preserves hierarchy and supports threads and attachments. | | `includeArchived` | `boolean` | No | Slack default | Includes archived items. | | `includeThreads` | `boolean` | No | Slack default | Includes item threads; JSON only. | | `includeAttachments` | `boolean` | No | Slack default | Includes attachment metadata and paths; JSON only. | ## Output Returns `{ jobId: string }`. # Unpin message Source: https://docs.automate.ax/reference/integrations/slack/actions/unpin-message Remove a Slack message from its conversation's pins. `slack.unpinMessage` removes one pinned message. ## Example ```ts automations/unpin-message.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Unpin message", () => { onDashboardRun({ title: "Unpin message" }) slack.unpinMessage({ conversationId: "C01234567", timestamp: "1700000000.000001", }) }) ``` ## Inputs Requires the containing `conversationId` and message `timestamp`. ## Output Completes without a value. Requires `pins:write` and access to the conversation. # Update bookmark Source: https://docs.automate.ax/reference/integrations/slack/actions/update-bookmark Update a Slack conversation bookmark. `slack.updateBookmark` changes an existing link bookmark. ## Example ```ts automations/update-bookmark.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Update bookmark", () => { onDashboardRun({ title: "Update bookmark" }) slack.updateBookmark({ conversationId: "C01234567", bookmarkId: "Bk01234567", title: "Updated runbook", }) }) ``` ## Inputs Requires `conversationId` and `bookmarkId`. Supply one or more of `title`, HTTP or HTTPS `url`, and `emoji` to change them. ## Output Returns the updated bookmark. Requires `bookmarks:write`. # Update List Source: https://docs.automate.ax/reference/integrations/slack/actions/update-list Update a Slack List's name, description, or task mode. `slack.updateList` updates a List on a paid Slack workspace. ```ts automations/rename-release-list.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Rename release List", () => { onDashboardRun({ title: "Rename release List" }) slack.updateList({ listId: "F012ABCD3EF", name: "Product launches" }) }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `listId` | `string` | Yes | Stable Slack List ID. | | `name` | `string` | No | New List name. | | `descriptionBlocks` | Slack rich-text blocks | No | New rich-text description. | | `todoMode` | `boolean` | No | Enables or disables Slack's task fields. | Provide at least one property to update. ## Output Returns `Signal`. # Update List items Source: https://docs.automate.ax/reference/integrations/slack/actions/update-list-items Update one or more cells across Slack List items. `slack.updateListItems` updates several cells in one Slack Lists API request. ```ts automations/complete-list-item.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Complete List item", () => { onDashboardRun({ title: "Complete List item" }) slack.updateListItems({ listId: "F012ABCD3EF", cells: [ { rowId: "Rec012ABCD3E", columnId: "ColComplete", type: "checkbox", value: true, }, ], }) }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `listId` | `string` | Yes | List containing the records. | | `cells` | `(SlackListItemField & { rowId: string })[]` | Yes | One or more typed cell updates. | Cell field types and values match [Create List item](/reference/integrations/slack/actions/create-list-item). ## Output Returns `Signal`. # Update message Source: https://docs.automate.ax/reference/integrations/slack/actions/update-message Update a message posted by the installed Slack bot. `slack.updateMessage` changes a bot-authored message. Slack doesn't let the bot edit messages posted by other users or apps. ## Example ```ts automations/update-slack-message.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Update Slack status", () => { slack.updateMessage({ conversationId: "C01234567", timestamp: "1700000000.000001", text: "Deployment finished.", }) }) ``` ## Inputs | Input | Type | Required | Description | | - | - | - | - | | `conversationId` | `string` | Yes | Conversation containing the message. | | `timestamp` | `string` | Yes | Timestamp identifying the message. | | `text`, `blocks`, `attachments` | Slack message content | At least one | Replacement content. Blocks have a maximum of 50, and attachments have a maximum of 100. | | `unfurlLinks`, `unfurlMedia` | `boolean` | No | Slack unfurl behavior. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"slack">` | No | Slack binding. Defaults to the project binding. | ## Output Returns the message's `conversationId`, `timestamp`, and `message`. Supplying `text` without `blocks` removes existing blocks. Pass an empty blocks array when you intentionally want to clear blocks while retaining other content. # Update user group Source: https://docs.automate.ax/reference/integrations/slack/actions/update-user-group Update a Slack user group's properties and channel preferences. `slack.updateUserGroup` changes one or more user-group properties. ## Example ```ts automations/update-user-group.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Update user group", () => { onDashboardRun({ title: "Update user group" }) slack.updateUserGroup({ userGroupId: "S01234567", description: "Primary incident responders", }) }) ``` ## Inputs Requires `userGroupId`. Optional changes are `name`, `handle`, `description`, `channelIds`, `additionalChannelIds`, `enableSection`, and `includeCount`. ## Output Returns the updated user group. Requires `usergroups:write`, a paid Slack plan, and sufficient workspace permissions. # Update user group members Source: https://docs.automate.ax/reference/integrations/slack/actions/update-user-group-members Replace all members of a Slack user group. `slack.updateUserGroupMembers` replaces the group's complete membership list. ## Example ```ts automations/update-user-group-members.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Update user group members", () => { onDashboardRun({ title: "Update user group members" }) slack.updateUserGroupMembers({ userGroupId: "S01234567", userIds: ["U01234567", "U07654321"], }) }) ``` ## Inputs Requires `userGroupId` and a non-empty `userIds` array. `includeCount` asks Slack to include the resulting member count. Slack does not allow this method to remove every member; disable the group instead. ## Output Returns the updated user group. Guests and bot users cannot be members. Requires `usergroups:write` and sufficient workspace permissions. # Upload file Source: https://docs.automate.ax/reference/integrations/slack/actions/upload-file Upload a file and optionally share it to Slack. `slack.uploadFile` uses Slack's external upload flow. Omit `conversationId` to keep the file private to the app, or set it to share the file in a conversation or thread. ## Example ```ts automations/upload-slack-report.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Upload Slack report", () => { onDashboardRun({ title: "Upload Slack report" }) slack.uploadFile({ conversationId: "C01234567", file: new File(["Revenue: 42"], "report.txt", { type: "text/plain" }), initialComment: "The latest report is ready.", title: "Daily report", }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `file` | `File` | Yes | None | File bytes, media type, size, and default name. | | `filename` | `string` | No | `file.name` | Filename shown by Slack. | | `title` | `string` | No | None | Human-readable title. | | `altText` | `string` | No | None | Accessible image description, up to 1,000 characters. | | `snippetType` | `string` | No | None | Syntax-highlighting type for text snippets. | | `conversationId` | `string` | No | Private upload | Conversation in which to share the file. | | `threadTimestamp` | `string` | No | None | Parent timestamp when sharing into a thread. | | `initialComment` | `string` | No | None | Message posted with a shared file. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"slack">` | No | Project default | Slack binding. | ## Output Returns a Slack file with `id` and optional or `null` `name`, plus `title`, `mimeType`, `fileType`, `size`, `permalink`, authenticated `urlPrivate`, uploader `userId`, creation time, and sharing `channelIds` when Slack supplies them. The action fails if Slack can't issue an upload ticket, the file transfer returns a non-success HTTP status, or Slack completes the flow without a file. # Slack Source: https://docs.automate.ax/reference/integrations/slack/index Manage Slack messages, channels, canvases, bookmarks, reactions, and members, or react to workspace events. ## Exports ```ts theme={null} import { slack, slackAccount } from "automate.ax/slack" ``` * `slack` contains the packaged Slack actions and triggers. * `slackAccount("name")` selects a named Slack connection. ## Triggers * [On app mention](/reference/integrations/slack/triggers/on-app-mention) * [On channel created](/reference/integrations/slack/triggers/on-channel-created) * [On channel member joined](/reference/integrations/slack/triggers/on-channel-member-joined) * [On channel member left](/reference/integrations/slack/triggers/on-channel-member-left) * [On channel renamed](/reference/integrations/slack/triggers/on-channel-renamed) * [On channel shared](/reference/integrations/slack/triggers/on-channel-shared) * [On channel unshared](/reference/integrations/slack/triggers/on-channel-unshared) * [On event](/reference/integrations/slack/triggers/on-event) * [On file created](/reference/integrations/slack/triggers/on-file-created) * [On file deleted](/reference/integrations/slack/triggers/on-file-deleted) * [On file shared](/reference/integrations/slack/triggers/on-file-shared) * [On message changed](/reference/integrations/slack/triggers/on-message-changed) * [On message deleted](/reference/integrations/slack/triggers/on-message-deleted) * [On message posted](/reference/integrations/slack/triggers/on-message-posted) * [On pin added](/reference/integrations/slack/triggers/on-pin-added) * [On pin removed](/reference/integrations/slack/triggers/on-pin-removed) * [On reaction added](/reference/integrations/slack/triggers/on-reaction-added) * [On reaction event](/reference/integrations/slack/triggers/on-reaction-event) * [On reaction removed](/reference/integrations/slack/triggers/on-reaction-removed) * [On thread reply posted](/reference/integrations/slack/triggers/on-thread-reply-posted) * [On workspace member changed](/reference/integrations/slack/triggers/on-workspace-member-changed) * [On workspace member joined](/reference/integrations/slack/triggers/on-workspace-member-joined) ## Actions * [Add bookmark](/reference/integrations/slack/actions/add-bookmark) * [Add reaction](/reference/integrations/slack/actions/add-reaction) * [Archive private channel](/reference/integrations/slack/actions/archive-private-channel) * [Archive public channel](/reference/integrations/slack/actions/archive-public-channel) * [Cancel scheduled message](/reference/integrations/slack/actions/cancel-scheduled-message) * [Close group direct message](/reference/integrations/slack/actions/close-group-direct-message) * [Create canvas](/reference/integrations/slack/actions/create-canvas) * [Create List item](/reference/integrations/slack/actions/create-list-item) * [Create List](/reference/integrations/slack/actions/create-list) * [Create private channel](/reference/integrations/slack/actions/create-private-channel) * [Create public channel](/reference/integrations/slack/actions/create-public-channel) * [Create user group](/reference/integrations/slack/actions/create-user-group) * [Delete canvas access](/reference/integrations/slack/actions/delete-canvas-access) * [Delete canvas](/reference/integrations/slack/actions/delete-canvas) * [Delete file](/reference/integrations/slack/actions/delete-file) * [Delete List access](/reference/integrations/slack/actions/delete-list-access) * [Delete List item](/reference/integrations/slack/actions/delete-list-item) * [Delete List items](/reference/integrations/slack/actions/delete-list-items) * [Delete message](/reference/integrations/slack/actions/delete-message) * [Disable user group](/reference/integrations/slack/actions/disable-user-group) * [Edit canvas](/reference/integrations/slack/actions/edit-canvas) * [Enable user group](/reference/integrations/slack/actions/enable-user-group) * [Find conversation](/reference/integrations/slack/actions/find-conversation) * [Find member by email](/reference/integrations/slack/actions/find-member-by-email) * [Get conversation history](/reference/integrations/slack/actions/get-conversation-history) * [Get conversation](/reference/integrations/slack/actions/get-conversation) * [Get file](/reference/integrations/slack/actions/get-file) * [Get List download](/reference/integrations/slack/actions/get-list-download) * [Get List item](/reference/integrations/slack/actions/get-list-item) * [Get member presence](/reference/integrations/slack/actions/get-member-presence) * [Get member profile](/reference/integrations/slack/actions/get-member-profile) * [Get member](/reference/integrations/slack/actions/get-member) * [Get message permalink](/reference/integrations/slack/actions/get-message-permalink) * [Get message reactions](/reference/integrations/slack/actions/get-message-reactions) * [Get thread replies](/reference/integrations/slack/actions/get-thread-replies) * [Get workspace identity](/reference/integrations/slack/actions/get-workspace-identity) * [Get workspace](/reference/integrations/slack/actions/get-workspace) * [Invite users to private channel](/reference/integrations/slack/actions/invite-users-to-private-channel) * [Invite users to public channel](/reference/integrations/slack/actions/invite-users-to-public-channel) * [Join public channel](/reference/integrations/slack/actions/join-public-channel) * [Leave private channel](/reference/integrations/slack/actions/leave-private-channel) * [Leave public channel](/reference/integrations/slack/actions/leave-public-channel) * [List bookmarks](/reference/integrations/slack/actions/list-bookmarks) * [List conversation members](/reference/integrations/slack/actions/list-conversation-members) * [List custom emoji](/reference/integrations/slack/actions/list-custom-emoji) * [List direct messages](/reference/integrations/slack/actions/list-direct-messages) * [List files](/reference/integrations/slack/actions/list-files) * [List group direct messages](/reference/integrations/slack/actions/list-group-direct-messages) * [Get Slack List items](/reference/integrations/slack/actions/list-list-items) * [List members](/reference/integrations/slack/actions/list-members) * [List pinned messages](/reference/integrations/slack/actions/list-pinned-messages) * [List private channels](/reference/integrations/slack/actions/list-private-channels) * [List public channels](/reference/integrations/slack/actions/list-public-channels) * [List scheduled messages](/reference/integrations/slack/actions/list-scheduled-messages) * [List user group members](/reference/integrations/slack/actions/list-user-group-members) * [List user groups](/reference/integrations/slack/actions/list-user-groups) * [List user reactions](/reference/integrations/slack/actions/list-user-reactions) * [Look up canvas sections](/reference/integrations/slack/actions/lookup-canvas-sections) * [Open direct message](/reference/integrations/slack/actions/open-direct-message) * [Open group direct message](/reference/integrations/slack/actions/open-group-direct-message) * [Pin message](/reference/integrations/slack/actions/pin-message) * [Remove bookmark](/reference/integrations/slack/actions/remove-bookmark) * [Remove reaction](/reference/integrations/slack/actions/remove-reaction) * [Remove user from private channel](/reference/integrations/slack/actions/remove-user-from-private-channel) * [Remove user from public channel](/reference/integrations/slack/actions/remove-user-from-public-channel) * [Rename private channel](/reference/integrations/slack/actions/rename-private-channel) * [Rename public channel](/reference/integrations/slack/actions/rename-public-channel) * [Reply to thread](/reference/integrations/slack/actions/reply-to-thread) * [Schedule message](/reference/integrations/slack/actions/schedule-message) * [Send ephemeral message](/reference/integrations/slack/actions/send-ephemeral-message) * [Send message to public channel](/reference/integrations/slack/actions/send-message-to-public-channel) * [Send message](/reference/integrations/slack/actions/send-message) * [Set canvas access](/reference/integrations/slack/actions/set-canvas-access) * [Set List access](/reference/integrations/slack/actions/set-list-access) * [Set private channel purpose](/reference/integrations/slack/actions/set-private-channel-purpose) * [Set private channel topic](/reference/integrations/slack/actions/set-private-channel-topic) * [Set public channel purpose](/reference/integrations/slack/actions/set-public-channel-purpose) * [Set public channel topic](/reference/integrations/slack/actions/set-public-channel-topic) * [Start List download](/reference/integrations/slack/actions/start-list-download) * [Unpin message](/reference/integrations/slack/actions/unpin-message) * [Update bookmark](/reference/integrations/slack/actions/update-bookmark) * [Update List items](/reference/integrations/slack/actions/update-list-items) * [Update List](/reference/integrations/slack/actions/update-list) * [Update message](/reference/integrations/slack/actions/update-message) * [Update user group members](/reference/integrations/slack/actions/update-user-group-members) * [Update user group](/reference/integrations/slack/actions/update-user-group) * [Upload file](/reference/integrations/slack/actions/upload-file) # On app mention Source: https://docs.automate.ax/reference/integrations/slack/triggers/on-app-mention Run an automation when a message mentions the installed Slack bot. `slack.onAppMention` emits messages that directly mention the installed bot. ## Example ```ts automations/answer-slack-mention.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Answer Slack mention", () => { const mention = slack.onAppMention() slack.replyToThread({ conversation: mention.conversationId, text: "I saw your mention.", threadTimestamp: mention.transform((message) => message.timestamp), }) }) ``` ## Options | Option | Type | Required | Default | Description | | - | - | - | - | - | | `account` | `string \| IntegrationAccountReference<"slack">` | No | Project default | Static Slack workspace binding to watch. | ## Trigger data Returns message fields including `text`, `timestamp`, and `type: "app_mention"`. Author, thread, Block Kit, attachment, file, reaction, reply, app, bot, and subtype fields appear when Slack supplies them. Conversation, event timestamp, and workspace metadata are `conversationId`, optional `conversationType`, `eventTimestamp`, and `workspaceId`. `event` contains the original Slack event. A runtime signal can't choose the account. Slack only delivers mentions visible to the installed app. # On channel created Source: https://docs.automate.ax/reference/integrations/slack/triggers/on-channel-created Run an automation when a public Slack channel is created. `slack.onChannelCreated` emits `channel_created` events for public channels visible to the bot. ```ts automations/watch-new-slack-channels.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Watch new Slack channels", () => { const channel = slack.onChannelCreated() // Use channel.channelId to apply the new Slack channel's defaults. }) ``` The result includes `channelId`, `name`, `createdAt`, `creatorId`, the typed original `event`, and the complete `envelope`. # On channel member joined Source: https://docs.automate.ax/reference/integrations/slack/triggers/on-channel-member-joined Run an automation when a member joins a Slack conversation. `slack.onChannelMemberJoined` emits `member_joined_channel` events for conversations visible to the installed bot. ```ts automations/welcome-slack-members.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Welcome Slack members", () => { const membership = slack.onChannelMemberJoined() // Use membership.userId to welcome the member in this Slack channel. }) ``` The result includes `userId`, `conversationId`, `conversationTypeCode` (`"C"` or `"G"`), optional `inviterId` and `enterpriseId`, the typed original `event`, and the complete `envelope`. Slack's membership event does not distinguish public from private conversations; use `slack.getSlackConversation` when that distinction matters. # On channel member left Source: https://docs.automate.ax/reference/integrations/slack/triggers/on-channel-member-left Run an automation when a member leaves a Slack conversation. `slack.onChannelMemberLeft` emits `member_left_channel` events for conversations visible to the installed bot. ```ts automations/watch-slack-membership.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Watch Slack membership", () => { const membership = slack.onChannelMemberLeft() // Use membership.userId to revoke channel-specific access. }) ``` The result includes `userId`, `conversationId`, `conversationTypeCode` (`"C"` or `"G"`), the typed original `event`, and the complete `envelope`. Slack's membership event does not distinguish public from private conversations; use `slack.getSlackConversation` when that distinction matters. # On channel renamed Source: https://docs.automate.ax/reference/integrations/slack/triggers/on-channel-renamed Run an automation when a public Slack channel is renamed. `slack.onChannelRenamed` emits `channel_rename` events for public channels visible to the bot. ```ts automations/watch-slack-channel-names.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Watch Slack channel names", () => { const channel = slack.onChannelRenamed() // Use channel.channelId to update the stored Slack channel name. }) ``` The result includes `channelId`, `name`, `createdAt`, the typed original `event`, and the complete `envelope`. # On channel shared Source: https://docs.automate.ax/reference/integrations/slack/triggers/on-channel-shared Run an automation when a Slack channel is externally shared. `slack.onChannelShared` emits `channel_shared` events when a channel is connected to another Slack workspace. ```ts automations/watch-shared-slack-channels.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Watch shared Slack channels", () => { const channel = slack.onChannelShared() // Use channel.connectedWorkspaceId to grant cross-workspace access. }) ``` The result includes `channelId`, `connectedWorkspaceId`, the typed original `event`, and the complete `envelope`. # On channel unshared Source: https://docs.automate.ax/reference/integrations/slack/triggers/on-channel-unshared Run an automation when a Slack channel is externally unshared. `slack.onChannelUnshared` emits `channel_unshared` events when a channel is disconnected from another Slack workspace. ```ts automations/watch-unshared-slack-channels.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Watch unshared Slack channels", () => { const channel = slack.onChannelUnshared() // Use channel.previouslyConnectedWorkspaceId to revoke cross-workspace access. }) ``` The result includes `channelId`, `previouslyConnectedWorkspaceId`, `isExternallyShared`, the typed original `event`, and the complete `envelope`. # On event Source: https://docs.automate.ax/reference/integrations/slack/triggers/on-event Run an automation for any supported Slack event. `slack.onEvent` is the broad Events API escape hatch. It emits app mentions, ordinary messages and replies, message changes and deletions, reactions, conversation membership, files, workspace members, public channels, shared channels, and pins visible to the installed bot. ```ts automations/log-slack-events.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Log Slack events", () => { const event = slack.onEvent() // Use event.event.type to route supported Slack event payloads. }) ``` The result includes `workspaceId`, `eventTimestamp`, the typed provider `event`, and the complete Events API `envelope`. Use a semantic Slack trigger when only one event family should activate the automation. # On file created Source: https://docs.automate.ax/reference/integrations/slack/triggers/on-file-created Run an automation when Slack creates a file. `slack.onFileCreated` emits `file_created` events visible to the installed bot. ```ts automations/watch-slack-files.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Watch Slack files", () => { const file = slack.onFileCreated() // Use file.fileId to fetch or classify the new Slack file. }) ``` The result includes `fileId`, `userId`, event and workspace timestamps, the typed original `event`, and the complete `envelope`. # On file deleted Source: https://docs.automate.ax/reference/integrations/slack/triggers/on-file-deleted Run an automation when a Slack file is deleted. `slack.onFileDeleted` emits `file_deleted` events. Slack does not emit this event for files removed automatically by a workspace retention policy. ```ts automations/watch-deleted-slack-files.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Watch deleted Slack files", () => { const file = slack.onFileDeleted() // Use file.fileId to remove the deleted file from a Slack index. }) ``` The result includes `fileId`, the typed original `event`, and the complete `envelope`. # On file shared Source: https://docs.automate.ax/reference/integrations/slack/triggers/on-file-shared Run an automation when a Slack file is shared. `slack.onFileShared` emits `file_shared` events when a visible file is shared into a conversation. ```ts automations/watch-shared-slack-files.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Watch shared Slack files", () => { const file = slack.onFileShared() // Use file.channelId and file.fileId to index the shared Slack file. }) ``` The result includes `fileId`, `channelId`, `userId`, the typed original `event`, and the complete `envelope`. # On message changed Source: https://docs.automate.ax/reference/integrations/slack/triggers/on-message-changed Run an automation when a Slack message is edited. `slack.onMessageChanged` emits Slack `message_changed` events visible to the bot. ```ts automations/watch-slack-edits.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Watch Slack edits", () => { const change = slack.onMessageChanged() // Compare change.previousMessage with change.message to update a mirror. }) ``` The result includes the current `message`, `previousMessage`, conversation metadata, the typed original `event`, and the complete `envelope`. # On message deleted Source: https://docs.automate.ax/reference/integrations/slack/triggers/on-message-deleted Run an automation when a Slack message is deleted. `slack.onMessageDeleted` emits Slack `message_deleted` events visible to the bot. ```ts automations/watch-slack-deletes.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Watch Slack deletes", () => { const deletion = slack.onMessageDeleted() // Use deletion.deletedTimestamp to remove the Slack message from a mirror. }) ``` The result includes `deletedTimestamp`, optional `previousMessage`, conversation metadata, the typed original `event`, and the complete `envelope`. # On message posted Source: https://docs.automate.ax/reference/integrations/slack/triggers/on-message-posted Run an automation when someone posts a visible Slack message. `slack.onMessagePosted` emits top-level, ordinary messages authored by people and visible to the bot across public channels, private channels, DMs, and group DMs. It excludes thread replies, bot or app messages, edits, deletions, and Slack system-message subtypes. ## Example ```ts automations/react-to-new-slack-message.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("React to Slack messages", () => { const event = slack.onMessagePosted() slack.addReaction({ conversationId: event.conversationId, emoji: "eyes", timestamp: event.transform((message) => message.timestamp), }) }) ``` ## Options `account?: string | IntegrationAccountReference<"slack">` statically selects the workspace and defaults to the project's Slack binding. It can't be a signal. ## Trigger data Returns message fields including optional `text`, `timestamp`, `userId`, and `type: "message"`. Conversation, event timestamp, and workspace metadata are `conversationId`, `conversationType`, `eventTimestamp`, and `workspaceId`. `conversationType` is `"channel"`, `"group"`, `"im"`, or `"mpim"`. `event` contains the typed original Slack event and `envelope` contains the complete Events API callback. Messages from a conversation outside the bot's visibility don't qualify. Use `slack.onThreadReplyPosted` for replies and `slack.onEvent` when you need every supported Slack event family. # On pin added Source: https://docs.automate.ax/reference/integrations/slack/triggers/on-pin-added Run an automation when an item is pinned in Slack. `slack.onPinAdded` emits `pin_added` events for conversations visible to the installed bot. ```ts automations/watch-slack-pins.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Watch Slack pins", () => { const pin = slack.onPinAdded() // Use pin.item to add the pinned item to a Slack archive. }) ``` The result includes `conversationId`, `userId`, the typed provider `item` and `event`, and the complete `envelope`. Slack may also include pin-count and pinned-item metadata on the provider event. # On pin removed Source: https://docs.automate.ax/reference/integrations/slack/triggers/on-pin-removed Run an automation when an item is unpinned in Slack. `slack.onPinRemoved` emits `pin_removed` events for conversations visible to the installed bot. ```ts automations/watch-removed-slack-pins.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Watch removed Slack pins", () => { const pin = slack.onPinRemoved() // Use pin.item to remove the pinned item from a Slack archive. }) ``` The result includes `conversationId`, `userId`, the typed provider `item` and `event`, and the complete `envelope`. Slack may also include `hasPins`, pin-count, and pinned-item metadata. # On reaction added Source: https://docs.automate.ax/reference/integrations/slack/triggers/on-reaction-added Run an automation when someone adds a Slack emoji reaction. `slack.onReactionAdded` emits reactions added to Slack items visible to the installed bot. ## Example ```ts automations/handle-slack-approval.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Handle Slack approval", () => { const reaction = slack.onReactionAdded() reaction.transform(({ reaction, item }) => ({ approved: reaction === "white_check_mark", item, })) }) ``` ## Options `account?: string | IntegrationAccountReference<"slack">` statically selects the workspace and defaults to the project's Slack binding. ## Trigger data Returns `eventTimestamp`, `workspaceId`, `reaction`, `userId`, optional `itemUserId`, and `item`. The `reaction` value doesn't include colons. * `{ type: "message"; conversationId; messageTimestamp; conversationType? }` * `{ type: "file"; fileId }` * `{ type: "fileComment"; fileId; fileCommentId }` `item.type` identifies which item fields are present. # On reaction event Source: https://docs.automate.ax/reference/integrations/slack/triggers/on-reaction-event Run an automation when a Slack reaction is added or removed. `slack.onReactionEvent` emits both `reaction_added` and `reaction_removed` callbacks for visible messages, files, and file comments. ```ts automations/watch-slack-reactions.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Watch Slack reactions", () => { const reaction = slack.onReactionEvent() // Use reaction.item to update the Slack reaction's mirrored record. }) ``` The typed `event.type` distinguishes additions from removals. Use `slack.onReactionAdded` or `slack.onReactionRemoved` when only one lifecycle should activate the automation. # On reaction removed Source: https://docs.automate.ax/reference/integrations/slack/triggers/on-reaction-removed Run an automation when someone removes a Slack emoji reaction. `slack.onReactionRemoved` emits reactions removed from visible Slack messages, files, or file comments. ## Example ```ts automations/handle-slack-revocation.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Handle removed Slack approval", () => { const event = slack.onReactionRemoved() event.transform(({ item, reaction, userId }) => ({ item, reaction, userId })) }) ``` ## Options `account?: string | IntegrationAccountReference<"slack">` is a static workspace binding and defaults to the project binding. Signals can't select trigger accounts. ## Trigger data Returns `eventTimestamp`, `workspaceId`, emoji `reaction`, acting `userId`, optional `itemUserId`, and `item`. The value of `item.type` distinguishes these items: * Message with `conversationId`, `messageTimestamp`, and optional `conversationType` * File with `fileId` * File comment with `fileId` and `fileCommentId` # On thread reply posted Source: https://docs.automate.ax/reference/integrations/slack/triggers/on-thread-reply-posted Run an automation when someone replies in a Slack thread. `slack.onThreadReplyPosted` emits ordinary user-authored messages whose `threadTimestamp` differs from their own `timestamp`. Bot, app, system, edit, and delete messages are excluded. ```ts automations/watch-slack-replies.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Watch Slack replies", () => { const reply = slack.onThreadReplyPosted() // Use reply.threadTimestamp to attach the reply to its Slack thread. }) ``` The result includes optional `text`, `timestamp`, `threadTimestamp`, `userId`, literal `conversationType`, the typed original `event`, and the complete `envelope`. # On workspace member changed Source: https://docs.automate.ax/reference/integrations/slack/triggers/on-workspace-member-changed Run an automation when a Slack workspace member changes. `slack.onWorkspaceMemberChanged` emits Slack `user_change` events for profile and account changes. ```ts automations/sync-slack-members.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Sync Slack members", () => { const event = slack.onWorkspaceMemberChanged() // Use event.member.deleted to deprovision removed Slack members. }) ``` The result includes normalized `member` identity and profile fields, the typed original `event`, and the complete `envelope`. Email is present only when the app also has `users:read.email`. # On workspace member joined Source: https://docs.automate.ax/reference/integrations/slack/triggers/on-workspace-member-joined Run an automation when a member joins a Slack workspace. `slack.onWorkspaceMemberJoined` emits Slack `team_join` events. ```ts automations/welcome-slack-workspace-members.automation.ts theme={null} import { automation } from "automate.ax" import { slack } from "automate.ax/slack" export default automation("Welcome workspace members", () => { const event = slack.onWorkspaceMemberJoined() // Use event.member.id to provision the new Slack member in other systems. }) ``` The result includes normalized `member` identity and profile fields, the typed original `event`, and the complete `envelope`. Email is present only when the app also has `users:read.email`. # Accept Dispute Source: https://docs.automate.ax/reference/integrations/square/actions/accept-dispute Accepts the loss on a dispute. `square.acceptDispute` accepts the loss on a dispute. ## Example ```ts automations/square-accept-dispute.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Accept Square Dispute", () => { onDashboardRun({ title: "Accept Square Dispute" }) square.acceptDispute({ disputeId: "dispute_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `DISPUTES_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `disputeId` | `string` | Yes | — | The ID of the dispute you want to accept. | Use the official [AcceptDispute reference](https://developer.squareup.com/reference/square/disputes-api/accept-dispute) for provider field semantics and limits. ## Output Returns the official `Square.AcceptDisputeResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Accumulate Loyalty Points Source: https://docs.automate.ax/reference/integrations/square/actions/accumulate-loyalty-points Adds points earned from a purchase to a [loyalty account](entity:LoyaltyAccount). `square.accumulateLoyaltyPoints` adds points earned from a purchase to a [loyalty account](entity:LoyaltyAccount). ## Example ```ts automations/square-accumulate-loyalty-points.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Accumulate Square Loyalty Points", () => { onDashboardRun({ title: "Accumulate Square Loyalty Points" }) square.accumulateLoyaltyPoints({ accountId: "account_id", accumulatePoints: { orderId: "RFZfrdtm3mhO1oGzf5Cx7fEMsmGZY", }, idempotencyKey: "58b90739-c3e8-4b11-85f7-e636d48d72cb", locationId: "P034NEENMD09F", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `LOYALTY_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `accountId` | `string` | Yes | — | The ID of the target loyalty account. | | `accumulatePoints` | `Square.LoyaltyEventAccumulatePoints` | Yes | — | The points to add to the account. If you are using the Orders API to manage orders, specify the order ID. Otherwise, specify the points to add. | | `idempotencyKey` | `string` | Yes | — | A unique string that identifies the `AccumulateLoyaltyPoints` request. Keys can be any valid string but must be unique for every request. | | `locationId` | `string` | Yes | — | The location where the purchase was made. | Use the official [AccumulateLoyaltyPoints reference](https://developer.squareup.com/reference/square/loyalty-api/accumulate-loyalty-points) for provider field semantics and limits. ## Output Returns the official `Square.AccumulateLoyaltyPointsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Add Group To Customer Source: https://docs.automate.ax/reference/integrations/square/actions/add-group-to-customer Adds a group membership to a customer. `square.addGroupToCustomer` adds a group membership to a customer. ## Example ```ts automations/square-add-group-to-customer.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Add Square Group To Customer", () => { onDashboardRun({ title: "Add Square Group To Customer" }) square.addGroupToCustomer({ customerId: "customer_id", groupId: "group_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `customerId` | `string` | Yes | — | The ID of the customer to add to a group. | | `groupId` | `string` | Yes | — | The ID of the customer group to add the customer to. | Use the official [AddGroupToCustomer reference](https://developer.squareup.com/reference/square/customers-api/add-group-to-customer) for provider field semantics and limits. ## Output Returns the official `Square.AddGroupToCustomerResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Adjust Loyalty Points Source: https://docs.automate.ax/reference/integrations/square/actions/adjust-loyalty-points Adds points to or subtracts points from a buyer's account. `square.adjustLoyaltyPoints` adds points to or subtracts points from a buyer's account. ## Example ```ts automations/square-adjust-loyalty-points.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Adjust Square Loyalty Points", () => { onDashboardRun({ title: "Adjust Square Loyalty Points" }) square.adjustLoyaltyPoints({ accountId: "account_id", idempotencyKey: "bc29a517-3dc9-450e-aa76-fae39ee849d1", adjustPoints: { points: 10, reason: "Complimentary points", }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `LOYALTY_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `accountId` | `string` | Yes | — | The ID of the target loyalty account. | | `idempotencyKey` | `string` | Yes | — | A unique string that identifies this `AdjustLoyaltyPoints` request. Keys can be any valid string, but must be unique for every request. | | `adjustPoints` | `Square.LoyaltyEventAdjustPoints` | Yes | — | The points to add or subtract and the reason for the adjustment. To add points, specify a positive integer. To subtract points, specify a negative integer. | | `allowNegativeBalance` | `boolean \| null` | No | `false` | Indicates whether to allow a negative adjustment to result in a negative balance. If `true`, a negative balance is allowed when subtracting points. If `false`, Square returns a `BAD_REQUEST` error when subtracting the specified number of points would result in a negative balance. The default value is `false`. | Use the official [AdjustLoyaltyPoints reference](https://developer.squareup.com/reference/square/loyalty-api/adjust-loyalty-points) for provider field semantics and limits. ## Output Returns the official `Square.AdjustLoyaltyPointsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Batch Change Inventory Source: https://docs.automate.ax/reference/integrations/square/actions/batch-change-inventory Applies adjustments and counts to the provided item quantities. `square.batchChangeInventory` applies adjustments and counts to the provided item quantities. ## Example ```ts automations/square-batch-change-inventory.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Batch Square Change Inventory", () => { onDashboardRun({ title: "Batch Square Change Inventory" }) square.batchChangeInventory({ idempotencyKey: crypto.randomUUID(), }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `INVENTORY_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `idempotencyKey` | `string` | Yes | — | A client-supplied, universally unique identifier (UUID) for the request. See [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency) in the [API Development 101](https://developer.squareup.com/docs/buildbasics) section for more information. | | `changes` | `Square.InventoryChange[] \| null` | No | — | The set of physical counts and inventory adjustments to be made. Changes are applied based on the client-supplied timestamp and may be sent out of order. | | `ignoreUnchangedCounts` | `boolean \| null` | No | `true` | Indicates whether the current physical count should be ignored if the quantity is unchanged since the last physical count. Default: `true`. | Use the official [BatchChangeInventory reference](https://developer.squareup.com/reference/square/inventory-api/batch-change-inventory) for provider field semantics and limits. ## Output Returns the official `Square.BatchChangeInventoryResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Batch Delete Catalog Objects Source: https://docs.automate.ax/reference/integrations/square/actions/batch-delete-catalog-objects Deletes a set of [CatalogItem](entity:CatalogItem)s based on the provided list of target IDs and returns a set of successfully deleted IDs in the response. `square.batchDeleteCatalogObjects` deletes a set of [CatalogItem](entity:CatalogItem)s based on the provided list of target IDs and returns a set of successfully deleted IDs in the response. ## Example ```ts automations/square-batch-delete-catalog-objects.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Batch Square Delete Catalog Objects", () => { onDashboardRun({ title: "Batch Square Delete Catalog Objects" }) square.batchDeleteCatalogObjects({ objectIds: ["W62UWFY35CWMYGVWK6TWJDNI", "AA27W3M2GGTF3H6AVPNB77CK"], }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ITEMS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `objectIds` | `string[]` | Yes | — | The IDs of the CatalogObjects to be deleted. When an object is deleted, other objects in the graph that depend on that object will be deleted as well (for example, deleting a CatalogItem will delete its CatalogItemVariation. | Use the official [BatchDeleteCatalogObjects reference](https://developer.squareup.com/reference/square/catalog-api/batch-delete-catalog-objects) for provider field semantics and limits. ## Output Returns the official `Square.BatchDeleteCatalogObjectsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Batch Retrieve Catalog Objects Source: https://docs.automate.ax/reference/integrations/square/actions/batch-retrieve-catalog-objects Returns a set of objects based on the provided ID. `square.batchRetrieveCatalogObjects` returns a set of objects based on the provided ID. ## Example ```ts automations/square-batch-retrieve-catalog-objects.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Batch Square Retrieve Catalog Objects", () => { onDashboardRun({ title: "Batch Square Retrieve Catalog Objects" }) square.batchRetrieveCatalogObjects({ objectIds: ["W62UWFY35CWMYGVWK6TWJDNI", "AA27W3M2GGTF3H6AVPNB77CK"], includeRelatedObjects: true, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ITEMS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `objectIds` | `string[]` | Yes | — | The IDs of the CatalogObjects to be retrieved. | | `includeRelatedObjects` | `boolean \| null` | No | — | If `true`, the response will include additional objects that are related to the requested objects. Related objects are defined as any objects referenced by ID by the results in the `objects` field of the response. These objects are put in the `related_objects` field. Setting this to `true` is helpful when the objects are needed for immediate display to a user. This process only goes one level deep. Objects referenced by the related objects will not be included. For example, if the `objects` field of the response contains a CatalogItem, its associated CatalogCategory objects, CatalogTax objects, CatalogImage objects and CatalogModifierLists will be returned in the `related_objects` field of the response. If the `objects` field of the response contains a CatalogItemVariation, its parent CatalogItem will be returned in the `related_objects` field of the response. Default value: `false` | | `catalogVersion` | `bigint \| null` | No | — | The specific version of the catalog objects to be included in the response. This allows you to retrieve historical versions of objects. The specified version value is matched against the CatalogObjects' `version` attribute. If not included, results will be from the current version of the catalog. | | `includeDeletedObjects` | `boolean \| null` | No | — | Indicates whether to include (`true`) or not (`false`) in the response deleted objects, namely, those with the `is_deleted` attribute set to `true`. | | `includeCategoryPathToRoot` | `boolean \| null` | No | — | Specifies whether or not to include the `path_to_root` list for each returned category instance. The `path_to_root` list consists of `CategoryPathToRootNode` objects and specifies the path that starts with the immediate parent category of the returned category and ends with its root category. If the returned category is a top-level category, the `path_to_root` list is empty and is not returned in the response payload. | | `includeOptions` | `Square.IncludeOptions` | No | — | Options to include related resources in the response. | Use the official [BatchRetrieveCatalogObjects reference](https://developer.squareup.com/reference/square/catalog-api/batch-retrieve-catalog-objects) for provider field semantics and limits. ## Output Returns the official `Square.BatchGetCatalogObjectsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Batch Retrieve Inventory Changes Source: https://docs.automate.ax/reference/integrations/square/actions/batch-retrieve-inventory-changes Returns historical physical counts and adjustments based on the provided filter criteria. `square.batchRetrieveInventoryChanges` returns historical physical counts and adjustments based on the provided filter criteria. ## Example ```ts automations/square-batch-retrieve-inventory-changes.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Batch Square Retrieve Inventory Changes", () => { onDashboardRun({ title: "Batch Square Retrieve Inventory Changes" }) square.batchRetrieveInventoryChanges({}) }) ``` ## Inputs Every input accepts a compatible signal. It requires `INVENTORY_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `catalogObjectIds` | `string[] \| null` | No | null | The filter to return results by `CatalogObject` ID. The filter is only applicable when set. The default value is null. | | `locationIds` | `string[] \| null` | No | null | The filter to return results by `Location` ID. The filter is only applicable when set. The default value is null. | | `types` | `Square.InventoryChangeType[] \| null` | No | `[PHYSICAL_COUNT, ADJUSTMENT]` | The filter to return results by `InventoryChangeType` values other than `TRANSFER`. The default value is `[PHYSICAL_COUNT, ADJUSTMENT]`. | | `states` | `Square.InventoryState[] \| null` | No | null | The filter to return `ADJUSTMENT` query results by `InventoryState`. This filter is only applied when set. The default value is null. | | `updatedAfter` | `string \| null` | No | the UNIX epoch of (`1970-01-01T00:00:00Z`) | The filter to return results with their `calculated_at` value after the given time as specified in an RFC 3339 timestamp. The default value is the UNIX epoch of (`1970-01-01T00:00:00Z`). | | `updatedBefore` | `string \| null` | No | the UNIX epoch of (`1970-01-01T00:00:00Z`) | The filter to return results with their `created_at` or `calculated_at` value strictly before the given time as specified in an RFC 3339 timestamp. The default value is the UNIX epoch of (`1970-01-01T00:00:00Z`). | | `cursor` | `string \| null` | No | — | A pagination cursor returned by a previous call to this endpoint. Provide this to retrieve the next set of results for the original query. See the [Pagination](https://developer.squareup.com/docs/working-with-apis/pagination) guide for more information. | | `limit` | `number \| null` | No | — | The number of records to return. | | `sort` | `Square.BatchRetrieveInventoryChangesSort` | No | — | Specification of how returned inventory changes should be ordered. Currently, inventory changes can only be ordered by the occurred\_at field. The default sort order for occurred\_at is ASC (changes are returned oldest-first by default). | | `reasonIds` | `Square.InventoryAdjustmentReasonId[] \| null` | No | — | The filter to return `ADJUSTMENT` query results by inventory adjustment reason. This filter is only applied when set. The request cannot include both `reason_ids` and `states`. | Use the official [BatchRetrieveInventoryChanges reference](https://developer.squareup.com/reference/square/inventory-api/batch-retrieve-inventory-changes) for provider field semantics and limits. ## Output Returns the official `Square.BatchGetInventoryChangesResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Batch Retrieve Inventory Counts Source: https://docs.automate.ax/reference/integrations/square/actions/batch-retrieve-inventory-counts Returns current counts for the provided [CatalogObject](entity:CatalogObject)s at the requested [Location](entity:Location)s. `square.batchRetrieveInventoryCounts` returns current counts for the provided [CatalogObject](entity:CatalogObject)s at the requested [Location](entity:Location)s. ## Example ```ts automations/square-batch-retrieve-inventory-counts.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Batch Square Retrieve Inventory Counts", () => { onDashboardRun({ title: "Batch Square Retrieve Inventory Counts" }) square.batchRetrieveInventoryCounts({}) }) ``` ## Inputs Every input accepts a compatible signal. It requires `INVENTORY_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `catalogObjectIds` | `string[] \| null` | No | — | The filter to return results by `CatalogObject` ID. The filter is applicable only when set. The default is null. | | `locationIds` | `string[] \| null` | No | — | The filter to return results by `Location` ID. This filter is applicable only when set. The default is null. | | `updatedAfter` | `string \| null` | No | the UNIX epoch of (`1970-01-01T00:00:00Z`) | The filter to return results with their `calculated_at` value after the given time as specified in an RFC 3339 timestamp. The default value is the UNIX epoch of (`1970-01-01T00:00:00Z`). | | `cursor` | `string \| null` | No | — | A pagination cursor returned by a previous call to this endpoint. Provide this to retrieve the next set of results for the original query. See the [Pagination](https://developer.squareup.com/docs/working-with-apis/pagination) guide for more information. | | `states` | `Square.InventoryState[] \| null` | No | — | The filter to return results by `InventoryState`. The filter is only applicable when set. Ignored are untracked states of `NONE`, `SOLD`, and `UNLINKED_RETURN`. The default is null. | | `limit` | `number \| null` | No | — | The number of records to return. | Use the official [BatchRetrieveInventoryCounts reference](https://developer.squareup.com/reference/square/inventory-api/batch-retrieve-inventory-counts) for provider field semantics and limits. ## Output Returns the official `Square.BatchGetInventoryCountsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Batch Retrieve Orders Source: https://docs.automate.ax/reference/integrations/square/actions/batch-retrieve-orders Retrieves a set of [orders](entity:Order) by their IDs. `square.batchRetrieveOrders` retrieves a set of [orders](entity:Order) by their IDs. ## Example ```ts automations/square-batch-retrieve-orders.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Batch Square Retrieve Orders", () => { onDashboardRun({ title: "Batch Square Retrieve Orders" }) square.batchRetrieveOrders({ locationId: "057P5VYJ4A5X1", orderIds: ["CAISEM82RcpmcFBM0TfOyiHV3es", "CAISENgvlJ6jLWAzERDzjyHVybY"], }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ORDERS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `locationId` | `string \| null` | No | — | The ID of the location for these orders. This field is optional: omit it to retrieve orders within the scope of the current authorization's merchant ID. | | `orderIds` | `string[]` | Yes | — | The IDs of the orders to retrieve. A maximum of 100 orders can be retrieved per request. | Use the official [BatchRetrieveOrders reference](https://developer.squareup.com/reference/square/orders-api/batch-retrieve-orders) for provider field semantics and limits. ## Output Returns the official `Square.BatchGetOrdersResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Batch Upsert Catalog Objects Source: https://docs.automate.ax/reference/integrations/square/actions/batch-upsert-catalog-objects Creates or updates up to 10,000 target objects based on the provided list of objects. `square.batchUpsertCatalogObjects` creates or updates up to 10,000 target objects based on the provided list of objects. ## Example ```ts automations/square-batch-upsert-catalog-objects.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Batch Square Upsert Catalog Objects", () => { onDashboardRun({ title: "Batch Square Upsert Catalog Objects" }) square.batchUpsertCatalogObjects({ idempotencyKey: "789ff020-f723-43a9-b4b5-43b5dc1fa3dc", batches: [ { objects: [ { type: "ITEM", id: "id", }, { type: "ITEM", id: "id", }, { type: "ITEM", id: "id", }, { type: "TAX", id: "id", }, ], }, ], }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ITEMS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `idempotencyKey` | `string` | Yes | — | A value you specify that uniquely identifies this request among all your requests. A common way to create a valid idempotency key is to use a Universally unique identifier (UUID). If you're unsure whether a particular request was successful, you can reattempt it with the same idempotency key without worrying about creating duplicate objects. See [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency) for more information. | | `batches` | `Square.CatalogObjectBatch[]` | Yes | — | A batch of CatalogObjects to be inserted/updated atomically. The objects within a batch will be inserted in an all-or-nothing fashion, that is, if an error occurs attempting to insert or update an object within a batch, the entire batch will be rejected. However, an error in one batch will not affect other batches within the same request. For each object, its `updated_at` field is ignored and replaced with a current [timestamp](https://developer.squareup.com/docs/build-basics/working-with-dates), and its `is_deleted` field must not be set to `true`. To modify an existing object, supply its ID. To create a new object, use an ID starting with `#`. These IDs may be used to create relationships between an object and attributes of other objects that reference it. For example, you can create a CatalogItem with ID `#ABC` and a CatalogItemVariation with its `item_id` attribute set to `#ABC` in order to associate the CatalogItemVariation with its parent CatalogItem. Any `#`-prefixed IDs are valid only within a single atomic batch, and will be replaced by server-generated IDs. Each batch may contain up to 1,000 objects. The total number of objects across all batches for a single request may not exceed 10,000. If either of these limits is violated, an error will be returned and no objects will be inserted or updated. | Use the official [BatchUpsertCatalogObjects reference](https://developer.squareup.com/reference/square/catalog-api/batch-upsert-catalog-objects) for provider field semantics and limits. ## Output Returns the official `Square.BatchUpsertCatalogObjectsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Bulk Create Customers Source: https://docs.automate.ax/reference/integrations/square/actions/bulk-create-customers Creates multiple [customer profiles](entity:Customer) for a business. `square.bulkCreateCustomers` creates multiple [customer profiles](entity:Customer) for a business. ## Example ```ts automations/square-bulk-create-customers.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Bulk Square Create Customers", () => { onDashboardRun({ title: "Bulk Square Create Customers" }) square.bulkCreateCustomers({ customers: { "8bb76c4f-e35d-4c5b-90de-1194cd9179f0": { givenName: "Amelia", familyName: "Earhart", emailAddress: "Amelia.Earhart@example.com", address: { addressLine1: "500 Electric Ave", addressLine2: "Suite 600", locality: "New York", administrativeDistrictLevel1: "NY", postalCode: "10003", country: "US", }, phoneNumber: "+1-212-555-4240", referenceId: "YOUR_REFERENCE_ID", note: "a customer", }, "d1689f23-b25d-4932-b2f0-aed00f5e2029": { givenName: "Marie", familyName: "Curie", emailAddress: "Marie.Curie@example.com", address: { addressLine1: "500 Electric Ave", addressLine2: "Suite 601", locality: "New York", administrativeDistrictLevel1: "NY", postalCode: "10003", country: "US", }, phoneNumber: "+1-212-444-4240", referenceId: "YOUR_REFERENCE_ID", note: "another customer", }, }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `customers` | `Record\` | Yes | — | A map of 1 to 100 individual create requests, represented by `idempotency key: \{ customer data \}` key-value pairs. Each key is an [idempotency key](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency) that uniquely identifies the create request. Each value contains the customer data used to create the customer profile. | Use the official [BulkCreateCustomers reference](https://developer.squareup.com/reference/square/customers-api/bulk-create-customers) for provider field semantics and limits. ## Output Returns the official `Square.BulkCreateCustomersResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Bulk Create Team Members Source: https://docs.automate.ax/reference/integrations/square/actions/bulk-create-team-members Creates multiple `TeamMember` objects. `square.bulkCreateTeamMembers` creates multiple `TeamMember` objects. ## Example ```ts automations/square-bulk-create-team-members.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Bulk Square Create Team Members", () => { onDashboardRun({ title: "Bulk Square Create Team Members" }) square.bulkCreateTeamMembers({ teamMembers: { "idempotency-key-1": { teamMember: { referenceId: "reference_id_1", givenName: "Joe", familyName: "Doe", emailAddress: "joe_doe@gmail.com", phoneNumber: "+14159283333", assignedLocations: { assignmentType: "EXPLICIT_LOCATIONS", locationIds: ["YSGH2WBKG94QZ", "GA2Y9HSJ8KRYT"], }, }, }, "idempotency-key-2": { teamMember: { referenceId: "reference_id_2", givenName: "Jane", familyName: "Smith", emailAddress: "jane_smith@gmail.com", phoneNumber: "+14159223334", assignedLocations: { assignmentType: "ALL_CURRENT_AND_FUTURE_LOCATIONS", }, }, }, }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `EMPLOYEES_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `teamMembers` | `Record\` | Yes | — | The data used to create the `TeamMember` objects. Each key is the `idempotency_key` that maps to the `CreateTeamMemberRequest`. The maximum number of create objects is 25. If you include a team member's `wage_setting`, you must provide `job_id` for each job assignment. To get job IDs, call ListJobs. | Use the official [BulkCreateTeamMembers reference](https://developer.squareup.com/reference/square/team-api/bulk-create-team-members) for provider field semantics and limits. ## Output Returns the official `Square.BatchCreateTeamMembersResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Bulk Create Vendors Source: https://docs.automate.ax/reference/integrations/square/actions/bulk-create-vendors Creates one or more [Vendor](entity:Vendor) objects to represent suppliers to a seller. `square.bulkCreateVendors` creates one or more [Vendor](entity:Vendor) objects to represent suppliers to a seller. ## Example ```ts automations/square-bulk-create-vendors.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Bulk Square Create Vendors", () => { onDashboardRun({ title: "Bulk Square Create Vendors" }) square.bulkCreateVendors({ vendors: { "8fc6a5b0-9fe8-4b46-b46b-2ef95793abbe": { name: "Joe's Fresh Seafood", address: { addressLine1: "505 Electric Ave", addressLine2: "Suite 600", locality: "New York", administrativeDistrictLevel1: "NY", postalCode: "10003", country: "US", }, contacts: [ { name: "Joe Burrow", emailAddress: "joe@joesfreshseafood.com", phoneNumber: "1-212-555-4250", ordinal: 1, }, ], accountNumber: "4025391", note: "a vendor", }, }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `VENDOR_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `vendors` | `Record\` | Yes | — | Specifies a set of new Vendor objects as represented by a collection of idempotency-key/`Vendor`-object pairs. | Use the official [BulkCreateVendors reference](https://developer.squareup.com/reference/square/vendors-api/bulk-create-vendors) for provider field semantics and limits. ## Output Returns the official `Square.BatchCreateVendorsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Bulk Delete Booking Custom Attributes Source: https://docs.automate.ax/reference/integrations/square/actions/bulk-delete-booking-custom-attributes Bulk deletes bookings custom attributes. `square.bulkDeleteBookingCustomAttributes` bulk deletes bookings custom attributes. ## Example ```ts automations/square-bulk-delete-booking-custom-attributes.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "Bulk Square Delete Booking Custom Attributes", () => { onDashboardRun({ title: "Bulk Square Delete Booking Custom Attributes" }) square.bulkDeleteBookingCustomAttributes({ values: { key: { bookingId: "booking_id", key: "key", }, }, }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `APPOINTMENTS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `values` | `Record\` | Yes | — | A map containing 1 to 25 individual Delete requests. For each request, provide an arbitrary ID that is unique for this `BulkDeleteBookingCustomAttributes` request and the information needed to delete a custom attribute. | Use the official [BulkDeleteBookingCustomAttributes reference](https://developer.squareup.com/reference/square/booking-custom-attributes-api/bulk-delete-booking-custom-attributes) for provider field semantics and limits. ## Output Returns the official `Square.BulkDeleteBookingCustomAttributesResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Bulk Delete Customers Source: https://docs.automate.ax/reference/integrations/square/actions/bulk-delete-customers Deletes multiple customer profiles. `square.bulkDeleteCustomers` deletes multiple customer profiles. ## Example ```ts automations/square-bulk-delete-customers.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Bulk Square Delete Customers", () => { onDashboardRun({ title: "Bulk Square Delete Customers" }) square.bulkDeleteCustomers({ customerIds: [ "8DDA5NZVBZFGAX0V3HPF81HHE0", "N18CPRVXR5214XPBBA6BZQWF3C", "2GYD7WNXF7BJZW1PMGNXZ3Y8M8", ], }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `customerIds` | `string[]` | Yes | — | The IDs of the customer profiles to delete. | Use the official [BulkDeleteCustomers reference](https://developer.squareup.com/reference/square/customers-api/bulk-delete-customers) for provider field semantics and limits. ## Output Returns the official `Square.BulkDeleteCustomersResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Bulk Delete Location Custom Attributes Source: https://docs.automate.ax/reference/integrations/square/actions/bulk-delete-location-custom-attributes Deletes [custom attributes](entity:CustomAttribute) for locations as a bulk operation. `square.bulkDeleteLocationCustomAttributes` deletes [custom attributes](entity:CustomAttribute) for locations as a bulk operation. ## Example ```ts automations/square-bulk-delete-location-custom-attributes.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "Bulk Square Delete Location Custom Attributes", () => { onDashboardRun({ title: "Bulk Square Delete Location Custom Attributes" }) square.bulkDeleteLocationCustomAttributes({ values: { id1: { key: "bestseller", }, id2: { key: "bestseller", }, id3: { key: "phone-number", }, }, }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `MERCHANT_PROFILE_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `values` | `Record\` | Yes | — | The data used to update the `CustomAttribute` objects. The keys must be unique and are used to map to the corresponding response. | Use the official [BulkDeleteLocationCustomAttributes reference](https://developer.squareup.com/reference/square/location-custom-attributes-api/bulk-delete-location-custom-attributes) for provider field semantics and limits. ## Output Returns the official `Square.BulkDeleteLocationCustomAttributesResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Bulk Delete Merchant Custom Attributes Source: https://docs.automate.ax/reference/integrations/square/actions/bulk-delete-merchant-custom-attributes Deletes [custom attributes](entity:CustomAttribute) for a merchant as a bulk operation. `square.bulkDeleteMerchantCustomAttributes` deletes [custom attributes](entity:CustomAttribute) for a merchant as a bulk operation. ## Example ```ts automations/square-bulk-delete-merchant-custom-attributes.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "Bulk Square Delete Merchant Custom Attributes", () => { onDashboardRun({ title: "Bulk Square Delete Merchant Custom Attributes" }) square.bulkDeleteMerchantCustomAttributes({ values: { id1: { key: "alternative_seller_name", }, id2: { key: "has_seen_tutorial", }, }, }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `MERCHANT_PROFILE_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `values` | `Record\` | Yes | — | The data used to update the `CustomAttribute` objects. The keys must be unique and are used to map to the corresponding response. | Use the official [BulkDeleteMerchantCustomAttributes reference](https://developer.squareup.com/reference/square/merchant-custom-attributes-api/bulk-delete-merchant-custom-attributes) for provider field semantics and limits. ## Output Returns the official `Square.BulkDeleteMerchantCustomAttributesResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Bulk Delete Order Custom Attributes Source: https://docs.automate.ax/reference/integrations/square/actions/bulk-delete-order-custom-attributes Deletes order [custom attributes](entity:CustomAttribute) as a bulk operation. `square.bulkDeleteOrderCustomAttributes` deletes order [custom attributes](entity:CustomAttribute) as a bulk operation. ## Example ```ts automations/square-bulk-delete-order-custom-attributes.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Bulk Square Delete Order Custom Attributes", () => { onDashboardRun({ title: "Bulk Square Delete Order Custom Attributes" }) square.bulkDeleteOrderCustomAttributes({ values: { "cover-count": { key: "cover-count", orderId: "7BbXGEIWNldxAzrtGf9GPVZTwZ4F", }, "table-number": { key: "table-number", orderId: "7BbXGEIWNldxAzrtGf9GPVZTwZ4F", }, }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ORDERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `values` | `Record\` | Yes | — | A map of requests that correspond to individual delete operations for custom attributes. | Use the official [BulkDeleteOrderCustomAttributes reference](https://developer.squareup.com/reference/square/order-custom-attributes-api/bulk-delete-order-custom-attributes) for provider field semantics and limits. ## Output Returns the official `Square.BulkDeleteOrderCustomAttributesResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Bulk Publish Scheduled Shifts Source: https://docs.automate.ax/reference/integrations/square/actions/bulk-publish-scheduled-shifts Publishes 1 - 100 scheduled shifts. `square.bulkPublishScheduledShifts` publishes 1 - 100 scheduled shifts. ## Example ```ts automations/square-bulk-publish-scheduled-shifts.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Bulk Square Publish Scheduled Shifts", () => { onDashboardRun({ title: "Bulk Square Publish Scheduled Shifts" }) square.bulkPublishScheduledShifts({ scheduledShifts: { key: {}, }, scheduledShiftNotificationAudience: "AFFECTED", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `TIMECARDS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `scheduledShifts` | `Record\` | Yes | — | A map of 1 to 100 key-value pairs that represent individual publish requests. - Each key is the ID of a scheduled shift you want to publish. - Each value is a `BulkPublishScheduledShiftsData` object that contains the `version` field or is an empty object. | | `scheduledShiftNotificationAudience` | `Square.ScheduledShiftNotificationAudience` | No | `AFFECTED` | Indicates whether Square should send email notifications to team members and which team members should receive the notifications. This setting applies to all shifts specified in the bulk operation. The default value is `AFFECTED`. See [ScheduledShiftNotificationAudience](#type-scheduledshiftnotificationaudience) for possible values | Use the official [BulkPublishScheduledShifts reference](https://developer.squareup.com/reference/square/labor-api/bulk-publish-scheduled-shifts) for provider field semantics and limits. ## Output Returns the official `Square.BulkPublishScheduledShiftsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Bulk Retrieve Bookings Source: https://docs.automate.ax/reference/integrations/square/actions/bulk-retrieve-bookings Bulk-Retrieves a list of bookings by booking IDs. `square.bulkRetrieveBookings` bulk-Retrieves a list of bookings by booking IDs. ## Example ```ts automations/square-bulk-retrieve-bookings.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Bulk Square Retrieve Bookings", () => { onDashboardRun({ title: "Bulk Square Retrieve Bookings" }) square.bulkRetrieveBookings({ bookingIds: ["booking_ids"], }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `APPOINTMENTS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `bookingIds` | `string[]` | Yes | — | A non-empty list of Booking IDs specifying bookings to retrieve. | Use the official [BulkRetrieveBookings reference](https://developer.squareup.com/reference/square/bookings-api/bulk-retrieve-bookings) for provider field semantics and limits. ## Output Returns the official `Square.BulkRetrieveBookingsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Bulk Retrieve Channels Source: https://docs.automate.ax/reference/integrations/square/actions/bulk-retrieve-channels BulkRetrieveChannels. `square.bulkRetrieveChannels` bulkRetrieveChannels. ## Example ```ts automations/square-bulk-retrieve-channels.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Bulk Square Retrieve Channels", () => { onDashboardRun({ title: "Bulk Square Retrieve Channels" }) square.bulkRetrieveChannels({ channelIds: ["CH_9C03D0B59", "CH_6X139B5MN", "NOT_EXISTING"], }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CHANNELS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `channelIds` | `string[]` | Yes | — | Square `channelIds` request field. | Use the official [BulkRetrieveChannels reference](https://developer.squareup.com/reference/square/channels-api/bulk-retrieve-channels) for provider field semantics and limits. ## Output Returns the official `Square.BulkRetrieveChannelsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Bulk Retrieve Customers Source: https://docs.automate.ax/reference/integrations/square/actions/bulk-retrieve-customers Retrieves multiple customer profiles. `square.bulkRetrieveCustomers` retrieves multiple customer profiles. ## Example ```ts automations/square-bulk-retrieve-customers.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Bulk Square Retrieve Customers", () => { onDashboardRun({ title: "Bulk Square Retrieve Customers" }) square.bulkRetrieveCustomers({ customerIds: [ "8DDA5NZVBZFGAX0V3HPF81HHE0", "N18CPRVXR5214XPBBA6BZQWF3C", "2GYD7WNXF7BJZW1PMGNXZ3Y8M8", ], }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `customerIds` | `string[]` | Yes | — | The IDs of the customer profiles to retrieve. | Use the official [BulkRetrieveCustomers reference](https://developer.squareup.com/reference/square/customers-api/bulk-retrieve-customers) for provider field semantics and limits. ## Output Returns the official `Square.BulkRetrieveCustomersResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Bulk Retrieve Team Member Booking Profiles Source: https://docs.automate.ax/reference/integrations/square/actions/bulk-retrieve-team-member-booking-profiles Retrieves one or more team members' booking profiles. `square.bulkRetrieveTeamMemberBookingProfiles` retrieves one or more team members' booking profiles. ## Example ```ts automations/square-bulk-retrieve-team-member-booking-profiles.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "Bulk Square Retrieve Team Member Booking Profiles", () => { onDashboardRun({ title: "Bulk Square Retrieve Team Member Booking Profiles", }) square.bulkRetrieveTeamMemberBookingProfiles({ teamMemberIds: ["team_member_ids"], }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `APPOINTMENTS_BUSINESS_SETTINGS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `teamMemberIds` | `string[]` | Yes | — | A non-empty list of IDs of team members whose booking profiles you want to retrieve. | Use the official [BulkRetrieveTeamMemberBookingProfiles reference](https://developer.squareup.com/reference/square/bookings-api/bulk-retrieve-team-member-booking-profiles) for provider field semantics and limits. ## Output Returns the official `Square.BulkRetrieveTeamMemberBookingProfilesResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Bulk Retrieve Vendors Source: https://docs.automate.ax/reference/integrations/square/actions/bulk-retrieve-vendors Retrieves one or more vendors of specified [Vendor](entity:Vendor) IDs. `square.bulkRetrieveVendors` retrieves one or more vendors of specified [Vendor](entity:Vendor) IDs. ## Example ```ts automations/square-bulk-retrieve-vendors.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Bulk Square Retrieve Vendors", () => { onDashboardRun({ title: "Bulk Square Retrieve Vendors" }) square.bulkRetrieveVendors({ vendorIds: ["INV_V_JDKYHBWT1D4F8MFH63DBMEN8Y4"], }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `VENDOR_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `vendorIds` | `string[] \| null` | No | — | IDs of the Vendor objects to retrieve. | Use the official [BulkRetrieveVendors reference](https://developer.squareup.com/reference/square/vendors-api/bulk-retrieve-vendors) for provider field semantics and limits. ## Output Returns the official `Square.BatchGetVendorsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Bulk Swap Plan Source: https://docs.automate.ax/reference/integrations/square/actions/bulk-swap-plan Schedules a plan variation change for all active subscriptions under a given plan variation. `square.bulkSwapPlan` schedules a plan variation change for all active subscriptions under a given plan variation. ## Example ```ts automations/square-bulk-swap-plan.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Bulk Square Swap Plan", () => { onDashboardRun({ title: "Bulk Square Swap Plan" }) square.bulkSwapPlan({ newPlanVariationId: "FQ7CDXXWSLUJRPM3GFJSJGZ7", oldPlanVariationId: "6JHXF3B2CW3YKHDV4XEM674H", locationId: "S8GWD5R9QB376", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ITEMS_READ` and `SUBSCRIPTIONS_READ` and `SUBSCRIPTIONS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `newPlanVariationId` | `string` | Yes | — | The ID of the new subscription plan variation. This field is required. | | `oldPlanVariationId` | `string` | Yes | — | The ID of the plan variation whose subscriptions should be swapped. Active subscriptions using this plan variation will be subscribed to the new plan variation on their next billing day. | | `locationId` | `string` | Yes | — | The ID of the location to associate with the swapped subscriptions. | Use the official [BulkSwapPlan reference](https://developer.squareup.com/reference/square/subscriptions-api/bulk-swap-plan) for provider field semantics and limits. ## Output Returns the official `Square.BulkSwapPlanResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Bulk Update Customers Source: https://docs.automate.ax/reference/integrations/square/actions/bulk-update-customers Updates multiple customer profiles. `square.bulkUpdateCustomers` updates multiple customer profiles. ## Example ```ts automations/square-bulk-update-customers.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Bulk Square Update Customers", () => { onDashboardRun({ title: "Bulk Square Update Customers" }) square.bulkUpdateCustomers({ customers: { "8DDA5NZVBZFGAX0V3HPF81HHE0": { emailAddress: "New.Amelia.Earhart@example.com", note: "updated customer note", version: BigInt("2"), }, N18CPRVXR5214XPBBA6BZQWF3C: { givenName: "Marie", familyName: "Curie", version: BigInt("0"), }, }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `customers` | `Record\` | Yes | — | A map of 1 to 100 individual update requests, represented by `customer ID: \{ customer data \}` key-value pairs. Each key is the ID of the customer profile to update. To update a customer profile that was created by merging existing profiles, provide the ID of the newly created profile. Each value contains the updated customer data. Only new or changed fields are required. To add or update a field, specify the new value. To remove a field, specify `null`. | Use the official [BulkUpdateCustomers reference](https://developer.squareup.com/reference/square/customers-api/bulk-update-customers) for provider field semantics and limits. ## Output Returns the official `Square.BulkUpdateCustomersResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Bulk Update Team Members Source: https://docs.automate.ax/reference/integrations/square/actions/bulk-update-team-members Updates multiple `TeamMember` objects. `square.bulkUpdateTeamMembers` updates multiple `TeamMember` objects. ## Example ```ts automations/square-bulk-update-team-members.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Bulk Square Update Team Members", () => { onDashboardRun({ title: "Bulk Square Update Team Members" }) square.bulkUpdateTeamMembers({ teamMembers: { "AFMwA08kR-MIF-3Vs0OE": { teamMember: { referenceId: "reference_id_2", isOwner: false, status: "ACTIVE", givenName: "Jane", familyName: "Smith", emailAddress: "jane_smith@gmail.com", phoneNumber: "+14159223334", assignedLocations: { assignmentType: "ALL_CURRENT_AND_FUTURE_LOCATIONS", }, }, }, "fpgteZNMaf0qOK-a4t6P": { teamMember: { referenceId: "reference_id_1", isOwner: false, status: "ACTIVE", givenName: "Joe", familyName: "Doe", emailAddress: "joe_doe@gmail.com", phoneNumber: "+14159283333", assignedLocations: { assignmentType: "EXPLICIT_LOCATIONS", locationIds: ["YSGH2WBKG94QZ", "GA2Y9HSJ8KRYT"], }, }, }, }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `EMPLOYEES_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `teamMembers` | `Record\` | Yes | — | The data used to update the `TeamMember` objects. Each key is the `team_member_id` that maps to the `UpdateTeamMemberRequest`. The maximum number of update objects is 25. For each team member, include the fields to add, change, or clear. Fields can be cleared using a null value. To update `wage_setting.job_assignments`, you must provide the complete list of job assignments. If needed, call ListJobs to get the required `job_id` values. | Use the official [BulkUpdateTeamMembers reference](https://developer.squareup.com/reference/square/team-api/bulk-update-team-members) for provider field semantics and limits. ## Output Returns the official `Square.BatchUpdateTeamMembersResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Bulk Update Vendors Source: https://docs.automate.ax/reference/integrations/square/actions/bulk-update-vendors Updates one or more of existing [Vendor](entity:Vendor) objects as suppliers to a seller. `square.bulkUpdateVendors` updates one or more of existing [Vendor](entity:Vendor) objects as suppliers to a seller. ## Example ```ts automations/square-bulk-update-vendors.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Bulk Square Update Vendors", () => { onDashboardRun({ title: "Bulk Square Update Vendors" }) square.bulkUpdateVendors({ vendors: { FMCYHBWT1TPL8MFH52PBMEN92A: { vendor: {}, }, INV_V_JDKYHBWT1D4F8MFH63DBMEN8Y4: { vendor: {}, }, }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `VENDOR_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `vendors` | `Record\` | Yes | — | A set of UpdateVendorRequest objects encapsulating to-be-updated Vendor objects. The set is represented by a collection of `Vendor`-ID/`UpdateVendorRequest`-object pairs. | Use the official [BulkUpdateVendors reference](https://developer.squareup.com/reference/square/vendors-api/bulk-update-vendors) for provider field semantics and limits. ## Output Returns the official `Square.BatchUpdateVendorsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Bulk Upsert Booking Custom Attributes Source: https://docs.automate.ax/reference/integrations/square/actions/bulk-upsert-booking-custom-attributes Bulk upserts bookings custom attributes. `square.bulkUpsertBookingCustomAttributes` bulk upserts bookings custom attributes. ## Example ```ts automations/square-bulk-upsert-booking-custom-attributes.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "Bulk Square Upsert Booking Custom Attributes", () => { onDashboardRun({ title: "Bulk Square Upsert Booking Custom Attributes" }) square.bulkUpsertBookingCustomAttributes({ values: { key: { bookingId: "booking_id", customAttribute: {}, }, }, }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `APPOINTMENTS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `values` | `Record\` | Yes | — | A map containing 1 to 25 individual upsert requests. For each request, provide an arbitrary ID that is unique for this `BulkUpsertBookingCustomAttributes` request and the information needed to create or update a custom attribute. | Use the official [BulkUpsertBookingCustomAttributes reference](https://developer.squareup.com/reference/square/booking-custom-attributes-api/bulk-upsert-booking-custom-attributes) for provider field semantics and limits. ## Output Returns the official `Square.BulkUpsertBookingCustomAttributesResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Bulk Upsert Customer Custom Attributes Source: https://docs.automate.ax/reference/integrations/square/actions/bulk-upsert-customer-custom-attributes Creates or updates [custom attributes](entity:CustomAttribute) for customer profiles as a bulk operation. `square.bulkUpsertCustomerCustomAttributes` creates or updates [custom attributes](entity:CustomAttribute) for customer profiles as a bulk operation. ## Example ```ts automations/square-bulk-upsert-customer-custom-attributes.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "Bulk Square Upsert Customer Custom Attributes", () => { onDashboardRun({ title: "Bulk Square Upsert Customer Custom Attributes" }) square.bulkUpsertCustomerCustomAttributes({ values: { id1: { customerId: "N3NCVYY3WS27HF0HKANA3R9FP8", customAttribute: { key: "favoritemovie", value: "Dune", }, }, id2: { customerId: "SY8EMWRNDN3TQDP2H4KS1QWMMM", customAttribute: { key: "ownsmovie", value: false, }, }, id3: { customerId: "SY8EMWRNDN3TQDP2H4KS1QWMMM", customAttribute: { key: "favoritemovie", value: "Star Wars", }, }, id4: { customerId: "N3NCVYY3WS27HF0HKANA3R9FP8", customAttribute: { key: "square:a0f1505a-2aa1-490d-91a8-8d31ff181808", value: "10.5", }, }, id5: { customerId: "70548QG1HN43B05G0KCZ4MMC1G", customAttribute: { key: "sq0ids-0evKIskIGaY45fCyNL66aw:backupemail", value: "fake-email@squareup.com", }, }, }, }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `values` | `Record\` | Yes | — | A map containing 1 to 25 individual upsert requests. For each request, provide an arbitrary ID that is unique for this `BulkUpsertCustomerCustomAttributes` request and the information needed to create or update a custom attribute. | Use the official [BulkUpsertCustomerCustomAttributes reference](https://developer.squareup.com/reference/square/customer-custom-attributes-api/bulk-upsert-customer-custom-attributes) for provider field semantics and limits. ## Output Returns the official `Square.BatchUpsertCustomerCustomAttributesResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Bulk Upsert Location Custom Attributes Source: https://docs.automate.ax/reference/integrations/square/actions/bulk-upsert-location-custom-attributes Creates or updates [custom attributes](entity:CustomAttribute) for locations as a bulk operation. `square.bulkUpsertLocationCustomAttributes` creates or updates [custom attributes](entity:CustomAttribute) for locations as a bulk operation. ## Example ```ts automations/square-bulk-upsert-location-custom-attributes.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "Bulk Square Upsert Location Custom Attributes", () => { onDashboardRun({ title: "Bulk Square Upsert Location Custom Attributes" }) square.bulkUpsertLocationCustomAttributes({ values: { id1: { locationId: "L0TBCBTB7P8RQ", customAttribute: { key: "bestseller", value: "hot cocoa", }, }, id2: { locationId: "L9XMD04V3STJX", customAttribute: { key: "bestseller", value: "berry smoothie", }, }, id3: { locationId: "L0TBCBTB7P8RQ", customAttribute: { key: "phone-number", value: "+12223334444", }, }, }, }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `MERCHANT_PROFILE_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `values` | `Record\` | Yes | — | A map containing 1 to 25 individual upsert requests. For each request, provide an arbitrary ID that is unique for this `BulkUpsertLocationCustomAttributes` request and the information needed to create or update a custom attribute. | Use the official [BulkUpsertLocationCustomAttributes reference](https://developer.squareup.com/reference/square/location-custom-attributes-api/bulk-upsert-location-custom-attributes) for provider field semantics and limits. ## Output Returns the official `Square.BulkUpsertLocationCustomAttributesResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Bulk Upsert Merchant Custom Attributes Source: https://docs.automate.ax/reference/integrations/square/actions/bulk-upsert-merchant-custom-attributes Creates or updates [custom attributes](entity:CustomAttribute) for a merchant as a bulk operation. `square.bulkUpsertMerchantCustomAttributes` creates or updates [custom attributes](entity:CustomAttribute) for a merchant as a bulk operation. ## Example ```ts automations/square-bulk-upsert-merchant-custom-attributes.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "Bulk Square Upsert Merchant Custom Attributes", () => { onDashboardRun({ title: "Bulk Square Upsert Merchant Custom Attributes" }) square.bulkUpsertMerchantCustomAttributes({ values: { id1: { merchantId: "DM7VKY8Q63GNP", customAttribute: { key: "alternative_seller_name", value: "Ultimate Sneaker Store", }, }, id2: { merchantId: "DM7VKY8Q63GNP", customAttribute: { key: "has_seen_tutorial", value: true, }, }, }, }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `MERCHANT_PROFILE_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `values` | `Record\` | Yes | — | A map containing 1 to 25 individual upsert requests. For each request, provide an arbitrary ID that is unique for this `BulkUpsertMerchantCustomAttributes` request and the information needed to create or update a custom attribute. | Use the official [BulkUpsertMerchantCustomAttributes reference](https://developer.squareup.com/reference/square/merchant-custom-attributes-api/bulk-upsert-merchant-custom-attributes) for provider field semantics and limits. ## Output Returns the official `Square.BulkUpsertMerchantCustomAttributesResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Bulk Upsert Order Custom Attributes Source: https://docs.automate.ax/reference/integrations/square/actions/bulk-upsert-order-custom-attributes Creates or updates order [custom attributes](entity:CustomAttribute) as a bulk operation. `square.bulkUpsertOrderCustomAttributes` creates or updates order [custom attributes](entity:CustomAttribute) as a bulk operation. ## Example ```ts automations/square-bulk-upsert-order-custom-attributes.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Bulk Square Upsert Order Custom Attributes", () => { onDashboardRun({ title: "Bulk Square Upsert Order Custom Attributes" }) square.bulkUpsertOrderCustomAttributes({ values: { "cover-count": { customAttribute: { key: "cover-count", value: "6", version: 2, }, orderId: "7BbXGEIWNldxAzrtGf9GPVZTwZ4F", }, "table-number": { customAttribute: { key: "table-number", value: "11", version: 4, }, orderId: "7BbXGEIWNldxAzrtGf9GPVZTwZ4F", }, }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ORDERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `values` | `Record\` | Yes | — | A map of requests that correspond to individual upsert operations for custom attributes. | Use the official [BulkUpsertOrderCustomAttributes reference](https://developer.squareup.com/reference/square/order-custom-attributes-api/bulk-upsert-order-custom-attributes) for provider field semantics and limits. ## Output Returns the official `Square.BulkUpsertOrderCustomAttributesResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Calculate Loyalty Points Source: https://docs.automate.ax/reference/integrations/square/actions/calculate-loyalty-points Calculates the number of points a buyer can earn from a purchase. `square.calculateLoyaltyPoints` calculates the number of points a buyer can earn from a purchase. ## Example ```ts automations/square-calculate-loyalty-points.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Calculate Square Loyalty Points", () => { onDashboardRun({ title: "Calculate Square Loyalty Points" }) square.calculateLoyaltyPoints({ programId: "program_id", orderId: "RFZfrdtm3mhO1oGzf5Cx7fEMsmGZY", loyaltyAccountId: "79b807d2-d786-46a9-933b-918028d7a8c5", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `LOYALTY_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `programId` | `string` | Yes | — | The ID of the loyalty program, which defines the rules for accruing points. | | `orderId` | `string \| null` | No | — | The order ID for which to calculate the points. Specify this field if your application uses the Orders API to process orders. Otherwise, specify the `transaction_amount_money`. | | `transactionAmountMoney` | `Square.Money` | No | — | The purchase amount for which to calculate the points. Specify this field if your application does not use the Orders API to process orders. Otherwise, specify the `order_id`. | | `loyaltyAccountId` | `string \| null` | No | — | The ID of the target loyalty account. Optionally specify this field if your application uses the Orders API to process orders. If specified, the `promotion_points` field in the response shows the number of points the buyer would earn from the purchase. In this case, Square uses the account ID to determine whether the promotion's `trigger_limit` (the maximum number of times that a buyer can trigger the promotion) has been reached. If not specified, the `promotion_points` field shows the number of points the purchase qualifies for regardless of the trigger limit. | Use the official [CalculateLoyaltyPoints reference](https://developer.squareup.com/reference/square/loyalty-api/calculate-loyalty-points) for provider field semantics and limits. ## Output Returns the official `Square.CalculateLoyaltyPointsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Calculate Order Source: https://docs.automate.ax/reference/integrations/square/actions/calculate-order Enables applications to preview order pricing without creating an order. `square.calculateOrder` enables applications to preview order pricing without creating an order. ## Example ```ts automations/square-calculate-order.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Calculate Square Order", () => { onDashboardRun({ title: "Calculate Square Order" }) square.calculateOrder({ order: { locationId: "D7AVYMEAPJ3A3", lineItems: [ { name: "Item 1", quantity: "1", basePriceMoney: { amount: BigInt("500"), currency: "USD", }, }, { name: "Item 2", quantity: "2", basePriceMoney: { amount: BigInt("300"), currency: "USD", }, }, ], discounts: [ { name: "50% Off", percentage: "50", scope: "ORDER", }, ], }, }) }) ``` ## Inputs Every input accepts a compatible signal. It does not require an additional Square OAuth permission. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `order` | `Square.Order` | Yes | — | The order to be calculated. Expects the entire order, not a sparse update. | | `proposedRewards` | `Square.OrderReward[] \| null` | No | — | Identifies one or more loyalty reward tiers to apply during the order calculation. The discounts defined by the reward tiers are added to the order only to preview the effect of applying the specified rewards. The rewards do not correspond to actual redemptions; that is, no `reward`s are created. Therefore, the reward `id`s are random strings used only to reference the reward tier. | Use the official [CalculateOrder reference](https://developer.squareup.com/reference/square/orders-api/calculate-order) for provider field semantics and limits. ## Output Returns the official `Square.CalculateOrderResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Cancel Booking Source: https://docs.automate.ax/reference/integrations/square/actions/cancel-booking Cancels an existing booking. `square.cancelBooking` cancels an existing booking. ## Example ```ts automations/square-cancel-booking.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Cancel Square Booking", () => { onDashboardRun({ title: "Cancel Square Booking" }) square.cancelBooking({ bookingId: "booking_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `APPOINTMENTS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `bookingId` | `string` | Yes | — | The ID of the Booking object representing the to-be-cancelled booking. | | `idempotencyKey` | `string \| null` | No | — | A unique key to make this request an idempotent operation. | | `bookingVersion` | `number \| null` | No | — | The revision number for the booking used for optimistic concurrency. | Use the official [CancelBooking reference](https://developer.squareup.com/reference/square/bookings-api/cancel-booking) for provider field semantics and limits. ## Output Returns the official `Square.CancelBookingResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Cancel Invoice Source: https://docs.automate.ax/reference/integrations/square/actions/cancel-invoice Cancels an invoice. `square.cancelInvoice` cancels an invoice. ## Example ```ts automations/square-cancel-invoice.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Cancel Square Invoice", () => { onDashboardRun({ title: "Cancel Square Invoice" }) square.cancelInvoice({ invoiceId: "invoice_id", version: 0, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `INVOICES_WRITE` and `ORDERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `invoiceId` | `string` | Yes | — | The ID of the invoice to cancel. | | `version` | `number` | Yes | — | The version of the invoice to cancel. If you do not know the version, you can call GetInvoice or ListInvoices. | Use the official [CancelInvoice reference](https://developer.squareup.com/reference/square/invoices-api/cancel-invoice) for provider field semantics and limits. ## Output Returns the official `Square.CancelInvoiceResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Cancel Loyalty Promotion Source: https://docs.automate.ax/reference/integrations/square/actions/cancel-loyalty-promotion Cancels a loyalty promotion. `square.cancelLoyaltyPromotion` cancels a loyalty promotion. ## Example ```ts automations/square-cancel-loyalty-promotion.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Cancel Square Loyalty Promotion", () => { onDashboardRun({ title: "Cancel Square Loyalty Promotion" }) square.cancelLoyaltyPromotion({ programId: "program_id", promotionId: "promotion_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `LOYALTY_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `programId` | `string` | Yes | — | The ID of the base loyalty program. | | `promotionId` | `string` | Yes | — | The ID of the loyalty promotion to cancel. You can cancel a promotion that has an `ACTIVE` or `SCHEDULED` status. | Use the official [CancelLoyaltyPromotion reference](https://developer.squareup.com/reference/square/loyalty-api/cancel-loyalty-promotion) for provider field semantics and limits. ## Output Returns the official `Square.CancelLoyaltyPromotionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Cancel Payment Source: https://docs.automate.ax/reference/integrations/square/actions/cancel-payment Cancels (voids) a payment. `square.cancelPayment` cancels (voids) a payment. ## Example ```ts automations/square-cancel-payment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Cancel Square Payment", () => { onDashboardRun({ title: "Cancel Square Payment" }) square.cancelPayment({ paymentId: "payment_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `PAYMENTS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `paymentId` | `string` | Yes | — | The ID of the payment to cancel. | Use the official [CancelPayment reference](https://developer.squareup.com/reference/square/payments-api/cancel-payment) for provider field semantics and limits. ## Output Returns the official `Square.CancelPaymentResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Cancel Payment By Idempotency Key Source: https://docs.automate.ax/reference/integrations/square/actions/cancel-payment-by-idempotency-key Cancels (voids) a payment identified by the idempotency key that is specified in the request. `square.cancelPaymentByIdempotencyKey` cancels (voids) a payment identified by the idempotency key that is specified in the request. ## Example ```ts automations/square-cancel-payment-by-idempotency-key.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Cancel Square Payment By Idempotency Key", () => { onDashboardRun({ title: "Cancel Square Payment By Idempotency Key" }) square.cancelPaymentByIdempotencyKey({ idempotencyKey: "a7e36d40-d24b-11e8-b568-0800200c9a66", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `PAYMENTS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `idempotencyKey` | `string` | Yes | — | The `idempotency_key` identifying the payment to be canceled. | Use the official [CancelPaymentByIdempotencyKey reference](https://developer.squareup.com/reference/square/payments-api/cancel-payment-by-idempotency-key) for provider field semantics and limits. ## Output Returns the official `Square.CancelPaymentByIdempotencyKeyResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Cancel Subscription Source: https://docs.automate.ax/reference/integrations/square/actions/cancel-subscription Schedules a `CANCEL` action to cancel an active subscription. `square.cancelSubscription` schedules a `CANCEL` action to cancel an active subscription. ## Example ```ts automations/square-cancel-subscription.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Cancel Square Subscription", () => { onDashboardRun({ title: "Cancel Square Subscription" }) square.cancelSubscription({ subscriptionId: "subscription_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `SUBSCRIPTIONS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `subscriptionId` | `string` | Yes | — | The ID of the subscription to cancel. | Use the official [CancelSubscription reference](https://developer.squareup.com/reference/square/subscriptions-api/cancel-subscription) for provider field semantics and limits. ## Output Returns the official `Square.CancelSubscriptionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Cancel Terminal Action Source: https://docs.automate.ax/reference/integrations/square/actions/cancel-terminal-action Cancels a Terminal action request if the status of the request permits it. `square.cancelTerminalAction` cancels a Terminal action request if the status of the request permits it. ## Example ```ts automations/square-cancel-terminal-action.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Cancel Square Terminal Action", () => { onDashboardRun({ title: "Cancel Square Terminal Action" }) square.cancelTerminalAction({ actionId: "action_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `PAYMENTS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `actionId` | `string` | Yes | — | Unique ID for the desired `TerminalAction`. | Use the official [CancelTerminalAction reference](https://developer.squareup.com/reference/square/terminal-api/cancel-terminal-action) for provider field semantics and limits. ## Output Returns the official `Square.CancelTerminalActionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Cancel Terminal Checkout Source: https://docs.automate.ax/reference/integrations/square/actions/cancel-terminal-checkout Cancels a Terminal checkout request if the status of the request permits it. `square.cancelTerminalCheckout` cancels a Terminal checkout request if the status of the request permits it. ## Example ```ts automations/square-cancel-terminal-checkout.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Cancel Square Terminal Checkout", () => { onDashboardRun({ title: "Cancel Square Terminal Checkout" }) square.cancelTerminalCheckout({ checkoutId: "checkout_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `PAYMENTS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `checkoutId` | `string` | Yes | — | The unique ID for the desired `TerminalCheckout`. | Use the official [CancelTerminalCheckout reference](https://developer.squareup.com/reference/square/terminal-api/cancel-terminal-checkout) for provider field semantics and limits. ## Output Returns the official `Square.CancelTerminalCheckoutResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Cancel Terminal Refund Source: https://docs.automate.ax/reference/integrations/square/actions/cancel-terminal-refund Cancels an Interac Terminal refund request by refund request ID if the status of the request permits it. `square.cancelTerminalRefund` cancels an Interac Terminal refund request by refund request ID if the status of the request permits it. ## Example ```ts automations/square-cancel-terminal-refund.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Cancel Square Terminal Refund", () => { onDashboardRun({ title: "Cancel Square Terminal Refund" }) square.cancelTerminalRefund({ terminalRefundId: "terminal_refund_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `PAYMENTS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `terminalRefundId` | `string` | Yes | — | The unique ID for the desired `TerminalRefund`. | Use the official [CancelTerminalRefund reference](https://developer.squareup.com/reference/square/terminal-api/cancel-terminal-refund) for provider field semantics and limits. ## Output Returns the official `Square.CancelTerminalRefundResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Cancel Transfer Order Source: https://docs.automate.ax/reference/integrations/square/actions/cancel-transfer-order Cancels a transfer order in [STARTED](entity:TransferOrderStatus) or [PARTIALLY_RECEIVED](entity:TransferOrderStatus) status. `square.cancelTransferOrder` cancels a transfer order in [STARTED](entity:TransferOrderStatus) or [PARTIALLY\_RECEIVED](entity:TransferOrderStatus) status. ## Example ```ts automations/square-cancel-transfer-order.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Cancel Square Transfer Order", () => { onDashboardRun({ title: "Cancel Square Transfer Order" }) square.cancelTransferOrder({ transferOrderId: "transfer_order_id", idempotencyKey: "65cc0586-3e82-4d08-b524-3885cffd52", version: BigInt("1753117449752"), }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `INVENTORY_READ` and `INVENTORY_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `transferOrderId` | `string` | Yes | — | The ID of the transfer order to cancel. Must be in STARTED or PARTIALLY\_RECEIVED status. | | `idempotencyKey` | `string` | Yes | — | A unique string that identifies this UpdateTransferOrder request. Keys can be any valid string but must be unique for every UpdateTransferOrder request. | | `version` | `bigint` | No | — | Version for optimistic concurrency | Use the official [CancelTransferOrder reference](https://developer.squareup.com/reference/square/transfer-order-api/cancel-transfer-order) for provider field semantics and limits. ## Output Returns the official `Square.CancelTransferOrderResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Catalog Info Source: https://docs.automate.ax/reference/integrations/square/actions/catalog-info Retrieves information about the Square Catalog API, such as batch size limits that can be used by the `BatchUpsertCatalogObjects` endpoint. `square.catalogInfo` retrieves information about the Square Catalog API, such as batch size limits that can be used by the `BatchUpsertCatalogObjects` endpoint. ## Example ```ts automations/square-catalog-info.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Catalog Square Info", () => { onDashboardRun({ title: "Catalog Square Info" }) square.catalogInfo() }) ``` ## Inputs Every input accepts a compatible signal. It requires `ITEMS_READ`. This action has no inputs. Use the official [CatalogInfo reference](https://developer.squareup.com/reference/square/catalog-api/catalog-info) for provider field semantics and limits. ## Output Returns the official `Square.CatalogInfoResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Change Billing Anchor Date Source: https://docs.automate.ax/reference/integrations/square/actions/change-billing-anchor-date Changes the [billing anchor date](https://developer.squareup.com/docs/subscriptions-api/subscription-billing#billing-dates) for a subscription. `square.changeBillingAnchorDate` changes the [billing anchor date](https://developer.squareup.com/docs/subscriptions-api/subscription-billing#billing-dates) for a subscription. ## Example ```ts automations/square-change-billing-anchor-date.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Change Square Billing Anchor Date", () => { onDashboardRun({ title: "Change Square Billing Anchor Date" }) square.changeBillingAnchorDate({ subscriptionId: "subscription_id", monthlyBillingAnchorDate: 1, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ITEMS_READ` and `SUBSCRIPTIONS_READ` and `SUBSCRIPTIONS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `subscriptionId` | `string` | Yes | — | The ID of the subscription to update the billing anchor date. | | `monthlyBillingAnchorDate` | `number \| null` | No | — | The anchor day for the billing cycle. | | `effectiveDate` | `string \| null` | No | — | The `YYYY-MM-DD`-formatted date when the scheduled `BILLING_ANCHOR_CHANGE` action takes place on the subscription. When this date is unspecified or falls within the current billing cycle, the billing anchor date is changed immediately. | Use the official [ChangeBillingAnchorDate reference](https://developer.squareup.com/reference/square/subscriptions-api/change-billing-anchor-date) for provider field semantics and limits. ## Output Returns the official `Square.ChangeBillingAnchorDateResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Clone Order Source: https://docs.automate.ax/reference/integrations/square/actions/clone-order Creates a new order, in the `DRAFT` state, by duplicating an existing order. `square.cloneOrder` creates a new order, in the `DRAFT` state, by duplicating an existing order. ## Example ```ts automations/square-clone-order.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Clone Square Order", () => { onDashboardRun({ title: "Clone Square Order" }) square.cloneOrder({ orderId: "ZAISEM52YcpmcWAzERDOyiWS123", version: 3, idempotencyKey: "UNIQUE_STRING", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ORDERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `orderId` | `string` | Yes | — | The ID of the order to clone. | | `version` | `number` | No | — | An optional order version for concurrency protection. If a version is provided, it must match the latest stored version of the order to clone. If a version is not provided, the API clones the latest version. | | `idempotencyKey` | `string \| null` | No | — | A value you specify that uniquely identifies this clone request. If you are unsure whether a particular order was cloned successfully, you can reattempt the call with the same idempotency key without worrying about creating duplicate cloned orders. The originally cloned order is returned. For more information, see [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency). | Use the official [CloneOrder reference](https://developer.squareup.com/reference/square/orders-api/clone-order) for provider field semantics and limits. ## Output Returns the official `Square.CloneOrderResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Complete Payment Source: https://docs.automate.ax/reference/integrations/square/actions/complete-payment Completes (captures) a payment. `square.completePayment` completes (captures) a payment. ## Example ```ts automations/square-complete-payment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Complete Square Payment", () => { onDashboardRun({ title: "Complete Square Payment" }) square.completePayment({ paymentId: "payment_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `PAYMENTS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `paymentId` | `string` | Yes | — | The unique ID identifying the payment to be completed. | | `versionToken` | `string \| null` | No | — | Used for optimistic concurrency. This opaque token identifies the current `Payment` version that the caller expects. If the server has a different version of the Payment, the update fails and a response with a VERSION\_MISMATCH error is returned. | Use the official [CompletePayment reference](https://developer.squareup.com/reference/square/payments-api/complete-payment) for provider field semantics and limits. ## Output Returns the official `Square.CompletePaymentResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Bank Account Source: https://docs.automate.ax/reference/integrations/square/actions/create-bank-account Store a bank account on file for a square account. `square.createBankAccount` store a bank account on file for a square account. ## Example ```ts automations/square-create-bank-account.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Create Square Bank Account", () => { onDashboardRun({ title: "Create Square Bank Account" }) square.createBankAccount({ idempotencyKey: "4e43559a-f0fd-47d3-9da2-7ea1f97d94be", sourceId: "bnon:CA4SEHsQwr0rx6DbWLD5BQaqMnoYAQ", customerId: "HM3B2D5JKGZ69359BTEHXM2V8M", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `BANK_ACCOUNTS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `idempotencyKey` | `string` | Yes | — | Unique ID. For more information, see the [Idempotency](https://developer.squareup.com/docs/working-with-apis/idempotency). | | `sourceId` | `string` | Yes | — | The ID of the source that represents the bank account information to be stored. This field accepts the payment token created by WebSDK | | `customerId` | `string` | No | — | The ID of the customer associated with the bank account to be stored. | Use the official [CreateBankAccount reference](https://developer.squareup.com/reference/square/bank-accounts-api/create-bank-account) for provider field semantics and limits. ## Output Returns the official `Square.CreateBankAccountResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Booking Source: https://docs.automate.ax/reference/integrations/square/actions/create-booking Creates a booking. `square.createBooking` creates a booking. ## Example ```ts automations/square-create-booking.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Create Square Booking", () => { onDashboardRun({ title: "Create Square Booking" }) square.createBooking({ booking: {}, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `APPOINTMENTS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `idempotencyKey` | `string` | No | — | A unique key to make this request an idempotent operation. | | `booking` | `Square.Booking` | Yes | — | The details of the booking to be created. | Use the official [CreateBooking reference](https://developer.squareup.com/reference/square/bookings-api/create-booking) for provider field semantics and limits. ## Output Returns the official `Square.CreateBookingResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Booking Custom Attribute Definition Source: https://docs.automate.ax/reference/integrations/square/actions/create-booking-custom-attribute-definition Creates a bookings custom attribute definition. `square.createBookingCustomAttributeDefinition` creates a bookings custom attribute definition. ## Example ```ts automations/square-create-booking-custom-attribute-definition.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "Create Square Booking Custom Attribute Definition", () => { onDashboardRun({ title: "Create Square Booking Custom Attribute Definition", }) square.createBookingCustomAttributeDefinition({ customAttributeDefinition: {}, }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `APPOINTMENTS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `customAttributeDefinition` | `Square.CustomAttributeDefinition` | Yes | — | The custom attribute definition to create, with the following fields: - `key` - `name`. If provided, `name` must be unique (case-sensitive) across all visible booking-related custom attribute definitions for the seller. - `description` - `visibility`. Note that all custom attributes are visible in exported booking data, including those set to `VISIBILITY_HIDDEN`. - `schema`. With the exception of the `Selection` data type, the `schema` is specified as a simple URL to the JSON schema definition hosted on the Square CDN. For more information, see [Specifying the schema](https://developer.squareup.com/docs/booking-custom-attributes-api/custom-attribute-definitions#specify-schema). | | `idempotencyKey` | `string` | No | — | A unique identifier for this request, used to ensure idempotency. For more information, see [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency). | Use the official [CreateBookingCustomAttributeDefinition reference](https://developer.squareup.com/reference/square/booking-custom-attributes-api/create-booking-custom-attribute-definition) for provider field semantics and limits. ## Output Returns the official `Square.CreateBookingCustomAttributeDefinitionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Break Type Source: https://docs.automate.ax/reference/integrations/square/actions/create-break-type Creates a new `BreakType`. `square.createBreakType` creates a new `BreakType`. ## Example ```ts automations/square-create-break-type.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Create Square Break Type", () => { onDashboardRun({ title: "Create Square Break Type" }) square.createBreakType({ idempotencyKey: "PAD3NG5KSN2GL", breakType: { locationId: "CGJN03P1D08GF", breakName: "Lunch Break", expectedDuration: "PT30M", isPaid: true, }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `TIMECARDS_SETTINGS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `idempotencyKey` | `string` | No | — | A unique string value to ensure the idempotency of the operation. | | `breakType` | `Square.BreakType` | Yes | — | The `BreakType` to be created. | Use the official [CreateBreakType reference](https://developer.squareup.com/reference/square/labor-api/create-break-type) for provider field semantics and limits. ## Output Returns the official `Square.CreateBreakTypeResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Card Source: https://docs.automate.ax/reference/integrations/square/actions/create-card Adds a card on file to an existing merchant. `square.createCard` adds a card on file to an existing merchant. ## Example ```ts automations/square-create-card.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Create Square Card", () => { onDashboardRun({ title: "Create Square Card" }) square.createCard({ idempotencyKey: "4935a656-a929-4792-b97c-8848be85c27c", sourceId: "cnon:uIbfJXhXETSP197M3GB", card: { cardholderName: "Amelia Earhart", billingAddress: { addressLine1: "500 Electric Ave", addressLine2: "Suite 600", locality: "New York", administrativeDistrictLevel1: "NY", postalCode: "10003", country: "US", }, customerId: "VDKXEEKPJN48QDG3BGGFAK05P8", referenceId: "user-id-1", }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `PAYMENTS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `idempotencyKey` | `string` | Yes | — | A unique string that identifies this CreateCard request. Keys can be any valid string and must be unique for every request. Max: 45 characters See [Idempotency keys](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency) for more information. | | `sourceId` | `string` | Yes | — | The ID of the source which represents the card information to be stored. This can be a card nonce or a payment id. | | `verificationToken` | `string` | No | — | An identifying token generated by [Payments.verifyBuyer()](https://developer.squareup.com/reference/sdks/web/payments/objects/Payments#Payments.verifyBuyer). Verification tokens encapsulate customer device information and 3-D Secure challenge results to indicate that Square has verified the buyer identity. See the [SCA Overview](https://developer.squareup.com/docs/sca-overview). | | `card` | `Square.Card` | Yes | — | Payment details associated with the card to be stored. | Use the official [CreateCard reference](https://developer.squareup.com/reference/square/cards-api/create-card) for provider field semantics and limits. ## Output Returns the official `Square.CreateCardResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Catalog Image Source: https://docs.automate.ax/reference/integrations/square/actions/create-catalog-image Uploads an image file to be represented by a [CatalogImage](entity:CatalogImage) object that can be linked to an existing [CatalogObject](entity:CatalogObject) instance. `square.createCatalogImage` uploads an image file to be represented by a [CatalogImage](entity:CatalogImage) object that can be linked to an existing [CatalogObject](entity:CatalogObject) instance. ## Example ```ts automations/square-create-catalog-image.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Create Square Catalog Image", () => { onDashboardRun({ title: "Create Square Catalog Image" }) square.createCatalogImage({ imageFile: new File(["image bytes"], "catalog.png", { type: "image/png", }), request: { idempotencyKey: crypto.randomUUID(), image: { id: "#catalog-image", imageData: {}, type: "IMAGE", }, }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ITEMS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `request` | `Square.CreateCatalogImageRequest` | No | — | Square `request` request field. | | `imageFile` | `File \| fs.ReadStream \| Blob \| undefined` | No | — | Square `imageFile` request field. | Use the official [CreateCatalogImage reference](https://developer.squareup.com/reference/square/catalog-api/create-catalog-image) for provider field semantics and limits. ## Output Returns the official `Square.CreateCatalogImageResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Customer Source: https://docs.automate.ax/reference/integrations/square/actions/create-customer Creates a new customer for a business. `square.createCustomer` creates a new customer for a business. ## Example ```ts automations/square-create-customer.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Create Square Customer", () => { onDashboardRun({ title: "Create Square Customer" }) square.createCustomer({ givenName: "Amelia", familyName: "Earhart", emailAddress: "Amelia.Earhart@example.com", address: { addressLine1: "500 Electric Ave", addressLine2: "Suite 600", locality: "New York", administrativeDistrictLevel1: "NY", postalCode: "10003", country: "US", }, phoneNumber: "+1-212-555-4240", referenceId: "YOUR_REFERENCE_ID", note: "a customer", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `idempotencyKey` | `string` | No | — | The idempotency key for the request. For more information, see [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency). | | `givenName` | `string` | No | — | The given name (that is, the first name) associated with the customer profile. The maximum length for this value is 300 characters. | | `familyName` | `string` | No | — | The family name (that is, the last name) associated with the customer profile. The maximum length for this value is 300 characters. | | `companyName` | `string` | No | — | A business name associated with the customer profile. The maximum length for this value is 500 characters. | | `nickname` | `string` | No | — | A nickname for the customer profile. The maximum length for this value is 100 characters. | | `emailAddress` | `string` | No | — | The email address associated with the customer profile. The maximum length for this value is 254 characters. | | `address` | `Square.Address` | No | — | The physical address associated with the customer profile. For maximum length constraints, see [Customer addresses](https://developer.squareup.com/docs/customers-api/use-the-api/keep-records#address). The `first_name` and `last_name` fields are ignored if they are present in the request. | | `phoneNumber` | `string` | No | — | The phone number associated with the customer profile. The phone number must be valid and can contain 9–16 digits, with an optional `+` prefix and country code. For more information, see [Customer phone numbers](https://developer.squareup.com/docs/customers-api/use-the-api/keep-records#phone-number). | | `referenceId` | `string` | No | — | An optional second ID used to associate the customer profile with an entity in another system. The maximum length for this value is 100 characters. | | `note` | `string` | No | — | A custom note associated with the customer profile. | | `birthday` | `string` | No | — | The birthday associated with the customer profile, in `YYYY-MM-DD` or `MM-DD` format. For example, specify `1998-09-21` for September 21, 1998, or `09-21` for September 21. Birthdays are returned in `YYYY-MM-DD` format, where `YYYY` is the specified birth year or `0000` if a birth year is not specified. | | `taxIds` | `Square.CustomerTaxIds` | No | — | The tax ID associated with the customer profile. This field is available only for customers of sellers in EU countries or the United Kingdom. For more information, see [Customer tax IDs](https://developer.squareup.com/docs/customers-api/what-it-does#customer-tax-ids). | Use the official [CreateCustomer reference](https://developer.squareup.com/reference/square/customers-api/create-customer) for provider field semantics and limits. ## Output Returns the official `Square.CreateCustomerResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Customer Custom Attribute Definition Source: https://docs.automate.ax/reference/integrations/square/actions/create-customer-custom-attribute-definition Creates a customer-related [custom attribute definition](entity:CustomAttributeDefinition) for a Square seller account. `square.createCustomerCustomAttributeDefinition` creates a customer-related [custom attribute definition](entity:CustomAttributeDefinition) for a Square seller account. ## Example ```ts automations/square-create-customer-custom-attribute-definition.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "Create Square Customer Custom Attribute Definition", () => { onDashboardRun({ title: "Create Square Customer Custom Attribute Definition", }) square.createCustomerCustomAttributeDefinition({ customAttributeDefinition: { key: "favoritemovie", schema: { $ref: "https://developer-production-s.squarecdn.com/schemas/v1/common.json#squareup.common.String", }, name: "Favorite Movie", description: "The favorite movie of the customer.", visibility: "VISIBILITY_HIDDEN", }, }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `customAttributeDefinition` | `Square.CustomAttributeDefinition` | Yes | — | The custom attribute definition to create. Note the following: - With the exception of the `Selection` data type, the `schema` is specified as a simple URL to the JSON schema definition hosted on the Square CDN. For more information, including supported values and constraints, see [Specifying the schema](https://developer.squareup.com/docs/customer-custom-attributes-api/custom-attribute-definitions#specify-schema). - If provided, `name` must be unique (case-sensitive) across all visible customer-related custom attribute definitions for the seller. - All custom attributes are visible in exported customer data, including those set to `VISIBILITY_HIDDEN`. | | `idempotencyKey` | `string` | No | — | A unique identifier for this request, used to ensure idempotency. For more information, see [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency). | Use the official [CreateCustomerCustomAttributeDefinition reference](https://developer.squareup.com/reference/square/customer-custom-attributes-api/create-customer-custom-attribute-definition) for provider field semantics and limits. ## Output Returns the official `Square.CreateCustomerCustomAttributeDefinitionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Customer Group Source: https://docs.automate.ax/reference/integrations/square/actions/create-customer-group Creates a new customer group for a business. `square.createCustomerGroup` creates a new customer group for a business. ## Example ```ts automations/square-create-customer-group.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Create Square Customer Group", () => { onDashboardRun({ title: "Create Square Customer Group" }) square.createCustomerGroup({ group: { name: "Loyal Customers", }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `idempotencyKey` | `string` | No | — | The idempotency key for the request. For more information, see [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency). | | `group` | `Square.CustomerGroup` | Yes | — | The customer group to create. | Use the official [CreateCustomerGroup reference](https://developer.squareup.com/reference/square/customer-groups-api/create-customer-group) for provider field semantics and limits. ## Output Returns the official `Square.CreateCustomerGroupResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Device Code Source: https://docs.automate.ax/reference/integrations/square/actions/create-device-code Creates a DeviceCode that can be used to login to a Square Terminal device to enter the connected terminal mode. `square.createDeviceCode` creates a DeviceCode that can be used to login to a Square Terminal device to enter the connected terminal mode. ## Example ```ts automations/square-create-device-code.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Create Square Device Code", () => { onDashboardRun({ title: "Create Square Device Code" }) square.createDeviceCode({ idempotencyKey: "01bb00a6-0c86-4770-94ed-f5fca973cd56", deviceCode: { name: "Counter 1", productType: "TERMINAL_API", locationId: "B5E4484SHHNYH", }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `DEVICE_CREDENTIAL_MANAGEMENT`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `idempotencyKey` | `string` | Yes | — | A unique string that identifies this CreateDeviceCode request. Keys can be any valid string but must be unique for every CreateDeviceCode request. See [Idempotency keys](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency) for more information. | | `deviceCode` | `Square.DeviceCode` | Yes | — | The device code to create. | Use the official [CreateDeviceCode reference](https://developer.squareup.com/reference/square/devices-api/create-device-code) for provider field semantics and limits. ## Output Returns the official `Square.CreateDeviceCodeResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Dispute Evidence File Source: https://docs.automate.ax/reference/integrations/square/actions/create-dispute-evidence-file Uploads a file to use as evidence in a dispute challenge. `square.createDisputeEvidenceFile` uploads a file to use as evidence in a dispute challenge. ## Example ```ts automations/square-create-dispute-evidence-file.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Create Square Dispute Evidence File", () => { onDashboardRun({ title: "Create Square Dispute Evidence File" }) square.createDisputeEvidenceFile({ disputeId: "dispute_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `DISPUTES_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `disputeId` | `string` | Yes | — | The ID of the dispute for which you want to upload evidence. | | `request` | `Square.CreateDisputeEvidenceFileRequest` | No | — | Square `request` request field. | | `imageFile` | `File \| fs.ReadStream \| Blob \| undefined` | No | — | Square `imageFile` request field. | Use the official [CreateDisputeEvidenceFile reference](https://developer.squareup.com/reference/square/disputes-api/create-dispute-evidence-file) for provider field semantics and limits. ## Output Returns the official `Square.CreateDisputeEvidenceFileResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Dispute Evidence Text Source: https://docs.automate.ax/reference/integrations/square/actions/create-dispute-evidence-text Uploads text to use as evidence for a dispute challenge. `square.createDisputeEvidenceText` uploads text to use as evidence for a dispute challenge. ## Example ```ts automations/square-create-dispute-evidence-text.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Create Square Dispute Evidence Text", () => { onDashboardRun({ title: "Create Square Dispute Evidence Text" }) square.createDisputeEvidenceText({ disputeId: "dispute_id", idempotencyKey: "ed3ee3933d946f1514d505d173c82648", evidenceType: "TRACKING_NUMBER", evidenceText: "1Z8888888888888888", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `DISPUTES_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `disputeId` | `string` | Yes | — | The ID of the dispute for which you want to upload evidence. | | `idempotencyKey` | `string` | Yes | — | A unique key identifying the request. For more information, see [Idempotency](https://developer.squareup.com/docs/working-with-apis/idempotency). | | `evidenceType` | `Square.DisputeEvidenceType` | No | — | The type of evidence you are uploading. See [DisputeEvidenceType](#type-disputeevidencetype) for possible values | | `evidenceText` | `string` | Yes | — | The evidence string. | Use the official [CreateDisputeEvidenceText reference](https://developer.squareup.com/reference/square/disputes-api/create-dispute-evidence-text) for provider field semantics and limits. ## Output Returns the official `Square.CreateDisputeEvidenceTextResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Gift Card Source: https://docs.automate.ax/reference/integrations/square/actions/create-gift-card Creates a digital gift card or registers a physical (plastic) gift card. `square.createGiftCard` creates a digital gift card or registers a physical (plastic) gift card. ## Example ```ts automations/square-create-gift-card.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Create Square Gift Card", () => { onDashboardRun({ title: "Create Square Gift Card" }) square.createGiftCard({ idempotencyKey: "NC9Tm69EjbjtConu", locationId: "81FN9BNFZTKS4", giftCard: { type: "DIGITAL", }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `GIFTCARDS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `idempotencyKey` | `string` | Yes | — | A unique identifier for this request, used to ensure idempotency. For more information, see [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency). | | `locationId` | `string` | Yes | — | The ID of the location where the gift card should be registered for reporting purposes. Gift cards can be redeemed at any of the seller's locations. | | `giftCard` | `Square.GiftCard` | Yes | — | The gift card to create. The `type` field is required for this request. The `gan_source` and `gan` fields are included as follows: To direct Square to generate a 16-digit GAN, omit `gan_source` and `gan`. To provide a custom GAN, include `gan_source` and `gan`. - For `gan_source`, specify `OTHER`. - For `gan`, provide a custom GAN containing 8 to 20 alphanumeric characters. The GAN must be unique for the seller and cannot start with the same bank identification number (BIN) as major credit cards. Do not use GANs that are easy to guess (such as 12345678) because they greatly increase the risk of fraud. It is the responsibility of the developer to ensure the security of their custom GANs. For more information, see [Custom GANs](https://developer.squareup.com/docs/gift-cards/using-gift-cards-api#custom-gans). To register an unused, physical gift card that the seller previously ordered from Square, include `gan` and provide the GAN that is printed on the gift card. | Use the official [CreateGiftCard reference](https://developer.squareup.com/reference/square/gift-cards-api/create-gift-card) for provider field semantics and limits. ## Output Returns the official `Square.CreateGiftCardResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Gift Card Activity Source: https://docs.automate.ax/reference/integrations/square/actions/create-gift-card-activity Creates a gift card activity to manage the balance or state of a [gift card](entity:GiftCard). `square.createGiftCardActivity` creates a gift card activity to manage the balance or state of a [gift card](entity:GiftCard). ## Example ```ts automations/square-create-gift-card-activity.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Create Square Gift Card Activity", () => { onDashboardRun({ title: "Create Square Gift Card Activity" }) square.createGiftCardActivity({ idempotencyKey: "U16kfr-kA70er-q4Rsym-7U7NnY", giftCardActivity: { type: "ACTIVATE", locationId: "81FN9BNFZTKS4", giftCardId: "gftc:6d55a72470d940c6ba09c0ab8ad08d20", activateActivityDetails: { orderId: "jJNGHm4gLI6XkFbwtiSLqK72KkAZY", lineItemUid: "eIWl7X0nMuO9Ewbh0ChIx", }, }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `GIFTCARDS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `idempotencyKey` | `string` | Yes | — | A unique string that identifies the `CreateGiftCardActivity` request. | | `giftCardActivity` | `Square.GiftCardActivity` | Yes | — | The activity to create for the gift card. This activity must specify `gift_card_id` or `gift_card_gan` for the target gift card, the `location_id` where the activity occurred, and the activity `type` along with the corresponding activity details. | Use the official [CreateGiftCardActivity reference](https://developer.squareup.com/reference/square/gift-card-activities-api/create-gift-card-activity) for provider field semantics and limits. ## Output Returns the official `Square.CreateGiftCardActivityResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Inventory Adjustment Reason Source: https://docs.automate.ax/reference/integrations/square/actions/create-inventory-adjustment-reason Creates a custom inventory adjustment reason. `square.createInventoryAdjustmentReason` creates a custom inventory adjustment reason. ## Example ```ts automations/square-create-inventory-adjustment-reason.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Create Square Inventory Adjustment Reason", () => { onDashboardRun({ title: "Create Square Inventory Adjustment Reason" }) square.createInventoryAdjustmentReason({ idempotencyKey: "27b2f2b1-1c2a-4b9e-8f3a-0d9c3a1e5b47", adjustmentReason: { id: { type: "CUSTOM", }, name: "Donated to charity", direction: "DECREASE", }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `INVENTORY_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `idempotencyKey` | `string` | Yes | — | A client-supplied, universally unique identifier to make this CreateInventoryAdjustmentReason request idempotent. | | `adjustmentReason` | `Square.InventoryAdjustmentReason` | Yes | — | The custom inventory adjustment reason to create. Only custom adjustment reasons can be created. | Use the official [CreateInventoryAdjustmentReason reference](https://developer.squareup.com/reference/square/inventory-api/create-inventory-adjustment-reason) for provider field semantics and limits. ## Output Returns the official `Square.CreateInventoryAdjustmentReasonResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Invoice Source: https://docs.automate.ax/reference/integrations/square/actions/create-invoice Creates a draft [invoice](entity:Invoice) for an order created using the Orders API. `square.createInvoice` creates a draft [invoice](entity:Invoice) for an order created using the Orders API. ## Example ```ts automations/square-create-invoice.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Create Square Invoice", () => { onDashboardRun({ title: "Create Square Invoice" }) square.createInvoice({ invoice: { locationId: "ES0RJRZYEC39A", orderId: "CAISENgvlJ6jLWAzERDzjyHVybY", primaryRecipient: { customerId: "JDKYHBWT1D4F8MFH63DBMEN8Y4", }, paymentRequests: [ { requestType: "BALANCE", dueDate: "2030-01-24", tippingEnabled: true, automaticPaymentSource: "NONE", reminders: [ { relativeScheduledDays: -1, message: "Your invoice is due tomorrow", }, ], }, ], deliveryMethod: "EMAIL", invoiceNumber: "inv-100", title: "Event Planning Services", description: "We appreciate your business!", scheduledAt: "2030-01-13T10:00:00Z", acceptedPaymentMethods: { card: true, squareGiftCard: false, bankAccount: false, buyNowPayLater: false, cashAppPay: false, }, customFields: [ { label: "Event Reference Number", value: "Ref. #1234", placement: "ABOVE_LINE_ITEMS", }, { label: "Terms of Service", value: "The terms of service are...", placement: "BELOW_LINE_ITEMS", }, ], saleOrServiceDate: "2030-01-24", storePaymentMethodEnabled: false, }, idempotencyKey: "ce3748f9-5fc1-4762-aa12-aae5e843f1f4", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `INVOICES_WRITE` and `ORDERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `invoice` | `Square.Invoice` | Yes | — | The invoice to create. | | `idempotencyKey` | `string` | No | — | A unique string that identifies the `CreateInvoice` request. If you do not provide `idempotency_key` (or provide an empty string as the value), the endpoint treats each request as independent. For more information, see [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency). | Use the official [CreateInvoice reference](https://developer.squareup.com/reference/square/invoices-api/create-invoice) for provider field semantics and limits. ## Output Returns the official `Square.CreateInvoiceResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Invoice Attachment Source: https://docs.automate.ax/reference/integrations/square/actions/create-invoice-attachment Uploads a file and attaches it to an invoice. `square.createInvoiceAttachment` uploads a file and attaches it to an invoice. ## Example ```ts automations/square-create-invoice-attachment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Create Square Invoice Attachment", () => { onDashboardRun({ title: "Create Square Invoice Attachment" }) square.createInvoiceAttachment({ invoiceId: "invoice_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `INVOICES_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `invoiceId` | `string` | Yes | — | The ID of the invoice to attach the file to. | | `request` | `Square.CreateInvoiceAttachmentRequestData` | No | — | Square `request` request field. | | `imageFile` | `File \| fs.ReadStream \| Blob \| undefined` | No | — | Square `imageFile` request field. | Use the official [CreateInvoiceAttachment reference](https://developer.squareup.com/reference/square/invoices-api/create-invoice-attachment) for provider field semantics and limits. ## Output Returns the official `Square.CreateInvoiceAttachmentResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Job Source: https://docs.automate.ax/reference/integrations/square/actions/create-job Creates a job in a seller account. `square.createJob` creates a job in a seller account. ## Example ```ts automations/square-create-job.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Create Square Job", () => { onDashboardRun({ title: "Create Square Job" }) square.createJob({ job: { title: "Cashier", isTipEligible: true, }, idempotencyKey: "idempotency-key-0", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `EMPLOYEES_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `job` | `Square.Job` | Yes | true | The job to create. The `title` field is required and `is_tip_eligible` defaults to true. | | `idempotencyKey` | `string` | Yes | — | A unique identifier for the `CreateJob` request. Keys can be any valid string, but must be unique for each request. For more information, see [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency). | Use the official [CreateJob reference](https://developer.squareup.com/reference/square/team-api/create-job) for provider field semantics and limits. ## Output Returns the official `Square.CreateJobResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Location Source: https://docs.automate.ax/reference/integrations/square/actions/create-location Creates a [location](https://developer.squareup.com/docs/locations-api). `square.createLocation` creates a [location](https://developer.squareup.com/docs/locations-api). ## Example ```ts automations/square-create-location.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Create Square Location", () => { onDashboardRun({ title: "Create Square Location" }) square.createLocation({ location: { name: "Midtown", address: { addressLine1: "1234 Peachtree St. NE", locality: "Atlanta", administrativeDistrictLevel1: "GA", postalCode: "30309", }, description: "Midtown Atlanta store", }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `MERCHANT_PROFILE_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `location` | `Square.Location` | No | — | The initial values of the location being created. The `name` field is required and must be unique within a seller account. All other fields are optional, but any information you care about for the location should be included. The remaining fields are automatically added based on the data from the [main location](https://developer.squareup.com/docs/locations-api#about-the-main-location). | Use the official [CreateLocation reference](https://developer.squareup.com/reference/square/locations-api/create-location) for provider field semantics and limits. ## Output Returns the official `Square.CreateLocationResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Location Custom Attribute Definition Source: https://docs.automate.ax/reference/integrations/square/actions/create-location-custom-attribute-definition Creates a location-related [custom attribute definition](entity:CustomAttributeDefinition) for a Square seller account. `square.createLocationCustomAttributeDefinition` creates a location-related [custom attribute definition](entity:CustomAttributeDefinition) for a Square seller account. ## Example ```ts automations/square-create-location-custom-attribute-definition.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "Create Square Location Custom Attribute Definition", () => { onDashboardRun({ title: "Create Square Location Custom Attribute Definition", }) square.createLocationCustomAttributeDefinition({ customAttributeDefinition: { key: "bestseller", schema: { $ref: "https://developer-production-s.squarecdn.com/schemas/v1/common.json#squareup.common.String", }, name: "Bestseller", description: "Bestselling item at location", visibility: "VISIBILITY_READ_WRITE_VALUES", }, }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `MERCHANT_PROFILE_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `customAttributeDefinition` | `Square.CustomAttributeDefinition` | Yes | — | The custom attribute definition to create. Note the following: - With the exception of the `Selection` data type, the `schema` is specified as a simple URL to the JSON schema definition hosted on the Square CDN. For more information, including supported values and constraints, see [Supported data types](https://developer.squareup.com/docs/devtools/customattributes/overview#supported-data-types). - `name` is required unless `visibility` is set to `VISIBILITY_HIDDEN`. | | `idempotencyKey` | `string` | No | — | A unique identifier for this request, used to ensure idempotency. For more information, see [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency). | Use the official [CreateLocationCustomAttributeDefinition reference](https://developer.squareup.com/reference/square/location-custom-attributes-api/create-location-custom-attribute-definition) for provider field semantics and limits. ## Output Returns the official `Square.CreateLocationCustomAttributeDefinitionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Loyalty Account Source: https://docs.automate.ax/reference/integrations/square/actions/create-loyalty-account Creates a loyalty account. `square.createLoyaltyAccount` creates a loyalty account. ## Example ```ts automations/square-create-loyalty-account.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Create Square Loyalty Account", () => { onDashboardRun({ title: "Create Square Loyalty Account" }) square.createLoyaltyAccount({ loyaltyAccount: { programId: "d619f755-2d17-41f3-990d-c04ecedd64dd", mapping: { phoneNumber: "+14155551234", }, }, idempotencyKey: "ec78c477-b1c3-4899-a209-a4e71337c996", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `LOYALTY_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `loyaltyAccount` | `Square.LoyaltyAccount` | Yes | — | The loyalty account to create. | | `idempotencyKey` | `string` | Yes | — | A unique string that identifies this `CreateLoyaltyAccount` request. Keys can be any valid string, but must be unique for every request. | Use the official [CreateLoyaltyAccount reference](https://developer.squareup.com/reference/square/loyalty-api/create-loyalty-account) for provider field semantics and limits. ## Output Returns the official `Square.CreateLoyaltyAccountResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Loyalty Promotion Source: https://docs.automate.ax/reference/integrations/square/actions/create-loyalty-promotion Creates a loyalty promotion for a [loyalty program](entity:LoyaltyProgram). `square.createLoyaltyPromotion` creates a loyalty promotion for a [loyalty program](entity:LoyaltyProgram). ## Example ```ts automations/square-create-loyalty-promotion.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Create Square Loyalty Promotion", () => { onDashboardRun({ title: "Create Square Loyalty Promotion" }) square.createLoyaltyPromotion({ programId: "program_id", loyaltyPromotion: { name: "Tuesday Happy Hour Promo", incentive: { type: "POINTS_MULTIPLIER", pointsMultiplierData: { multiplier: "3.0", }, }, availableTime: { timePeriods: [ "BEGIN:VEVENT\nDTSTART:20220816T160000\nDURATION:PT2H\nRRULE:FREQ=WEEKLY;BYDAY=TU\nEND:VEVENT", ], }, triggerLimit: { times: 1, interval: "DAY", }, minimumSpendAmountMoney: { amount: BigInt("2000"), currency: "USD", }, qualifyingCategoryIds: ["XTQPYLR3IIU9C44VRCB3XD12"], }, idempotencyKey: "ec78c477-b1c3-4899-a209-a4e71337c996", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `LOYALTY_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `programId` | `string` | Yes | — | The ID of the loyalty program to associate with the promotion. To get the program ID, call RetrieveLoyaltyProgram using the `main` keyword. | | `loyaltyPromotion` | `Square.LoyaltyPromotion` | Yes | — | The loyalty promotion to create. | | `idempotencyKey` | `string` | Yes | — | A unique identifier for this request, which is used to ensure idempotency. For more information, see [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency). | Use the official [CreateLoyaltyPromotion reference](https://developer.squareup.com/reference/square/loyalty-api/create-loyalty-promotion) for provider field semantics and limits. ## Output Returns the official `Square.CreateLoyaltyPromotionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Loyalty Reward Source: https://docs.automate.ax/reference/integrations/square/actions/create-loyalty-reward Creates a loyalty reward. `square.createLoyaltyReward` creates a loyalty reward. ## Example ```ts automations/square-create-loyalty-reward.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Create Square Loyalty Reward", () => { onDashboardRun({ title: "Create Square Loyalty Reward" }) square.createLoyaltyReward({ reward: { loyaltyAccountId: "5adcb100-07f1-4ee7-b8c6-6bb9ebc474bd", rewardTierId: "e1b39225-9da5-43d1-a5db-782cdd8ad94f", orderId: "RFZfrdtm3mhO1oGzf5Cx7fEMsmGZY", }, idempotencyKey: "18c2e5ea-a620-4b1f-ad60-7b167285e451", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `LOYALTY_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `reward` | `Square.LoyaltyReward` | Yes | — | The reward to create. | | `idempotencyKey` | `string` | Yes | — | A unique string that identifies this `CreateLoyaltyReward` request. Keys can be any valid string, but must be unique for every request. | Use the official [CreateLoyaltyReward reference](https://developer.squareup.com/reference/square/loyalty-api/create-loyalty-reward) for provider field semantics and limits. ## Output Returns the official `Square.CreateLoyaltyRewardResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Merchant Custom Attribute Definition Source: https://docs.automate.ax/reference/integrations/square/actions/create-merchant-custom-attribute-definition Creates a merchant-related [custom attribute definition](entity:CustomAttributeDefinition) for a Square seller account. `square.createMerchantCustomAttributeDefinition` creates a merchant-related [custom attribute definition](entity:CustomAttributeDefinition) for a Square seller account. ## Example ```ts automations/square-create-merchant-custom-attribute-definition.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "Create Square Merchant Custom Attribute Definition", () => { onDashboardRun({ title: "Create Square Merchant Custom Attribute Definition", }) square.createMerchantCustomAttributeDefinition({ customAttributeDefinition: { key: "alternative_seller_name", schema: { $ref: "https://developer-production-s.squarecdn.com/schemas/v1/common.json#squareup.common.String", }, name: "Alternative Merchant Name", description: "This is the other name this merchant goes by.", visibility: "VISIBILITY_READ_ONLY", }, }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `MERCHANT_PROFILE_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `customAttributeDefinition` | `Square.CustomAttributeDefinition` | Yes | — | The custom attribute definition to create. Note the following: - With the exception of the `Selection` data type, the `schema` is specified as a simple URL to the JSON schema definition hosted on the Square CDN. For more information, including supported values and constraints, see [Supported data types](https://developer.squareup.com/docs/devtools/customattributes/overview#supported-data-types). - `name` is required unless `visibility` is set to `VISIBILITY_HIDDEN`. | | `idempotencyKey` | `string` | No | — | A unique identifier for this request, used to ensure idempotency. For more information, see [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency). | Use the official [CreateMerchantCustomAttributeDefinition reference](https://developer.squareup.com/reference/square/merchant-custom-attributes-api/create-merchant-custom-attribute-definition) for provider field semantics and limits. ## Output Returns the official `Square.CreateMerchantCustomAttributeDefinitionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Order Source: https://docs.automate.ax/reference/integrations/square/actions/create-order Creates a new [order](entity:Order) that can include information about products for purchase and settings to apply to the purchase. `square.createOrder` creates a new [order](entity:Order) that can include information about products for purchase and settings to apply to the purchase. ## Example ```ts automations/square-create-order.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Create Square Order", () => { onDashboardRun({ title: "Create Square Order" }) square.createOrder({}) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ORDERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `order` | `Square.Order` | No | — | The order to create. If this field is set, the only other top-level field that can be set is the `idempotency_key`. | | `idempotencyKey` | `string` | No | — | A value you specify that uniquely identifies this order among orders you have created. If you are unsure whether a particular order was created successfully, you can try it again with the same idempotency key without worrying about creating duplicate orders. For more information, see [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency). | Use the official [CreateOrder reference](https://developer.squareup.com/reference/square/orders-api/create-order) for provider field semantics and limits. ## Output Returns the official `Square.CreateOrderResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Order Custom Attribute Definition Source: https://docs.automate.ax/reference/integrations/square/actions/create-order-custom-attribute-definition Creates an order-related custom attribute definition. `square.createOrderCustomAttributeDefinition` creates an order-related custom attribute definition. ## Example ```ts automations/square-create-order-custom-attribute-definition.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "Create Square Order Custom Attribute Definition", () => { onDashboardRun({ title: "Create Square Order Custom Attribute Definition" }) square.createOrderCustomAttributeDefinition({ customAttributeDefinition: { key: "cover-count", schema: { $ref: "https://developer-production-s.squarecdn.com/schemas/v1/common.json#squareup.common.Number", }, name: "Cover count", description: "The number of people seated at a table", visibility: "VISIBILITY_READ_WRITE_VALUES", }, idempotencyKey: "IDEMPOTENCY_KEY", }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `ORDERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `customAttributeDefinition` | `Square.CustomAttributeDefinition` | Yes | — | The custom attribute definition to create. Note the following: - With the exception of the `Selection` data type, the `schema` is specified as a simple URL to the JSON schema definition hosted on the Square CDN. For more information, including supported values and constraints, see [Specifying the schema](https://developer.squareup.com/docs/customer-custom-attributes-api/custom-attribute-definitions#specify-schema). - If provided, `name` must be unique (case-sensitive) across all visible customer-related custom attribute definitions for the seller. - All custom attributes are visible in exported customer data, including those set to `VISIBILITY_HIDDEN`. | | `idempotencyKey` | `string` | No | — | A unique identifier for this request, used to ensure idempotency. For more information, see [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency). | Use the official [CreateOrderCustomAttributeDefinition reference](https://developer.squareup.com/reference/square/order-custom-attributes-api/create-order-custom-attribute-definition) for provider field semantics and limits. ## Output Returns the official `Square.CreateOrderCustomAttributeDefinitionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Payment Source: https://docs.automate.ax/reference/integrations/square/actions/create-payment Creates a payment using the provided source. `square.createPayment` creates a payment using the provided source. ## Example ```ts automations/square-create-payment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Create Square Payment", () => { onDashboardRun({ title: "Create Square Payment" }) square.createPayment({ sourceId: "ccof:GaJGNaZa8x4OgDJn4GB", idempotencyKey: "7b0f3ec5-086a-4871-8f13-3c81b3875218", amountMoney: { amount: BigInt("1000"), currency: "USD", }, appFeeMoney: { amount: BigInt("10"), currency: "USD", }, autocomplete: true, customerId: "W92WH6P11H4Z77CTET0RNTGFW8", locationId: "L88917AVBK2S5", referenceId: "123456", note: "Brief description", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `PAYMENTS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `sourceId` | `string` | Yes | — | The ID for the source of funds for this payment. This could be a payment token generated by the Web Payments SDK for any of its [supported methods](https://developer.squareup.com/docs/web-payments/overview#explore-payment-methods), including cards, bank transfers, Afterpay or Cash App Pay. If recording a payment that the seller received outside of Square, specify either `CASH` or `EXTERNAL`. For more information, see [Take Payments](https://developer.squareup.com/docs/payments-api/take-payments). | | `idempotencyKey` | `string` | Yes | — | A unique string that identifies this `CreatePayment` request. Keys can be any valid string but must be unique for every `CreatePayment` request. Note: The number of allowed characters might be less than the stated maximum, if multi-byte characters are used. For more information, see [Idempotency](https://developer.squareup.com/docs/working-with-apis/idempotency). | | `amountMoney` | `Square.Money` | No | — | The amount of money to accept for this payment, not including `tip_money`. The amount must be specified in the smallest denomination of the applicable currency (for example, US dollar amounts are specified in cents). For more information, see [Working with Monetary Amounts](https://developer.squareup.com/docs/build-basics/working-with-monetary-amounts). The currency code must match the currency associated with the business that is accepting the payment. | | `tipMoney` | `Square.Money` | No | — | The amount designated as a tip, in addition to `amount_money`. The amount must be specified in the smallest denomination of the applicable currency (for example, US dollar amounts are specified in cents). For more information, see [Working with Monetary Amounts](https://developer.squareup.com/docs/build-basics/working-with-monetary-amounts). Tips for external vendors such as a third party delivery courier must be recorded using Order.service\_charges. The currency code must match the currency associated with the business that is accepting the payment. | | `appFeeMoney` | `Square.Money` | No | — | The amount of money that the developer is taking as a fee for facilitating the payment on behalf of the seller. The amount cannot be more than 90% of the total amount of the payment. The amount must be specified in the smallest denomination of the applicable currency (for example, US dollar amounts are specified in cents). For more information, see [Working with Monetary Amounts](https://developer.squareup.com/docs/build-basics/working-with-monetary-amounts). The fee currency code must match the currency associated with the seller that is accepting the payment. The application must be from a developer account in the same country and using the same currency code as the seller. For more information about the application fee scenario, see [Take Payments and Collect Fees](https://developer.squareup.com/docs/payments-api/take-payments-and-collect-fees). To set this field, `PAYMENTS_WRITE_ADDITIONAL_RECIPIENTS` OAuth permission is required. For more information, see [Permissions](https://developer.squareup.com/docs/payments-api/take-payments-and-collect-fees#permissions). | | `appFeeAllocations` | `unknown[]` | No | — | Details pertaining to recipients of the application fee. The sum of the amounts in the app\_fee\_allocations must equal the app\_fee\_money amount, if present. If populated, an allocation must be present for every party that expects to receive a portion of the application fee, including the application developer. | | `delayDuration` | `string` | No | - Card-present payments: `PT36H` (36 hours) from the creation time. - Card-not-present payments: `P7D` (7 days) from the creation time | The duration of time after the payment's creation when Square automatically either completes or cancels the payment depending on the `delay_action` field value. For more information, see [Time threshold](https://developer.squareup.com/docs/payments-api/take-payments/card-payments/delayed-capture#time-threshold). This parameter should be specified as a time duration, in RFC 3339 format. Note: This feature is only supported for card payments. This parameter can only be set for a delayed capture payment (`autocomplete=false`). Default: - Card-present payments: `PT36H` (36 hours) from the creation time. - Card-not-present payments: `P7D` (7 days) from the creation time. | | `delayAction` | `string` | No | CANCEL | The action to be applied to the payment when the `delay_duration` has elapsed. The action must be CANCEL or COMPLETE. For more information, see [Time Threshold](https://developer.squareup.com/docs/payments-api/take-payments/card-payments/delayed-capture#time-threshold). Default: CANCEL | | `autocomplete` | `boolean` | No | true | If set to `true`, this payment will be completed when possible. If set to `false`, this payment is held in an approved state until either explicitly completed (captured) or canceled (voided). For more information, see [Delayed capture](https://developer.squareup.com/docs/payments-api/take-payments/card-payments#delayed-capture-of-a-card-payment). Default: true | | `orderId` | `string` | No | — | Associates a previously created order with this payment. | | `customerId` | `string` | No | — | The Customer ID of the customer associated with the payment. This is required if the `source_id` refers to a card on file created using the Cards API. | | `locationId` | `string` | No | — | The location ID to associate with the payment. If not specified, the [main location](https://developer.squareup.com/docs/locations-api#about-the-main-location) is used. | | `teamMemberId` | `string` | No | — | An optional TeamMember ID to associate with this payment. | | `referenceId` | `string` | No | — | A user-defined ID to associate with the payment. You can use this field to associate the payment to an entity in an external system (for example, you might specify an order ID that is generated by a third-party shopping cart). | | `verificationToken` | `string` | No | — | An identifying token generated by [payments.verifyBuyer()](https://developer.squareup.com/reference/sdks/web/payments/objects/Payments#Payments.verifyBuyer). Verification tokens encapsulate customer device information and 3-D Secure challenge results to indicate that Square has verified the buyer identity. For more information, see [SCA Overview](https://developer.squareup.com/docs/sca-overview). | | `acceptPartialAuthorization` | `boolean` | No | false | If set to `true` and charging a Square Gift Card, a payment might be returned with `amount_money` equal to less than what was requested. For example, a request for $20 when charging a Square Gift Card with a balance of $5 results in an APPROVED payment of \$5. You might choose to prompt the buyer for an additional payment to cover the remainder or cancel the Gift Card payment. This field cannot be `true` when `autocomplete = true`. For more information, see [Partial amount with Square Gift Cards](https://developer.squareup.com/docs/payments-api/take-payments#partial-payment-gift-card). Default: false | | `buyerEmailAddress` | `string` | No | — | The buyer's email address. | | `buyerPhoneNumber` | `string` | No | — | The buyer's phone number. Must follow the following format: 1. A leading + symbol (followed by a country code) 2. The phone number can contain spaces and the special characters `(` , `)` , `-` , and `.`. Alphabetical characters aren't allowed. 3. The phone number must contain between 9 and 16 digits. | | `billingAddress` | `Square.Address` | No | — | The buyer's billing address. | | `shippingAddress` | `Square.Address` | No | — | The buyer's shipping address. | | `note` | `string` | No | — | An optional note to be entered by the developer when creating a payment. | | `statementDescriptionIdentifier` | `string` | No | — | Optional additional payment information to include on the customer's card statement as part of the statement description. This can be, for example, an invoice number, ticket number, or short description that uniquely identifies the purchase. Note that the `statement_description_identifier` might get truncated on the statement description to fit the required information including the Square identifier (SQ \*) and name of the seller taking the payment. | | `cashDetails` | `Square.CashPaymentDetails` | No | — | Additional details required when recording a cash payment (`source_id` is CASH). | | `externalDetails` | `Square.ExternalPaymentDetails` | No | — | Additional details required when recording an external payment (`source_id` is EXTERNAL). | | `customerDetails` | `Square.CustomerDetails` | No | — | Details about the customer making the payment. | | `offlinePaymentDetails` | `Square.OfflinePaymentDetails` | No | — | An optional field for specifying the offline payment details. This is intended for internal first-party callers only. | Use the official [CreatePayment reference](https://developer.squareup.com/reference/square/payments-api/create-payment) for provider field semantics and limits. ## Output Returns the official `Square.CreatePaymentResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Payment Link Source: https://docs.automate.ax/reference/integrations/square/actions/create-payment-link Creates a Square-hosted checkout page. `square.createPaymentLink` creates a Square-hosted checkout page. ## Example ```ts automations/square-create-payment-link.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Create Square Payment Link", () => { onDashboardRun({ title: "Create Square Payment Link" }) square.createPaymentLink({ idempotencyKey: "cd9e25dc-d9f2-4430-aedb-61605070e95f", quickPay: { name: "Auto Detailing", priceMoney: { amount: BigInt("10000"), currency: "USD", }, locationId: "A9Y43N9ABXZBP", }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ORDERS_READ` and `ORDERS_WRITE` and `PAYMENTS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `idempotencyKey` | `string` | No | — | A unique string that identifies this `CreatePaymentLinkRequest` request. If you do not provide a unique string (or provide an empty string as the value), the endpoint treats each request as independent. For more information, see [Idempotency](https://developer.squareup.com/docs/working-with-apis/idempotency). | | `description` | `string` | No | — | A description of the payment link. You provide this optional description that is useful in your application context. It is not used anywhere. | | `quickPay` | `Square.QuickPay` | No | — | Describes an ad hoc item and price for which to generate a quick pay checkout link. For more information, see [Quick Pay Checkout](https://developer.squareup.com/docs/checkout-api/quick-pay-checkout). | | `order` | `Square.Order` | No | — | Describes the `Order` for which to create a checkout link. For more information, see [Square Order Checkout](https://developer.squareup.com/docs/checkout-api/square-order-checkout). | | `checkoutOptions` | `Square.CheckoutOptions` | No | — | Describes optional fields to add to the resulting checkout page. For more information, see [Optional Checkout Configurations](https://developer.squareup.com/docs/checkout-api/optional-checkout-configurations). | | `prePopulatedData` | `Square.PrePopulatedData` | No | — | Describes fields to prepopulate in the resulting checkout page. For more information, see [Prepopulate the shipping address](https://developer.squareup.com/docs/checkout-api/optional-checkout-configurations#prepopulate-the-shipping-address). | | `paymentNote` | `string` | No | — | A note for the payment. After processing the payment, Square adds this note to the resulting `Payment`. | Use the official [CreatePaymentLink reference](https://developer.squareup.com/reference/square/checkout-api/create-payment-link) for provider field semantics and limits. ## Output Returns the official `Square.CreatePaymentLinkResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Scheduled Shift Source: https://docs.automate.ax/reference/integrations/square/actions/create-scheduled-shift Creates a scheduled shift by providing draft shift details such as job ID, team member assignment, and start and end times. `square.createScheduledShift` creates a scheduled shift by providing draft shift details such as job ID, team member assignment, and start and end times. ## Example ```ts automations/square-create-scheduled-shift.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Create Square Scheduled Shift", () => { onDashboardRun({ title: "Create Square Scheduled Shift" }) square.createScheduledShift({ idempotencyKey: "HIDSNG5KS478L", scheduledShift: { draftShiftDetails: { teamMemberId: "ormj0jJJZ5OZIzxrZYJI", locationId: "PAA1RJZZKXBFG", jobId: "FzbJAtt9qEWncK1BWgVCxQ6M", startAt: "2019-01-25T03:11:00-05:00", endAt: "2019-01-25T13:11:00-05:00", notes: "Dont forget to prep the vegetables", isDeleted: false, }, }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `TIMECARDS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `idempotencyKey` | `string` | No | — | A unique identifier for the `CreateScheduledShift` request, used to ensure the [idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency) of the operation. | | `scheduledShift` | `Square.ScheduledShift` | Yes | — | The scheduled shift with `draft_shift_details`. If needed, call ListLocations to get location IDs, ListJobs to get job IDs, and SearchTeamMembers to get team member IDs and current job assignments. The `start_at` and `end_at` timestamps must be provided in the time zone + offset of the shift location specified in `location_id`. Example for Pacific Standard Time: 2024-10-31T12:30:00-08:00 | Use the official [CreateScheduledShift reference](https://developer.squareup.com/reference/square/labor-api/create-scheduled-shift) for provider field semantics and limits. ## Output Returns the official `Square.CreateScheduledShiftResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Subscription Source: https://docs.automate.ax/reference/integrations/square/actions/create-subscription Enrolls a customer in a subscription. `square.createSubscription` enrolls a customer in a subscription. ## Example ```ts automations/square-create-subscription.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Create Square Subscription", () => { onDashboardRun({ title: "Create Square Subscription" }) square.createSubscription({ idempotencyKey: "8193148c-9586-11e6-99f9-28cfe92138cf", locationId: "S8GWD5R9QB376", planVariationId: "6JHXF3B2CW3YKHDV4XEM674H", customerId: "CHFGVKYY8RSV93M5KCYTG4PN0G", startDate: "2023-06-20", cardId: "ccof:qy5x8hHGYsgLrp4Q4GB", timezone: "America/Los_Angeles", source: { name: "My Application", }, phases: [ { ordinal: BigInt("0"), orderTemplateId: "U2NaowWxzXwpsZU697x7ZHOAnCNZY", }, ], }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_READ` and `INVOICES_WRITE` and `ITEMS_READ` and `ORDERS_WRITE` and `PAYMENTS_WRITE` and `SUBSCRIPTIONS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `idempotencyKey` | `string` | No | — | A unique string that identifies this `CreateSubscription` request. If you do not provide a unique string (or provide an empty string as the value), the endpoint treats each request as independent. For more information, see [Idempotency keys](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency). | | `locationId` | `string` | Yes | — | The ID of the location the subscription is associated with. | | `planVariationId` | `string` | No | — | The ID of the [subscription plan variation](https://developer.squareup.com/docs/subscriptions-api/plans-and-variations#plan-variations) created using the Catalog API. | | `customerId` | `string` | Yes | — | The ID of the customer subscribing to the subscription plan variation. | | `startDate` | `string` | No | — | The `YYYY-MM-DD`-formatted date to start the subscription. If it is unspecified, the subscription starts immediately. | | `canceledDate` | `string` | No | — | The `YYYY-MM-DD`-formatted date when the newly created subscription is scheduled for cancellation. This date overrides the cancellation date set in the plan variation configuration. If the cancellation date is earlier than the end date of a subscription cycle, the subscription stops at the canceled date and the subscriber is sent a prorated invoice at the beginning of the canceled cycle. When the subscription plan of the newly created subscription has a fixed number of cycles and the `canceled_date` occurs before the subscription plan completes, the specified `canceled_date` sets the date when the subscription stops through the end of the last cycle. | | `taxPercentage` | `string` | No | — | The tax to add when billing the subscription. The percentage is expressed in decimal form, using a `'.'` as the decimal separator and without a `'%'` sign. For example, a value of 7.5 corresponds to 7.5%. | | `priceOverrideMoney` | `Square.Money` | No | — | A custom price which overrides the cost of a subscription plan variation with `STATIC` pricing. This field does not affect itemized subscriptions with `RELATIVE` pricing. Instead, you should edit the Subscription's [order template](https://developer.squareup.com/docs/subscriptions-api/manage-subscriptions#phases-and-order-templates). | | `cardId` | `string` | No | — | The ID of the subscriber's card to charge. If it is not specified, the subscriber receives an invoice via email with a link to pay for their subscription. | | `timezone` | `string` | No | the location timezone | The timezone that is used in date calculations for the subscription. If unset, defaults to the location timezone. If a timezone is not configured for the location, defaults to `America/New_York`. Format: the IANA Timezone Database identifier for the location timezone. For a list of time zones, see [List of tz database time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). | | `source` | `Square.SubscriptionSource` | No | — | The origination details of the subscription. | | `monthlyBillingAnchorDate` | `number` | No | — | The day-of-the-month to change the billing date to. | | `phases` | `Square.Phase[]` | No | — | array of phases for this subscription | Use the official [CreateSubscription reference](https://developer.squareup.com/reference/square/subscriptions-api/create-subscription) for provider field semantics and limits. ## Output Returns the official `Square.CreateSubscriptionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Team Member Source: https://docs.automate.ax/reference/integrations/square/actions/create-team-member Creates a single `TeamMember` object. `square.createTeamMember` creates a single `TeamMember` object. ## Example ```ts automations/square-create-team-member.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Create Square Team Member", () => { onDashboardRun({ title: "Create Square Team Member" }) square.createTeamMember({}) }) ``` ## Inputs Every input accepts a compatible signal. It requires `EMPLOYEES_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `idempotencyKey` | `string` | No | — | A unique string that identifies this `CreateTeamMember` request. Keys can be any valid string, but must be unique for every request. For more information, see [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency). The minimum length is 1 and the maximum length is 45. | | `teamMember` | `Square.TeamMember` | No | — | **Required** The data used to create the `TeamMember` object. If you include `wage_setting`, you must provide `job_id` for each job assignment. To get job IDs, call ListJobs. | Use the official [CreateTeamMember reference](https://developer.squareup.com/reference/square/team-api/create-team-member) for provider field semantics and limits. ## Output Returns the official `Square.CreateTeamMemberResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Terminal Action Source: https://docs.automate.ax/reference/integrations/square/actions/create-terminal-action Creates a Terminal action request and sends it to the specified device. `square.createTerminalAction` creates a Terminal action request and sends it to the specified device. ## Example ```ts automations/square-create-terminal-action.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Create Square Terminal Action", () => { onDashboardRun({ title: "Create Square Terminal Action" }) square.createTerminalAction({ idempotencyKey: "thahn-70e75c10-47f7-4ab6-88cc-aaa4076d065e", action: { deviceId: "{{DEVICE_ID}}", deadlineDuration: "PT5M", type: "SAVE_CARD", saveCardOptions: { customerId: "{{CUSTOMER_ID}}", referenceId: "user-id-1", }, }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `PAYMENTS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `idempotencyKey` | `string` | Yes | — | A unique string that identifies this `CreateAction` request. Keys can be any valid string but must be unique for every `CreateAction` request. See [Idempotency keys](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency) for more information. | | `action` | `Square.TerminalAction` | Yes | — | The Action to create. | Use the official [CreateTerminalAction reference](https://developer.squareup.com/reference/square/terminal-api/create-terminal-action) for provider field semantics and limits. ## Output Returns the official `Square.CreateTerminalActionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Terminal Checkout Source: https://docs.automate.ax/reference/integrations/square/actions/create-terminal-checkout Creates a Terminal checkout request and sends it to the specified device to take a payment for the requested amount. `square.createTerminalCheckout` creates a Terminal checkout request and sends it to the specified device to take a payment for the requested amount. ## Example ```ts automations/square-create-terminal-checkout.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Create Square Terminal Checkout", () => { onDashboardRun({ title: "Create Square Terminal Checkout" }) square.createTerminalCheckout({ idempotencyKey: "28a0c3bc-7839-11ea-bc55-0242ac130003", checkout: { amountMoney: { amount: BigInt("2610"), currency: "USD", }, referenceId: "id11572", note: "A brief note", deviceOptions: { deviceId: "dbb5d83a-7838-11ea-bc55-0242ac130003", }, }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `PAYMENTS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `idempotencyKey` | `string` | Yes | — | A unique string that identifies this `CreateCheckout` request. Keys can be any valid string but must be unique for every `CreateCheckout` request. See [Idempotency keys](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency) for more information. | | `checkout` | `Square.TerminalCheckout` | Yes | — | The checkout to create. | Use the official [CreateTerminalCheckout reference](https://developer.squareup.com/reference/square/terminal-api/create-terminal-checkout) for provider field semantics and limits. ## Output Returns the official `Square.CreateTerminalCheckoutResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Terminal Refund Source: https://docs.automate.ax/reference/integrations/square/actions/create-terminal-refund Creates a request to refund an Interac payment completed on a Square Terminal. `square.createTerminalRefund` creates a request to refund an Interac payment completed on a Square Terminal. ## Example ```ts automations/square-create-terminal-refund.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Create Square Terminal Refund", () => { onDashboardRun({ title: "Create Square Terminal Refund" }) square.createTerminalRefund({ idempotencyKey: "402a640b-b26f-401f-b406-46f839590c04", refund: { paymentId: "5O5OvgkcNUhl7JBuINflcjKqUzXZY", amountMoney: { amount: BigInt("111"), currency: "CAD", }, reason: "Returning items", deviceId: "f72dfb8e-4d65-4e56-aade-ec3fb8d33291", }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `PAYMENTS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `idempotencyKey` | `string` | Yes | — | A unique string that identifies this `CreateRefund` request. Keys can be any valid string but must be unique for every `CreateRefund` request. See [Idempotency keys](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency) for more information. | | `refund` | `Square.TerminalRefund` | No | — | The refund to create. | Use the official [CreateTerminalRefund reference](https://developer.squareup.com/reference/square/terminal-api/create-terminal-refund) for provider field semantics and limits. ## Output Returns the official `Square.CreateTerminalRefundResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Timecard Source: https://docs.automate.ax/reference/integrations/square/actions/create-timecard Creates a new `Timecard`. `square.createTimecard` creates a new `Timecard`. ## Example ```ts automations/square-create-timecard.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Create Square Timecard", () => { onDashboardRun({ title: "Create Square Timecard" }) square.createTimecard({ idempotencyKey: "HIDSNG5KS478L", timecard: { locationId: "PAA1RJZZKXBFG", startAt: "2019-01-25T03:11:00-05:00", endAt: "2019-01-25T13:11:00-05:00", wage: { title: "Barista", hourlyRate: { amount: BigInt("1100"), currency: "USD", }, tipEligible: true, }, breaks: [ { startAt: "2019-01-25T06:11:00-05:00", endAt: "2019-01-25T06:16:00-05:00", breakTypeId: "REGS1EQR1TPZ5", name: "Tea Break", expectedDuration: "PT5M", isPaid: true, }, ], teamMemberId: "ormj0jJJZ5OZIzxrZYJI", declaredCashTipMoney: { amount: BigInt("500"), currency: "USD", }, }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `TIMECARDS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `idempotencyKey` | `string` | No | — | A unique string value to ensure the idempotency of the operation. | | `timecard` | `Square.Timecard` | Yes | — | The `Timecard` to be created. | Use the official [CreateTimecard reference](https://developer.squareup.com/reference/square/labor-api/create-timecard) for provider field semantics and limits. ## Output Returns the official `Square.CreateTimecardResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Transfer Order Source: https://docs.automate.ax/reference/integrations/square/actions/create-transfer-order Creates a new transfer order in [DRAFT](entity:TransferOrderStatus) status. `square.createTransferOrder` creates a new transfer order in [DRAFT](entity:TransferOrderStatus) status. ## Example ```ts automations/square-create-transfer-order.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Create Square Transfer Order", () => { onDashboardRun({ title: "Create Square Transfer Order" }) square.createTransferOrder({ idempotencyKey: "65cc0586-3e82-384s-b524-3885cffd52", transferOrder: { sourceLocationId: "EXAMPLE_SOURCE_LOCATION_ID_123", destinationLocationId: "EXAMPLE_DEST_LOCATION_ID_456", expectedAt: "2025-11-09T05:00:00Z", notes: "Example transfer order for inventory redistribution between locations", trackingNumber: "TRACK123456789", createdByTeamMemberId: "EXAMPLE_TEAM_MEMBER_ID_789", lineItems: [ { itemVariationId: "EXAMPLE_ITEM_VARIATION_ID_001", quantityOrdered: "5", }, { itemVariationId: "EXAMPLE_ITEM_VARIATION_ID_002", quantityOrdered: "3", }, ], }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `INVENTORY_READ` and `INVENTORY_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `idempotencyKey` | `string` | Yes | — | A unique string that identifies this CreateTransferOrder request. Keys can be any valid string but must be unique for every CreateTransferOrder request. | | `transferOrder` | `Square.CreateTransferOrderData` | Yes | — | The transfer order to create | Use the official [CreateTransferOrder reference](https://developer.squareup.com/reference/square/transfer-order-api/create-transfer-order) for provider field semantics and limits. ## Output Returns the official `Square.CreateTransferOrderResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Create Vendor Source: https://docs.automate.ax/reference/integrations/square/actions/create-vendor Creates a single [Vendor](entity:Vendor) object to represent a supplier to a seller. `square.createVendor` creates a single [Vendor](entity:Vendor) object to represent a supplier to a seller. ## Example ```ts automations/square-create-vendor.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Create Square Vendor", () => { onDashboardRun({ title: "Create Square Vendor" }) square.createVendor({ idempotencyKey: "8fc6a5b0-9fe8-4b46-b46b-2ef95793abbe", vendor: { name: "Joe's Fresh Seafood", address: { addressLine1: "505 Electric Ave", addressLine2: "Suite 600", locality: "New York", administrativeDistrictLevel1: "NY", postalCode: "10003", country: "US", }, contacts: [ { name: "Joe Burrow", emailAddress: "joe@joesfreshseafood.com", phoneNumber: "1-212-555-4250", ordinal: 1, }, ], accountNumber: "4025391", note: "a vendor", }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `VENDOR_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `idempotencyKey` | `string` | Yes | — | A client-supplied, universally unique identifier (UUID) to make this CreateVendor call idempotent. See [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency) in the [API Development 101](https://developer.squareup.com/docs/buildbasics) section for more information. | | `vendor` | `Square.Vendor` | No | — | The requested Vendor to be created. | Use the official [CreateVendor reference](https://developer.squareup.com/reference/square/vendors-api/create-vendor) for provider field semantics and limits. ## Output Returns the official `Square.CreateVendorResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Delete Booking Custom Attribute Source: https://docs.automate.ax/reference/integrations/square/actions/delete-booking-custom-attribute Deletes a bookings custom attribute. `square.deleteBookingCustomAttribute` deletes a bookings custom attribute. ## Example ```ts automations/square-delete-booking-custom-attribute.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Delete Square Booking Custom Attribute", () => { onDashboardRun({ title: "Delete Square Booking Custom Attribute" }) square.deleteBookingCustomAttribute({ bookingId: "booking_id", key: "key", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `APPOINTMENTS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `bookingId` | `string` | Yes | — | The ID of the target booking. | | `key` | `string` | Yes | — | The key of the custom attribute to delete. This key must match the `key` of a custom attribute definition in the Square seller account. If the requesting application is not the definition owner, you must use the qualified key. | Use the official [DeleteBookingCustomAttribute reference](https://developer.squareup.com/reference/square/booking-custom-attributes-api/delete-booking-custom-attribute) for provider field semantics and limits. ## Output Returns the official `Square.DeleteBookingCustomAttributeResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Delete Booking Custom Attribute Definition Source: https://docs.automate.ax/reference/integrations/square/actions/delete-booking-custom-attribute-definition Deletes a bookings custom attribute definition. `square.deleteBookingCustomAttributeDefinition` deletes a bookings custom attribute definition. ## Example ```ts automations/square-delete-booking-custom-attribute-definition.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "Delete Square Booking Custom Attribute Definition", () => { onDashboardRun({ title: "Delete Square Booking Custom Attribute Definition", }) square.deleteBookingCustomAttributeDefinition({ key: "key", }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `APPOINTMENTS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `key` | `string` | Yes | — | The key of the custom attribute definition to delete. | Use the official [DeleteBookingCustomAttributeDefinition reference](https://developer.squareup.com/reference/square/booking-custom-attributes-api/delete-booking-custom-attribute-definition) for provider field semantics and limits. ## Output Returns the official `Square.DeleteBookingCustomAttributeDefinitionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Delete Break Type Source: https://docs.automate.ax/reference/integrations/square/actions/delete-break-type Deletes an existing `BreakType`. `square.deleteBreakType` deletes an existing `BreakType`. ## Example ```ts automations/square-delete-break-type.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Delete Square Break Type", () => { onDashboardRun({ title: "Delete Square Break Type" }) square.deleteBreakType({ id: "id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `TIMECARDS_SETTINGS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `id` | `string` | Yes | — | The UUID for the `BreakType` being deleted. | Use the official [DeleteBreakType reference](https://developer.squareup.com/reference/square/labor-api/delete-break-type) for provider field semantics and limits. ## Output Returns the official `Square.DeleteBreakTypeResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Delete Catalog Object Source: https://docs.automate.ax/reference/integrations/square/actions/delete-catalog-object Deletes a single [CatalogObject](entity:CatalogObject) based on the provided ID and returns the set of successfully deleted IDs in the response. `square.deleteCatalogObject` deletes a single [CatalogObject](entity:CatalogObject) based on the provided ID and returns the set of successfully deleted IDs in the response. ## Example ```ts automations/square-delete-catalog-object.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Delete Square Catalog Object", () => { onDashboardRun({ title: "Delete Square Catalog Object" }) square.deleteCatalogObject({ objectId: "object_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ITEMS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `objectId` | `string` | Yes | — | The ID of the catalog object to be deleted. When an object is deleted, other objects in the graph that depend on that object will be deleted as well (for example, deleting a catalog item will delete its catalog item variations). | Use the official [DeleteCatalogObject reference](https://developer.squareup.com/reference/square/catalog-api/delete-catalog-object) for provider field semantics and limits. ## Output Returns the official `Square.DeleteCatalogObjectResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Delete Customer Source: https://docs.automate.ax/reference/integrations/square/actions/delete-customer Deletes a customer profile from a business. `square.deleteCustomer` deletes a customer profile from a business. ## Example ```ts automations/square-delete-customer.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Delete Square Customer", () => { onDashboardRun({ title: "Delete Square Customer" }) square.deleteCustomer({ customerId: "customer_id", version: BigInt("1000000"), }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `customerId` | `string` | Yes | — | The ID of the customer to delete. | | `version` | `bigint \| null` | No | — | The current version of the customer profile. As a best practice, you should include this parameter to enable [optimistic concurrency](https://developer.squareup.com/docs/build-basics/common-api-patterns/optimistic-concurrency) control. For more information, see [Delete a customer profile](https://developer.squareup.com/docs/customers-api/use-the-api/keep-records#delete-customer-profile). | Use the official [DeleteCustomer reference](https://developer.squareup.com/reference/square/customers-api/delete-customer) for provider field semantics and limits. ## Output Returns the official `Square.DeleteCustomerResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Delete Customer Custom Attribute Source: https://docs.automate.ax/reference/integrations/square/actions/delete-customer-custom-attribute Deletes a [custom attribute](entity:CustomAttribute) associated with a customer profile. `square.deleteCustomerCustomAttribute` deletes a [custom attribute](entity:CustomAttribute) associated with a customer profile. ## Example ```ts automations/square-delete-customer-custom-attribute.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Delete Square Customer Custom Attribute", () => { onDashboardRun({ title: "Delete Square Customer Custom Attribute" }) square.deleteCustomerCustomAttribute({ customerId: "customer_id", key: "key", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `customerId` | `string` | Yes | — | The ID of the target customer profile. | | `key` | `string` | Yes | — | The key of the custom attribute to delete. This key must match the `key` of a custom attribute definition in the Square seller account. If the requesting application is not the definition owner, you must use the qualified key. | Use the official [DeleteCustomerCustomAttribute reference](https://developer.squareup.com/reference/square/customer-custom-attributes-api/delete-customer-custom-attribute) for provider field semantics and limits. ## Output Returns the official `Square.DeleteCustomerCustomAttributeResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Delete Customer Custom Attribute Definition Source: https://docs.automate.ax/reference/integrations/square/actions/delete-customer-custom-attribute-definition Deletes a customer-related [custom attribute definition](entity:CustomAttributeDefinition) from a Square seller account. `square.deleteCustomerCustomAttributeDefinition` deletes a customer-related [custom attribute definition](entity:CustomAttributeDefinition) from a Square seller account. ## Example ```ts automations/square-delete-customer-custom-attribute-definition.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "Delete Square Customer Custom Attribute Definition", () => { onDashboardRun({ title: "Delete Square Customer Custom Attribute Definition", }) square.deleteCustomerCustomAttributeDefinition({ key: "key", }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `key` | `string` | Yes | — | The key of the custom attribute definition to delete. | Use the official [DeleteCustomerCustomAttributeDefinition reference](https://developer.squareup.com/reference/square/customer-custom-attributes-api/delete-customer-custom-attribute-definition) for provider field semantics and limits. ## Output Returns the official `Square.DeleteCustomerCustomAttributeDefinitionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Delete Customer Group Source: https://docs.automate.ax/reference/integrations/square/actions/delete-customer-group Deletes a customer group as identified by the `group_id` value. `square.deleteCustomerGroup` deletes a customer group as identified by the `group_id` value. ## Example ```ts automations/square-delete-customer-group.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Delete Square Customer Group", () => { onDashboardRun({ title: "Delete Square Customer Group" }) square.deleteCustomerGroup({ groupId: "group_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `groupId` | `string` | Yes | — | The ID of the customer group to delete. | Use the official [DeleteCustomerGroup reference](https://developer.squareup.com/reference/square/customer-groups-api/delete-customer-group) for provider field semantics and limits. ## Output Returns the official `Square.DeleteCustomerGroupResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Delete Dispute Evidence Source: https://docs.automate.ax/reference/integrations/square/actions/delete-dispute-evidence Removes specified evidence from a dispute. `square.deleteDisputeEvidence` removes specified evidence from a dispute. ## Example ```ts automations/square-delete-dispute-evidence.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Delete Square Dispute Evidence", () => { onDashboardRun({ title: "Delete Square Dispute Evidence" }) square.deleteDisputeEvidence({ disputeId: "dispute_id", evidenceId: "evidence_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `DISPUTES_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `disputeId` | `string` | Yes | — | The ID of the dispute from which you want to remove evidence. | | `evidenceId` | `string` | Yes | — | The ID of the evidence you want to remove. | Use the official [DeleteDisputeEvidence reference](https://developer.squareup.com/reference/square/disputes-api/delete-dispute-evidence) for provider field semantics and limits. ## Output Returns the official `Square.DeleteDisputeEvidenceResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Delete Inventory Adjustment Reason Source: https://docs.automate.ax/reference/integrations/square/actions/delete-inventory-adjustment-reason Soft deletes a custom inventory adjustment reason. `square.deleteInventoryAdjustmentReason` soft deletes a custom inventory adjustment reason. ## Example ```ts automations/square-delete-inventory-adjustment-reason.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Delete Square Inventory Adjustment Reason", () => { onDashboardRun({ title: "Delete Square Inventory Adjustment Reason" }) square.deleteInventoryAdjustmentReason({ reasonId: { type: "CUSTOM", customReasonId: "R5BX3PDCZ6EXAMPLE", }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `INVENTORY_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `reasonId` | `Square.InventoryAdjustmentReasonId` | Yes | — | The identifier of the custom inventory adjustment reason to soft delete. | Use the official [DeleteInventoryAdjustmentReason reference](https://developer.squareup.com/reference/square/inventory-api/delete-inventory-adjustment-reason) for provider field semantics and limits. ## Output Returns the official `Square.DeleteInventoryAdjustmentReasonResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Delete Invoice Source: https://docs.automate.ax/reference/integrations/square/actions/delete-invoice Deletes the specified invoice. `square.deleteInvoice` deletes the specified invoice. ## Example ```ts automations/square-delete-invoice.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Delete Square Invoice", () => { onDashboardRun({ title: "Delete Square Invoice" }) square.deleteInvoice({ invoiceId: "invoice_id", version: 1, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `INVOICES_WRITE` and `ORDERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `invoiceId` | `string` | Yes | — | The ID of the invoice to delete. | | `version` | `number \| null` | No | — | The version of the invoice to delete. If you do not know the version, you can call GetInvoice or ListInvoices. | Use the official [DeleteInvoice reference](https://developer.squareup.com/reference/square/invoices-api/delete-invoice) for provider field semantics and limits. ## Output Returns the official `Square.DeleteInvoiceResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Delete Invoice Attachment Source: https://docs.automate.ax/reference/integrations/square/actions/delete-invoice-attachment Removes an attachment from an invoice and permanently deletes the file. `square.deleteInvoiceAttachment` removes an attachment from an invoice and permanently deletes the file. ## Example ```ts automations/square-delete-invoice-attachment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Delete Square Invoice Attachment", () => { onDashboardRun({ title: "Delete Square Invoice Attachment" }) square.deleteInvoiceAttachment({ invoiceId: "invoice_id", attachmentId: "attachment_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `INVOICES_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `invoiceId` | `string` | Yes | — | The ID of the invoice to delete the attachment from. | | `attachmentId` | `string` | Yes | — | The ID of the attachment to delete. | Use the official [DeleteInvoiceAttachment reference](https://developer.squareup.com/reference/square/invoices-api/delete-invoice-attachment) for provider field semantics and limits. ## Output Returns the official `Square.DeleteInvoiceAttachmentResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Delete Location Custom Attribute Source: https://docs.automate.ax/reference/integrations/square/actions/delete-location-custom-attribute Deletes a [custom attribute](entity:CustomAttribute) associated with a location. `square.deleteLocationCustomAttribute` deletes a [custom attribute](entity:CustomAttribute) associated with a location. ## Example ```ts automations/square-delete-location-custom-attribute.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Delete Square Location Custom Attribute", () => { onDashboardRun({ title: "Delete Square Location Custom Attribute" }) square.deleteLocationCustomAttribute({ locationId: "location_id", key: "key", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `MERCHANT_PROFILE_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `locationId` | `string` | Yes | — | The ID of the target location. | | `key` | `string` | Yes | — | The key of the custom attribute to delete. This key must match the `key` of a custom attribute definition in the Square seller account. If the requesting application is not the definition owner, you must use the qualified key. | Use the official [DeleteLocationCustomAttribute reference](https://developer.squareup.com/reference/square/location-custom-attributes-api/delete-location-custom-attribute) for provider field semantics and limits. ## Output Returns the official `Square.DeleteLocationCustomAttributeResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Delete Location Custom Attribute Definition Source: https://docs.automate.ax/reference/integrations/square/actions/delete-location-custom-attribute-definition Deletes a location-related [custom attribute definition](entity:CustomAttributeDefinition) from a Square seller account. `square.deleteLocationCustomAttributeDefinition` deletes a location-related [custom attribute definition](entity:CustomAttributeDefinition) from a Square seller account. ## Example ```ts automations/square-delete-location-custom-attribute-definition.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "Delete Square Location Custom Attribute Definition", () => { onDashboardRun({ title: "Delete Square Location Custom Attribute Definition", }) square.deleteLocationCustomAttributeDefinition({ key: "key", }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `MERCHANT_PROFILE_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `key` | `string` | Yes | — | The key of the custom attribute definition to delete. | Use the official [DeleteLocationCustomAttributeDefinition reference](https://developer.squareup.com/reference/square/location-custom-attributes-api/delete-location-custom-attribute-definition) for provider field semantics and limits. ## Output Returns the official `Square.DeleteLocationCustomAttributeDefinitionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Delete Loyalty Reward Source: https://docs.automate.ax/reference/integrations/square/actions/delete-loyalty-reward Deletes a loyalty reward by doing the following: - Returns the loyalty points back to the loyalty account. `square.deleteLoyaltyReward` deletes a loyalty reward by doing the following: - Returns the loyalty points back to the loyalty account. ## Example ```ts automations/square-delete-loyalty-reward.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Delete Square Loyalty Reward", () => { onDashboardRun({ title: "Delete Square Loyalty Reward" }) square.deleteLoyaltyReward({ rewardId: "reward_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `LOYALTY_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `rewardId` | `string` | Yes | — | The ID of the loyalty reward to delete. | Use the official [DeleteLoyaltyReward reference](https://developer.squareup.com/reference/square/loyalty-api/delete-loyalty-reward) for provider field semantics and limits. ## Output Returns the official `Square.DeleteLoyaltyRewardResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Delete Merchant Custom Attribute Source: https://docs.automate.ax/reference/integrations/square/actions/delete-merchant-custom-attribute Deletes a [custom attribute](entity:CustomAttribute) associated with a merchant. `square.deleteMerchantCustomAttribute` deletes a [custom attribute](entity:CustomAttribute) associated with a merchant. ## Example ```ts automations/square-delete-merchant-custom-attribute.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Delete Square Merchant Custom Attribute", () => { onDashboardRun({ title: "Delete Square Merchant Custom Attribute" }) square.deleteMerchantCustomAttribute({ merchantId: "merchant_id", key: "key", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `MERCHANT_PROFILE_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `merchantId` | `string` | Yes | — | The ID of the target merchant. | | `key` | `string` | Yes | — | The key of the custom attribute to delete. This key must match the `key` of a custom attribute definition in the Square seller account. If the requesting application is not the definition owner, you must use the qualified key. | Use the official [DeleteMerchantCustomAttribute reference](https://developer.squareup.com/reference/square/merchant-custom-attributes-api/delete-merchant-custom-attribute) for provider field semantics and limits. ## Output Returns the official `Square.DeleteMerchantCustomAttributeResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Delete Merchant Custom Attribute Definition Source: https://docs.automate.ax/reference/integrations/square/actions/delete-merchant-custom-attribute-definition Deletes a merchant-related [custom attribute definition](entity:CustomAttributeDefinition) from a Square seller account. `square.deleteMerchantCustomAttributeDefinition` deletes a merchant-related [custom attribute definition](entity:CustomAttributeDefinition) from a Square seller account. ## Example ```ts automations/square-delete-merchant-custom-attribute-definition.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "Delete Square Merchant Custom Attribute Definition", () => { onDashboardRun({ title: "Delete Square Merchant Custom Attribute Definition", }) square.deleteMerchantCustomAttributeDefinition({ key: "key", }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `MERCHANT_PROFILE_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `key` | `string` | Yes | — | The key of the custom attribute definition to delete. | Use the official [DeleteMerchantCustomAttributeDefinition reference](https://developer.squareup.com/reference/square/merchant-custom-attributes-api/delete-merchant-custom-attribute-definition) for provider field semantics and limits. ## Output Returns the official `Square.DeleteMerchantCustomAttributeDefinitionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Delete Order Custom Attribute Source: https://docs.automate.ax/reference/integrations/square/actions/delete-order-custom-attribute Deletes a [custom attribute](entity:CustomAttribute) associated with a customer profile. `square.deleteOrderCustomAttribute` deletes a [custom attribute](entity:CustomAttribute) associated with a customer profile. ## Example ```ts automations/square-delete-order-custom-attribute.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Delete Square Order Custom Attribute", () => { onDashboardRun({ title: "Delete Square Order Custom Attribute" }) square.deleteOrderCustomAttribute({ orderId: "order_id", customAttributeKey: "custom_attribute_key", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ORDERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `orderId` | `string` | Yes | — | The ID of the target order. | | `customAttributeKey` | `string` | Yes | — | The key of the custom attribute to delete. This key must match the key of an existing custom attribute definition. | Use the official [DeleteOrderCustomAttribute reference](https://developer.squareup.com/reference/square/order-custom-attributes-api/delete-order-custom-attribute) for provider field semantics and limits. ## Output Returns the official `Square.DeleteOrderCustomAttributeResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Delete Order Custom Attribute Definition Source: https://docs.automate.ax/reference/integrations/square/actions/delete-order-custom-attribute-definition Deletes an order-related [custom attribute definition](entity:CustomAttributeDefinition) from a Square seller account. `square.deleteOrderCustomAttributeDefinition` deletes an order-related [custom attribute definition](entity:CustomAttributeDefinition) from a Square seller account. ## Example ```ts automations/square-delete-order-custom-attribute-definition.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "Delete Square Order Custom Attribute Definition", () => { onDashboardRun({ title: "Delete Square Order Custom Attribute Definition" }) square.deleteOrderCustomAttributeDefinition({ key: "key", }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `ORDERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `key` | `string` | Yes | — | The key of the custom attribute definition to delete. | Use the official [DeleteOrderCustomAttributeDefinition reference](https://developer.squareup.com/reference/square/order-custom-attributes-api/delete-order-custom-attribute-definition) for provider field semantics and limits. ## Output Returns the official `Square.DeleteOrderCustomAttributeDefinitionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Delete Payment Link Source: https://docs.automate.ax/reference/integrations/square/actions/delete-payment-link Deletes a payment link. `square.deletePaymentLink` deletes a payment link. ## Example ```ts automations/square-delete-payment-link.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Delete Square Payment Link", () => { onDashboardRun({ title: "Delete Square Payment Link" }) square.deletePaymentLink({ id: "id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ORDERS_READ` and `ORDERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `id` | `string` | Yes | — | The ID of the payment link to delete. | Use the official [DeletePaymentLink reference](https://developer.squareup.com/reference/square/checkout-api/delete-payment-link) for provider field semantics and limits. ## Output Returns the official `Square.DeletePaymentLinkResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Delete Snippet Source: https://docs.automate.ax/reference/integrations/square/actions/delete-snippet Removes your snippet from a Square Online site. `square.deleteSnippet` removes your snippet from a Square Online site. ## Example ```ts automations/square-delete-snippet.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Delete Square Snippet", () => { onDashboardRun({ title: "Delete Square Snippet" }) square.deleteSnippet({ siteId: "site_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ONLINE_STORE_SNIPPETS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `siteId` | `string` | Yes | — | The ID of the site that contains the snippet. | Use the official [DeleteSnippet reference](https://developer.squareup.com/reference/square/snippets-api/delete-snippet) for provider field semantics and limits. ## Output Returns the official `Square.DeleteSnippetResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Delete Subscription Action Source: https://docs.automate.ax/reference/integrations/square/actions/delete-subscription-action Deletes a scheduled action for a subscription. `square.deleteSubscriptionAction` deletes a scheduled action for a subscription. ## Example ```ts automations/square-delete-subscription-action.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Delete Square Subscription Action", () => { onDashboardRun({ title: "Delete Square Subscription Action" }) square.deleteSubscriptionAction({ subscriptionId: "subscription_id", actionId: "action_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `SUBSCRIPTIONS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `subscriptionId` | `string` | Yes | — | The ID of the subscription the targeted action is to act upon. | | `actionId` | `string` | Yes | — | The ID of the targeted action to be deleted. | Use the official [DeleteSubscriptionAction reference](https://developer.squareup.com/reference/square/subscriptions-api/delete-subscription-action) for provider field semantics and limits. ## Output Returns the official `Square.DeleteSubscriptionActionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Delete Timecard Source: https://docs.automate.ax/reference/integrations/square/actions/delete-timecard Deletes a `Timecard`. `square.deleteTimecard` deletes a `Timecard`. ## Example ```ts automations/square-delete-timecard.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Delete Square Timecard", () => { onDashboardRun({ title: "Delete Square Timecard" }) square.deleteTimecard({ id: "id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `TIMECARDS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `id` | `string` | Yes | — | The UUID for the `Timecard` being deleted. | Use the official [DeleteTimecard reference](https://developer.squareup.com/reference/square/labor-api/delete-timecard) for provider field semantics and limits. ## Output Returns the official `Square.DeleteTimecardResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Delete Transfer Order Source: https://docs.automate.ax/reference/integrations/square/actions/delete-transfer-order Deletes a transfer order in [DRAFT](entity:TransferOrderStatus) status. `square.deleteTransferOrder` deletes a transfer order in [DRAFT](entity:TransferOrderStatus) status. ## Example ```ts automations/square-delete-transfer-order.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Delete Square Transfer Order", () => { onDashboardRun({ title: "Delete Square Transfer Order" }) square.deleteTransferOrder({ transferOrderId: "transfer_order_id", version: BigInt("1000000"), }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `INVENTORY_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `transferOrderId` | `string` | Yes | — | The ID of the transfer order to delete | | `version` | `bigint \| null` | No | — | Version for optimistic concurrency | Use the official [DeleteTransferOrder reference](https://developer.squareup.com/reference/square/transfer-order-api/delete-transfer-order) for provider field semantics and limits. ## Output Returns the official `Square.DeleteTransferOrderResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Disable Bank Account Source: https://docs.automate.ax/reference/integrations/square/actions/disable-bank-account Disable a bank account. `square.disableBankAccount` disable a bank account. ## Example ```ts automations/square-disable-bank-account.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Disable Square Bank Account", () => { onDashboardRun({ title: "Disable Square Bank Account" }) square.disableBankAccount({ bankAccountId: "bank_account_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `BANK_ACCOUNTS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `bankAccountId` | `string` | Yes | — | The ID of the bank account to disable. | Use the official [DisableBankAccount reference](https://developer.squareup.com/reference/square/bank-accounts-api/disable-bank-account) for provider field semantics and limits. ## Output Returns the official `Square.DisableBankAccountResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Disable Card Source: https://docs.automate.ax/reference/integrations/square/actions/disable-card Disables the card, preventing any further updates or charges. `square.disableCard` disables the card, preventing any further updates or charges. ## Example ```ts automations/square-disable-card.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Disable Square Card", () => { onDashboardRun({ title: "Disable Square Card" }) square.disableCard({ cardId: "card_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `PAYMENTS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `cardId` | `string` | Yes | — | Unique ID for the desired Card. | Use the official [DisableCard reference](https://developer.squareup.com/reference/square/cards-api/disable-card) for provider field semantics and limits. ## Output Returns the official `Square.DisableCardResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Dismiss Terminal Action Source: https://docs.automate.ax/reference/integrations/square/actions/dismiss-terminal-action Dismisses a Terminal action request if the status and type of the request permits it. `square.dismissTerminalAction` dismisses a Terminal action request if the status and type of the request permits it. ## Example ```ts automations/square-dismiss-terminal-action.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Dismiss Square Terminal Action", () => { onDashboardRun({ title: "Dismiss Square Terminal Action" }) square.dismissTerminalAction({ actionId: "action_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `PAYMENTS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `actionId` | `string` | Yes | — | Unique ID for the `TerminalAction` associated with the action to be dismissed. | Use the official [DismissTerminalAction reference](https://developer.squareup.com/reference/square/terminal-api/dismiss-terminal-action) for provider field semantics and limits. ## Output Returns the official `Square.DismissTerminalActionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Dismiss Terminal Checkout Source: https://docs.automate.ax/reference/integrations/square/actions/dismiss-terminal-checkout Dismisses a Terminal checkout request if the status and type of the request permits it. `square.dismissTerminalCheckout` dismisses a Terminal checkout request if the status and type of the request permits it. ## Example ```ts automations/square-dismiss-terminal-checkout.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Dismiss Square Terminal Checkout", () => { onDashboardRun({ title: "Dismiss Square Terminal Checkout" }) square.dismissTerminalCheckout({ checkoutId: "checkout_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `PAYMENTS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `checkoutId` | `string` | Yes | — | Unique ID for the `TerminalCheckout` associated with the checkout to be dismissed. | Use the official [DismissTerminalCheckout reference](https://developer.squareup.com/reference/square/terminal-api/dismiss-terminal-checkout) for provider field semantics and limits. ## Output Returns the official `Square.DismissTerminalCheckoutResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Dismiss Terminal Refund Source: https://docs.automate.ax/reference/integrations/square/actions/dismiss-terminal-refund Dismisses a Terminal refund request if the status and type of the request permits it. `square.dismissTerminalRefund` dismisses a Terminal refund request if the status and type of the request permits it. ## Example ```ts automations/square-dismiss-terminal-refund.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Dismiss Square Terminal Refund", () => { onDashboardRun({ title: "Dismiss Square Terminal Refund" }) square.dismissTerminalRefund({ terminalRefundId: "terminal_refund_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `PAYMENTS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `terminalRefundId` | `string` | Yes | — | Unique ID for the `TerminalRefund` associated with the refund to be dismissed. | Use the official [DismissTerminalRefund reference](https://developer.squareup.com/reference/square/terminal-api/dismiss-terminal-refund) for provider field semantics and limits. ## Output Returns the official `Square.DismissTerminalRefundResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Get Bank Account Source: https://docs.automate.ax/reference/integrations/square/actions/get-bank-account Retrieve details of a [BankAccount](entity:BankAccount) bank account linked to a Square account. `square.getBankAccount` retrieve details of a [BankAccount](entity:BankAccount) bank account linked to a Square account. ## Example ```ts automations/square-get-bank-account.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Get Square Bank Account", () => { onDashboardRun({ title: "Get Square Bank Account" }) square.getBankAccount({ bankAccountId: "bank_account_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `BANK_ACCOUNTS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `bankAccountId` | `string` | Yes | — | Square-issued ID of the desired `BankAccount`. | Use the official [GetBankAccount reference](https://developer.squareup.com/reference/square/bank-accounts-api/get-bank-account) for provider field semantics and limits. ## Output Returns the official `Square.GetBankAccountResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Get Bank Account By V1 Id Source: https://docs.automate.ax/reference/integrations/square/actions/get-bank-account-by-v1-id Returns details of a [BankAccount](entity:BankAccount) identified by V1 bank account ID. `square.getBankAccountByV1Id` returns details of a [BankAccount](entity:BankAccount) identified by V1 bank account ID. ## Example ```ts automations/square-get-bank-account-by-v1-id.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Get Square Bank Account By V1 Id", () => { onDashboardRun({ title: "Get Square Bank Account By V1 Id" }) square.getBankAccountByV1Id({ v1BankAccountId: "v1_bank_account_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `BANK_ACCOUNTS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `v1BankAccountId` | `string` | Yes | — | Connect V1 ID of the desired `BankAccount`. For more information, see [Retrieve a bank account by using an ID issued by V1 Bank Accounts API](https://developer.squareup.com/docs/bank-accounts-api#retrieve-a-bank-account-by-using-an-id-issued-by-v1-bank-accounts-api). | Use the official [GetBankAccountByV1Id reference](https://developer.squareup.com/reference/square/bank-accounts-api/get-bank-account-by-v1-id) for provider field semantics and limits. ## Output Returns the official `Square.GetBankAccountByV1IdResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Get Break Type Source: https://docs.automate.ax/reference/integrations/square/actions/get-break-type Returns a single `BreakType` specified by `id`. `square.getBreakType` returns a single `BreakType` specified by `id`. ## Example ```ts automations/square-get-break-type.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Get Square Break Type", () => { onDashboardRun({ title: "Get Square Break Type" }) square.getBreakType({ id: "id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `TIMECARDS_SETTINGS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `id` | `string` | Yes | — | The UUID for the `BreakType` being retrieved. | Use the official [GetBreakType reference](https://developer.squareup.com/reference/square/labor-api/get-break-type) for provider field semantics and limits. ## Output Returns the official `Square.GetBreakTypeResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Get Device Source: https://docs.automate.ax/reference/integrations/square/actions/get-device Retrieves Device with the associated `device_id`. `square.getDevice` retrieves Device with the associated `device_id`. ## Example ```ts automations/square-get-device.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Get Square Device", () => { onDashboardRun({ title: "Get Square Device" }) square.getDevice({ deviceId: "device_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `DEVICES_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `deviceId` | `string` | Yes | — | The unique ID for the desired `Device`. | Use the official [GetDevice reference](https://developer.squareup.com/reference/square/devices-api/get-device) for provider field semantics and limits. ## Output Returns the official `Square.GetDeviceResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Get Device Code Source: https://docs.automate.ax/reference/integrations/square/actions/get-device-code Retrieves DeviceCode with the associated ID. `square.getDeviceCode` retrieves DeviceCode with the associated ID. ## Example ```ts automations/square-get-device-code.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Get Square Device Code", () => { onDashboardRun({ title: "Get Square Device Code" }) square.getDeviceCode({ id: "id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `DEVICE_CREDENTIAL_MANAGEMENT`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `id` | `string` | Yes | — | The unique identifier for the device code. | Use the official [GetDeviceCode reference](https://developer.squareup.com/reference/square/devices-api/get-device-code) for provider field semantics and limits. ## Output Returns the official `Square.GetDeviceCodeResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Get Invoice Source: https://docs.automate.ax/reference/integrations/square/actions/get-invoice Retrieves an invoice by invoice ID. `square.getInvoice` retrieves an invoice by invoice ID. ## Example ```ts automations/square-get-invoice.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Get Square Invoice", () => { onDashboardRun({ title: "Get Square Invoice" }) square.getInvoice({ invoiceId: "invoice_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `INVOICES_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `invoiceId` | `string` | Yes | — | The ID of the invoice to retrieve. | Use the official [GetInvoice reference](https://developer.squareup.com/reference/square/invoices-api/get-invoice) for provider field semantics and limits. ## Output Returns the official `Square.GetInvoiceResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Get Payment Source: https://docs.automate.ax/reference/integrations/square/actions/get-payment Retrieves details for a specific payment. `square.getPayment` retrieves details for a specific payment. ## Example ```ts automations/square-get-payment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Get Square Payment", () => { onDashboardRun({ title: "Get Square Payment" }) square.getPayment({ paymentId: "payment_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `PAYMENTS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `paymentId` | `string` | Yes | — | A unique ID for the desired payment. | Use the official [GetPayment reference](https://developer.squareup.com/reference/square/payments-api/get-payment) for provider field semantics and limits. ## Output Returns the official `Square.GetPaymentResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Get Payment Refund Source: https://docs.automate.ax/reference/integrations/square/actions/get-payment-refund Retrieves a specific refund using the `refund_id`. `square.getPaymentRefund` retrieves a specific refund using the `refund_id`. ## Example ```ts automations/square-get-payment-refund.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Get Square Payment Refund", () => { onDashboardRun({ title: "Get Square Payment Refund" }) square.getPaymentRefund({ refundId: "refund_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `PAYMENTS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `refundId` | `string` | Yes | — | The unique ID for the desired `PaymentRefund`. | Use the official [GetPaymentRefund reference](https://developer.squareup.com/reference/square/refunds-api/get-payment-refund) for provider field semantics and limits. ## Output Returns the official `Square.GetPaymentRefundResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Get Payout Source: https://docs.automate.ax/reference/integrations/square/actions/get-payout Retrieves details of a specific payout identified by a payout ID. `square.getPayout` retrieves details of a specific payout identified by a payout ID. ## Example ```ts automations/square-get-payout.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Get Square Payout", () => { onDashboardRun({ title: "Get Square Payout" }) square.getPayout({ payoutId: "payout_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `PAYOUTS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `payoutId` | `string` | Yes | — | The ID of the payout to retrieve the information for. | Use the official [GetPayout reference](https://developer.squareup.com/reference/square/payouts-api/get-payout) for provider field semantics and limits. ## Output Returns the official `Square.GetPayoutResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Get reporting metadata Source: https://docs.automate.ax/reference/integrations/square/actions/get-reporting-metadata Describes the reporting cubes, views, measures, dimensions, and segments available to query. `square.getReportingMetadata` describes the reporting cubes, views, measures, dimensions, and segments available to query. ## Example ```ts automations/square-get-reporting-metadata.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Get Square reporting metadata", () => { onDashboardRun({ title: "Get Square reporting metadata" }) square.getReportingMetadata() }) ``` ## Inputs Every input accepts a compatible signal. It requires `REPORTING_READ`. This action has no inputs. Use the official [GetReportingMetadata reference](https://developer.squareup.com/reference/square/reporting-api/get-reporting-metadata) for provider field semantics and limits. ## Output Returns the official `Square.MetadataResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Get Team Member Wage Source: https://docs.automate.ax/reference/integrations/square/actions/get-team-member-wage Returns a single `TeamMemberWage` specified by `id`. `square.getTeamMemberWage` returns a single `TeamMemberWage` specified by `id`. ## Example ```ts automations/square-get-team-member-wage.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Get Square Team Member Wage", () => { onDashboardRun({ title: "Get Square Team Member Wage" }) square.getTeamMemberWage({ id: "id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `EMPLOYEES_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `id` | `string` | Yes | — | The UUID for the `TeamMemberWage` being retrieved. | Use the official [GetTeamMemberWage reference](https://developer.squareup.com/reference/square/labor-api/get-team-member-wage) for provider field semantics and limits. ## Output Returns the official `Square.GetTeamMemberWageResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Get Terminal Action Source: https://docs.automate.ax/reference/integrations/square/actions/get-terminal-action Retrieves a Terminal action request by `action_id`. `square.getTerminalAction` retrieves a Terminal action request by `action_id`. ## Example ```ts automations/square-get-terminal-action.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Get Square Terminal Action", () => { onDashboardRun({ title: "Get Square Terminal Action" }) square.getTerminalAction({ actionId: "action_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `PAYMENTS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `actionId` | `string` | Yes | — | Unique ID for the desired `TerminalAction`. | Use the official [GetTerminalAction reference](https://developer.squareup.com/reference/square/terminal-api/get-terminal-action) for provider field semantics and limits. ## Output Returns the official `Square.GetTerminalActionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Get Terminal Checkout Source: https://docs.automate.ax/reference/integrations/square/actions/get-terminal-checkout Retrieves a Terminal checkout request by `checkout_id`. `square.getTerminalCheckout` retrieves a Terminal checkout request by `checkout_id`. ## Example ```ts automations/square-get-terminal-checkout.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Get Square Terminal Checkout", () => { onDashboardRun({ title: "Get Square Terminal Checkout" }) square.getTerminalCheckout({ checkoutId: "checkout_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `PAYMENTS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `checkoutId` | `string` | Yes | — | The unique ID for the desired `TerminalCheckout`. | Use the official [GetTerminalCheckout reference](https://developer.squareup.com/reference/square/terminal-api/get-terminal-checkout) for provider field semantics and limits. ## Output Returns the official `Square.GetTerminalCheckoutResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Get Terminal Refund Source: https://docs.automate.ax/reference/integrations/square/actions/get-terminal-refund Retrieves an Interac Terminal refund object by ID. `square.getTerminalRefund` retrieves an Interac Terminal refund object by ID. ## Example ```ts automations/square-get-terminal-refund.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Get Square Terminal Refund", () => { onDashboardRun({ title: "Get Square Terminal Refund" }) square.getTerminalRefund({ terminalRefundId: "terminal_refund_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `PAYMENTS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `terminalRefundId` | `string` | Yes | — | The unique ID for the desired `TerminalRefund`. | Use the official [GetTerminalRefund reference](https://developer.squareup.com/reference/square/terminal-api/get-terminal-refund) for provider field semantics and limits. ## Output Returns the official `Square.GetTerminalRefundResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Link Customer To Gift Card Source: https://docs.automate.ax/reference/integrations/square/actions/link-customer-to-gift-card Links a customer to a gift card, which is also referred to as adding a card on file. `square.linkCustomerToGiftCard` links a customer to a gift card, which is also referred to as adding a card on file. ## Example ```ts automations/square-link-customer-to-gift-card.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Link Square Customer To Gift Card", () => { onDashboardRun({ title: "Link Square Customer To Gift Card" }) square.linkCustomerToGiftCard({ giftCardId: "gift_card_id", customerId: "GKY0FZ3V717AH8Q2D821PNT2ZW", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `GIFTCARDS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `giftCardId` | `string` | Yes | — | The ID of the gift card to be linked. | | `customerId` | `string` | Yes | — | The ID of the customer to link to the gift card. | Use the official [LinkCustomerToGiftCard reference](https://developer.squareup.com/reference/square/gift-cards-api/link-customer-to-gift-card) for provider field semantics and limits. ## Output Returns the official `Square.LinkCustomerToGiftCardResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Bank Accounts Source: https://docs.automate.ax/reference/integrations/square/actions/list-bank-accounts Returns a list of [BankAccount](entity:BankAccount) objects linked to a Square account. `square.listBankAccounts` returns a list of [BankAccount](entity:BankAccount) objects linked to a Square account. ## Example ```ts automations/square-list-bank-accounts.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Bank Accounts", () => { onDashboardRun({ title: "List Square Bank Accounts" }) square.listBankAccounts({ cursor: "cursor", limit: 1, locationId: "location_id", customerId: "customer_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `BANK_ACCOUNTS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `cursor` | `string \| null` | No | — | The pagination cursor returned by a previous call to this endpoint. Use it in the next `ListBankAccounts` request to retrieve the next set of results. See the [Pagination](https://developer.squareup.com/docs/working-with-apis/pagination) guide for more information. | | `limit` | `number \| null` | No | — | Upper limit on the number of bank accounts to return in the response. Currently, 1000 is the largest supported limit. You can specify a limit of up to 1000 bank accounts. This is also the default limit. | | `locationId` | `string \| null` | No | — | Location ID. You can specify this optional filter to retrieve only the linked bank accounts belonging to a specific location. | | `customerId` | `string \| null` | No | — | Customer ID. You can specify this optional filter to retrieve only the linked bank accounts belonging to a specific customer. | Use the official [ListBankAccounts reference](https://developer.squareup.com/reference/square/bank-accounts-api/list-bank-accounts) for provider field semantics and limits. ## Output Returns the official `Square.ListBankAccountsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Booking Custom Attribute Definitions Source: https://docs.automate.ax/reference/integrations/square/actions/list-booking-custom-attribute-definitions Get all bookings custom attribute definitions. `square.listBookingCustomAttributeDefinitions` get all bookings custom attribute definitions. ## Example ```ts automations/square-list-booking-custom-attribute-definitions.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "List Square Booking Custom Attribute Definitions", () => { onDashboardRun({ title: "List Square Booking Custom Attribute Definitions", }) square.listBookingCustomAttributeDefinitions({ limit: 1, cursor: "cursor", }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `APPOINTMENTS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `limit` | `number \| null` | No | 20 | The maximum number of results to return in a single paged response. This limit is advisory. The response might contain more or fewer results. The minimum value is 1 and the maximum value is 100. The default value is 20. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | | `cursor` | `string \| null` | No | — | The cursor returned in the paged response from the previous call to this endpoint. Provide this cursor to retrieve the next page of results for your original request. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | Use the official [ListBookingCustomAttributeDefinitions reference](https://developer.squareup.com/reference/square/booking-custom-attributes-api/list-booking-custom-attribute-definitions) for provider field semantics and limits. ## Output Returns the official `Square.ListBookingCustomAttributeDefinitionsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Booking Custom Attributes Source: https://docs.automate.ax/reference/integrations/square/actions/list-booking-custom-attributes Lists a booking's custom attributes. `square.listBookingCustomAttributes` lists a booking's custom attributes. ## Example ```ts automations/square-list-booking-custom-attributes.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Booking Custom Attributes", () => { onDashboardRun({ title: "List Square Booking Custom Attributes" }) square.listBookingCustomAttributes({ bookingId: "booking_id", limit: 1, cursor: "cursor", withDefinitions: true, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `APPOINTMENTS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `bookingId` | `string` | Yes | — | The ID of the target booking. | | `limit` | `number \| null` | No | 20 | The maximum number of results to return in a single paged response. This limit is advisory. The response might contain more or fewer results. The minimum value is 1 and the maximum value is 100. The default value is 20. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | | `cursor` | `string \| null` | No | — | The cursor returned in the paged response from the previous call to this endpoint. Provide this cursor to retrieve the next page of results for your original request. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | | `withDefinitions` | `boolean \| null` | No | `false` | Indicates whether to return the custom attribute definition in the `definition` field of each custom attribute. Set this parameter to `true` to get the name and description of each custom attribute, information about the data type, or other definition details. The default value is `false`. | Use the official [ListBookingCustomAttributes reference](https://developer.squareup.com/reference/square/booking-custom-attributes-api/list-booking-custom-attributes) for provider field semantics and limits. ## Output Returns the official `Square.ListBookingCustomAttributesResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Bookings Source: https://docs.automate.ax/reference/integrations/square/actions/list-bookings Retrieve a collection of bookings. `square.listBookings` retrieve a collection of bookings. ## Example ```ts automations/square-list-bookings.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Bookings", () => { onDashboardRun({ title: "List Square Bookings" }) square.listBookings({ limit: 1, cursor: "cursor", customerId: "customer_id", teamMemberId: "team_member_id", locationId: "location_id", startAtMin: "start_at_min", startAtMax: "start_at_max", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `APPOINTMENTS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `limit` | `number \| null` | No | — | The maximum number of results per page to return in a paged response. | | `cursor` | `string \| null` | No | — | The pagination cursor from the preceding response to return the next page of the results. Do not set this when retrieving the first page of the results. | | `customerId` | `string \| null` | No | — | The customer for whom to retrieve bookings. If this is not set, bookings for all customers are retrieved. | | `teamMemberId` | `string \| null` | No | — | The team member for whom to retrieve bookings. If this is not set, bookings of all members are retrieved. | | `locationId` | `string \| null` | No | — | The location for which to retrieve bookings. If this is not set, all locations' bookings are retrieved. | | `startAtMin` | `string \| null` | No | — | The RFC 3339 timestamp specifying the earliest of the start time. If this is not set, the current time is used. | | `startAtMax` | `string \| null` | No | — | The RFC 3339 timestamp specifying the latest of the start time. If this is not set, the time of 31 days after `start_at_min` is used. | Use the official [ListBookings reference](https://developer.squareup.com/reference/square/bookings-api/list-bookings) for provider field semantics and limits. ## Output Returns the official `Square.ListBookingsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Break Types Source: https://docs.automate.ax/reference/integrations/square/actions/list-break-types Returns a paginated list of `BreakType` instances for a business. `square.listBreakTypes` returns a paginated list of `BreakType` instances for a business. ## Example ```ts automations/square-list-break-types.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Break Types", () => { onDashboardRun({ title: "List Square Break Types" }) square.listBreakTypes({ locationId: "location_id", limit: 1, cursor: "cursor", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `TIMECARDS_SETTINGS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `locationId` | `string \| null` | No | — | Filter the returned `BreakType` results to only those that are associated with the specified location. | | `limit` | `number \| null` | No | — | The maximum number of `BreakType` results to return per page. The number can range between 1 and 200. The default is 200. | | `cursor` | `string \| null` | No | — | A pointer to the next page of `BreakType` results to fetch. | Use the official [ListBreakTypes reference](https://developer.squareup.com/reference/square/labor-api/list-break-types) for provider field semantics and limits. ## Output Returns the official `Square.ListBreakTypesResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Cards Source: https://docs.automate.ax/reference/integrations/square/actions/list-cards Retrieves a list of cards owned by the account making the request. `square.listCards` retrieves a list of cards owned by the account making the request. ## Example ```ts automations/square-list-cards.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Cards", () => { onDashboardRun({ title: "List Square Cards" }) square.listCards({ cursor: "cursor", customerId: "customer_id", includeDisabled: true, referenceId: "reference_id", sortOrder: "DESC", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `PAYMENTS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `cursor` | `string \| null` | No | — | A pagination cursor returned by a previous call to this endpoint. Provide this to retrieve the next set of results for your original query. See [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination) for more information. | | `customerId` | `string \| null` | No | — | Limit results to cards associated with the customer supplied. By default, all cards owned by the merchant are returned. | | `includeDisabled` | `boolean \| null` | No | — | Includes disabled cards. By default, all enabled cards owned by the merchant are returned. | | `referenceId` | `string \| null` | No | — | Limit results to cards associated with the reference\_id supplied. | | `sortOrder` | `Square.SortOrder \| null` | No | ASC | Sorts the returned list by when the card was created with the specified order. This field defaults to ASC. | Use the official [ListCards reference](https://developer.squareup.com/reference/square/cards-api/list-cards) for provider field semantics and limits. ## Output Returns the official `Square.ListCardsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Cash Drawer Shift Events Source: https://docs.automate.ax/reference/integrations/square/actions/list-cash-drawer-shift-events Provides a paginated list of events for a single cash drawer shift. `square.listCashDrawerShiftEvents` provides a paginated list of events for a single cash drawer shift. ## Example ```ts automations/square-list-cash-drawer-shift-events.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Cash Drawer Shift Events", () => { onDashboardRun({ title: "List Square Cash Drawer Shift Events" }) square.listCashDrawerShiftEvents({ shiftId: "shift_id", locationId: "location_id", limit: 1, cursor: "cursor", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CASH_DRAWER_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `shiftId` | `string` | Yes | — | The shift ID. | | `locationId` | `string` | Yes | — | The ID of the location to list cash drawer shifts for. | | `limit` | `number \| null` | No | — | Number of resources to be returned in a page of results (200 by default, 1000 max). | | `cursor` | `string \| null` | No | — | Opaque cursor for fetching the next page of results. | Use the official [ListCashDrawerShiftEvents reference](https://developer.squareup.com/reference/square/cash-drawers-api/list-cash-drawer-shift-events) for provider field semantics and limits. ## Output Returns the official `Square.ListCashDrawerShiftEventsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Cash Drawer Shifts Source: https://docs.automate.ax/reference/integrations/square/actions/list-cash-drawer-shifts Provides the details for all of the cash drawer shifts for a location in a date range. `square.listCashDrawerShifts` provides the details for all of the cash drawer shifts for a location in a date range. ## Example ```ts automations/square-list-cash-drawer-shifts.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Cash Drawer Shifts", () => { onDashboardRun({ title: "List Square Cash Drawer Shifts" }) square.listCashDrawerShifts({ locationId: "location_id", sortOrder: "DESC", beginTime: "begin_time", endTime: "end_time", limit: 1, cursor: "cursor", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CASH_DRAWER_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `locationId` | `string` | Yes | — | The ID of the location to query for a list of cash drawer shifts. | | `sortOrder` | `Square.SortOrder \| null` | No | — | The order in which cash drawer shifts are listed in the response, based on their opened\_at field. Default value: ASC | | `beginTime` | `string \| null` | No | — | The inclusive start time of the query on opened\_at, in ISO 8601 format. | | `endTime` | `string \| null` | No | — | The exclusive end date of the query on opened\_at, in ISO 8601 format. | | `limit` | `number \| null` | No | — | Number of cash drawer shift events in a page of results (200 by default, 1000 max). | | `cursor` | `string \| null` | No | — | Opaque cursor for fetching the next page of results. | Use the official [ListCashDrawerShifts reference](https://developer.squareup.com/reference/square/cash-drawers-api/list-cash-drawer-shifts) for provider field semantics and limits. ## Output Returns the official `Square.ListCashDrawerShiftsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Catalog Source: https://docs.automate.ax/reference/integrations/square/actions/list-catalog Returns a list of all [CatalogObject](entity:CatalogObject)s of the specified types in the catalog. `square.listCatalog` returns a list of all [CatalogObject](entity:CatalogObject)s of the specified types in the catalog. ## Example ```ts automations/square-list-catalog.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Catalog", () => { onDashboardRun({ title: "List Square Catalog" }) square.listCatalog({ cursor: "cursor", types: "types", catalogVersion: BigInt("1000000"), }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ITEMS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `cursor` | `string \| null` | No | — | The pagination cursor returned in the previous response. Leave unset for an initial request. The page size is currently set to be 100. See [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination) for more information. | | `types` | `string \| null` | No | — | An optional case-insensitive, comma-separated list of object types to retrieve. The valid values are defined in the CatalogObjectType enum, for example, `ITEM`, `ITEM_VARIATION`, `CATEGORY`, `DISCOUNT`, `TAX`, `MODIFIER`, `MODIFIER_LIST`, `IMAGE`, etc. If this is unspecified, the operation returns objects of all the top level types at the version of the Square API used to make the request. Object types that are nested onto other object types are not included in the defaults. At the current API version the default object types are: ITEM, CATEGORY, TAX, DISCOUNT, MODIFIER\_LIST, PRICING\_RULE, PRODUCT\_SET, TIME\_PERIOD, MEASUREMENT\_UNIT, SUBSCRIPTION\_PLAN, ITEM\_OPTION, CUSTOM\_ATTRIBUTE\_DEFINITION, QUICK\_AMOUNT\_SETTINGS. | | `catalogVersion` | `bigint \| null` | No | — | The specific version of the catalog objects to be included in the response. This allows you to retrieve historical versions of objects. The specified version value is matched against the CatalogObjects' `version` attribute. If not included, results will be from the current version of the catalog. | Use the official [ListCatalog reference](https://developer.squareup.com/reference/square/catalog-api/list-catalog) for provider field semantics and limits. ## Output Returns the official `Square.ListCatalogResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Channels Source: https://docs.automate.ax/reference/integrations/square/actions/list-channels ListChannels. `square.listChannels` listChannels. ## Example ```ts automations/square-list-channels.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Channels", () => { onDashboardRun({ title: "List Square Channels" }) square.listChannels({ referenceType: "UNKNOWN_TYPE", referenceId: "reference_id", status: "ACTIVE", cursor: "cursor", limit: 1, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CHANNELS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `referenceType` | `Square.ReferenceType \| null` | No | — | Type of reference associated to channel | | `referenceId` | `string \| null` | No | — | id of reference associated to channel | | `status` | `Square.ChannelStatus \| null` | No | — | Status of channel | | `cursor` | `string \| null` | No | — | Cursor to fetch the next result | | `limit` | `number \| null` | No | — | Maximum number of results to return. When not provided the returned results will be cap at 100 channels. | Use the official [ListChannels reference](https://developer.squareup.com/reference/square/channels-api/list-channels) for provider field semantics and limits. ## Output Returns the official `Square.ListChannelsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Customer Custom Attribute Definitions Source: https://docs.automate.ax/reference/integrations/square/actions/list-customer-custom-attribute-definitions Lists the customer-related [custom attribute definitions](entity:CustomAttributeDefinition) that belong to a Square seller account. `square.listCustomerCustomAttributeDefinitions` lists the customer-related [custom attribute definitions](entity:CustomAttributeDefinition) that belong to a Square seller account. ## Example ```ts automations/square-list-customer-custom-attribute-definitions.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "List Square Customer Custom Attribute Definitions", () => { onDashboardRun({ title: "List Square Customer Custom Attribute Definitions", }) square.listCustomerCustomAttributeDefinitions({ limit: 1, cursor: "cursor", }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `limit` | `number \| null` | No | 20 | The maximum number of results to return in a single paged response. This limit is advisory. The response might contain more or fewer results. The minimum value is 1 and the maximum value is 100. The default value is 20. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | | `cursor` | `string \| null` | No | — | The cursor returned in the paged response from the previous call to this endpoint. Provide this cursor to retrieve the next page of results for your original request. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | Use the official [ListCustomerCustomAttributeDefinitions reference](https://developer.squareup.com/reference/square/customer-custom-attributes-api/list-customer-custom-attribute-definitions) for provider field semantics and limits. ## Output Returns the official `Square.ListCustomerCustomAttributeDefinitionsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Customer Custom Attributes Source: https://docs.automate.ax/reference/integrations/square/actions/list-customer-custom-attributes Lists the [custom attributes](entity:CustomAttribute) associated with a customer profile. `square.listCustomerCustomAttributes` lists the [custom attributes](entity:CustomAttribute) associated with a customer profile. ## Example ```ts automations/square-list-customer-custom-attributes.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Customer Custom Attributes", () => { onDashboardRun({ title: "List Square Customer Custom Attributes" }) square.listCustomerCustomAttributes({ customerId: "customer_id", limit: 1, cursor: "cursor", withDefinitions: true, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `customerId` | `string` | Yes | — | The ID of the target customer profile. | | `limit` | `number \| null` | No | 20 | The maximum number of results to return in a single paged response. This limit is advisory. The response might contain more or fewer results. The minimum value is 1 and the maximum value is 100. The default value is 20. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | | `cursor` | `string \| null` | No | — | The cursor returned in the paged response from the previous call to this endpoint. Provide this cursor to retrieve the next page of results for your original request. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | | `withDefinitions` | `boolean \| null` | No | `false` | Indicates whether to return the custom attribute definition in the `definition` field of each custom attribute. Set this parameter to `true` to get the name and description of each custom attribute, information about the data type, or other definition details. The default value is `false`. | Use the official [ListCustomerCustomAttributes reference](https://developer.squareup.com/reference/square/customer-custom-attributes-api/list-customer-custom-attributes) for provider field semantics and limits. ## Output Returns the official `Square.ListCustomerCustomAttributesResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Customer Groups Source: https://docs.automate.ax/reference/integrations/square/actions/list-customer-groups Retrieves the list of customer groups of a business. `square.listCustomerGroups` retrieves the list of customer groups of a business. ## Example ```ts automations/square-list-customer-groups.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Customer Groups", () => { onDashboardRun({ title: "List Square Customer Groups" }) square.listCustomerGroups({ cursor: "cursor", limit: 1, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `cursor` | `string \| null` | No | — | A pagination cursor returned by a previous call to this endpoint. Provide this cursor to retrieve the next set of results for your original query. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | | `limit` | `number \| null` | No | 50 | The maximum number of results to return in a single page. This limit is advisory. The response might contain more or fewer results. If the limit is less than 1 or greater than 50, Square returns a `400 VALUE_TOO_LOW` or `400 VALUE_TOO_HIGH` error. The default value is 50. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | Use the official [ListCustomerGroups reference](https://developer.squareup.com/reference/square/customer-groups-api/list-customer-groups) for provider field semantics and limits. ## Output Returns the official `Square.ListCustomerGroupsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Customer Segments Source: https://docs.automate.ax/reference/integrations/square/actions/list-customer-segments Retrieves the list of customer segments of a business. `square.listCustomerSegments` retrieves the list of customer segments of a business. ## Example ```ts automations/square-list-customer-segments.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Customer Segments", () => { onDashboardRun({ title: "List Square Customer Segments" }) square.listCustomerSegments({ cursor: "cursor", limit: 1, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `cursor` | `string \| null` | No | — | A pagination cursor returned by previous calls to `ListCustomerSegments`. This cursor is used to retrieve the next set of query results. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | | `limit` | `number \| null` | No | 50 | The maximum number of results to return in a single page. This limit is advisory. The response might contain more or fewer results. If the specified limit is less than 1 or greater than 50, Square returns a `400 VALUE_TOO_LOW` or `400 VALUE_TOO_HIGH` error. The default value is 50. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | Use the official [ListCustomerSegments reference](https://developer.squareup.com/reference/square/customer-segments-api/list-customer-segments) for provider field semantics and limits. ## Output Returns the official `Square.ListCustomerSegmentsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Customers Source: https://docs.automate.ax/reference/integrations/square/actions/list-customers Lists customer profiles associated with a Square account. `square.listCustomers` lists customer profiles associated with a Square account. ## Example ```ts automations/square-list-customers.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Customers", () => { onDashboardRun({ title: "List Square Customers" }) square.listCustomers({ cursor: "cursor", limit: 1, sortField: "DEFAULT", sortOrder: "DESC", count: true, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `cursor` | `string \| null` | No | — | A pagination cursor returned by a previous call to this endpoint. Provide this cursor to retrieve the next set of results for your original query. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | | `limit` | `number \| null` | No | 100 | The maximum number of results to return in a single page. This limit is advisory. The response might contain more or fewer results. If the specified limit is less than 1 or greater than 100, Square returns a `400 VALUE_TOO_LOW` or `400 VALUE_TOO_HIGH` error. The default value is 100. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | | `sortField` | `Square.CustomerSortField \| null` | No | `DEFAULT` | Indicates how customers should be sorted. The default value is `DEFAULT`. | | `sortOrder` | `Square.SortOrder \| null` | No | `ASC` | Indicates whether customers should be sorted in ascending (`ASC`) or descending (`DESC`) order. The default value is `ASC`. | | `count` | `boolean \| null` | No | `false` | Indicates whether to return the total count of customers in the `count` field of the response. The default value is `false`. | Use the official [ListCustomers reference](https://developer.squareup.com/reference/square/customers-api/list-customers) for provider field semantics and limits. ## Output Returns the official `Square.ListCustomersResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Device Codes Source: https://docs.automate.ax/reference/integrations/square/actions/list-device-codes Lists all DeviceCodes associated with the merchant. `square.listDeviceCodes` lists all DeviceCodes associated with the merchant. ## Example ```ts automations/square-list-device-codes.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Device Codes", () => { onDashboardRun({ title: "List Square Device Codes" }) square.listDeviceCodes({ cursor: "cursor", locationId: "location_id", productType: "TERMINAL_API", status: "UNKNOWN", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `DEVICE_CREDENTIAL_MANAGEMENT`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `cursor` | `string \| null` | No | — | A pagination cursor returned by a previous call to this endpoint. Provide this to retrieve the next set of results for your original query. See [Paginating results](https://developer.squareup.com/docs/working-with-apis/pagination) for more information. | | `locationId` | `string \| null` | No | — | If specified, only returns DeviceCodes of the specified location. Returns DeviceCodes of all locations if empty. | | `productType` | `Square.ProductType \| null` | No | — | If specified, only returns DeviceCodes targeting the specified product type. Returns DeviceCodes of all product types if empty. | | `status` | `Square.DeviceCodeStatus \| null` | No | — | If specified, returns DeviceCodes with the specified statuses. Returns DeviceCodes of status `PAIRED` and `UNPAIRED` if empty. | Use the official [ListDeviceCodes reference](https://developer.squareup.com/reference/square/devices-api/list-device-codes) for provider field semantics and limits. ## Output Returns the official `Square.ListDeviceCodesResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Devices Source: https://docs.automate.ax/reference/integrations/square/actions/list-devices List devices associated with the merchant. `square.listDevices` list devices associated with the merchant. ## Example ```ts automations/square-list-devices.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Devices", () => { onDashboardRun({ title: "List Square Devices" }) square.listDevices({ cursor: "cursor", sortOrder: "DESC", limit: 1, locationId: "location_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `DEVICES_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `cursor` | `string \| null` | No | — | A pagination cursor returned by a previous call to this endpoint. Provide this cursor to retrieve the next set of results for the original query. See [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination) for more information. | | `sortOrder` | `Square.SortOrder \| null` | No | — | The order in which results are listed. - `ASC` - Oldest to newest. - `DESC` - Newest to oldest (default). | | `limit` | `number \| null` | No | — | The number of results to return in a single page. | | `locationId` | `string \| null` | No | — | If present, only returns devices at the target location. | Use the official [ListDevices reference](https://developer.squareup.com/reference/square/devices-api/list-devices) for provider field semantics and limits. ## Output Returns the official `Square.ListDevicesResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Dispute Evidence Source: https://docs.automate.ax/reference/integrations/square/actions/list-dispute-evidence Returns a list of evidence associated with a dispute. `square.listDisputeEvidence` returns a list of evidence associated with a dispute. ## Example ```ts automations/square-list-dispute-evidence.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Dispute Evidence", () => { onDashboardRun({ title: "List Square Dispute Evidence" }) square.listDisputeEvidence({ disputeId: "dispute_id", cursor: "cursor", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `DISPUTES_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `disputeId` | `string` | Yes | — | The ID of the dispute. | | `cursor` | `string \| null` | No | — | A pagination cursor returned by a previous call to this endpoint. Provide this cursor to retrieve the next set of results for the original query. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | Use the official [ListDisputeEvidence reference](https://developer.squareup.com/reference/square/disputes-api/list-dispute-evidence) for provider field semantics and limits. ## Output Returns the official `Square.ListDisputeEvidenceResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Disputes Source: https://docs.automate.ax/reference/integrations/square/actions/list-disputes Returns a list of disputes associated with a particular account. `square.listDisputes` returns a list of disputes associated with a particular account. ## Example ```ts automations/square-list-disputes.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Disputes", () => { onDashboardRun({ title: "List Square Disputes" }) square.listDisputes({ cursor: "cursor", states: "INQUIRY_EVIDENCE_REQUIRED", locationId: "location_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `DISPUTES_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `cursor` | `string \| null` | No | — | A pagination cursor returned by a previous call to this endpoint. Provide this cursor to retrieve the next set of results for the original query. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | | `states` | `Square.DisputeState \| null` | No | — | The dispute states used to filter the result. If not specified, the endpoint returns all disputes. | | `locationId` | `string \| null` | No | — | The ID of the location for which to return a list of disputes. If not specified, the endpoint returns disputes associated with all locations. | Use the official [ListDisputes reference](https://developer.squareup.com/reference/square/disputes-api/list-disputes) for provider field semantics and limits. ## Output Returns the official `Square.ListDisputesResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Gift Card Activities Source: https://docs.automate.ax/reference/integrations/square/actions/list-gift-card-activities Lists gift card activities. `square.listGiftCardActivities` lists gift card activities. ## Example ```ts automations/square-list-gift-card-activities.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Gift Card Activities", () => { onDashboardRun({ title: "List Square Gift Card Activities" }) square.listGiftCardActivities({ giftCardId: "gift_card_id", type: "type", locationId: "location_id", beginTime: "begin_time", endTime: "end_time", limit: 1, cursor: "cursor", sortOrder: "sort_order", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `GIFTCARDS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `giftCardId` | `string \| null` | No | — | If a gift card ID is provided, the endpoint returns activities related to the specified gift card. Otherwise, the endpoint returns all gift card activities for the seller. | | `type` | `string \| null` | No | — | If a type is provided, the endpoint returns gift card activities of the specified type. Otherwise, the endpoint returns all types of gift card activities. | | `locationId` | `string \| null` | No | — | If a location ID is provided, the endpoint returns gift card activities for the specified location. Otherwise, the endpoint returns gift card activities for all locations. | | `beginTime` | `string \| null` | No | the current time minus one year | The timestamp for the beginning of the reporting period, in RFC 3339 format. This start time is inclusive. The default value is the current time minus one year. | | `endTime` | `string \| null` | No | the current time | The timestamp for the end of the reporting period, in RFC 3339 format. This end time is inclusive. The default value is the current time. | | `limit` | `number \| null` | No | 50 | If a limit is provided, the endpoint returns the specified number of results (or fewer) per page. The maximum value is 100. The default value is 50. For more information, see [Pagination](https://developer.squareup.com/docs/working-with-apis/pagination). | | `cursor` | `string \| null` | No | — | A pagination cursor returned by a previous call to this endpoint. Provide this cursor to retrieve the next set of results for the original query. If a cursor is not provided, the endpoint returns the first page of the results. For more information, see [Pagination](https://developer.squareup.com/docs/working-with-apis/pagination). | | `sortOrder` | `string \| null` | No | — | The order in which the endpoint returns the activities, based on `created_at`. - `ASC` - Oldest to newest. - `DESC` - Newest to oldest (default). | Use the official [ListGiftCardActivities reference](https://developer.squareup.com/reference/square/gift-card-activities-api/list-gift-card-activities) for provider field semantics and limits. ## Output Returns the official `Square.ListGiftCardActivitiesResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Gift Cards Source: https://docs.automate.ax/reference/integrations/square/actions/list-gift-cards Lists all gift cards. `square.listGiftCards` lists all gift cards. ## Example ```ts automations/square-list-gift-cards.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Gift Cards", () => { onDashboardRun({ title: "List Square Gift Cards" }) square.listGiftCards({ type: "type", state: "state", limit: 1, cursor: "cursor", customerId: "customer_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `GIFTCARDS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `type` | `string \| null` | No | — | If a type is provided, the endpoint returns gift cards of the specified type. Otherwise, the endpoint returns gift cards of all types. | | `state` | `string \| null` | No | — | If a state is provided, the endpoint returns the gift cards in the specified state. Otherwise, the endpoint returns the gift cards of all states. | | `limit` | `number \| null` | No | 30 | If a limit is provided, the endpoint returns only the specified number of results per page. The maximum value is 200. The default value is 30. For more information, see [Pagination](https://developer.squareup.com/docs/working-with-apis/pagination). | | `cursor` | `string \| null` | No | — | A pagination cursor returned by a previous call to this endpoint. Provide this cursor to retrieve the next set of results for the original query. If a cursor is not provided, the endpoint returns the first page of the results. For more information, see [Pagination](https://developer.squareup.com/docs/working-with-apis/pagination). | | `customerId` | `string \| null` | No | — | If a customer ID is provided, the endpoint returns only the gift cards linked to the specified customer. | Use the official [ListGiftCards reference](https://developer.squareup.com/reference/square/gift-cards-api/list-gift-cards) for provider field semantics and limits. ## Output Returns the official `Square.ListGiftCardsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Inventory Adjustment Reasons Source: https://docs.automate.ax/reference/integrations/square/actions/list-inventory-adjustment-reasons Returns the standard and custom inventory adjustment reasons available to the seller. `square.listInventoryAdjustmentReasons` returns the standard and custom inventory adjustment reasons available to the seller. ## Example ```ts automations/square-list-inventory-adjustment-reasons.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Inventory Adjustment Reasons", () => { onDashboardRun({ title: "List Square Inventory Adjustment Reasons" }) square.listInventoryAdjustmentReasons({ includeDeleted: true, includeSystemCodes: true, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `INVENTORY_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `includeDeleted` | `boolean \| null` | No | `false` | Indicates whether the response should include deleted custom inventory adjustment reasons. The default value is `false`. | | `includeSystemCodes` | `boolean \| null` | No | `false` | Indicates whether the response should include Square-generated system inventory adjustment reason codes that cannot be used to write adjustments from the Connect API, such as `SALE`, `RECOUNT`, `TRANSFER`, `IN_TRANSIT`, and `CANCELED_SALE`. The default value is `false`. | Use the official [ListInventoryAdjustmentReasons reference](https://developer.squareup.com/reference/square/inventory-api/list-inventory-adjustment-reasons) for provider field semantics and limits. ## Output Returns the official `Square.ListInventoryAdjustmentReasonsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Invoices Source: https://docs.automate.ax/reference/integrations/square/actions/list-invoices Returns a list of invoices for a given location. `square.listInvoices` returns a list of invoices for a given location. ## Example ```ts automations/square-list-invoices.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Invoices", () => { onDashboardRun({ title: "List Square Invoices" }) square.listInvoices({ locationId: "location_id", cursor: "cursor", limit: 1, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `INVOICES_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `locationId` | `string` | Yes | — | The ID of the location for which to list invoices. | | `cursor` | `string \| null` | No | — | A pagination cursor returned by a previous call to this endpoint. Provide this cursor to retrieve the next set of results for your original query. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | | `limit` | `number \| null` | No | — | The maximum number of invoices to return (200 is the maximum `limit`). If not provided, the server uses a default limit of 100 invoices. | Use the official [ListInvoices reference](https://developer.squareup.com/reference/square/invoices-api/list-invoices) for provider field semantics and limits. ## Output Returns the official `Square.ListInvoicesResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Jobs Source: https://docs.automate.ax/reference/integrations/square/actions/list-jobs Lists jobs in a seller account. `square.listJobs` lists jobs in a seller account. ## Example ```ts automations/square-list-jobs.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Jobs", () => { onDashboardRun({ title: "List Square Jobs" }) square.listJobs({ cursor: "cursor", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `EMPLOYEES_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `cursor` | `string \| null` | No | — | The pagination cursor returned by the previous call to this endpoint. Provide this cursor to retrieve the next page of results for your original request. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | Use the official [ListJobs reference](https://developer.squareup.com/reference/square/team-api/list-jobs) for provider field semantics and limits. ## Output Returns the official `Square.ListJobsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Location Booking Profiles Source: https://docs.automate.ax/reference/integrations/square/actions/list-location-booking-profiles Lists location booking profiles of a seller. `square.listLocationBookingProfiles` lists location booking profiles of a seller. ## Example ```ts automations/square-list-location-booking-profiles.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Location Booking Profiles", () => { onDashboardRun({ title: "List Square Location Booking Profiles" }) square.listLocationBookingProfiles({ limit: 1, cursor: "cursor", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `APPOINTMENTS_BUSINESS_SETTINGS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `limit` | `number \| null` | No | — | The maximum number of results to return in a paged response. | | `cursor` | `string \| null` | No | — | The pagination cursor from the preceding response to return the next page of the results. Do not set this when retrieving the first page of the results. | Use the official [ListLocationBookingProfiles reference](https://developer.squareup.com/reference/square/bookings-api/list-location-booking-profiles) for provider field semantics and limits. ## Output Returns the official `Square.ListLocationBookingProfilesResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Location Custom Attribute Definitions Source: https://docs.automate.ax/reference/integrations/square/actions/list-location-custom-attribute-definitions Lists the location-related [custom attribute definitions](entity:CustomAttributeDefinition) that belong to a Square seller account. `square.listLocationCustomAttributeDefinitions` lists the location-related [custom attribute definitions](entity:CustomAttributeDefinition) that belong to a Square seller account. ## Example ```ts automations/square-list-location-custom-attribute-definitions.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "List Square Location Custom Attribute Definitions", () => { onDashboardRun({ title: "List Square Location Custom Attribute Definitions", }) square.listLocationCustomAttributeDefinitions({ visibilityFilter: "ALL", limit: 1, cursor: "cursor", }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `MERCHANT_PROFILE_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `visibilityFilter` | `Square.VisibilityFilter \| null` | No | — | Filters the `CustomAttributeDefinition` results by their `visibility` values. | | `limit` | `number \| null` | No | 20 | The maximum number of results to return in a single paged response. This limit is advisory. The response might contain more or fewer results. The minimum value is 1 and the maximum value is 100. The default value is 20. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | | `cursor` | `string \| null` | No | — | The cursor returned in the paged response from the previous call to this endpoint. Provide this cursor to retrieve the next page of results for your original request. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | Use the official [ListLocationCustomAttributeDefinitions reference](https://developer.squareup.com/reference/square/location-custom-attributes-api/list-location-custom-attribute-definitions) for provider field semantics and limits. ## Output Returns the official `Square.ListLocationCustomAttributeDefinitionsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Location Custom Attributes Source: https://docs.automate.ax/reference/integrations/square/actions/list-location-custom-attributes Lists the [custom attributes](entity:CustomAttribute) associated with a location. `square.listLocationCustomAttributes` lists the [custom attributes](entity:CustomAttribute) associated with a location. ## Example ```ts automations/square-list-location-custom-attributes.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Location Custom Attributes", () => { onDashboardRun({ title: "List Square Location Custom Attributes" }) square.listLocationCustomAttributes({ locationId: "location_id", visibilityFilter: "ALL", limit: 1, cursor: "cursor", withDefinitions: true, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `MERCHANT_PROFILE_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `locationId` | `string` | Yes | — | The ID of the target location. | | `visibilityFilter` | `Square.VisibilityFilter \| null` | No | — | Filters the `CustomAttributeDefinition` results by their `visibility` values. | | `limit` | `number \| null` | No | 20 | The maximum number of results to return in a single paged response. This limit is advisory. The response might contain more or fewer results. The minimum value is 1 and the maximum value is 100. The default value is 20. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | | `cursor` | `string \| null` | No | — | The cursor returned in the paged response from the previous call to this endpoint. Provide this cursor to retrieve the next page of results for your original request. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | | `withDefinitions` | `boolean \| null` | No | `false` | Indicates whether to return the custom attribute definition in the `definition` field of each custom attribute. Set this parameter to `true` to get the name and description of each custom attribute, information about the data type, or other definition details. The default value is `false`. | Use the official [ListLocationCustomAttributes reference](https://developer.squareup.com/reference/square/location-custom-attributes-api/list-location-custom-attributes) for provider field semantics and limits. ## Output Returns the official `Square.ListLocationCustomAttributesResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Locations Source: https://docs.automate.ax/reference/integrations/square/actions/list-locations Provides details about all of the seller's [locations](https://developer.squareup.com/docs/locations-api), including those with an inactive status. `square.listLocations` provides details about all of the seller's [locations](https://developer.squareup.com/docs/locations-api), including those with an inactive status. ## Example ```ts automations/square-list-locations.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Locations", () => { onDashboardRun({ title: "List Square Locations" }) square.listLocations() }) ``` ## Inputs Every input accepts a compatible signal. It requires `MERCHANT_PROFILE_READ`. This action has no inputs. Use the official [ListLocations reference](https://developer.squareup.com/reference/square/locations-api/list-locations) for provider field semantics and limits. ## Output Returns the official `Square.ListLocationsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Loyalty Promotions Source: https://docs.automate.ax/reference/integrations/square/actions/list-loyalty-promotions Lists the loyalty promotions associated with a [loyalty program](entity:LoyaltyProgram). `square.listLoyaltyPromotions` lists the loyalty promotions associated with a [loyalty program](entity:LoyaltyProgram). ## Example ```ts automations/square-list-loyalty-promotions.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Loyalty Promotions", () => { onDashboardRun({ title: "List Square Loyalty Promotions" }) square.listLoyaltyPromotions({ programId: "program_id", status: "ACTIVE", cursor: "cursor", limit: 1, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `LOYALTY_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `programId` | `string` | Yes | — | The ID of the base loyalty program. To get the program ID, call RetrieveLoyaltyProgram using the `main` keyword. | | `status` | `Square.LoyaltyPromotionStatus \| null` | No | — | The status to filter the results by. If a status is provided, only loyalty promotions with the specified status are returned. Otherwise, all loyalty promotions associated with the loyalty program are returned. | | `cursor` | `string \| null` | No | — | The cursor returned in the paged response from the previous call to this endpoint. Provide this cursor to retrieve the next page of results for your original request. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | | `limit` | `number \| null` | No | 30 | The maximum number of results to return in a single paged response. The minimum value is 1 and the maximum value is 30. The default value is 30. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | Use the official [ListLoyaltyPromotions reference](https://developer.squareup.com/reference/square/loyalty-api/list-loyalty-promotions) for provider field semantics and limits. ## Output Returns the official `Square.ListLoyaltyPromotionsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Merchant Custom Attribute Definitions Source: https://docs.automate.ax/reference/integrations/square/actions/list-merchant-custom-attribute-definitions Lists the merchant-related [custom attribute definitions](entity:CustomAttributeDefinition) that belong to a Square seller account. `square.listMerchantCustomAttributeDefinitions` lists the merchant-related [custom attribute definitions](entity:CustomAttributeDefinition) that belong to a Square seller account. ## Example ```ts automations/square-list-merchant-custom-attribute-definitions.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "List Square Merchant Custom Attribute Definitions", () => { onDashboardRun({ title: "List Square Merchant Custom Attribute Definitions", }) square.listMerchantCustomAttributeDefinitions({ visibilityFilter: "ALL", limit: 1, cursor: "cursor", }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `MERCHANT_PROFILE_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `visibilityFilter` | `Square.VisibilityFilter \| null` | No | — | Filters the `CustomAttributeDefinition` results by their `visibility` values. | | `limit` | `number \| null` | No | 20 | The maximum number of results to return in a single paged response. This limit is advisory. The response might contain more or fewer results. The minimum value is 1 and the maximum value is 100. The default value is 20. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | | `cursor` | `string \| null` | No | — | The cursor returned in the paged response from the previous call to this endpoint. Provide this cursor to retrieve the next page of results for your original request. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | Use the official [ListMerchantCustomAttributeDefinitions reference](https://developer.squareup.com/reference/square/merchant-custom-attributes-api/list-merchant-custom-attribute-definitions) for provider field semantics and limits. ## Output Returns the official `Square.ListMerchantCustomAttributeDefinitionsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Merchant Custom Attributes Source: https://docs.automate.ax/reference/integrations/square/actions/list-merchant-custom-attributes Lists the [custom attributes](entity:CustomAttribute) associated with a merchant. `square.listMerchantCustomAttributes` lists the [custom attributes](entity:CustomAttribute) associated with a merchant. ## Example ```ts automations/square-list-merchant-custom-attributes.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Merchant Custom Attributes", () => { onDashboardRun({ title: "List Square Merchant Custom Attributes" }) square.listMerchantCustomAttributes({ merchantId: "merchant_id", visibilityFilter: "ALL", limit: 1, cursor: "cursor", withDefinitions: true, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `MERCHANT_PROFILE_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `merchantId` | `string` | Yes | — | The ID of the target merchant. | | `visibilityFilter` | `Square.VisibilityFilter \| null` | No | — | Filters the `CustomAttributeDefinition` results by their `visibility` values. | | `limit` | `number \| null` | No | 20 | The maximum number of results to return in a single paged response. This limit is advisory. The response might contain more or fewer results. The minimum value is 1 and the maximum value is 100. The default value is 20. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | | `cursor` | `string \| null` | No | — | The cursor returned in the paged response from the previous call to this endpoint. Provide this cursor to retrieve the next page of results for your original request. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | | `withDefinitions` | `boolean \| null` | No | `false` | Indicates whether to return the custom attribute definition in the `definition` field of each custom attribute. Set this parameter to `true` to get the name and description of each custom attribute, information about the data type, or other definition details. The default value is `false`. | Use the official [ListMerchantCustomAttributes reference](https://developer.squareup.com/reference/square/merchant-custom-attributes-api/list-merchant-custom-attributes) for provider field semantics and limits. ## Output Returns the official `Square.ListMerchantCustomAttributesResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Merchants Source: https://docs.automate.ax/reference/integrations/square/actions/list-merchants Provides details about the merchant associated with a given access token. `square.listMerchants` provides details about the merchant associated with a given access token. ## Example ```ts automations/square-list-merchants.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Merchants", () => { onDashboardRun({ title: "List Square Merchants" }) square.listMerchants({ cursor: 1, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `MERCHANT_PROFILE_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `cursor` | `number \| null` | No | — | The cursor generated by the previous response. | Use the official [ListMerchants reference](https://developer.squareup.com/reference/square/merchants-api/list-merchants) for provider field semantics and limits. ## Output Returns the official `Square.ListMerchantsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Order Custom Attribute Definitions Source: https://docs.automate.ax/reference/integrations/square/actions/list-order-custom-attribute-definitions Lists the order-related [custom attribute definitions](entity:CustomAttributeDefinition) that belong to a Square seller account. `square.listOrderCustomAttributeDefinitions` lists the order-related [custom attribute definitions](entity:CustomAttributeDefinition) that belong to a Square seller account. ## Example ```ts automations/square-list-order-custom-attribute-definitions.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "List Square Order Custom Attribute Definitions", () => { onDashboardRun({ title: "List Square Order Custom Attribute Definitions" }) square.listOrderCustomAttributeDefinitions({ visibilityFilter: "ALL", cursor: "cursor", limit: 1, }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `ORDERS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `visibilityFilter` | `Square.VisibilityFilter \| null` | No | — | Requests that all of the custom attributes be returned, or only those that are read-only or read-write. | | `cursor` | `string \| null` | No | — | The cursor returned in the paged response from the previous call to this endpoint. Provide this cursor to retrieve the next page of results for your original request. For more information, see [Pagination](https://developer.squareup.com/docs/working-with-apis/pagination). | | `limit` | `number \| null` | No | 20 | The maximum number of results to return in a single paged response. This limit is advisory. The response might contain more or fewer results. The minimum value is 1 and the maximum value is 100. The default value is 20. For more information, see [Pagination](https://developer.squareup.com/docs/working-with-apis/pagination). | Use the official [ListOrderCustomAttributeDefinitions reference](https://developer.squareup.com/reference/square/order-custom-attributes-api/list-order-custom-attribute-definitions) for provider field semantics and limits. ## Output Returns the official `Square.ListOrderCustomAttributeDefinitionsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Order Custom Attributes Source: https://docs.automate.ax/reference/integrations/square/actions/list-order-custom-attributes Lists the [custom attributes](entity:CustomAttribute) associated with an order. `square.listOrderCustomAttributes` lists the [custom attributes](entity:CustomAttribute) associated with an order. ## Example ```ts automations/square-list-order-custom-attributes.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Order Custom Attributes", () => { onDashboardRun({ title: "List Square Order Custom Attributes" }) square.listOrderCustomAttributes({ orderId: "order_id", visibilityFilter: "ALL", cursor: "cursor", limit: 1, withDefinitions: true, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ORDERS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `orderId` | `string` | Yes | — | The ID of the target order. | | `visibilityFilter` | `Square.VisibilityFilter \| null` | No | — | Requests that all of the custom attributes be returned, or only those that are read-only or read-write. | | `cursor` | `string \| null` | No | — | The cursor returned in the paged response from the previous call to this endpoint. Provide this cursor to retrieve the next page of results for your original request. For more information, see [Pagination](https://developer.squareup.com/docs/working-with-apis/pagination). | | `limit` | `number \| null` | No | 20 | The maximum number of results to return in a single paged response. This limit is advisory. The response might contain more or fewer results. The minimum value is 1 and the maximum value is 100. The default value is 20. For more information, see [Pagination](https://developer.squareup.com/docs/working-with-apis/pagination). | | `withDefinitions` | `boolean \| null` | No | `false` | Indicates whether to return the custom attribute definition in the `definition` field of each custom attribute. Set this parameter to `true` to get the name and description of each custom attribute, information about the data type, or other definition details. The default value is `false`. | Use the official [ListOrderCustomAttributes reference](https://developer.squareup.com/reference/square/order-custom-attributes-api/list-order-custom-attributes) for provider field semantics and limits. ## Output Returns the official `Square.ListOrderCustomAttributesResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Payment Links Source: https://docs.automate.ax/reference/integrations/square/actions/list-payment-links Lists all payment links. `square.listPaymentLinks` lists all payment links. ## Example ```ts automations/square-list-payment-links.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Payment Links", () => { onDashboardRun({ title: "List Square Payment Links" }) square.listPaymentLinks({ cursor: "cursor", limit: 1, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ORDERS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `cursor` | `string \| null` | No | — | A pagination cursor returned by a previous call to this endpoint. Provide this cursor to retrieve the next set of results for the original query. If a cursor is not provided, the endpoint returns the first page of the results. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | | `limit` | `number \| null` | No | — | A limit on the number of results to return per page. The limit is advisory and the implementation might return more or less results. If the supplied limit is negative, zero, or greater than the maximum limit of 1000, it is ignored. Default value: `100` | Use the official [ListPaymentLinks reference](https://developer.squareup.com/reference/square/checkout-api/list-payment-links) for provider field semantics and limits. ## Output Returns the official `Square.ListPaymentLinksResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Payment Refunds Source: https://docs.automate.ax/reference/integrations/square/actions/list-payment-refunds Retrieves a list of refunds for the account making the request. `square.listPaymentRefunds` retrieves a list of refunds for the account making the request. ## Example ```ts automations/square-list-payment-refunds.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Payment Refunds", () => { onDashboardRun({ title: "List Square Payment Refunds" }) square.listPaymentRefunds({ beginTime: "begin_time", endTime: "end_time", sortOrder: "sort_order", cursor: "cursor", locationId: "location_id", status: "status", sourceType: "source_type", limit: 1, updatedAtBeginTime: "updated_at_begin_time", updatedAtEndTime: "updated_at_end_time", sortField: "CREATED_AT", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `PAYMENTS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `beginTime` | `string \| null` | No | The current time minus one year | Indicates the start of the time range to retrieve each `PaymentRefund` for, in RFC 3339 format. The range is determined using the `created_at` field for each `PaymentRefund`. Default: The current time minus one year. | | `endTime` | `string \| null` | No | The current time | Indicates the end of the time range to retrieve each `PaymentRefund` for, in RFC 3339 format. The range is determined using the `created_at` field for each `PaymentRefund`. Default: The current time. | | `sortOrder` | `string \| null` | No | — | The order in which results are listed by `PaymentRefund.created_at`: - `ASC` - Oldest to newest. - `DESC` - Newest to oldest (default). | | `cursor` | `string \| null` | No | — | A pagination cursor returned by a previous call to this endpoint. Provide this cursor to retrieve the next set of results for the original query. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | | `locationId` | `string \| null` | No | — | Limit results to the location supplied. By default, results are returned for all locations associated with the seller. | | `status` | `string \| null` | No | If omitted, refunds are returned regardless of their status | If provided, only refunds with the given status are returned. For a list of refund status values, see PaymentRefund. Default: If omitted, refunds are returned regardless of their status. | | `sourceType` | `string \| null` | No | If omitted, refunds are returned regardless of the source type | If provided, only returns refunds whose payments have the indicated source type. Current values include `CARD`, `BANK_ACCOUNT`, `WALLET`, `CASH`, and `EXTERNAL`. For information about these payment source types, see [Take Payments](https://developer.squareup.com/docs/payments-api/take-payments). Default: If omitted, refunds are returned regardless of the source type. | | `limit` | `number \| null` | No | 100 | The maximum number of results to be returned in a single page. It is possible to receive fewer results than the specified limit on a given page. If the supplied value is greater than 100, no more than 100 results are returned. Default: 100 | | `updatedAtBeginTime` | `string \| null` | No | If omitted, the time range starts at `begin_time` | Indicates the start of the time range to retrieve each `PaymentRefund` for, in RFC 3339 format. The range is determined using the `updated_at` field for each `PaymentRefund`. Default: If omitted, the time range starts at `begin_time`. | | `updatedAtEndTime` | `string \| null` | No | The current time | Indicates the end of the time range to retrieve each `PaymentRefund` for, in RFC 3339 format. The range is determined using the `updated_at` field for each `PaymentRefund`. Default: The current time. | | `sortField` | `Square.ListPaymentRefundsRequestSortField \| null` | No | — | The field used to sort results by. The default is `CREATED_AT`. | Use the official [ListPaymentRefunds reference](https://developer.squareup.com/reference/square/refunds-api/list-payment-refunds) for provider field semantics and limits. ## Output Returns the official `Square.ListPaymentRefundsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Payments Source: https://docs.automate.ax/reference/integrations/square/actions/list-payments Retrieves a list of payments taken by the account making the request. `square.listPayments` retrieves a list of payments taken by the account making the request. ## Example ```ts automations/square-list-payments.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Payments", () => { onDashboardRun({ title: "List Square Payments" }) square.listPayments({ beginTime: "begin_time", endTime: "end_time", sortOrder: "sort_order", cursor: "cursor", locationId: "location_id", total: BigInt("1000000"), last4: "last_4", cardBrand: "card_brand", limit: 1, isOfflinePayment: true, offlineBeginTime: "offline_begin_time", offlineEndTime: "offline_end_time", updatedAtBeginTime: "updated_at_begin_time", updatedAtEndTime: "updated_at_end_time", sortField: "CREATED_AT", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `PAYMENTS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `beginTime` | `string \| null` | No | The current time minus one year | Indicates the start of the time range to retrieve payments for, in RFC 3339 format. The range is determined using the `created_at` field for each Payment. Inclusive. Default: The current time minus one year. | | `endTime` | `string \| null` | No | The current time | Indicates the end of the time range to retrieve payments for, in RFC 3339 format. The range is determined using the `created_at` field for each Payment. Default: The current time. | | `sortOrder` | `string \| null` | No | — | The order in which results are listed by `ListPaymentsRequest.sort_field`: - `ASC` - Oldest to newest. - `DESC` - Newest to oldest (default). | | `cursor` | `string \| null` | No | — | A pagination cursor returned by a previous call to this endpoint. Provide this cursor to retrieve the next set of results for the original query. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | | `locationId` | `string \| null` | No | — | Limit results to the location supplied. By default, results are returned for the default (main) location associated with the seller. | | `total` | `bigint \| null` | No | — | The exact amount in the `total_money` for a payment. | | `last4` | `string \| null` | No | — | The last four digits of a payment card. | | `cardBrand` | `string \| null` | No | — | The brand of the payment card (for example, VISA). | | `limit` | `number \| null` | No | used instead | The maximum number of results to be returned in a single page. It is possible to receive fewer results than the specified limit on a given page. The default value of 100 is also the maximum allowed value. If the provided value is greater than 100, it is ignored and the default value is used instead. Default: `100` | | `isOfflinePayment` | `boolean \| null` | No | — | Whether the payment was taken offline or not. | | `offlineBeginTime` | `string \| null` | No | The current time | Indicates the start of the time range for which to retrieve offline payments, in RFC 3339 format for timestamps. The range is determined using the `offline_payment_details.client_created_at` field for each Payment. If set, payments without a value set in `offline_payment_details.client_created_at` will not be returned. Default: The current time. | | `offlineEndTime` | `string \| null` | No | The current time | Indicates the end of the time range for which to retrieve offline payments, in RFC 3339 format for timestamps. The range is determined using the `offline_payment_details.client_created_at` field for each Payment. If set, payments without a value set in `offline_payment_details.client_created_at` will not be returned. Default: The current time. | | `updatedAtBeginTime` | `string \| null` | No | — | Indicates the start of the time range to retrieve payments for, in RFC 3339 format. The range is determined using the `updated_at` field for each Payment. | | `updatedAtEndTime` | `string \| null` | No | — | Indicates the end of the time range to retrieve payments for, in RFC 3339 format. The range is determined using the `updated_at` field for each Payment. | | `sortField` | `Square.ListPaymentsRequestSortField \| null` | No | — | The field used to sort results by. The default is `CREATED_AT`. | Use the official [ListPayments reference](https://developer.squareup.com/reference/square/payments-api/list-payments) for provider field semantics and limits. ## Output Returns the official `Square.ListPaymentsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Payout Entries Source: https://docs.automate.ax/reference/integrations/square/actions/list-payout-entries Retrieves a list of all payout entries for a specific payout. `square.listPayoutEntries` retrieves a list of all payout entries for a specific payout. ## Example ```ts automations/square-list-payout-entries.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Payout Entries", () => { onDashboardRun({ title: "List Square Payout Entries" }) square.listPayoutEntries({ payoutId: "payout_id", sortOrder: "DESC", cursor: "cursor", limit: 1, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `PAYOUTS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `payoutId` | `string` | Yes | — | The ID of the payout to retrieve the information for. | | `sortOrder` | `Square.SortOrder \| null` | No | — | The order in which payout entries are listed. | | `cursor` | `string \| null` | No | — | A pagination cursor returned by a previous call to this endpoint. Provide this cursor to retrieve the next set of results for the original query. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). If request parameters change between requests, subsequent results may contain duplicates or missing records. | | `limit` | `number \| null` | No | used instead | The maximum number of results to be returned in a single page. It is possible to receive fewer results than the specified limit on a given page. The default value of 100 is also the maximum allowed value. If the provided value is greater than 100, it is ignored and the default value is used instead. Default: `100` | Use the official [ListPayoutEntries reference](https://developer.squareup.com/reference/square/payouts-api/list-payout-entries) for provider field semantics and limits. ## Output Returns the official `Square.ListPayoutEntriesResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Payouts Source: https://docs.automate.ax/reference/integrations/square/actions/list-payouts Retrieves a list of all payouts for the default location. `square.listPayouts` retrieves a list of all payouts for the default location. ## Example ```ts automations/square-list-payouts.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Payouts", () => { onDashboardRun({ title: "List Square Payouts" }) square.listPayouts({ locationId: "location_id", status: "SENT", beginTime: "begin_time", endTime: "end_time", sortOrder: "DESC", cursor: "cursor", limit: 1, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `PAYOUTS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `locationId` | `string \| null` | No | — | The ID of the location for which to list the payouts. By default, payouts are returned for the default (main) location associated with the seller. | | `status` | `Square.PayoutStatus \| null` | No | — | If provided, only payouts with the given status are returned. | | `beginTime` | `string \| null` | No | The current time minus one year | The timestamp for the beginning of the payout creation time, in RFC 3339 format. Inclusive. Default: The current time minus one year. | | `endTime` | `string \| null` | No | The current time | The timestamp for the end of the payout creation time, in RFC 3339 format. Default: The current time. | | `sortOrder` | `Square.SortOrder \| null` | No | — | The order in which payouts are listed. | | `cursor` | `string \| null` | No | — | A pagination cursor returned by a previous call to this endpoint. Provide this cursor to retrieve the next set of results for the original query. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). If request parameters change between requests, subsequent results may contain duplicates or missing records. | | `limit` | `number \| null` | No | used instead | The maximum number of results to be returned in a single page. It is possible to receive fewer results than the specified limit on a given page. The default value of 100 is also the maximum allowed value. If the provided value is greater than 100, it is ignored and the default value is used instead. Default: `100` | Use the official [ListPayouts reference](https://developer.squareup.com/reference/square/payouts-api/list-payouts) for provider field semantics and limits. ## Output Returns the official `Square.ListPayoutsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Sites Source: https://docs.automate.ax/reference/integrations/square/actions/list-sites Lists the Square Online sites that belong to a seller. `square.listSites` lists the Square Online sites that belong to a seller. ## Example ```ts automations/square-list-sites.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Sites", () => { onDashboardRun({ title: "List Square Sites" }) square.listSites() }) ``` ## Inputs Every input accepts a compatible signal. It requires `ONLINE_STORE_SITE_READ`. This action has no inputs. Use the official [ListSites reference](https://developer.squareup.com/reference/square/sites-api/list-sites) for provider field semantics and limits. ## Output Returns the official `Square.ListSitesResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Subscription Events Source: https://docs.automate.ax/reference/integrations/square/actions/list-subscription-events Lists all [events](https://developer.squareup.com/docs/subscriptions-api/actions-events) for a specific subscription. `square.listSubscriptionEvents` lists all [events](https://developer.squareup.com/docs/subscriptions-api/actions-events) for a specific subscription. ## Example ```ts automations/square-list-subscription-events.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Subscription Events", () => { onDashboardRun({ title: "List Square Subscription Events" }) square.listSubscriptionEvents({ subscriptionId: "subscription_id", cursor: "cursor", limit: 1, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `SUBSCRIPTIONS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `subscriptionId` | `string` | Yes | — | The ID of the subscription to retrieve the events for. | | `cursor` | `string \| null` | No | — | When the total number of resulting subscription events exceeds the limit of a paged response, specify the cursor returned from a preceding response here to fetch the next set of results. If the cursor is unset, the response contains the last page of the results. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | | `limit` | `number \| null` | No | — | The upper limit on the number of subscription events to return in a paged response. | Use the official [ListSubscriptionEvents reference](https://developer.squareup.com/reference/square/subscriptions-api/list-subscription-events) for provider field semantics and limits. ## Output Returns the official `Square.ListSubscriptionEventsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Team Member Booking Profiles Source: https://docs.automate.ax/reference/integrations/square/actions/list-team-member-booking-profiles Lists booking profiles for team members. `square.listTeamMemberBookingProfiles` lists booking profiles for team members. ## Example ```ts automations/square-list-team-member-booking-profiles.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Team Member Booking Profiles", () => { onDashboardRun({ title: "List Square Team Member Booking Profiles" }) square.listTeamMemberBookingProfiles({ bookableOnly: true, limit: 1, cursor: "cursor", locationId: "location_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `APPOINTMENTS_BUSINESS_SETTINGS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `bookableOnly` | `boolean \| null` | No | — | Indicates whether to include only bookable team members in the returned result (`true`) or not (`false`). | | `limit` | `number \| null` | No | — | The maximum number of results to return in a paged response. | | `cursor` | `string \| null` | No | — | The pagination cursor from the preceding response to return the next page of the results. Do not set this when retrieving the first page of the results. | | `locationId` | `string \| null` | No | — | Indicates whether to include only team members enabled at the given location in the returned result. | Use the official [ListTeamMemberBookingProfiles reference](https://developer.squareup.com/reference/square/bookings-api/list-team-member-booking-profiles) for provider field semantics and limits. ## Output Returns the official `Square.ListTeamMemberBookingProfilesResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Team Member Wages Source: https://docs.automate.ax/reference/integrations/square/actions/list-team-member-wages Returns a paginated list of `TeamMemberWage` instances for a business. `square.listTeamMemberWages` returns a paginated list of `TeamMemberWage` instances for a business. ## Example ```ts automations/square-list-team-member-wages.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Team Member Wages", () => { onDashboardRun({ title: "List Square Team Member Wages" }) square.listTeamMemberWages({ teamMemberId: "team_member_id", limit: 1, cursor: "cursor", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `EMPLOYEES_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `teamMemberId` | `string \| null` | No | — | Filter the returned wages to only those that are associated with the specified team member. | | `limit` | `number \| null` | No | — | The maximum number of `TeamMemberWage` results to return per page. The number can range between 1 and 200. The default is 200. | | `cursor` | `string \| null` | No | — | A pointer to the next page of `EmployeeWage` results to fetch. | Use the official [ListTeamMemberWages reference](https://developer.squareup.com/reference/square/labor-api/list-team-member-wages) for provider field semantics and limits. ## Output Returns the official `Square.ListTeamMemberWagesResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # List Workweek Configs Source: https://docs.automate.ax/reference/integrations/square/actions/list-workweek-configs Returns a list of `WorkweekConfig` instances for a business. `square.listWorkweekConfigs` returns a list of `WorkweekConfig` instances for a business. ## Example ```ts automations/square-list-workweek-configs.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("List Square Workweek Configs", () => { onDashboardRun({ title: "List Square Workweek Configs" }) square.listWorkweekConfigs({ limit: 1, cursor: "cursor", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `TIMECARDS_SETTINGS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `limit` | `number \| null` | No | — | The maximum number of `WorkweekConfigs` results to return per page. | | `cursor` | `string \| null` | No | — | A pointer to the next page of `WorkweekConfig` results to fetch. | Use the official [ListWorkweekConfigs reference](https://developer.squareup.com/reference/square/labor-api/list-workweek-configs) for provider field semantics and limits. ## Output Returns the official `Square.ListWorkweekConfigsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Load report Source: https://docs.automate.ax/reference/integrations/square/actions/load-report Runs an aggregated Square reporting query against the discovered schema. `square.loadReport` runs an aggregated Square reporting query against the discovered schema. ## Example ```ts automations/square-load-report.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Load Square report", () => { onDashboardRun({ title: "Load Square report" }) square.loadReport({}) }) ``` ## Inputs Every input accepts a compatible signal. It requires `REPORTING_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `queryType` | `string` | No | — | Square `queryType` request field. | | `cache` | `Square.CacheMode` | No | — | Square `cache` request field. | | `query` | `Square.Query` | No | — | Square `query` request field. | Use the official [LoadReport reference](https://developer.squareup.com/reference/square/reporting-api/load-report) for provider field semantics and limits. ## Output Returns the official `Square.LoadResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Pause Subscription Source: https://docs.automate.ax/reference/integrations/square/actions/pause-subscription Schedules a `PAUSE` action to pause an active subscription. `square.pauseSubscription` schedules a `PAUSE` action to pause an active subscription. ## Example ```ts automations/square-pause-subscription.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Pause Square Subscription", () => { onDashboardRun({ title: "Pause Square Subscription" }) square.pauseSubscription({ subscriptionId: "subscription_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_READ` and `INVOICES_WRITE` and `ITEMS_READ` and `ORDERS_WRITE` and `PAYMENTS_WRITE` and `SUBSCRIPTIONS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `subscriptionId` | `string` | Yes | — | The ID of the subscription to pause. | | `pauseEffectiveDate` | `string \| null` | No | — | The `YYYY-MM-DD`-formatted date when the scheduled `PAUSE` action takes place on the subscription. When this date is unspecified or falls within the current billing cycle, the subscription is paused on the starting date of the next billing cycle. | | `pauseCycleDuration` | `bigint \| null` | No | — | The number of billing cycles the subscription will be paused before it is reactivated. When this is set, a `RESUME` action is also scheduled to take place on the subscription at the end of the specified pause cycle duration. In this case, neither `resume_effective_date` nor `resume_change_timing` may be specified. | | `resumeEffectiveDate` | `string \| null` | No | — | The date when the subscription is reactivated by a scheduled `RESUME` action. This date must be at least one billing cycle ahead of `pause_effective_date`. | | `resumeChangeTiming` | `Square.ChangeTiming` | No | — | The timing whether the subscription is reactivated immediately or at the end of the billing cycle, relative to `resume_effective_date`. See [ChangeTiming](#type-changetiming) for possible values | | `pauseReason` | `string \| null` | No | — | The user-provided reason to pause the subscription. | Use the official [PauseSubscription reference](https://developer.squareup.com/reference/square/subscriptions-api/pause-subscription) for provider field semantics and limits. ## Output Returns the official `Square.PauseSubscriptionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Pay Order Source: https://docs.automate.ax/reference/integrations/square/actions/pay-order Pay for an [order](entity:Order) using one or more approved [payments](entity:Payment) or settle an order with a total of `0`. `square.payOrder` pay for an [order](entity:Order) using one or more approved [payments](entity:Payment) or settle an order with a total of `0`. ## Example ```ts automations/square-pay-order.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Pay Square Order", () => { onDashboardRun({ title: "Pay Square Order" }) square.payOrder({ orderId: "order_id", idempotencyKey: "c043a359-7ad9-4136-82a9-c3f1d66dcbff", paymentIds: ["EnZdNAlWCmfh6Mt5FMNST1o7taB", "0LRiVlbXVwe8ozu4KbZxd12mvaB"], }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ORDERS_WRITE` and `PAYMENTS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `orderId` | `string` | Yes | — | The ID of the order being paid. | | `idempotencyKey` | `string` | Yes | — | A value you specify that uniquely identifies this request among requests you have sent. If you are unsure whether a particular payment request was completed successfully, you can reattempt it with the same idempotency key without worrying about duplicate payments. For more information, see [Idempotency](https://developer.squareup.com/docs/working-with-apis/idempotency). | | `orderVersion` | `number \| null` | No | — | The version of the order being paid. If not supplied, the latest version will be paid. | | `paymentIds` | `string[] \| null` | No | — | The IDs of the payments to collect. The payment total must match the order total. | Use the official [PayOrder reference](https://developer.squareup.com/reference/square/orders-api/pay-order) for provider field semantics and limits. ## Output Returns the official `Square.PayOrderResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Publish Invoice Source: https://docs.automate.ax/reference/integrations/square/actions/publish-invoice Publishes the specified draft invoice. `square.publishInvoice` publishes the specified draft invoice. ## Example ```ts automations/square-publish-invoice.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Publish Square Invoice", () => { onDashboardRun({ title: "Publish Square Invoice" }) square.publishInvoice({ invoiceId: "invoice_id", version: 1, idempotencyKey: "32da42d0-1997-41b0-826b-f09464fc2c2e", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `INVOICES_WRITE` and `ORDERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `invoiceId` | `string` | Yes | — | The ID of the invoice to publish. | | `version` | `number` | Yes | — | The version of the invoice to publish. This must match the current version of the invoice; otherwise, the request is rejected. | | `idempotencyKey` | `string \| null` | No | — | A unique string that identifies the `PublishInvoice` request. If you do not provide `idempotency_key` (or provide an empty string as the value), the endpoint treats each request as independent. For more information, see [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency). | Use the official [PublishInvoice reference](https://developer.squareup.com/reference/square/invoices-api/publish-invoice) for provider field semantics and limits. ## Output Returns the official `Square.PublishInvoiceResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Publish Scheduled Shift Source: https://docs.automate.ax/reference/integrations/square/actions/publish-scheduled-shift Publishes a scheduled shift. `square.publishScheduledShift` publishes a scheduled shift. ## Example ```ts automations/square-publish-scheduled-shift.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Publish Square Scheduled Shift", () => { onDashboardRun({ title: "Publish Square Scheduled Shift" }) square.publishScheduledShift({ id: "id", idempotencyKey: "HIDSNG5KS478L", version: 2, scheduledShiftNotificationAudience: "ALL", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `TIMECARDS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `id` | `string` | Yes | — | The ID of the scheduled shift to publish. | | `idempotencyKey` | `string` | Yes | — | A unique identifier for the `PublishScheduledShift` request, used to ensure the [idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency) of the operation. | | `version` | `number` | No | — | The current version of the scheduled shift, used to enable [optimistic concurrency](https://developer.squareup.com/docs/build-basics/common-api-patterns/optimistic-concurrency) control. If the provided version doesn't match the server version, the request fails. If omitted, Square executes a blind write, potentially overwriting data from another publish request. | | `scheduledShiftNotificationAudience` | `Square.ScheduledShiftNotificationAudience` | No | `AFFECTED` | Indicates whether Square should send an email notification to team members and which team members should receive the notification. The default value is `AFFECTED`. See [ScheduledShiftNotificationAudience](#type-scheduledshiftnotificationaudience) for possible values | Use the official [PublishScheduledShift reference](https://developer.squareup.com/reference/square/labor-api/publish-scheduled-shift) for provider field semantics and limits. ## Output Returns the official `Square.PublishScheduledShiftResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Receive Transfer Order Source: https://docs.automate.ax/reference/integrations/square/actions/receive-transfer-order Records receipt of [CatalogItemVariation](entity:CatalogItemVariation)s for a transfer order. `square.receiveTransferOrder` records receipt of [CatalogItemVariation](entity:CatalogItemVariation)s for a transfer order. ## Example ```ts automations/square-receive-transfer-order.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Receive Square Transfer Order", () => { onDashboardRun({ title: "Receive Square Transfer Order" }) square.receiveTransferOrder({ transferOrderId: "transfer_order_id", idempotencyKey: "EXAMPLE_IDEMPOTENCY_KEY_101", receipt: { lineItems: [ { transferOrderLineUid: "1", quantityReceived: "3", quantityDamaged: "1", quantityCanceled: "1", }, { transferOrderLineUid: "2", quantityReceived: "2", quantityCanceled: "1", }, ], }, version: BigInt("1753118664873"), }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `INVENTORY_READ` and `INVENTORY_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `transferOrderId` | `string` | Yes | — | The ID of the transfer order to receive items for | | `idempotencyKey` | `string` | Yes | — | A unique key to make this request idempotent | | `receipt` | `Square.TransferOrderGoodsReceipt` | Yes | — | The receipt details | | `version` | `bigint` | No | — | Version for optimistic concurrency | Use the official [ReceiveTransferOrder reference](https://developer.squareup.com/reference/square/transfer-order-api/receive-transfer-order) for provider field semantics and limits. ## Output Returns the official `Square.ReceiveTransferOrderResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Redeem Loyalty Reward Source: https://docs.automate.ax/reference/integrations/square/actions/redeem-loyalty-reward Redeems a loyalty reward. `square.redeemLoyaltyReward` redeems a loyalty reward. ## Example ```ts automations/square-redeem-loyalty-reward.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Redeem Square Loyalty Reward", () => { onDashboardRun({ title: "Redeem Square Loyalty Reward" }) square.redeemLoyaltyReward({ rewardId: "reward_id", idempotencyKey: "98adc7f7-6963-473b-b29c-f3c9cdd7d994", locationId: "P034NEENMD09F", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `LOYALTY_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `rewardId` | `string` | Yes | — | The ID of the loyalty reward to redeem. | | `idempotencyKey` | `string` | Yes | — | A unique string that identifies this `RedeemLoyaltyReward` request. Keys can be any valid string, but must be unique for every request. | | `locationId` | `string` | Yes | — | The ID of the location where the reward is redeemed. | Use the official [RedeemLoyaltyReward reference](https://developer.squareup.com/reference/square/loyalty-api/redeem-loyalty-reward) for provider field semantics and limits. ## Output Returns the official `Square.RedeemLoyaltyRewardResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Refund Payment Source: https://docs.automate.ax/reference/integrations/square/actions/refund-payment Refunds a payment. `square.refundPayment` refunds a payment. ## Example ```ts automations/square-refund-payment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Refund Square Payment", () => { onDashboardRun({ title: "Refund Square Payment" }) square.refundPayment({ idempotencyKey: "9b7f2dcf-49da-4411-b23e-a2d6af21333a", amountMoney: { amount: BigInt("1000"), currency: "USD", }, appFeeMoney: { amount: BigInt("10"), currency: "USD", }, paymentId: "R2B3Z8WMVt3EAmzYWLZvz7Y69EbZY", reason: "Example", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `PAYMENTS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `idempotencyKey` | `string` | Yes | — | A unique string that identifies this `RefundPayment` request. The key can be any valid string but must be unique for every `RefundPayment` request. Keys are limited to a max of 45 characters - however, the number of allowed characters might be less than 45, if multi-byte characters are used. For more information, see [Idempotency](https://developer.squareup.com/docs/working-with-apis/idempotency). | | `amountMoney` | `Square.Money` | Yes | — | The amount of money to refund. This amount cannot be more than the `total_money` value of the payment minus the total amount of all previously completed refunds for this payment. This amount must be specified in the smallest denomination of the applicable currency (for example, US dollar amounts are specified in cents). For more information, see [Working with Monetary Amounts](https://developer.squareup.com/docs/build-basics/working-with-monetary-amounts). The currency code must match the currency associated with the business that is charging the card. | | `appFeeMoney` | `Square.Money` | No | — | The amount of money the developer contributes to help cover the refunded amount. This amount is specified in the smallest denomination of the applicable currency (for example, US dollar amounts are specified in cents). The value cannot be more than the `amount_money`. You can specify this parameter in a refund request only if the same parameter was also included when taking the payment. This is part of the application fee scenario the API supports. For more information, see [Take Payments and Collect Fees](https://developer.squareup.com/docs/payments-api/take-payments-and-collect-fees). To set this field, `PAYMENTS_WRITE_ADDITIONAL_RECIPIENTS` OAuth permission is required. For more information, see [Permissions](https://developer.squareup.com/docs/payments-api/take-payments-and-collect-fees#permissions). | | `appFeeAllocations` | `unknown[] \| null` | No | — | Details pertaining to contributors to the refund of the application fee. The sum of the amounts in the app\_fee\_allocations must equal the app\_fee\_money amount, if present. If populated, an allocation must be present for every party that expects to contribute a portion of the refunded application fee, including the application developer. | | `paymentId` | `string \| null` | No | — | The unique ID of the payment being refunded. Required when unlinked=false, otherwise must not be set. | | `destinationId` | `string \| null` | No | — | The ID indicating where funds will be refunded to. Required for unlinked refunds. For more information, see [Process an Unlinked Refund](https://developer.squareup.com/docs/refunds-api/unlinked-refunds). For refunds linked to Square payments, `destination_id` is usually omitted; in this case, funds will be returned to the original payment source. The field may be specified in order to request a cross-method refund to a gift card. For more information, see [Cross-method refunds to gift cards](https://developer.squareup.com/docs/payments-api/refund-payments#cross-method-refunds-to-gift-cards). | | `unlinked` | `boolean \| null` | No | — | Indicates that the refund is not linked to a Square payment. If set to true, `destination_id` and `location_id` must be supplied while `payment_id` must not be provided. | | `locationId` | `string \| null` | No | — | The location ID associated with the unlinked refund. Required for requests specifying `unlinked=true`. Otherwise, if included when `unlinked=false`, will throw an error. | | `customerId` | `string \| null` | No | — | The Customer ID of the customer associated with the refund. This is required if the `destination_id` refers to a card on file created using the Cards API. Only allowed when `unlinked=true`. | | `reason` | `string \| null` | No | — | A description of the reason for the refund. | | `paymentVersionToken` | `string \| null` | No | — | Used for optimistic concurrency. This opaque token identifies the current `Payment` version that the caller expects. If the server has a different version of the Payment, the update fails and a response with a VERSION\_MISMATCH error is returned. If the versions match, or the field is not provided, the refund proceeds as normal. | | `teamMemberId` | `string \| null` | No | — | An optional TeamMember ID to associate with this refund. | | `cashDetails` | `Square.DestinationDetailsCashRefundDetails` | No | — | Additional details required when recording an unlinked cash refund (`destination_id` is CASH). | | `externalDetails` | `Square.DestinationDetailsExternalRefundDetails` | No | — | Additional details required when recording an unlinked external refund (`destination_id` is EXTERNAL). | Use the official [RefundPayment reference](https://developer.squareup.com/reference/square/refunds-api/refund-payment) for provider field semantics and limits. ## Output Returns the official `Square.RefundPaymentResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Register Domain Source: https://docs.automate.ax/reference/integrations/square/actions/register-domain Activates a domain for use with Apple Pay on the Web and Square. `square.registerDomain` activates a domain for use with Apple Pay on the Web and Square. ## Example ```ts automations/square-register-domain.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Register Square Domain", () => { onDashboardRun({ title: "Register Square Domain" }) square.registerDomain({ domainName: "example.com", }) }) ``` ## Inputs Every input accepts a compatible signal. It does not require an additional Square OAuth permission. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `domainName` | `string` | Yes | — | A domain name as described in RFC-1034 that will be registered with ApplePay. | Use the official [RegisterDomain reference](https://developer.squareup.com/reference/square/apple-pay-api/register-domain) for provider field semantics and limits. ## Output Returns the official `Square.RegisterDomainResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Remove Group From Customer Source: https://docs.automate.ax/reference/integrations/square/actions/remove-group-from-customer Removes a group membership from a customer. `square.removeGroupFromCustomer` removes a group membership from a customer. ## Example ```ts automations/square-remove-group-from-customer.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Remove Square Group From Customer", () => { onDashboardRun({ title: "Remove Square Group From Customer" }) square.removeGroupFromCustomer({ customerId: "customer_id", groupId: "group_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `customerId` | `string` | Yes | — | The ID of the customer to remove from the group. | | `groupId` | `string` | Yes | — | The ID of the customer group to remove the customer from. | Use the official [RemoveGroupFromCustomer reference](https://developer.squareup.com/reference/square/customers-api/remove-group-from-customer) for provider field semantics and limits. ## Output Returns the official `Square.RemoveGroupFromCustomerResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Restore Inventory Adjustment Reason Source: https://docs.automate.ax/reference/integrations/square/actions/restore-inventory-adjustment-reason Restores a soft-deleted custom inventory adjustment reason. `square.restoreInventoryAdjustmentReason` restores a soft-deleted custom inventory adjustment reason. ## Example ```ts automations/square-restore-inventory-adjustment-reason.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Restore Square Inventory Adjustment Reason", () => { onDashboardRun({ title: "Restore Square Inventory Adjustment Reason" }) square.restoreInventoryAdjustmentReason({ reasonId: { type: "CUSTOM", customReasonId: "R5BX3PDCZ6EXAMPLE", }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `INVENTORY_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `reasonId` | `Square.InventoryAdjustmentReasonId` | Yes | — | The identifier of the soft-deleted custom inventory adjustment reason to restore. | Use the official [RestoreInventoryAdjustmentReason reference](https://developer.squareup.com/reference/square/inventory-api/restore-inventory-adjustment-reason) for provider field semantics and limits. ## Output Returns the official `Square.RestoreInventoryAdjustmentReasonResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Resume Subscription Source: https://docs.automate.ax/reference/integrations/square/actions/resume-subscription Schedules a `RESUME` action to resume a paused or a deactivated subscription. `square.resumeSubscription` schedules a `RESUME` action to resume a paused or a deactivated subscription. ## Example ```ts automations/square-resume-subscription.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Resume Square Subscription", () => { onDashboardRun({ title: "Resume Square Subscription" }) square.resumeSubscription({ subscriptionId: "subscription_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_READ` and `INVOICES_WRITE` and `ITEMS_READ` and `ORDERS_WRITE` and `PAYMENTS_WRITE` and `SUBSCRIPTIONS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `subscriptionId` | `string` | Yes | — | The ID of the subscription to resume. | | `resumeEffectiveDate` | `string \| null` | No | — | The `YYYY-MM-DD`-formatted date when the subscription reactivated. | | `resumeChangeTiming` | `Square.ChangeTiming` | No | — | The timing to resume a subscription, relative to the specified `resume_effective_date` attribute value. See [ChangeTiming](#type-changetiming) for possible values | Use the official [ResumeSubscription reference](https://developer.squareup.com/reference/square/subscriptions-api/resume-subscription) for provider field semantics and limits. ## Output Returns the official `Square.ResumeSubscriptionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Booking Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-booking Retrieves a booking. `square.retrieveBooking` retrieves a booking. ## Example ```ts automations/square-retrieve-booking.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Booking", () => { onDashboardRun({ title: "Retrieve Square Booking" }) square.retrieveBooking({ bookingId: "booking_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `APPOINTMENTS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `bookingId` | `string` | Yes | — | The ID of the Booking object representing the to-be-retrieved booking. | Use the official [RetrieveBooking reference](https://developer.squareup.com/reference/square/bookings-api/retrieve-booking) for provider field semantics and limits. ## Output Returns the official `Square.GetBookingResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Booking Custom Attribute Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-booking-custom-attribute Retrieves a bookings custom attribute. `square.retrieveBookingCustomAttribute` retrieves a bookings custom attribute. ## Example ```ts automations/square-retrieve-booking-custom-attribute.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Booking Custom Attribute", () => { onDashboardRun({ title: "Retrieve Square Booking Custom Attribute" }) square.retrieveBookingCustomAttribute({ bookingId: "booking_id", key: "key", withDefinition: true, version: 1, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `APPOINTMENTS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `bookingId` | `string` | Yes | — | The ID of the target booking. | | `key` | `string` | Yes | — | The key of the custom attribute to retrieve. This key must match the `key` of a custom attribute definition in the Square seller account. If the requesting application is not the definition owner, you must use the qualified key. | | `withDefinition` | `boolean \| null` | No | `false` | Indicates whether to return the custom attribute definition in the `definition` field of the custom attribute. Set this parameter to `true` to get the name and description of the custom attribute, information about the data type, or other definition details. The default value is `false`. | | `version` | `number \| null` | No | — | The current version of the custom attribute, which is used for strongly consistent reads to guarantee that you receive the most up-to-date data. When included in the request, Square returns the specified version or a higher version if one exists. If the specified version is higher than the current version, Square returns a `BAD_REQUEST` error. | Use the official [RetrieveBookingCustomAttribute reference](https://developer.squareup.com/reference/square/booking-custom-attributes-api/retrieve-booking-custom-attribute) for provider field semantics and limits. ## Output Returns the official `Square.RetrieveBookingCustomAttributeResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Booking Custom Attribute Definition Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-booking-custom-attribute-definition Retrieves a bookings custom attribute definition. `square.retrieveBookingCustomAttributeDefinition` retrieves a bookings custom attribute definition. ## Example ```ts automations/square-retrieve-booking-custom-attribute-definition.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "Retrieve Square Booking Custom Attribute Definition", () => { onDashboardRun({ title: "Retrieve Square Booking Custom Attribute Definition", }) square.retrieveBookingCustomAttributeDefinition({ key: "key", version: 1, }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `APPOINTMENTS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `key` | `string` | Yes | — | The key of the custom attribute definition to retrieve. If the requesting application is not the definition owner, you must use the qualified key. | | `version` | `number \| null` | No | — | The current version of the custom attribute definition, which is used for strongly consistent reads to guarantee that you receive the most up-to-date data. When included in the request, Square returns the specified version or a higher version if one exists. If the specified version is higher than the current version, Square returns a `BAD_REQUEST` error. | Use the official [RetrieveBookingCustomAttributeDefinition reference](https://developer.squareup.com/reference/square/booking-custom-attributes-api/retrieve-booking-custom-attribute-definition) for provider field semantics and limits. ## Output Returns the official `Square.RetrieveBookingCustomAttributeDefinitionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Business Booking Profile Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-business-booking-profile Retrieves a seller's booking profile. `square.retrieveBusinessBookingProfile` retrieves a seller's booking profile. ## Example ```ts automations/square-retrieve-business-booking-profile.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Business Booking Profile", () => { onDashboardRun({ title: "Retrieve Square Business Booking Profile" }) square.retrieveBusinessBookingProfile() }) ``` ## Inputs Every input accepts a compatible signal. It requires `APPOINTMENTS_BUSINESS_SETTINGS_READ`. This action has no inputs. Use the official [RetrieveBusinessBookingProfile reference](https://developer.squareup.com/reference/square/bookings-api/retrieve-business-booking-profile) for provider field semantics and limits. ## Output Returns the official `Square.GetBusinessBookingProfileResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Card Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-card Retrieves details for a specific Card. `square.retrieveCard` retrieves details for a specific Card. ## Example ```ts automations/square-retrieve-card.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Card", () => { onDashboardRun({ title: "Retrieve Square Card" }) square.retrieveCard({ cardId: "card_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `PAYMENTS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `cardId` | `string` | Yes | — | Unique ID for the desired Card. | Use the official [RetrieveCard reference](https://developer.squareup.com/reference/square/cards-api/retrieve-card) for provider field semantics and limits. ## Output Returns the official `Square.GetCardResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Cash Drawer Shift Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-cash-drawer-shift Provides the summary details for a single cash drawer shift. `square.retrieveCashDrawerShift` provides the summary details for a single cash drawer shift. ## Example ```ts automations/square-retrieve-cash-drawer-shift.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Cash Drawer Shift", () => { onDashboardRun({ title: "Retrieve Square Cash Drawer Shift" }) square.retrieveCashDrawerShift({ shiftId: "shift_id", locationId: "location_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CASH_DRAWER_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `shiftId` | `string` | Yes | — | The shift ID. | | `locationId` | `string` | Yes | — | The ID of the location to retrieve cash drawer shifts from. | Use the official [RetrieveCashDrawerShift reference](https://developer.squareup.com/reference/square/cash-drawers-api/retrieve-cash-drawer-shift) for provider field semantics and limits. ## Output Returns the official `Square.GetCashDrawerShiftResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Catalog Object Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-catalog-object Returns a single [CatalogItem](entity:CatalogItem) as a [CatalogObject](entity:CatalogObject) based on the provided ID. `square.retrieveCatalogObject` returns a single [CatalogItem](entity:CatalogItem) as a [CatalogObject](entity:CatalogObject) based on the provided ID. ## Example ```ts automations/square-retrieve-catalog-object.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Catalog Object", () => { onDashboardRun({ title: "Retrieve Square Catalog Object" }) square.retrieveCatalogObject({ objectId: "object_id", includeRelatedObjects: true, catalogVersion: BigInt("1000000"), includeCategoryPathToRoot: true, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ITEMS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `objectId` | `string` | Yes | — | The object ID of any type of catalog objects to be retrieved. | | `includeRelatedObjects` | `boolean \| null` | No | — | If `true`, the response will include additional objects that are related to the requested objects. Related objects are defined as any objects referenced by ID by the results in the `objects` field of the response. These objects are put in the `related_objects` field. Setting this to `true` is helpful when the objects are needed for immediate display to a user. This process only goes one level deep. Objects referenced by the related objects will not be included. For example, if the `objects` field of the response contains a CatalogItem, its associated CatalogCategory objects, CatalogTax objects, CatalogImage objects and CatalogModifierLists will be returned in the `related_objects` field of the response. If the `objects` field of the response contains a CatalogItemVariation, its parent CatalogItem will be returned in the `related_objects` field of the response. Default value: `false` | | `catalogVersion` | `bigint \| null` | No | — | Requests objects as of a specific version of the catalog. This allows you to retrieve historical versions of objects. The value to retrieve a specific version of an object can be found in the version field of CatalogObjects. If not included, results will be from the current version of the catalog. | | `includeCategoryPathToRoot` | `boolean \| null` | No | — | Specifies whether or not to include the `path_to_root` list for each returned category instance. The `path_to_root` list consists of `CategoryPathToRootNode` objects and specifies the path that starts with the immediate parent category of the returned category and ends with its root category. If the returned category is a top-level category, the `path_to_root` list is empty and is not returned in the response payload. | Use the official [RetrieveCatalogObject reference](https://developer.squareup.com/reference/square/catalog-api/retrieve-catalog-object) for provider field semantics and limits. ## Output Returns the official `Square.GetCatalogObjectResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Channel Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-channel RetrieveChannel. `square.retrieveChannel` retrieveChannel. ## Example ```ts automations/square-retrieve-channel.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Channel", () => { onDashboardRun({ title: "Retrieve Square Channel" }) square.retrieveChannel({ channelId: "channel_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CHANNELS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `channelId` | `string` | Yes | — | A channel id | Use the official [RetrieveChannel reference](https://developer.squareup.com/reference/square/channels-api/retrieve-channel) for provider field semantics and limits. ## Output Returns the official `Square.RetrieveChannelResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Customer Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-customer Returns details for a single customer. `square.retrieveCustomer` returns details for a single customer. ## Example ```ts automations/square-retrieve-customer.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Customer", () => { onDashboardRun({ title: "Retrieve Square Customer" }) square.retrieveCustomer({ customerId: "customer_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `customerId` | `string` | Yes | — | The ID of the customer to retrieve. | Use the official [RetrieveCustomer reference](https://developer.squareup.com/reference/square/customers-api/retrieve-customer) for provider field semantics and limits. ## Output Returns the official `Square.GetCustomerResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Customer Custom Attribute Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-customer-custom-attribute Retrieves a [custom attribute](entity:CustomAttribute) associated with a customer profile. `square.retrieveCustomerCustomAttribute` retrieves a [custom attribute](entity:CustomAttribute) associated with a customer profile. ## Example ```ts automations/square-retrieve-customer-custom-attribute.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Customer Custom Attribute", () => { onDashboardRun({ title: "Retrieve Square Customer Custom Attribute" }) square.retrieveCustomerCustomAttribute({ customerId: "customer_id", key: "key", withDefinition: true, version: 1, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `customerId` | `string` | Yes | — | The ID of the target customer profile. | | `key` | `string` | Yes | — | The key of the custom attribute to retrieve. This key must match the `key` of a custom attribute definition in the Square seller account. If the requesting application is not the definition owner, you must use the qualified key. | | `withDefinition` | `boolean \| null` | No | `false` | Indicates whether to return the custom attribute definition in the `definition` field of the custom attribute. Set this parameter to `true` to get the name and description of the custom attribute, information about the data type, or other definition details. The default value is `false`. | | `version` | `number \| null` | No | — | The current version of the custom attribute, which is used for strongly consistent reads to guarantee that you receive the most up-to-date data. When included in the request, Square returns the specified version or a higher version if one exists. If the specified version is higher than the current version, Square returns a `BAD_REQUEST` error. | Use the official [RetrieveCustomerCustomAttribute reference](https://developer.squareup.com/reference/square/customer-custom-attributes-api/retrieve-customer-custom-attribute) for provider field semantics and limits. ## Output Returns the official `Square.GetCustomerCustomAttributeResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Customer Custom Attribute Definition Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-customer-custom-attribute-definition Retrieves a customer-related [custom attribute definition](entity:CustomAttributeDefinition) from a Square seller account. `square.retrieveCustomerCustomAttributeDefinition` retrieves a customer-related [custom attribute definition](entity:CustomAttributeDefinition) from a Square seller account. ## Example ```ts automations/square-retrieve-customer-custom-attribute-definition.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "Retrieve Square Customer Custom Attribute Definition", () => { onDashboardRun({ title: "Retrieve Square Customer Custom Attribute Definition", }) square.retrieveCustomerCustomAttributeDefinition({ key: "key", version: 1, }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `key` | `string` | Yes | — | The key of the custom attribute definition to retrieve. If the requesting application is not the definition owner, you must use the qualified key. | | `version` | `number \| null` | No | — | The current version of the custom attribute definition, which is used for strongly consistent reads to guarantee that you receive the most up-to-date data. When included in the request, Square returns the specified version or a higher version if one exists. If the specified version is higher than the current version, Square returns a `BAD_REQUEST` error. | Use the official [RetrieveCustomerCustomAttributeDefinition reference](https://developer.squareup.com/reference/square/customer-custom-attributes-api/retrieve-customer-custom-attribute-definition) for provider field semantics and limits. ## Output Returns the official `Square.GetCustomerCustomAttributeDefinitionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Customer Group Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-customer-group Retrieves a specific customer group as identified by the `group_id` value. `square.retrieveCustomerGroup` retrieves a specific customer group as identified by the `group_id` value. ## Example ```ts automations/square-retrieve-customer-group.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Customer Group", () => { onDashboardRun({ title: "Retrieve Square Customer Group" }) square.retrieveCustomerGroup({ groupId: "group_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `groupId` | `string` | Yes | — | The ID of the customer group to retrieve. | Use the official [RetrieveCustomerGroup reference](https://developer.squareup.com/reference/square/customer-groups-api/retrieve-customer-group) for provider field semantics and limits. ## Output Returns the official `Square.GetCustomerGroupResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Customer Segment Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-customer-segment Retrieves a specific customer segment as identified by the `segment_id` value. `square.retrieveCustomerSegment` retrieves a specific customer segment as identified by the `segment_id` value. ## Example ```ts automations/square-retrieve-customer-segment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Customer Segment", () => { onDashboardRun({ title: "Retrieve Square Customer Segment" }) square.retrieveCustomerSegment({ segmentId: "segment_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `segmentId` | `string` | Yes | — | The Square-issued ID of the customer segment. | Use the official [RetrieveCustomerSegment reference](https://developer.squareup.com/reference/square/customer-segments-api/retrieve-customer-segment) for provider field semantics and limits. ## Output Returns the official `Square.GetCustomerSegmentResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Dispute Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-dispute Returns details about a specific dispute. `square.retrieveDispute` returns details about a specific dispute. ## Example ```ts automations/square-retrieve-dispute.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Dispute", () => { onDashboardRun({ title: "Retrieve Square Dispute" }) square.retrieveDispute({ disputeId: "dispute_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `DISPUTES_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `disputeId` | `string` | Yes | — | The ID of the dispute you want more details about. | Use the official [RetrieveDispute reference](https://developer.squareup.com/reference/square/disputes-api/retrieve-dispute) for provider field semantics and limits. ## Output Returns the official `Square.GetDisputeResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Dispute Evidence Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-dispute-evidence Returns the metadata for the evidence specified in the request URL path. `square.retrieveDisputeEvidence` returns the metadata for the evidence specified in the request URL path. ## Example ```ts automations/square-retrieve-dispute-evidence.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Dispute Evidence", () => { onDashboardRun({ title: "Retrieve Square Dispute Evidence" }) square.retrieveDisputeEvidence({ disputeId: "dispute_id", evidenceId: "evidence_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `DISPUTES_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `disputeId` | `string` | Yes | — | The ID of the dispute from which you want to retrieve evidence metadata. | | `evidenceId` | `string` | Yes | — | The ID of the evidence to retrieve. | Use the official [RetrieveDisputeEvidence reference](https://developer.squareup.com/reference/square/disputes-api/retrieve-dispute-evidence) for provider field semantics and limits. ## Output Returns the official `Square.GetDisputeEvidenceResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Gift Card Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-gift-card Retrieves a gift card using the gift card ID. `square.retrieveGiftCard` retrieves a gift card using the gift card ID. ## Example ```ts automations/square-retrieve-gift-card.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Gift Card", () => { onDashboardRun({ title: "Retrieve Square Gift Card" }) square.retrieveGiftCard({ id: "id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `GIFTCARDS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `id` | `string` | Yes | — | The ID of the gift card to retrieve. | Use the official [RetrieveGiftCard reference](https://developer.squareup.com/reference/square/gift-cards-api/retrieve-gift-card) for provider field semantics and limits. ## Output Returns the official `Square.GetGiftCardResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Gift Card From GAN Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-gift-card-from-gan Retrieves a gift card using the gift card account number (GAN). `square.retrieveGiftCardFromGAN` retrieves a gift card using the gift card account number (GAN). ## Example ```ts automations/square-retrieve-gift-card-from-gan.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Gift Card From GAN", () => { onDashboardRun({ title: "Retrieve Square Gift Card From GAN" }) square.retrieveGiftCardFromGAN({ gan: "7783320001001635", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `GIFTCARDS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `gan` | `string` | Yes | — | The gift card account number (GAN) of the gift card to retrieve. The maximum length of a GAN is 255 digits to account for third-party GANs that have been imported. Square-issued gift cards have 16-digit GANs. | Use the official [RetrieveGiftCardFromGAN reference](https://developer.squareup.com/reference/square/gift-cards-api/retrieve-gift-card-from-gan) for provider field semantics and limits. ## Output Returns the official `Square.GetGiftCardFromGanResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Gift Card From Nonce Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-gift-card-from-nonce Retrieves a gift card using a secure payment token that represents the gift card. `square.retrieveGiftCardFromNonce` retrieves a gift card using a secure payment token that represents the gift card. ## Example ```ts automations/square-retrieve-gift-card-from-nonce.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Gift Card From Nonce", () => { onDashboardRun({ title: "Retrieve Square Gift Card From Nonce" }) square.retrieveGiftCardFromNonce({ nonce: "cnon:7783322135245171", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `GIFTCARDS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `nonce` | `string` | Yes | — | The payment token of the gift card to retrieve. Payment tokens are generated by the Web Payments SDK or In-App Payments SDK. | Use the official [RetrieveGiftCardFromNonce reference](https://developer.squareup.com/reference/square/gift-cards-api/retrieve-gift-card-from-nonce) for provider field semantics and limits. ## Output Returns the official `Square.GetGiftCardFromNonceResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Inventory Adjustment Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-inventory-adjustment Returns the [InventoryAdjustment](entity:InventoryAdjustment) object with the provided `adjustment_id`. `square.retrieveInventoryAdjustment` returns the [InventoryAdjustment](entity:InventoryAdjustment) object with the provided `adjustment_id`. ## Example ```ts automations/square-retrieve-inventory-adjustment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Inventory Adjustment", () => { onDashboardRun({ title: "Retrieve Square Inventory Adjustment" }) square.retrieveInventoryAdjustment({ adjustmentId: "adjustment_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `INVENTORY_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `adjustmentId` | `string` | Yes | — | ID of the InventoryAdjustment to retrieve. | Use the official [RetrieveInventoryAdjustment reference](https://developer.squareup.com/reference/square/inventory-api/retrieve-inventory-adjustment) for provider field semantics and limits. ## Output Returns the official `Square.GetInventoryAdjustmentResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Inventory Adjustment Reason Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-inventory-adjustment-reason Returns the inventory adjustment reason identified by the provided `reason_id`. `square.retrieveInventoryAdjustmentReason` returns the inventory adjustment reason identified by the provided `reason_id`. ## Example ```ts automations/square-retrieve-inventory-adjustment-reason.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Inventory Adjustment Reason", () => { onDashboardRun({ title: "Retrieve Square Inventory Adjustment Reason" }) square.retrieveInventoryAdjustmentReason({ reasonId: { type: "CUSTOM", customReasonId: "R5BX3PDCZ6EXAMPLE", }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `INVENTORY_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `reasonId` | `Square.InventoryAdjustmentReasonId` | Yes | — | The identifier of the inventory adjustment reason to retrieve. | Use the official [RetrieveInventoryAdjustmentReason reference](https://developer.squareup.com/reference/square/inventory-api/retrieve-inventory-adjustment-reason) for provider field semantics and limits. ## Output Returns the official `Square.RetrieveInventoryAdjustmentReasonResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Inventory Count Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-inventory-count Retrieves the current calculated stock count for a given [CatalogObject](entity:CatalogObject) at a given set of [Location](entity:Location)s. `square.retrieveInventoryCount` retrieves the current calculated stock count for a given [CatalogObject](entity:CatalogObject) at a given set of [Location](entity:Location)s. ## Example ```ts automations/square-retrieve-inventory-count.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Inventory Count", () => { onDashboardRun({ title: "Retrieve Square Inventory Count" }) square.retrieveInventoryCount({ catalogObjectId: "catalog_object_id", locationIds: "location_ids", cursor: "cursor", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `INVENTORY_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `catalogObjectId` | `string` | Yes | — | ID of the CatalogObject to retrieve. | | `locationIds` | `string \| null` | No | — | The Location IDs to look up as a comma-separated list. An empty list queries all locations. | | `cursor` | `string \| null` | No | — | A pagination cursor returned by a previous call to this endpoint. Provide this to retrieve the next set of results for the original query. See the [Pagination](https://developer.squareup.com/docs/working-with-apis/pagination) guide for more information. | Use the official [RetrieveInventoryCount reference](https://developer.squareup.com/reference/square/inventory-api/retrieve-inventory-count) for provider field semantics and limits. ## Output Returns the official `Square.GetInventoryCountResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Inventory Physical Count Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-inventory-physical-count Returns the [InventoryPhysicalCount](entity:InventoryPhysicalCount) object with the provided `physical_count_id`. `square.retrieveInventoryPhysicalCount` returns the [InventoryPhysicalCount](entity:InventoryPhysicalCount) object with the provided `physical_count_id`. ## Example ```ts automations/square-retrieve-inventory-physical-count.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Inventory Physical Count", () => { onDashboardRun({ title: "Retrieve Square Inventory Physical Count" }) square.retrieveInventoryPhysicalCount({ physicalCountId: "physical_count_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `INVENTORY_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `physicalCountId` | `string` | Yes | — | ID of the InventoryPhysicalCount to retrieve. | Use the official [RetrieveInventoryPhysicalCount reference](https://developer.squareup.com/reference/square/inventory-api/retrieve-inventory-physical-count) for provider field semantics and limits. ## Output Returns the official `Square.GetInventoryPhysicalCountResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Job Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-job Retrieves a specified job. `square.retrieveJob` retrieves a specified job. ## Example ```ts automations/square-retrieve-job.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Job", () => { onDashboardRun({ title: "Retrieve Square Job" }) square.retrieveJob({ jobId: "job_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `EMPLOYEES_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `jobId` | `string` | Yes | — | The ID of the job to retrieve. | Use the official [RetrieveJob reference](https://developer.squareup.com/reference/square/team-api/retrieve-job) for provider field semantics and limits. ## Output Returns the official `Square.RetrieveJobResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Location Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-location Retrieves details of a single location. `square.retrieveLocation` retrieves details of a single location. ## Example ```ts automations/square-retrieve-location.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Location", () => { onDashboardRun({ title: "Retrieve Square Location" }) square.retrieveLocation({ locationId: "location_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `MERCHANT_PROFILE_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `locationId` | `string` | Yes | — | The ID of the location to retrieve. Specify the string `main` to return the main location. | Use the official [RetrieveLocation reference](https://developer.squareup.com/reference/square/locations-api/retrieve-location) for provider field semantics and limits. ## Output Returns the official `Square.GetLocationResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Location Booking Profile Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-location-booking-profile Retrieves a seller's location booking profile. `square.retrieveLocationBookingProfile` retrieves a seller's location booking profile. ## Example ```ts automations/square-retrieve-location-booking-profile.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Location Booking Profile", () => { onDashboardRun({ title: "Retrieve Square Location Booking Profile" }) square.retrieveLocationBookingProfile({ locationId: "location_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `APPOINTMENTS_BUSINESS_SETTINGS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `locationId` | `string` | Yes | — | The ID of the location to retrieve the booking profile. | Use the official [RetrieveLocationBookingProfile reference](https://developer.squareup.com/reference/square/bookings-api/retrieve-location-booking-profile) for provider field semantics and limits. ## Output Returns the official `Square.RetrieveLocationBookingProfileResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Location Custom Attribute Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-location-custom-attribute Retrieves a [custom attribute](entity:CustomAttribute) associated with a location. `square.retrieveLocationCustomAttribute` retrieves a [custom attribute](entity:CustomAttribute) associated with a location. ## Example ```ts automations/square-retrieve-location-custom-attribute.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Location Custom Attribute", () => { onDashboardRun({ title: "Retrieve Square Location Custom Attribute" }) square.retrieveLocationCustomAttribute({ locationId: "location_id", key: "key", withDefinition: true, version: 1, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `MERCHANT_PROFILE_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `locationId` | `string` | Yes | — | The ID of the target location. | | `key` | `string` | Yes | — | The key of the custom attribute to retrieve. This key must match the `key` of a custom attribute definition in the Square seller account. If the requesting application is not the definition owner, you must use the qualified key. | | `withDefinition` | `boolean \| null` | No | `false` | Indicates whether to return the custom attribute definition in the `definition` field of the custom attribute. Set this parameter to `true` to get the name and description of the custom attribute, information about the data type, or other definition details. The default value is `false`. | | `version` | `number \| null` | No | — | The current version of the custom attribute, which is used for strongly consistent reads to guarantee that you receive the most up-to-date data. When included in the request, Square returns the specified version or a higher version if one exists. If the specified version is higher than the current version, Square returns a `BAD_REQUEST` error. | Use the official [RetrieveLocationCustomAttribute reference](https://developer.squareup.com/reference/square/location-custom-attributes-api/retrieve-location-custom-attribute) for provider field semantics and limits. ## Output Returns the official `Square.RetrieveLocationCustomAttributeResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Location Custom Attribute Definition Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-location-custom-attribute-definition Retrieves a location-related [custom attribute definition](entity:CustomAttributeDefinition) from a Square seller account. `square.retrieveLocationCustomAttributeDefinition` retrieves a location-related [custom attribute definition](entity:CustomAttributeDefinition) from a Square seller account. ## Example ```ts automations/square-retrieve-location-custom-attribute-definition.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "Retrieve Square Location Custom Attribute Definition", () => { onDashboardRun({ title: "Retrieve Square Location Custom Attribute Definition", }) square.retrieveLocationCustomAttributeDefinition({ key: "key", version: 1, }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `MERCHANT_PROFILE_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `key` | `string` | Yes | — | The key of the custom attribute definition to retrieve. If the requesting application is not the definition owner, you must use the qualified key. | | `version` | `number \| null` | No | — | The current version of the custom attribute definition, which is used for strongly consistent reads to guarantee that you receive the most up-to-date data. When included in the request, Square returns the specified version or a higher version if one exists. If the specified version is higher than the current version, Square returns a `BAD_REQUEST` error. | Use the official [RetrieveLocationCustomAttributeDefinition reference](https://developer.squareup.com/reference/square/location-custom-attributes-api/retrieve-location-custom-attribute-definition) for provider field semantics and limits. ## Output Returns the official `Square.RetrieveLocationCustomAttributeDefinitionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Location Settings Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-location-settings Retrieves the location-level settings for a Square-hosted checkout page. `square.retrieveLocationSettings` retrieves the location-level settings for a Square-hosted checkout page. ## Example ```ts automations/square-retrieve-location-settings.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Location Settings", () => { onDashboardRun({ title: "Retrieve Square Location Settings" }) square.retrieveLocationSettings({ locationId: "location_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `MERCHANT_PROFILE_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `locationId` | `string` | Yes | — | The ID of the location for which to retrieve settings. | Use the official [RetrieveLocationSettings reference](https://developer.squareup.com/reference/square/checkout-api/retrieve-location-settings) for provider field semantics and limits. ## Output Returns the official `Square.RetrieveLocationSettingsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Loyalty Account Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-loyalty-account Retrieves a loyalty account. `square.retrieveLoyaltyAccount` retrieves a loyalty account. ## Example ```ts automations/square-retrieve-loyalty-account.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Loyalty Account", () => { onDashboardRun({ title: "Retrieve Square Loyalty Account" }) square.retrieveLoyaltyAccount({ accountId: "account_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `LOYALTY_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `accountId` | `string` | Yes | — | The ID of the loyalty account to retrieve. | Use the official [RetrieveLoyaltyAccount reference](https://developer.squareup.com/reference/square/loyalty-api/retrieve-loyalty-account) for provider field semantics and limits. ## Output Returns the official `Square.GetLoyaltyAccountResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Loyalty Program Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-loyalty-program Retrieves the loyalty program in a seller's account, specified by the program ID or the keyword `main`. `square.retrieveLoyaltyProgram` retrieves the loyalty program in a seller's account, specified by the program ID or the keyword `main`. ## Example ```ts automations/square-retrieve-loyalty-program.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Loyalty Program", () => { onDashboardRun({ title: "Retrieve Square Loyalty Program" }) square.retrieveLoyaltyProgram({ programId: "program_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `LOYALTY_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `programId` | `string` | Yes | — | The ID of the loyalty program or the keyword `main`. Either value can be used to retrieve the single loyalty program that belongs to the seller. | Use the official [RetrieveLoyaltyProgram reference](https://developer.squareup.com/reference/square/loyalty-api/retrieve-loyalty-program) for provider field semantics and limits. ## Output Returns the official `Square.GetLoyaltyProgramResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Loyalty Promotion Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-loyalty-promotion Retrieves a loyalty promotion. `square.retrieveLoyaltyPromotion` retrieves a loyalty promotion. ## Example ```ts automations/square-retrieve-loyalty-promotion.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Loyalty Promotion", () => { onDashboardRun({ title: "Retrieve Square Loyalty Promotion" }) square.retrieveLoyaltyPromotion({ programId: "program_id", promotionId: "promotion_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `LOYALTY_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `programId` | `string` | Yes | — | The ID of the base loyalty program. To get the program ID, call RetrieveLoyaltyProgram using the `main` keyword. | | `promotionId` | `string` | Yes | — | The ID of the loyalty promotion to retrieve. | Use the official [RetrieveLoyaltyPromotion reference](https://developer.squareup.com/reference/square/loyalty-api/retrieve-loyalty-promotion) for provider field semantics and limits. ## Output Returns the official `Square.GetLoyaltyPromotionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Loyalty Reward Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-loyalty-reward Retrieves a loyalty reward. `square.retrieveLoyaltyReward` retrieves a loyalty reward. ## Example ```ts automations/square-retrieve-loyalty-reward.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Loyalty Reward", () => { onDashboardRun({ title: "Retrieve Square Loyalty Reward" }) square.retrieveLoyaltyReward({ rewardId: "reward_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `LOYALTY_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `rewardId` | `string` | Yes | — | The ID of the loyalty reward to retrieve. | Use the official [RetrieveLoyaltyReward reference](https://developer.squareup.com/reference/square/loyalty-api/retrieve-loyalty-reward) for provider field semantics and limits. ## Output Returns the official `Square.GetLoyaltyRewardResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Merchant Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-merchant Retrieves the `Merchant` object for the given `merchant_id`. `square.retrieveMerchant` retrieves the `Merchant` object for the given `merchant_id`. ## Example ```ts automations/square-retrieve-merchant.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Merchant", () => { onDashboardRun({ title: "Retrieve Square Merchant" }) square.retrieveMerchant({ merchantId: "merchant_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `MERCHANT_PROFILE_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `merchantId` | `string` | Yes | — | The ID of the merchant to retrieve. If the string `me` is supplied as the ID, then retrieve the merchant that is currently accessible to this call. | Use the official [RetrieveMerchant reference](https://developer.squareup.com/reference/square/merchants-api/retrieve-merchant) for provider field semantics and limits. ## Output Returns the official `Square.GetMerchantResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Merchant Custom Attribute Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-merchant-custom-attribute Retrieves a [custom attribute](entity:CustomAttribute) associated with a merchant. `square.retrieveMerchantCustomAttribute` retrieves a [custom attribute](entity:CustomAttribute) associated with a merchant. ## Example ```ts automations/square-retrieve-merchant-custom-attribute.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Merchant Custom Attribute", () => { onDashboardRun({ title: "Retrieve Square Merchant Custom Attribute" }) square.retrieveMerchantCustomAttribute({ merchantId: "merchant_id", key: "key", withDefinition: true, version: 1, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `MERCHANT_PROFILE_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `merchantId` | `string` | Yes | — | The ID of the target merchant. | | `key` | `string` | Yes | — | The key of the custom attribute to retrieve. This key must match the `key` of a custom attribute definition in the Square seller account. If the requesting application is not the definition owner, you must use the qualified key. | | `withDefinition` | `boolean \| null` | No | `false` | Indicates whether to return the custom attribute definition in the `definition` field of the custom attribute. Set this parameter to `true` to get the name and description of the custom attribute, information about the data type, or other definition details. The default value is `false`. | | `version` | `number \| null` | No | — | The current version of the custom attribute, which is used for strongly consistent reads to guarantee that you receive the most up-to-date data. When included in the request, Square returns the specified version or a higher version if one exists. If the specified version is higher than the current version, Square returns a `BAD_REQUEST` error. | Use the official [RetrieveMerchantCustomAttribute reference](https://developer.squareup.com/reference/square/merchant-custom-attributes-api/retrieve-merchant-custom-attribute) for provider field semantics and limits. ## Output Returns the official `Square.RetrieveMerchantCustomAttributeResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Merchant Custom Attribute Definition Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-merchant-custom-attribute-definition Retrieves a merchant-related [custom attribute definition](entity:CustomAttributeDefinition) from a Square seller account. `square.retrieveMerchantCustomAttributeDefinition` retrieves a merchant-related [custom attribute definition](entity:CustomAttributeDefinition) from a Square seller account. ## Example ```ts automations/square-retrieve-merchant-custom-attribute-definition.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "Retrieve Square Merchant Custom Attribute Definition", () => { onDashboardRun({ title: "Retrieve Square Merchant Custom Attribute Definition", }) square.retrieveMerchantCustomAttributeDefinition({ key: "key", version: 1, }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `MERCHANT_PROFILE_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `key` | `string` | Yes | — | The key of the custom attribute definition to retrieve. If the requesting application is not the definition owner, you must use the qualified key. | | `version` | `number \| null` | No | — | The current version of the custom attribute definition, which is used for strongly consistent reads to guarantee that you receive the most up-to-date data. When included in the request, Square returns the specified version or a higher version if one exists. If the specified version is higher than the current version, Square returns a `BAD_REQUEST` error. | Use the official [RetrieveMerchantCustomAttributeDefinition reference](https://developer.squareup.com/reference/square/merchant-custom-attributes-api/retrieve-merchant-custom-attribute-definition) for provider field semantics and limits. ## Output Returns the official `Square.RetrieveMerchantCustomAttributeDefinitionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Merchant Settings Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-merchant-settings Retrieves the merchant-level settings for a Square-hosted checkout page. `square.retrieveMerchantSettings` retrieves the merchant-level settings for a Square-hosted checkout page. ## Example ```ts automations/square-retrieve-merchant-settings.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Merchant Settings", () => { onDashboardRun({ title: "Retrieve Square Merchant Settings" }) square.retrieveMerchantSettings() }) ``` ## Inputs Every input accepts a compatible signal. It requires `MERCHANT_PROFILE_READ` and `PAYMENT_METHODS_READ`. This action has no inputs. Use the official [RetrieveMerchantSettings reference](https://developer.squareup.com/reference/square/checkout-api/retrieve-merchant-settings) for provider field semantics and limits. ## Output Returns the official `Square.RetrieveMerchantSettingsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Order Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-order Retrieves an [Order](entity:Order) by ID. `square.retrieveOrder` retrieves an [Order](entity:Order) by ID. ## Example ```ts automations/square-retrieve-order.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Order", () => { onDashboardRun({ title: "Retrieve Square Order" }) square.retrieveOrder({ orderId: "order_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ORDERS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `orderId` | `string` | Yes | — | The ID of the order to retrieve. | Use the official [RetrieveOrder reference](https://developer.squareup.com/reference/square/orders-api/retrieve-order) for provider field semantics and limits. ## Output Returns the official `Square.GetOrderResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Order Custom Attribute Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-order-custom-attribute Retrieves a [custom attribute](entity:CustomAttribute) associated with an order. `square.retrieveOrderCustomAttribute` retrieves a [custom attribute](entity:CustomAttribute) associated with an order. ## Example ```ts automations/square-retrieve-order-custom-attribute.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Order Custom Attribute", () => { onDashboardRun({ title: "Retrieve Square Order Custom Attribute" }) square.retrieveOrderCustomAttribute({ orderId: "order_id", customAttributeKey: "custom_attribute_key", version: 1, withDefinition: true, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ORDERS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `orderId` | `string` | Yes | — | The ID of the target order. | | `customAttributeKey` | `string` | Yes | — | The key of the custom attribute to retrieve. This key must match the key of an existing custom attribute definition. | | `version` | `number \| null` | No | — | To enable [optimistic concurrency](https://developer.squareup.com/docs/build-basics/common-api-patterns/optimistic-concurrency) control, include this optional field and specify the current version of the custom attribute. | | `withDefinition` | `boolean \| null` | No | `false` | Indicates whether to return the custom attribute definition in the `definition` field of each custom attribute. Set this parameter to `true` to get the name and description of each custom attribute, information about the data type, or other definition details. The default value is `false`. | Use the official [RetrieveOrderCustomAttribute reference](https://developer.squareup.com/reference/square/order-custom-attributes-api/retrieve-order-custom-attribute) for provider field semantics and limits. ## Output Returns the official `Square.RetrieveOrderCustomAttributeResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Order Custom Attribute Definition Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-order-custom-attribute-definition Retrieves an order-related [custom attribute definition](entity:CustomAttributeDefinition) from a Square seller account. `square.retrieveOrderCustomAttributeDefinition` retrieves an order-related [custom attribute definition](entity:CustomAttributeDefinition) from a Square seller account. ## Example ```ts automations/square-retrieve-order-custom-attribute-definition.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "Retrieve Square Order Custom Attribute Definition", () => { onDashboardRun({ title: "Retrieve Square Order Custom Attribute Definition", }) square.retrieveOrderCustomAttributeDefinition({ key: "key", version: 1, }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `ORDERS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `key` | `string` | Yes | — | The key of the custom attribute definition to retrieve. | | `version` | `number \| null` | No | — | To enable [optimistic concurrency](https://developer.squareup.com/docs/build-basics/common-api-patterns/optimistic-concurrency) control, include this optional field and specify the current version of the custom attribute. | Use the official [RetrieveOrderCustomAttributeDefinition reference](https://developer.squareup.com/reference/square/order-custom-attributes-api/retrieve-order-custom-attribute-definition) for provider field semantics and limits. ## Output Returns the official `Square.RetrieveOrderCustomAttributeDefinitionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Payment Link Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-payment-link Retrieves a payment link. `square.retrievePaymentLink` retrieves a payment link. ## Example ```ts automations/square-retrieve-payment-link.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Payment Link", () => { onDashboardRun({ title: "Retrieve Square Payment Link" }) square.retrievePaymentLink({ id: "id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ORDERS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `id` | `string` | Yes | — | The ID of link to retrieve. | Use the official [RetrievePaymentLink reference](https://developer.squareup.com/reference/square/checkout-api/retrieve-payment-link) for provider field semantics and limits. ## Output Returns the official `Square.GetPaymentLinkResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Scheduled Shift Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-scheduled-shift Retrieves a scheduled shift by ID. `square.retrieveScheduledShift` retrieves a scheduled shift by ID. ## Example ```ts automations/square-retrieve-scheduled-shift.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Scheduled Shift", () => { onDashboardRun({ title: "Retrieve Square Scheduled Shift" }) square.retrieveScheduledShift({ id: "id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `TIMECARDS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `id` | `string` | Yes | — | The ID of the scheduled shift to retrieve. | Use the official [RetrieveScheduledShift reference](https://developer.squareup.com/reference/square/labor-api/retrieve-scheduled-shift) for provider field semantics and limits. ## Output Returns the official `Square.RetrieveScheduledShiftResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Snippet Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-snippet Retrieves your snippet from a Square Online site. `square.retrieveSnippet` retrieves your snippet from a Square Online site. ## Example ```ts automations/square-retrieve-snippet.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Snippet", () => { onDashboardRun({ title: "Retrieve Square Snippet" }) square.retrieveSnippet({ siteId: "site_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ONLINE_STORE_SNIPPETS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `siteId` | `string` | Yes | — | The ID of the site that contains the snippet. | Use the official [RetrieveSnippet reference](https://developer.squareup.com/reference/square/snippets-api/retrieve-snippet) for provider field semantics and limits. ## Output Returns the official `Square.GetSnippetResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Subscription Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-subscription Retrieves a specific subscription. `square.retrieveSubscription` retrieves a specific subscription. ## Example ```ts automations/square-retrieve-subscription.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Subscription", () => { onDashboardRun({ title: "Retrieve Square Subscription" }) square.retrieveSubscription({ subscriptionId: "subscription_id", include: "include", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `SUBSCRIPTIONS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `subscriptionId` | `string` | Yes | — | The ID of the subscription to retrieve. | | `include` | `string \| null` | No | — | A query parameter to specify related information to be included in the response. The supported query parameter values are: - `actions`: to include scheduled actions on the targeted subscription. | Use the official [RetrieveSubscription reference](https://developer.squareup.com/reference/square/subscriptions-api/retrieve-subscription) for provider field semantics and limits. ## Output Returns the official `Square.GetSubscriptionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Team Member Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-team-member Retrieves a `TeamMember` object for the given `TeamMember.id`. `square.retrieveTeamMember` retrieves a `TeamMember` object for the given `TeamMember.id`. ## Example ```ts automations/square-retrieve-team-member.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Team Member", () => { onDashboardRun({ title: "Retrieve Square Team Member" }) square.retrieveTeamMember({ teamMemberId: "team_member_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `EMPLOYEES_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `teamMemberId` | `string` | Yes | — | The ID of the team member to retrieve. | Use the official [RetrieveTeamMember reference](https://developer.squareup.com/reference/square/team-api/retrieve-team-member) for provider field semantics and limits. ## Output Returns the official `Square.GetTeamMemberResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Team Member Booking Profile Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-team-member-booking-profile Retrieves a team member's booking profile. `square.retrieveTeamMemberBookingProfile` retrieves a team member's booking profile. ## Example ```ts automations/square-retrieve-team-member-booking-profile.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Team Member Booking Profile", () => { onDashboardRun({ title: "Retrieve Square Team Member Booking Profile" }) square.retrieveTeamMemberBookingProfile({ teamMemberId: "team_member_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `APPOINTMENTS_BUSINESS_SETTINGS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `teamMemberId` | `string` | Yes | — | The ID of the team member to retrieve. | Use the official [RetrieveTeamMemberBookingProfile reference](https://developer.squareup.com/reference/square/bookings-api/retrieve-team-member-booking-profile) for provider field semantics and limits. ## Output Returns the official `Square.GetTeamMemberBookingProfileResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Timecard Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-timecard Returns a single `Timecard` specified by `id`. `square.retrieveTimecard` returns a single `Timecard` specified by `id`. ## Example ```ts automations/square-retrieve-timecard.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Timecard", () => { onDashboardRun({ title: "Retrieve Square Timecard" }) square.retrieveTimecard({ id: "id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `TIMECARDS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `id` | `string` | Yes | — | The UUID for the `Timecard` being retrieved. | Use the official [RetrieveTimecard reference](https://developer.squareup.com/reference/square/labor-api/retrieve-timecard) for provider field semantics and limits. ## Output Returns the official `Square.RetrieveTimecardResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Transfer Order Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-transfer-order Retrieves a specific [TransferOrder](entity:TransferOrder) by ID. `square.retrieveTransferOrder` retrieves a specific [TransferOrder](entity:TransferOrder) by ID. ## Example ```ts automations/square-retrieve-transfer-order.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Transfer Order", () => { onDashboardRun({ title: "Retrieve Square Transfer Order" }) square.retrieveTransferOrder({ transferOrderId: "transfer_order_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `INVENTORY_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `transferOrderId` | `string` | Yes | — | The ID of the transfer order to retrieve | Use the official [RetrieveTransferOrder reference](https://developer.squareup.com/reference/square/transfer-order-api/retrieve-transfer-order) for provider field semantics and limits. ## Output Returns the official `Square.RetrieveTransferOrderResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Vendor Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-vendor Retrieves the vendor of a specified [Vendor](entity:Vendor) ID. `square.retrieveVendor` retrieves the vendor of a specified [Vendor](entity:Vendor) ID. ## Example ```ts automations/square-retrieve-vendor.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Vendor", () => { onDashboardRun({ title: "Retrieve Square Vendor" }) square.retrieveVendor({ vendorId: "vendor_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `VENDOR_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `vendorId` | `string` | Yes | — | ID of the Vendor to retrieve. | Use the official [RetrieveVendor reference](https://developer.squareup.com/reference/square/vendors-api/retrieve-vendor) for provider field semantics and limits. ## Output Returns the official `Square.GetVendorResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Retrieve Wage Setting Source: https://docs.automate.ax/reference/integrations/square/actions/retrieve-wage-setting Retrieves a `WageSetting` object for a team member specified by `TeamMember.id`. `square.retrieveWageSetting` retrieves a `WageSetting` object for a team member specified by `TeamMember.id`. ## Example ```ts automations/square-retrieve-wage-setting.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Retrieve Square Wage Setting", () => { onDashboardRun({ title: "Retrieve Square Wage Setting" }) square.retrieveWageSetting({ teamMemberId: "team_member_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `EMPLOYEES_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `teamMemberId` | `string` | Yes | — | The ID of the team member for which to retrieve the wage setting. | Use the official [RetrieveWageSetting reference](https://developer.squareup.com/reference/square/team-api/retrieve-wage-setting) for provider field semantics and limits. ## Output Returns the official `Square.GetWageSettingResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Search Availability Source: https://docs.automate.ax/reference/integrations/square/actions/search-availability Searches for availabilities for booking. `square.searchAvailability` searches for availabilities for booking. ## Example ```ts automations/square-search-availability.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Search Square Availability", () => { onDashboardRun({ title: "Search Square Availability" }) square.searchAvailability({ query: { filter: { startAtRange: {}, }, }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `APPOINTMENTS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `query` | `Square.SearchAvailabilityQuery` | Yes | — | Query conditions used to filter buyer-accessible booking availabilities. | Use the official [SearchAvailability reference](https://developer.squareup.com/reference/square/bookings-api/search-availability) for provider field semantics and limits. ## Output Returns the official `Square.SearchAvailabilityResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Search Catalog Items Source: https://docs.automate.ax/reference/integrations/square/actions/search-catalog-items Searches for catalog items or item variations by matching supported search attribute values, including custom attribute values, against one or more of the specified query filters. `square.searchCatalogItems` searches for catalog items or item variations by matching supported search attribute values, including custom attribute values, against one or more of the specified query filters. ## Example ```ts automations/square-search-catalog-items.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Search Square Catalog Items", () => { onDashboardRun({ title: "Search Square Catalog Items" }) square.searchCatalogItems({ textFilter: "red", categoryIds: ["WINE_CATEGORY_ID"], stockLevels: ["OUT", "LOW"], enabledLocationIds: ["ATL_LOCATION_ID"], limit: 100, sortOrder: "ASC", productTypes: ["REGULAR"], customAttributeFilters: [ { customAttributeDefinitionId: "VEGAN_DEFINITION_ID", boolFilter: true, }, { customAttributeDefinitionId: "BRAND_DEFINITION_ID", stringFilter: "Dark Horse", }, { key: "VINTAGE", numberFilter: { min: "min", max: "max", }, }, { customAttributeDefinitionId: "VARIETAL_DEFINITION_ID", }, ], }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ITEMS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `textFilter` | `string` | No | — | The text filter expression to return items or item variations containing specified text in the `name`, `description`, or `abbreviation` attribute value of an item, or in the `name`, `sku`, or `upc` attribute value of an item variation. | | `categoryIds` | `string[]` | No | — | The category id query expression to return items containing the specified category IDs. | | `stockLevels` | `Square.SearchCatalogItemsRequestStockLevel[]` | No | — | The stock-level query expression to return item variations with the specified stock levels. See [SearchCatalogItemsRequestStockLevel](#type-searchcatalogitemsrequeststocklevel) for possible values | | `enabledLocationIds` | `string[]` | No | — | The enabled-location query expression to return items and item variations having specified enabled locations. | | `cursor` | `string` | No | — | The pagination token, returned in the previous response, used to fetch the next batch of pending results. | | `limit` | `number` | No | 100 | The maximum number of results to return per page. The default value is 100. | | `sortOrder` | `Square.SortOrder` | No | — | The order to sort the results by item names. The default sort order is ascending (`ASC`). See [SortOrder](#type-sortorder) for possible values | | `productTypes` | `Square.CatalogItemProductType[]` | No | — | The product types query expression to return items or item variations having the specified product types. | | `customAttributeFilters` | `Square.CustomAttributeFilter[]` | No | — | The customer-attribute filter to return items or item variations matching the specified custom attribute expressions. A maximum number of 10 custom attribute expressions are supported in a single call to the SearchCatalogItems endpoint. | | `archivedState` | `Square.ArchivedState` | No | — | The query filter to return not archived (`ARCHIVED_STATE_NOT_ARCHIVED`), archived (`ARCHIVED_STATE_ARCHIVED`), or either type (`ARCHIVED_STATE_ALL`) of items. | | `includeOptions` | `Square.IncludeOptions` | No | — | Options to include related resources in the response. | Use the official [SearchCatalogItems reference](https://developer.squareup.com/reference/square/catalog-api/search-catalog-items) for provider field semantics and limits. ## Output Returns the official `Square.SearchCatalogItemsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Search Catalog Objects Source: https://docs.automate.ax/reference/integrations/square/actions/search-catalog-objects Searches for [CatalogObject](entity:CatalogObject) of any type by matching supported search attribute values, excluding custom attribute values on items or item variations, against one or more of the specified query filters. `square.searchCatalogObjects` searches for [CatalogObject](entity:CatalogObject) of any type by matching supported search attribute values, excluding custom attribute values on items or item variations, against one or more of the specified query filters. ## Example ```ts automations/square-search-catalog-objects.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Search Square Catalog Objects", () => { onDashboardRun({ title: "Search Square Catalog Objects" }) square.searchCatalogObjects({ objectTypes: ["ITEM"], query: { prefixQuery: { attributeName: "name", attributePrefix: "tea", }, }, limit: 100, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ITEMS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `cursor` | `string` | No | — | The pagination cursor returned in the previous response. Leave unset for an initial request. See [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination) for more information. | | `objectTypes` | `Square.CatalogObjectType[]` | No | — | The desired set of object types to appear in the search results. If this is unspecified, the operation returns objects of all the top level types at the version of the Square API used to make the request. Object types that are nested onto other object types are not included in the defaults. At the current API version the default object types are: ITEM, CATEGORY, TAX, DISCOUNT, MODIFIER\_LIST, PRICING\_RULE, PRODUCT\_SET, TIME\_PERIOD, MEASUREMENT\_UNIT, SUBSCRIPTION\_PLAN, ITEM\_OPTION, CUSTOM\_ATTRIBUTE\_DEFINITION, QUICK\_AMOUNT\_SETTINGS. Note that if you wish for the query to return objects belonging to nested types (that is, COMPONENT, IMAGE, ITEM\_OPTION\_VAL, ITEM\_VARIATION, or MODIFIER), you must explicitly include all the types of interest in this field. | | `includeDeletedObjects` | `boolean` | No | `false` | If `true`, deleted objects will be included in the results. Defaults to `false`. Deleted objects will have their `is_deleted` field set to `true`. If `include_deleted_objects` is `true`, then the `include_category_path_to_root` request parameter must be `false`. Both properties cannot be `true` at the same time. | | `includeRelatedObjects` | `boolean` | No | — | If `true`, the response will include additional objects that are related to the requested objects. Related objects are objects that are referenced by object ID by the objects in the response. This is helpful if the objects are being fetched for immediate display to a user. This process only goes one level deep. Objects referenced by the related objects will not be included. For example: If the `objects` field of the response contains a CatalogItem, its associated CatalogCategory objects, CatalogTax objects, CatalogImage objects and CatalogModifierLists will be returned in the `related_objects` field of the response. If the `objects` field of the response contains a CatalogItemVariation, its parent CatalogItem will be returned in the `related_objects` field of the response. Default value: `false` | | `beginTime` | `string` | No | — | Return objects modified after this [timestamp](https://developer.squareup.com/docs/build-basics/working-with-dates), in RFC 3339 format, for example, `2016-09-04T23:59:33.123Z`. The timestamp is exclusive - objects with a timestamp equal to `begin_time` will not be included in the response. | | `query` | `Square.CatalogQuery` | No | — | A query to be used to filter or sort the results. If no query is specified, the entire catalog will be returned. | | `limit` | `number` | No | — | A limit on the number of results to be returned in a single page. The limit is advisory - the implementation may return more or fewer results. If the supplied limit is negative, zero, or is higher than the maximum limit of 1,000, it will be ignored. | | `includeCategoryPathToRoot` | `boolean` | No | — | Specifies whether or not to include the `path_to_root` list for each returned category instance. The `path_to_root` list consists of `CategoryPathToRootNode` objects and specifies the path that starts with the immediate parent category of the returned category and ends with its root category. If the returned category is a top-level category, the `path_to_root` list is empty and is not returned in the response payload. If `include_category_path_to_root` is `true`, then the `include_deleted_objects` request parameter must be `false`. Both properties cannot be `true` at the same time. | | `includeOptions` | `Square.IncludeOptions` | No | — | Options to include related resources in the response. | Use the official [SearchCatalogObjects reference](https://developer.squareup.com/reference/square/catalog-api/search-catalog-objects) for provider field semantics and limits. ## Output Returns the official `Square.SearchCatalogObjectsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Search Customers Source: https://docs.automate.ax/reference/integrations/square/actions/search-customers Searches the customer profiles associated with a Square account using one or more supported query filters. `square.searchCustomers` searches the customer profiles associated with a Square account using one or more supported query filters. ## Example ```ts automations/square-search-customers.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Search Square Customers", () => { onDashboardRun({ title: "Search Square Customers" }) square.searchCustomers({ limit: BigInt("2"), query: { filter: { creationSource: { values: ["THIRD_PARTY"], rule: "INCLUDE", }, createdAt: { startAt: "2018-01-01T00:00:00-00:00", endAt: "2018-02-01T00:00:00-00:00", }, emailAddress: { fuzzy: "example.com", }, groupIds: { all: ["545AXB44B4XXWMVQ4W8SBT3HHF"], }, }, sort: { field: "CREATED_AT", order: "ASC", }, }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `cursor` | `string` | No | — | Include the pagination cursor in subsequent calls to this endpoint to retrieve the next set of results associated with the original query. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | | `limit` | `bigint` | No | 100 | The maximum number of results to return in a single page. This limit is advisory. The response might contain more or fewer results. If the specified limit is invalid, Square returns a `400 VALUE_TOO_LOW` or `400 VALUE_TOO_HIGH` error. The default value is 100. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | | `query` | `Square.CustomerQuery` | No | — | The filtering and sorting criteria for the search request. If a query is not specified, Square returns all customer profiles ordered alphabetically by `given_name` and `family_name`. | | `count` | `boolean` | No | `false` | Indicates whether to return the total count of matching customers in the `count` field of the response. The default value is `false`. | Use the official [SearchCustomers reference](https://developer.squareup.com/reference/square/customers-api/search-customers) for provider field semantics and limits. ## Output Returns the official `Square.SearchCustomersResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Search Invoices Source: https://docs.automate.ax/reference/integrations/square/actions/search-invoices Searches for invoices from a location specified in the filter. `square.searchInvoices` searches for invoices from a location specified in the filter. ## Example ```ts automations/square-search-invoices.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Search Square Invoices", () => { onDashboardRun({ title: "Search Square Invoices" }) square.searchInvoices({ query: { filter: { locationIds: ["ES0RJRZYEC39A"], customerIds: ["JDKYHBWT1D4F8MFH63DBMEN8Y4"], }, sort: { field: "INVOICE_SORT_DATE", order: "DESC", }, }, limit: 100, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `INVOICES_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `query` | `Square.InvoiceQuery` | Yes | — | Describes the query criteria for searching invoices. | | `limit` | `number` | No | — | The maximum number of invoices to return (200 is the maximum `limit`). If not provided, the server uses a default limit of 100 invoices. | | `cursor` | `string` | No | — | A pagination cursor returned by a previous call to this endpoint. Provide this cursor to retrieve the next set of results for your original query. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | Use the official [SearchInvoices reference](https://developer.squareup.com/reference/square/invoices-api/search-invoices) for provider field semantics and limits. ## Output Returns the official `Square.SearchInvoicesResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Search Loyalty Accounts Source: https://docs.automate.ax/reference/integrations/square/actions/search-loyalty-accounts Searches for loyalty accounts in a loyalty program. `square.searchLoyaltyAccounts` searches for loyalty accounts in a loyalty program. ## Example ```ts automations/square-search-loyalty-accounts.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Search Square Loyalty Accounts", () => { onDashboardRun({ title: "Search Square Loyalty Accounts" }) square.searchLoyaltyAccounts({ query: { mappings: [ { phoneNumber: "+14155551234", }, ], }, limit: 10, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `LOYALTY_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `query` | `Square.SearchLoyaltyAccountsRequestLoyaltyAccountQuery` | No | — | The search criteria for the request. | | `limit` | `number` | No | 30 | The maximum number of results to include in the response. The default value is 30. | | `cursor` | `string` | No | — | A pagination cursor returned by a previous call to this endpoint. Provide this to retrieve the next set of results for the original query. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | Use the official [SearchLoyaltyAccounts reference](https://developer.squareup.com/reference/square/loyalty-api/search-loyalty-accounts) for provider field semantics and limits. ## Output Returns the official `Square.SearchLoyaltyAccountsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Search Loyalty Events Source: https://docs.automate.ax/reference/integrations/square/actions/search-loyalty-events Searches for loyalty events. `square.searchLoyaltyEvents` searches for loyalty events. ## Example ```ts automations/square-search-loyalty-events.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Search Square Loyalty Events", () => { onDashboardRun({ title: "Search Square Loyalty Events" }) square.searchLoyaltyEvents({ query: { filter: { orderFilter: { orderId: "PyATxhYLfsMqpVkcKJITPydgEYfZY", }, }, }, limit: 30, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `LOYALTY_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `query` | `Square.LoyaltyEventQuery` | No | — | A set of one or more predefined query filters to apply when searching for loyalty events. The endpoint performs a logical AND to evaluate multiple filters and performs a logical OR on arrays that specifies multiple field values. | | `limit` | `number` | No | — | The maximum number of results to include in the response. The last page might contain fewer events. The default is 30 events. | | `cursor` | `string` | No | — | A pagination cursor returned by a previous call to this endpoint. Provide this to retrieve the next set of results for your original query. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | Use the official [SearchLoyaltyEvents reference](https://developer.squareup.com/reference/square/loyalty-api/search-loyalty-events) for provider field semantics and limits. ## Output Returns the official `Square.SearchLoyaltyEventsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Search Loyalty Rewards Source: https://docs.automate.ax/reference/integrations/square/actions/search-loyalty-rewards Searches for loyalty rewards. `square.searchLoyaltyRewards` searches for loyalty rewards. ## Example ```ts automations/square-search-loyalty-rewards.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Search Square Loyalty Rewards", () => { onDashboardRun({ title: "Search Square Loyalty Rewards" }) square.searchLoyaltyRewards({ query: { loyaltyAccountId: "5adcb100-07f1-4ee7-b8c6-6bb9ebc474bd", }, limit: 10, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `LOYALTY_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `query` | `Square.SearchLoyaltyRewardsRequestLoyaltyRewardQuery` | No | — | The search criteria for the request. If empty, the endpoint retrieves all loyalty rewards in the loyalty program. | | `limit` | `number` | No | 30 | The maximum number of results to return in the response. The default value is 30. | | `cursor` | `string` | No | — | A pagination cursor returned by a previous call to this endpoint. Provide this to retrieve the next set of results for the original query. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | Use the official [SearchLoyaltyRewards reference](https://developer.squareup.com/reference/square/loyalty-api/search-loyalty-rewards) for provider field semantics and limits. ## Output Returns the official `Square.SearchLoyaltyRewardsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Search Orders Source: https://docs.automate.ax/reference/integrations/square/actions/search-orders Search all orders for one or more locations. `square.searchOrders` search all orders for one or more locations. ## Example ```ts automations/square-search-orders.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Search Square Orders", () => { onDashboardRun({ title: "Search Square Orders" }) square.searchOrders({ locationIds: ["057P5VYJ4A5X1", "18YC4JDH91E1H"], query: { filter: { stateFilter: { states: ["COMPLETED"], }, dateTimeFilter: { closedAt: { startAt: "2018-03-03T20:00:00+00:00", endAt: "2019-03-04T21:54:45+00:00", }, }, }, sort: { sortField: "CLOSED_AT", sortOrder: "DESC", }, }, limit: 3, returnEntries: true, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ORDERS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `locationIds` | `string[]` | No | — | The location IDs for the orders to query. All locations must belong to the same merchant. Max: 10 location IDs. | | `cursor` | `string` | No | — | A pagination cursor returned by a previous call to this endpoint. Provide this cursor to retrieve the next set of results for your original query. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | | `query` | `Square.SearchOrdersQuery` | No | — | Query conditions used to filter or sort the results. Note that when retrieving additional pages using a cursor, you must use the original query. | | `limit` | `number` | No | `500` Max: `1000` | The maximum number of results to be returned in a single page. Default: `500` Max: `1000` | | `returnEntries` | `boolean` | No | `false` | A Boolean that controls the format of the search results. If `true`, `SearchOrders` returns OrderEntry objects. If `false`, `SearchOrders` returns complete order objects. Default: `false`. | Use the official [SearchOrders reference](https://developer.squareup.com/reference/square/orders-api/search-orders) for provider field semantics and limits. ## Output Returns the official `Square.SearchOrdersResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Search Scheduled Shifts Source: https://docs.automate.ax/reference/integrations/square/actions/search-scheduled-shifts Returns a paginated list of scheduled shifts, with optional filter and sort settings. `square.searchScheduledShifts` returns a paginated list of scheduled shifts, with optional filter and sort settings. ## Example ```ts automations/square-search-scheduled-shifts.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Search Square Scheduled Shifts", () => { onDashboardRun({ title: "Search Square Scheduled Shifts" }) square.searchScheduledShifts({ query: { filter: { assignmentStatus: "ASSIGNED", }, sort: { field: "CREATED_AT", order: "ASC", }, }, limit: 2, cursor: "xoxp-1234-5678-90123", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `TIMECARDS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `query` | `Square.ScheduledShiftQuery` | No | — | Query conditions used to filter and sort the results. | | `limit` | `number` | No | 50 | The maximum number of results to return in a single response page. The default value is 50. | | `cursor` | `string` | No | — | The pagination cursor returned by the previous call to this endpoint. Provide this cursor to retrieve the next page of results for your original request. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | Use the official [SearchScheduledShifts reference](https://developer.squareup.com/reference/square/labor-api/search-scheduled-shifts) for provider field semantics and limits. ## Output Returns the official `Square.SearchScheduledShiftsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Search Subscriptions Source: https://docs.automate.ax/reference/integrations/square/actions/search-subscriptions Searches for subscriptions. `square.searchSubscriptions` searches for subscriptions. ## Example ```ts automations/square-search-subscriptions.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Search Square Subscriptions", () => { onDashboardRun({ title: "Search Square Subscriptions" }) square.searchSubscriptions({ query: { filter: { customerIds: ["CHFGVKYY8RSV93M5KCYTG4PN0G"], locationIds: ["S8GWD5R9QB376"], sourceNames: ["My App"], }, }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `SUBSCRIPTIONS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `cursor` | `string` | No | — | When the total number of resulting subscriptions exceeds the limit of a paged response, specify the cursor returned from a preceding response here to fetch the next set of results. If the cursor is unset, the response contains the last page of the results. For more information, see [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination). | | `limit` | `number` | No | — | The upper limit on the number of subscriptions to return in a paged response. | | `query` | `Square.SearchSubscriptionsQuery` | No | — | A subscription query consisting of specified filtering conditions. If this `query` field is unspecified, the `SearchSubscriptions` call will return all subscriptions. | | `include` | `string[]` | No | — | An option to include related information in the response. The supported values are: - `actions`: to include scheduled actions on the targeted subscriptions. | Use the official [SearchSubscriptions reference](https://developer.squareup.com/reference/square/subscriptions-api/search-subscriptions) for provider field semantics and limits. ## Output Returns the official `Square.SearchSubscriptionsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Search Team Members Source: https://docs.automate.ax/reference/integrations/square/actions/search-team-members Returns a paginated list of `TeamMember` objects for a business. `square.searchTeamMembers` returns a paginated list of `TeamMember` objects for a business. ## Example ```ts automations/square-search-team-members.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Search Square Team Members", () => { onDashboardRun({ title: "Search Square Team Members" }) square.searchTeamMembers({ query: { filter: { locationIds: ["0G5P3VGACMMQZ"], status: "ACTIVE", }, }, limit: 10, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `EMPLOYEES_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `query` | `Square.SearchTeamMembersQuery` | No | — | The query parameters. | | `limit` | `number` | No | — | The maximum number of `TeamMember` objects in a page (100 by default). | | `cursor` | `string` | No | — | The opaque cursor for fetching the next page. For more information, see [pagination](https://developer.squareup.com/docs/working-with-apis/pagination). | Use the official [SearchTeamMembers reference](https://developer.squareup.com/reference/square/team-api/search-team-members) for provider field semantics and limits. ## Output Returns the official `Square.SearchTeamMembersResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Search Terminal Actions Source: https://docs.automate.ax/reference/integrations/square/actions/search-terminal-actions Retrieves a filtered list of Terminal action requests created by the account making the request. `square.searchTerminalActions` retrieves a filtered list of Terminal action requests created by the account making the request. ## Example ```ts automations/square-search-terminal-actions.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Search Square Terminal Actions", () => { onDashboardRun({ title: "Search Square Terminal Actions" }) square.searchTerminalActions({ query: { filter: { createdAt: { startAt: "2022-04-01T00:00:00.000Z", }, }, sort: { sortOrder: "DESC", }, }, limit: 2, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `PAYMENTS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `query` | `Square.TerminalActionQuery` | No | — | Queries terminal actions based on given conditions and sort order. Leaving this unset will return all actions with the default sort order. | | `cursor` | `string` | No | — | A pagination cursor returned by a previous call to this endpoint. Provide this to retrieve the next set of results for the original query. See [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination) for more information. | | `limit` | `number` | No | — | Limit the number of results returned for a single request. | Use the official [SearchTerminalActions reference](https://developer.squareup.com/reference/square/terminal-api/search-terminal-actions) for provider field semantics and limits. ## Output Returns the official `Square.SearchTerminalActionsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Search Terminal Checkouts Source: https://docs.automate.ax/reference/integrations/square/actions/search-terminal-checkouts Returns a filtered list of Terminal checkout requests created by the application making the request. `square.searchTerminalCheckouts` returns a filtered list of Terminal checkout requests created by the application making the request. ## Example ```ts automations/square-search-terminal-checkouts.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Search Square Terminal Checkouts", () => { onDashboardRun({ title: "Search Square Terminal Checkouts" }) square.searchTerminalCheckouts({ query: { filter: { status: "COMPLETED", }, }, limit: 2, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `PAYMENTS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `query` | `Square.TerminalCheckoutQuery` | No | — | Queries Terminal checkouts based on given conditions and the sort order. Leaving these unset returns all checkouts with the default sort order. | | `cursor` | `string` | No | — | A pagination cursor returned by a previous call to this endpoint. Provide this cursor to retrieve the next set of results for the original query. See [Pagination](https://developer.squareup.com/docs/build-basics/common-api-patterns/pagination) for more information. | | `limit` | `number` | No | — | Limits the number of results returned for a single request. | Use the official [SearchTerminalCheckouts reference](https://developer.squareup.com/reference/square/terminal-api/search-terminal-checkouts) for provider field semantics and limits. ## Output Returns the official `Square.SearchTerminalCheckoutsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Search Terminal Refunds Source: https://docs.automate.ax/reference/integrations/square/actions/search-terminal-refunds Retrieves a filtered list of Interac Terminal refund requests created by the seller making the request. `square.searchTerminalRefunds` retrieves a filtered list of Interac Terminal refund requests created by the seller making the request. ## Example ```ts automations/square-search-terminal-refunds.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Search Square Terminal Refunds", () => { onDashboardRun({ title: "Search Square Terminal Refunds" }) square.searchTerminalRefunds({ query: { filter: { status: "COMPLETED", }, }, limit: 1, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `PAYMENTS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `query` | `Square.TerminalRefundQuery` | No | — | Queries the Terminal refunds based on given conditions and the sort order. Calling `SearchTerminalRefunds` without an explicit query parameter returns all available refunds with the default sort order. | | `cursor` | `string` | No | — | A pagination cursor returned by a previous call to this endpoint. Provide this cursor to retrieve the next set of results for the original query. | | `limit` | `number` | No | — | Limits the number of results returned for a single request. | Use the official [SearchTerminalRefunds reference](https://developer.squareup.com/reference/square/terminal-api/search-terminal-refunds) for provider field semantics and limits. ## Output Returns the official `Square.SearchTerminalRefundsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Search Timecards Source: https://docs.automate.ax/reference/integrations/square/actions/search-timecards Returns a paginated list of `Timecard` records for a business. `square.searchTimecards` returns a paginated list of `Timecard` records for a business. ## Example ```ts automations/square-search-timecards.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Search Square Timecards", () => { onDashboardRun({ title: "Search Square Timecards" }) square.searchTimecards({ query: { filter: { workday: { dateRange: { startDate: "2019-01-20", endDate: "2019-02-03", }, matchTimecardsBy: "START_AT", defaultTimezone: "America/Los_Angeles", }, }, }, limit: 100, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `TIMECARDS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `query` | `Square.TimecardQuery` | No | — | Query filters. | | `limit` | `number` | No | — | The number of resources in a page (200 by default). | | `cursor` | `string` | No | — | An opaque cursor for fetching the next page. | Use the official [SearchTimecards reference](https://developer.squareup.com/reference/square/labor-api/search-timecards) for provider field semantics and limits. ## Output Returns the official `Square.SearchTimecardsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Search Transfer Orders Source: https://docs.automate.ax/reference/integrations/square/actions/search-transfer-orders Searches for transfer orders using filters. `square.searchTransferOrders` searches for transfer orders using filters. ## Example ```ts automations/square-search-transfer-orders.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Search Square Transfer Orders", () => { onDashboardRun({ title: "Search Square Transfer Orders" }) square.searchTransferOrders({ query: { filter: { sourceLocationIds: ["EXAMPLE_SOURCE_LOCATION_ID_123"], destinationLocationIds: ["EXAMPLE_DEST_LOCATION_ID_456"], statuses: ["STARTED", "PARTIALLY_RECEIVED"], }, sort: { field: "UPDATED_AT", order: "DESC", }, }, cursor: "eyJsYXN0X3VwZGF0ZWRfYXQiOjE3NTMxMTg2NjQ4NzN9", limit: 10, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `INVENTORY_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `query` | `Square.TransferOrderQuery` | No | — | The search query | | `cursor` | `string` | No | — | Pagination cursor from a previous search response | | `limit` | `number` | No | — | Maximum number of results to return (1-100) | Use the official [SearchTransferOrders reference](https://developer.squareup.com/reference/square/transfer-order-api/search-transfer-orders) for provider field semantics and limits. ## Output Returns the official `Square.SearchTransferOrdersResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Search Vendors Source: https://docs.automate.ax/reference/integrations/square/actions/search-vendors Searches for vendors using a filter against supported [Vendor](entity:Vendor) properties and a supported sorter. `square.searchVendors` searches for vendors using a filter against supported [Vendor](entity:Vendor) properties and a supported sorter. ## Example ```ts automations/square-search-vendors.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Search Square Vendors", () => { onDashboardRun({ title: "Search Square Vendors" }) square.searchVendors({}) }) ``` ## Inputs Every input accepts a compatible signal. It requires `VENDOR_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `filter` | `Square.SearchVendorsRequestFilter` | No | — | Specifies a filter used to search for vendors. | | `sort` | `Square.SearchVendorsRequestSort` | No | — | Specifies a sorter used to sort the returned vendors. | | `cursor` | `string` | No | — | A pagination cursor returned by a previous call to this endpoint. Provide this to retrieve the next set of results for the original query. See the [Pagination](https://developer.squareup.com/docs/working-with-apis/pagination) guide for more information. | Use the official [SearchVendors reference](https://developer.squareup.com/reference/square/vendors-api/search-vendors) for provider field semantics and limits. ## Output Returns the official `Square.SearchVendorsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Start Transfer Order Source: https://docs.automate.ax/reference/integrations/square/actions/start-transfer-order Changes a [DRAFT](entity:TransferOrderStatus) transfer order to [STARTED](entity:TransferOrderStatus) status. `square.startTransferOrder` changes a [DRAFT](entity:TransferOrderStatus) transfer order to [STARTED](entity:TransferOrderStatus) status. ## Example ```ts automations/square-start-transfer-order.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Start Square Transfer Order", () => { onDashboardRun({ title: "Start Square Transfer Order" }) square.startTransferOrder({ transferOrderId: "transfer_order_id", idempotencyKey: "EXAMPLE_IDEMPOTENCY_KEY_789", version: BigInt("1753109537351"), }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `INVENTORY_READ` and `INVENTORY_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `transferOrderId` | `string` | Yes | — | The ID of the transfer order to start. Must be in DRAFT status. | | `idempotencyKey` | `string` | Yes | — | A unique string that identifies this UpdateTransferOrder request. Keys can be any valid string but must be unique for every UpdateTransferOrder request. | | `version` | `bigint` | No | — | Version for optimistic concurrency | Use the official [StartTransferOrder reference](https://developer.squareup.com/reference/square/transfer-order-api/start-transfer-order) for provider field semantics and limits. ## Output Returns the official `Square.StartTransferOrderResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Submit Evidence Source: https://docs.automate.ax/reference/integrations/square/actions/submit-evidence Submits evidence to the cardholder's bank. `square.submitEvidence` submits evidence to the cardholder's bank. ## Example ```ts automations/square-submit-evidence.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Submit Square Evidence", () => { onDashboardRun({ title: "Submit Square Evidence" }) square.submitEvidence({ disputeId: "dispute_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `DISPUTES_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `disputeId` | `string` | Yes | — | The ID of the dispute for which you want to submit evidence. | Use the official [SubmitEvidence reference](https://developer.squareup.com/reference/square/disputes-api/submit-evidence) for provider field semantics and limits. ## Output Returns the official `Square.SubmitEvidenceResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Swap Plan Source: https://docs.automate.ax/reference/integrations/square/actions/swap-plan Schedules a `SWAP_PLAN` action to swap a subscription plan variation in an existing subscription. `square.swapPlan` schedules a `SWAP_PLAN` action to swap a subscription plan variation in an existing subscription. ## Example ```ts automations/square-swap-plan.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Swap Square Plan", () => { onDashboardRun({ title: "Swap Square Plan" }) square.swapPlan({ subscriptionId: "subscription_id", newPlanVariationId: "FQ7CDXXWSLUJRPM3GFJSJGZ7", phases: [ { ordinal: BigInt("0"), orderTemplateId: "uhhnjH9osVv3shUADwaC0b3hNxQZY", }, ], }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_READ` and `INVOICES_WRITE` and `ITEMS_READ` and `ORDERS_WRITE` and `PAYMENTS_WRITE` and `SUBSCRIPTIONS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `subscriptionId` | `string` | Yes | — | The ID of the subscription to swap the subscription plan for. | | `newPlanVariationId` | `string \| null` | No | — | The ID of the new subscription plan variation. This field is required. | | `phases` | `Square.PhaseInput[] \| null` | No | — | A list of PhaseInputs, to pass phase-specific information used in the swap. | Use the official [SwapPlan reference](https://developer.squareup.com/reference/square/subscriptions-api/swap-plan) for provider field semantics and limits. ## Output Returns the official `Square.SwapPlanResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Unlink Customer From Gift Card Source: https://docs.automate.ax/reference/integrations/square/actions/unlink-customer-from-gift-card Unlinks a customer from a gift card, which is also referred to as removing a card on file. `square.unlinkCustomerFromGiftCard` unlinks a customer from a gift card, which is also referred to as removing a card on file. ## Example ```ts automations/square-unlink-customer-from-gift-card.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Unlink Square Customer From Gift Card", () => { onDashboardRun({ title: "Unlink Square Customer From Gift Card" }) square.unlinkCustomerFromGiftCard({ giftCardId: "gift_card_id", customerId: "GKY0FZ3V717AH8Q2D821PNT2ZW", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `GIFTCARDS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `giftCardId` | `string` | Yes | — | The ID of the gift card to be unlinked. | | `customerId` | `string` | Yes | — | The ID of the customer to unlink from the gift card. | Use the official [UnlinkCustomerFromGiftCard reference](https://developer.squareup.com/reference/square/gift-cards-api/unlink-customer-from-gift-card) for provider field semantics and limits. ## Output Returns the official `Square.UnlinkCustomerFromGiftCardResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Update Booking Source: https://docs.automate.ax/reference/integrations/square/actions/update-booking Updates a booking. `square.updateBooking` updates a booking. ## Example ```ts automations/square-update-booking.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Update Square Booking", () => { onDashboardRun({ title: "Update Square Booking" }) square.updateBooking({ bookingId: "booking_id", booking: {}, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `APPOINTMENTS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `bookingId` | `string` | Yes | — | The ID of the Booking object representing the to-be-updated booking. | | `idempotencyKey` | `string \| null` | No | — | A unique key to make this request an idempotent operation. | | `booking` | `Square.Booking` | Yes | — | The booking to be updated. Individual attributes explicitly specified here override the corresponding values of the existing booking. | Use the official [UpdateBooking reference](https://developer.squareup.com/reference/square/bookings-api/update-booking) for provider field semantics and limits. ## Output Returns the official `Square.UpdateBookingResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Update Booking Custom Attribute Definition Source: https://docs.automate.ax/reference/integrations/square/actions/update-booking-custom-attribute-definition Updates a bookings custom attribute definition. `square.updateBookingCustomAttributeDefinition` updates a bookings custom attribute definition. ## Example ```ts automations/square-update-booking-custom-attribute-definition.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "Update Square Booking Custom Attribute Definition", () => { onDashboardRun({ title: "Update Square Booking Custom Attribute Definition", }) square.updateBookingCustomAttributeDefinition({ key: "key", customAttributeDefinition: {}, }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `APPOINTMENTS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `key` | `string` | Yes | — | The key of the custom attribute definition to update. | | `customAttributeDefinition` | `Square.CustomAttributeDefinition` | Yes | — | The custom attribute definition that contains the fields to update. Only the following fields can be updated: - `name` - `description` - `visibility` - `schema` for a `Selection` data type. Only changes to the named options or the maximum number of allowed selections are supported. For more information, see [Updatable definition fields](https://developer.squareup.com/docs/booking-custom-attributes-api/custom-attribute-definitions#updatable-definition-fields). To enable [optimistic concurrency](https://developer.squareup.com/docs/build-basics/common-api-patterns/optimistic-concurrency) control, include the optional `version` field and specify the current version of the custom attribute definition. | | `idempotencyKey` | `string \| null` | No | — | A unique identifier for this request, used to ensure idempotency. For more information, see [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency). | Use the official [UpdateBookingCustomAttributeDefinition reference](https://developer.squareup.com/reference/square/booking-custom-attributes-api/update-booking-custom-attribute-definition) for provider field semantics and limits. ## Output Returns the official `Square.UpdateBookingCustomAttributeDefinitionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Update Break Type Source: https://docs.automate.ax/reference/integrations/square/actions/update-break-type Updates an existing `BreakType`. `square.updateBreakType` updates an existing `BreakType`. ## Example ```ts automations/square-update-break-type.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Update Square Break Type", () => { onDashboardRun({ title: "Update Square Break Type" }) square.updateBreakType({ id: "id", breakType: { locationId: "26M7H24AZ9N6R", breakName: "Lunch", expectedDuration: "PT50M", isPaid: true, version: 1, }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `TIMECARDS_SETTINGS_READ` and `TIMECARDS_SETTINGS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `id` | `string` | Yes | — | The UUID for the `BreakType` being updated. | | `breakType` | `Square.BreakType` | Yes | — | The updated `BreakType`. | Use the official [UpdateBreakType reference](https://developer.squareup.com/reference/square/labor-api/update-break-type) for provider field semantics and limits. ## Output Returns the official `Square.UpdateBreakTypeResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Update Catalog Image Source: https://docs.automate.ax/reference/integrations/square/actions/update-catalog-image Uploads a new image file to replace the existing one in the specified [CatalogImage](entity:CatalogImage) object. `square.updateCatalogImage` uploads a new image file to replace the existing one in the specified [CatalogImage](entity:CatalogImage) object. ## Example ```ts automations/square-update-catalog-image.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Update Square Catalog Image", () => { onDashboardRun({ title: "Update Square Catalog Image" }) square.updateCatalogImage({ imageId: "image_id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ITEMS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `imageId` | `string` | Yes | — | The ID of the `CatalogImage` object to update the encapsulated image file. | | `request` | `Square.UpdateCatalogImageRequest` | No | — | Square `request` request field. | | `imageFile` | `File \| fs.ReadStream \| Blob \| undefined` | No | — | Square `imageFile` request field. | Use the official [UpdateCatalogImage reference](https://developer.squareup.com/reference/square/catalog-api/update-catalog-image) for provider field semantics and limits. ## Output Returns the official `Square.UpdateCatalogImageResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Update Customer Source: https://docs.automate.ax/reference/integrations/square/actions/update-customer Updates a customer profile. `square.updateCustomer` updates a customer profile. ## Example ```ts automations/square-update-customer.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Update Square Customer", () => { onDashboardRun({ title: "Update Square Customer" }) square.updateCustomer({ customerId: "customer_id", emailAddress: "New.Amelia.Earhart@example.com", note: "updated customer note", version: BigInt("2"), }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `customerId` | `string` | Yes | — | The ID of the customer to update. | | `givenName` | `string \| null` | No | — | The given name (that is, the first name) associated with the customer profile. The maximum length for this value is 300 characters. | | `familyName` | `string \| null` | No | — | The family name (that is, the last name) associated with the customer profile. The maximum length for this value is 300 characters. | | `companyName` | `string \| null` | No | — | A business name associated with the customer profile. The maximum length for this value is 500 characters. | | `nickname` | `string \| null` | No | — | A nickname for the customer profile. The maximum length for this value is 100 characters. | | `emailAddress` | `string \| null` | No | — | The email address associated with the customer profile. The maximum length for this value is 254 characters. | | `address` | `Square.Address` | No | — | The physical address associated with the customer profile. Only new or changed fields are required in the request. For maximum length constraints, see [Customer addresses](https://developer.squareup.com/docs/customers-api/use-the-api/keep-records#address). The `first_name` and `last_name` fields are ignored if they are present in the request. | | `phoneNumber` | `string \| null` | No | — | The phone number associated with the customer profile. The phone number must be valid and can contain 9–16 digits, with an optional `+` prefix and country code. For more information, see [Customer phone numbers](https://developer.squareup.com/docs/customers-api/use-the-api/keep-records#phone-number). | | `referenceId` | `string \| null` | No | — | An optional second ID used to associate the customer profile with an entity in another system. The maximum length for this value is 100 characters. | | `note` | `string \| null` | No | — | A custom note associated with the customer profile. | | `birthday` | `string \| null` | No | — | The birthday associated with the customer profile, in `YYYY-MM-DD` or `MM-DD` format. For example, specify `1998-09-21` for September 21, 1998, or `09-21` for September 21. Birthdays are returned in `YYYY-MM-DD` format, where `YYYY` is the specified birth year or `0000` if a birth year is not specified. | | `version` | `bigint` | No | — | The current version of the customer profile. As a best practice, you should include this field to enable [optimistic concurrency](https://developer.squareup.com/docs/build-basics/common-api-patterns/optimistic-concurrency) control. For more information, see [Update a customer profile](https://developer.squareup.com/docs/customers-api/use-the-api/keep-records#update-a-customer-profile). | | `taxIds` | `Square.CustomerTaxIds` | No | — | The tax ID associated with the customer profile. This field is available only for customers of sellers in EU countries or the United Kingdom. For more information, see [Customer tax IDs](https://developer.squareup.com/docs/customers-api/what-it-does#customer-tax-ids). | Use the official [UpdateCustomer reference](https://developer.squareup.com/reference/square/customers-api/update-customer) for provider field semantics and limits. ## Output Returns the official `Square.UpdateCustomerResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Update Customer Custom Attribute Definition Source: https://docs.automate.ax/reference/integrations/square/actions/update-customer-custom-attribute-definition Updates a customer-related [custom attribute definition](entity:CustomAttributeDefinition) for a Square seller account. `square.updateCustomerCustomAttributeDefinition` updates a customer-related [custom attribute definition](entity:CustomAttributeDefinition) for a Square seller account. ## Example ```ts automations/square-update-customer-custom-attribute-definition.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "Update Square Customer Custom Attribute Definition", () => { onDashboardRun({ title: "Update Square Customer Custom Attribute Definition", }) square.updateCustomerCustomAttributeDefinition({ key: "key", customAttributeDefinition: { description: "Update the description as desired.", visibility: "VISIBILITY_READ_ONLY", }, }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `key` | `string` | Yes | — | The key of the custom attribute definition to update. | | `customAttributeDefinition` | `Square.CustomAttributeDefinition` | Yes | — | The custom attribute definition that contains the fields to update. This endpoint supports sparse updates, so only new or changed fields need to be included in the request. Only the following fields can be updated: - `name` - `description` - `visibility` - `schema` for a `Selection` data type. Only changes to the named options or the maximum number of allowed selections are supported. For more information, see [Updatable definition fields](https://developer.squareup.com/docs/customer-custom-attributes-api/custom-attribute-definitions#updatable-definition-fields). To enable [optimistic concurrency](https://developer.squareup.com/docs/build-basics/common-api-patterns/optimistic-concurrency) control, include the optional `version` field and specify the current version of the custom attribute definition. | | `idempotencyKey` | `string \| null` | No | — | A unique identifier for this request, used to ensure idempotency. For more information, see [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency). | Use the official [UpdateCustomerCustomAttributeDefinition reference](https://developer.squareup.com/reference/square/customer-custom-attributes-api/update-customer-custom-attribute-definition) for provider field semantics and limits. ## Output Returns the official `Square.UpdateCustomerCustomAttributeDefinitionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Update Customer Group Source: https://docs.automate.ax/reference/integrations/square/actions/update-customer-group Updates a customer group as identified by the `group_id` value. `square.updateCustomerGroup` updates a customer group as identified by the `group_id` value. ## Example ```ts automations/square-update-customer-group.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Update Square Customer Group", () => { onDashboardRun({ title: "Update Square Customer Group" }) square.updateCustomerGroup({ groupId: "group_id", group: { name: "Loyal Customers", }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `groupId` | `string` | Yes | — | The ID of the customer group to update. | | `group` | `Square.CustomerGroup` | Yes | — | The `CustomerGroup` object including all the updates you want to make. | Use the official [UpdateCustomerGroup reference](https://developer.squareup.com/reference/square/customer-groups-api/update-customer-group) for provider field semantics and limits. ## Output Returns the official `Square.UpdateCustomerGroupResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Update Inventory Adjustment Source: https://docs.automate.ax/reference/integrations/square/actions/update-inventory-adjustment Applies an update to the provided adjustment. `square.updateInventoryAdjustment` applies an update to the provided adjustment. ## Example ```ts automations/square-update-inventory-adjustment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Update Square Inventory Adjustment", () => { onDashboardRun({ title: "Update Square Inventory Adjustment" }) square.updateInventoryAdjustment({ idempotencyKey: "8fc6a5b0-9fe8-4b46-b46b-2ef95793abbe", adjustment: {}, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `INVENTORY_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `idempotencyKey` | `string` | Yes | — | A client-supplied, universally unique identifier (UUID) for the request. See [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency) in the [Build Basics](https://developer.squareup.com/docs/buildbasics) section for more information. | | `adjustment` | `Square.InventoryAdjustment` | Yes | — | Represents the updates being written to a past/existing inventory adjustment. This works using sparse updates, meaning that any fields omitted from the inputted InventoryAdjustment will retain their values. Only updates to the quantity, cost\_money, vendor\_id, and reason\_id fields of an InventoryAdjustment can be made here. Note that the quantity field must be provided, but it can be identical to the current quantity if there are no desired quantity changes. cost\_money and vendor\_id can only be written to adjustments that add stock to the system (from\_state of NONE or UNLINKED\_RETURN) and to untracked sale adjustments. reason\_id can be changed to any reason that is valid for the adjustment's state transition. The reason of a system-generated adjustment (for example, SALE or RECOUNT) cannot be changed. Adjustments generated by Square from other records cannot be updated. This includes inferred adjustments created by physical counts, transfer-like cross-location adjustments, and component adjustments. Adjustments linked to purchase orders cannot be updated. Adjustments linked to sales can only have cost\_money and vendor\_id updated, and only for untracked sales. Restock adjustments linked to an itemized return can have their quantity updated, up to the quantity remaining on the return. Adjustments older than one year cannot be updated. | Use the official [UpdateInventoryAdjustment reference](https://developer.squareup.com/reference/square/inventory-api/update-inventory-adjustment) for provider field semantics and limits. ## Output Returns the official `Square.UpdateInventoryAdjustmentResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Update Inventory Adjustment Reason Source: https://docs.automate.ax/reference/integrations/square/actions/update-inventory-adjustment-reason Updates a custom inventory adjustment reason. `square.updateInventoryAdjustmentReason` updates a custom inventory adjustment reason. ## Example ```ts automations/square-update-inventory-adjustment-reason.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Update Square Inventory Adjustment Reason", () => { onDashboardRun({ title: "Update Square Inventory Adjustment Reason" }) square.updateInventoryAdjustmentReason({ reasonId: { type: "CUSTOM", customReasonId: "R5BX3PDCZ6EXAMPLE", }, adjustmentReason: { id: { type: "CUSTOM", customReasonId: "R5BX3PDCZ6EXAMPLE", }, name: "Charitable donation", }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `INVENTORY_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `reasonId` | `Square.InventoryAdjustmentReasonId` | Yes | — | The identifier of the custom inventory adjustment reason to update. | | `adjustmentReason` | `Square.InventoryAdjustmentReason` | Yes | — | The requested custom inventory adjustment reason update. Only the `name` field can be updated. Deleted custom reasons cannot be updated. To restore a deleted custom reason, call RestoreInventoryAdjustmentReason. | Use the official [UpdateInventoryAdjustmentReason reference](https://developer.squareup.com/reference/square/inventory-api/update-inventory-adjustment-reason) for provider field semantics and limits. ## Output Returns the official `Square.UpdateInventoryAdjustmentReasonResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Update Invoice Source: https://docs.automate.ax/reference/integrations/square/actions/update-invoice Updates an invoice. `square.updateInvoice` updates an invoice. ## Example ```ts automations/square-update-invoice.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Update Square Invoice", () => { onDashboardRun({ title: "Update Square Invoice" }) square.updateInvoice({ invoiceId: "invoice_id", invoice: { version: 1, paymentRequests: [ { uid: "2da7964f-f3d2-4f43-81e8-5aa220bf3355", tippingEnabled: false, }, ], }, idempotencyKey: "4ee82288-0910-499e-ab4c-5d0071dad1be", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `INVOICES_WRITE` and `ORDERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `invoiceId` | `string` | Yes | — | The ID of the invoice to update. | | `invoice` | `Square.Invoice` | Yes | — | The invoice fields to add, change, or clear. Fields can be cleared using null values or the `remove` field (for individual payment requests or reminders). The current invoice `version` is also required. For more information, including requirements, limitations, and more examples, see [Update an Invoice](https://developer.squareup.com/docs/invoices-api/update-invoices). | | `idempotencyKey` | `string \| null` | No | — | A unique string that identifies the `UpdateInvoice` request. If you do not provide `idempotency_key` (or provide an empty string as the value), the endpoint treats each request as independent. For more information, see [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency). | | `fieldsToClear` | `string[] \| null` | No | — | The list of fields to clear. Although this field is currently supported, we recommend using null values or the `remove` field when possible. For examples, see [Update an Invoice](https://developer.squareup.com/docs/invoices-api/update-invoices). | Use the official [UpdateInvoice reference](https://developer.squareup.com/reference/square/invoices-api/update-invoice) for provider field semantics and limits. ## Output Returns the official `Square.UpdateInvoiceResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Update Item Modifier Lists Source: https://docs.automate.ax/reference/integrations/square/actions/update-item-modifier-lists Updates the [CatalogModifierList](entity:CatalogModifierList) objects that apply to the targeted [CatalogItem](entity:CatalogItem) without having to perform an upsert on the entire item. `square.updateItemModifierLists` updates the [CatalogModifierList](entity:CatalogModifierList) objects that apply to the targeted [CatalogItem](entity:CatalogItem) without having to perform an upsert on the entire item. ## Example ```ts automations/square-update-item-modifier-lists.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Update Square Item Modifier Lists", () => { onDashboardRun({ title: "Update Square Item Modifier Lists" }) square.updateItemModifierLists({ itemIds: ["H42BRLUJ5KTZTTMPVSLFAACQ", "2JXOBJIHCWBQ4NZ3RIXQGJA6"], modifierListsToEnable: [ "H42BRLUJ5KTZTTMPVSLFAACQ", "2JXOBJIHCWBQ4NZ3RIXQGJA6", ], modifierListsToDisable: ["7WRC16CJZDVLSNDQ35PP6YAD"], }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ITEMS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `itemIds` | `string[]` | Yes | — | The IDs of the catalog items associated with the CatalogModifierList objects being updated. | | `modifierListsToEnable` | `string[] \| null` | No | — | The IDs of the CatalogModifierList objects to enable for the CatalogItem. At least one of `modifier_lists_to_enable` or `modifier_lists_to_disable` must be specified. | | `modifierListsToDisable` | `string[] \| null` | No | — | The IDs of the CatalogModifierList objects to disable for the CatalogItem. At least one of `modifier_lists_to_enable` or `modifier_lists_to_disable` must be specified. | Use the official [UpdateItemModifierLists reference](https://developer.squareup.com/reference/square/catalog-api/update-item-modifier-lists) for provider field semantics and limits. ## Output Returns the official `Square.UpdateItemModifierListsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Update Item Taxes Source: https://docs.automate.ax/reference/integrations/square/actions/update-item-taxes Updates the [CatalogTax](entity:CatalogTax) objects that apply to the targeted [CatalogItem](entity:CatalogItem) without having to perform an upsert on the entire item. `square.updateItemTaxes` updates the [CatalogTax](entity:CatalogTax) objects that apply to the targeted [CatalogItem](entity:CatalogItem) without having to perform an upsert on the entire item. ## Example ```ts automations/square-update-item-taxes.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Update Square Item Taxes", () => { onDashboardRun({ title: "Update Square Item Taxes" }) square.updateItemTaxes({ itemIds: ["H42BRLUJ5KTZTTMPVSLFAACQ", "2JXOBJIHCWBQ4NZ3RIXQGJA6"], taxesToEnable: ["4WRCNHCJZDVLSNDQ35PP6YAD"], taxesToDisable: ["AQCEGCEBBQONINDOHRGZISEX"], }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ITEMS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `itemIds` | `string[]` | Yes | — | IDs for the CatalogItems associated with the CatalogTax objects being updated. No more than 1,000 IDs may be provided. | | `taxesToEnable` | `string[] \| null` | No | — | IDs of the CatalogTax objects to enable. At least one of `taxes_to_enable` or `taxes_to_disable` must be specified. | | `taxesToDisable` | `string[] \| null` | No | — | IDs of the CatalogTax objects to disable. At least one of `taxes_to_enable` or `taxes_to_disable` must be specified. | Use the official [UpdateItemTaxes reference](https://developer.squareup.com/reference/square/catalog-api/update-item-taxes) for provider field semantics and limits. ## Output Returns the official `Square.UpdateItemTaxesResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Update Job Source: https://docs.automate.ax/reference/integrations/square/actions/update-job Updates the title or tip eligibility of a job. `square.updateJob` updates the title or tip eligibility of a job. ## Example ```ts automations/square-update-job.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Update Square Job", () => { onDashboardRun({ title: "Update Square Job" }) square.updateJob({ jobId: "job_id", job: { title: "Cashier 1", isTipEligible: true, }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `EMPLOYEES_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `jobId` | `string` | Yes | — | The ID of the job to update. | | `job` | `Square.Job` | Yes | — | The job with the updated fields, either `title`, `is_tip_eligible`, or both. Only changed fields need to be included in the request. Optionally include `version` to enable optimistic concurrency control. | Use the official [UpdateJob reference](https://developer.squareup.com/reference/square/team-api/update-job) for provider field semantics and limits. ## Output Returns the official `Square.UpdateJobResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Update Location Source: https://docs.automate.ax/reference/integrations/square/actions/update-location Updates a [location](https://developer.squareup.com/docs/locations-api). `square.updateLocation` updates a [location](https://developer.squareup.com/docs/locations-api). ## Example ```ts automations/square-update-location.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Update Square Location", () => { onDashboardRun({ title: "Update Square Location" }) square.updateLocation({ locationId: "location_id", location: { businessHours: { periods: [ { dayOfWeek: "FRI", startLocalTime: "07:00", endLocalTime: "18:00", }, { dayOfWeek: "SAT", startLocalTime: "07:00", endLocalTime: "18:00", }, { dayOfWeek: "SUN", startLocalTime: "09:00", endLocalTime: "15:00", }, ], }, description: "Midtown Atlanta store - Open weekends", }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `MERCHANT_PROFILE_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `locationId` | `string` | Yes | — | The ID of the location to update. | | `location` | `Square.Location` | No | — | The `Location` object with only the fields to update. | Use the official [UpdateLocation reference](https://developer.squareup.com/reference/square/locations-api/update-location) for provider field semantics and limits. ## Output Returns the official `Square.UpdateLocationResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Update Location Custom Attribute Definition Source: https://docs.automate.ax/reference/integrations/square/actions/update-location-custom-attribute-definition Updates a location-related [custom attribute definition](entity:CustomAttributeDefinition) for a Square seller account. `square.updateLocationCustomAttributeDefinition` updates a location-related [custom attribute definition](entity:CustomAttributeDefinition) for a Square seller account. ## Example ```ts automations/square-update-location-custom-attribute-definition.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "Update Square Location Custom Attribute Definition", () => { onDashboardRun({ title: "Update Square Location Custom Attribute Definition", }) square.updateLocationCustomAttributeDefinition({ key: "key", customAttributeDefinition: { description: "Update the description as desired.", visibility: "VISIBILITY_READ_ONLY", }, }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `MERCHANT_PROFILE_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `key` | `string` | Yes | — | The key of the custom attribute definition to update. | | `customAttributeDefinition` | `Square.CustomAttributeDefinition` | Yes | — | The custom attribute definition that contains the fields to update. This endpoint supports sparse updates, so only new or changed fields need to be included in the request. Only the following fields can be updated: - `name` - `description` - `visibility` - `schema` for a `Selection` data type. Only changes to the named options or the maximum number of allowed selections are supported. For more information, see [Update a location custom attribute definition](https://developer.squareup.com/docs/location-custom-attributes-api/custom-attribute-definitions#update-custom-attribute-definition). To enable [optimistic concurrency](https://developer.squareup.com/docs/build-basics/common-api-patterns/optimistic-concurrency) control, specify the current version of the custom attribute definition. If this is not important for your application, `version` can be set to -1. | | `idempotencyKey` | `string \| null` | No | — | A unique identifier for this request, used to ensure idempotency. For more information, see [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency). | Use the official [UpdateLocationCustomAttributeDefinition reference](https://developer.squareup.com/reference/square/location-custom-attributes-api/update-location-custom-attribute-definition) for provider field semantics and limits. ## Output Returns the official `Square.UpdateLocationCustomAttributeDefinitionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Update Location Settings Source: https://docs.automate.ax/reference/integrations/square/actions/update-location-settings Updates the location-level settings for a Square-hosted checkout page. `square.updateLocationSettings` updates the location-level settings for a Square-hosted checkout page. ## Example ```ts automations/square-update-location-settings.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Update Square Location Settings", () => { onDashboardRun({ title: "Update Square Location Settings" }) square.updateLocationSettings({ locationId: "location_id", locationSettings: {}, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `MERCHANT_PROFILE_READ` and `MERCHANT_PROFILE_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `locationId` | `string` | Yes | — | The ID of the location for which to retrieve settings. | | `locationSettings` | `Square.CheckoutLocationSettings` | Yes | — | Describe your updates using the `location_settings` object. Make sure it contains only the fields that have changed. | Use the official [UpdateLocationSettings reference](https://developer.squareup.com/reference/square/checkout-api/update-location-settings) for provider field semantics and limits. ## Output Returns the official `Square.UpdateLocationSettingsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Update Merchant Custom Attribute Definition Source: https://docs.automate.ax/reference/integrations/square/actions/update-merchant-custom-attribute-definition Updates a merchant-related [custom attribute definition](entity:CustomAttributeDefinition) for a Square seller account. `square.updateMerchantCustomAttributeDefinition` updates a merchant-related [custom attribute definition](entity:CustomAttributeDefinition) for a Square seller account. ## Example ```ts automations/square-update-merchant-custom-attribute-definition.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "Update Square Merchant Custom Attribute Definition", () => { onDashboardRun({ title: "Update Square Merchant Custom Attribute Definition", }) square.updateMerchantCustomAttributeDefinition({ key: "key", customAttributeDefinition: { description: "Update the description as desired.", visibility: "VISIBILITY_READ_ONLY", }, }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `MERCHANT_PROFILE_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `key` | `string` | Yes | — | The key of the custom attribute definition to update. | | `customAttributeDefinition` | `Square.CustomAttributeDefinition` | Yes | — | The custom attribute definition that contains the fields to update. This endpoint supports sparse updates, so only new or changed fields need to be included in the request. Only the following fields can be updated: - `name` - `description` - `visibility` - `schema` for a `Selection` data type. Only changes to the named options or the maximum number of allowed selections are supported. For more information, see [Update a merchant custom attribute definition](https://developer.squareup.com/docs/merchant-custom-attributes-api/custom-attribute-definitions#update-custom-attribute-definition). The version field must match the current version of the custom attribute definition to enable [optimistic concurrency](https://developer.squareup.com/docs/build-basics/common-api-patterns/optimistic-concurrency) If this is not important for your application, version can be set to -1. For any other values, the request fails with a BAD\_REQUEST error. | | `idempotencyKey` | `string \| null` | No | — | A unique identifier for this request, used to ensure idempotency. For more information, see [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency). | Use the official [UpdateMerchantCustomAttributeDefinition reference](https://developer.squareup.com/reference/square/merchant-custom-attributes-api/update-merchant-custom-attribute-definition) for provider field semantics and limits. ## Output Returns the official `Square.UpdateMerchantCustomAttributeDefinitionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Update Merchant Settings Source: https://docs.automate.ax/reference/integrations/square/actions/update-merchant-settings Updates the merchant-level settings for a Square-hosted checkout page. `square.updateMerchantSettings` updates the merchant-level settings for a Square-hosted checkout page. ## Example ```ts automations/square-update-merchant-settings.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Update Square Merchant Settings", () => { onDashboardRun({ title: "Update Square Merchant Settings" }) square.updateMerchantSettings({ merchantSettings: {}, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `MERCHANT_PROFILE_READ` and `MERCHANT_PROFILE_WRITE` and `PAYMENT_METHODS_READ`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `merchantSettings` | `Square.CheckoutMerchantSettings` | Yes | — | Describe your updates using the `merchant_settings` object. Make sure it contains only the fields that have changed. | Use the official [UpdateMerchantSettings reference](https://developer.squareup.com/reference/square/checkout-api/update-merchant-settings) for provider field semantics and limits. ## Output Returns the official `Square.UpdateMerchantSettingsResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Update Order Source: https://docs.automate.ax/reference/integrations/square/actions/update-order Updates an open [order](entity:Order) by adding, replacing, or deleting fields. `square.updateOrder` updates an open [order](entity:Order) by adding, replacing, or deleting fields. ## Example ```ts automations/square-update-order.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Update Square Order", () => { onDashboardRun({ title: "Update Square Order" }) square.updateOrder({ orderId: "order_id", order: { locationId: "location_id", lineItems: [ { uid: "cookie_uid", name: "COOKIE", quantity: "2", basePriceMoney: { amount: BigInt("200"), currency: "USD", }, }, ], version: 1, }, fieldsToClear: ["discounts"], idempotencyKey: "UNIQUE_STRING", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ORDERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `orderId` | `string` | Yes | — | The ID of the order to update. | | `order` | `Square.Order` | No | — | The [sparse order](https://developer.squareup.com/docs/orders-api/manage-orders/update-orders#sparse-order-objects) containing only the fields to update and the version to which the update is being applied. | | `fieldsToClear` | `string[] \| null` | No | — | The [dot notation paths](https://developer.squareup.com/docs/orders-api/manage-orders/update-orders#identifying-fields-to-delete) fields to clear. For example, `line_items[uid].note`. For more information, see [Deleting fields](https://developer.squareup.com/docs/orders-api/manage-orders/update-orders#deleting-fields). | | `idempotencyKey` | `string \| null` | No | — | A value you specify that uniquely identifies this update request. If you are unsure whether a particular update was applied to an order successfully, you can reattempt it with the same idempotency key without worrying about creating duplicate updates to the order. The latest order version is returned. For more information, see [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency). | Use the official [UpdateOrder reference](https://developer.squareup.com/reference/square/orders-api/update-order) for provider field semantics and limits. ## Output Returns the official `Square.UpdateOrderResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Update Order Custom Attribute Definition Source: https://docs.automate.ax/reference/integrations/square/actions/update-order-custom-attribute-definition Updates an order-related custom attribute definition for a Square seller account. `square.updateOrderCustomAttributeDefinition` updates an order-related custom attribute definition for a Square seller account. ## Example ```ts automations/square-update-order-custom-attribute-definition.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation( "Update Square Order Custom Attribute Definition", () => { onDashboardRun({ title: "Update Square Order Custom Attribute Definition" }) square.updateOrderCustomAttributeDefinition({ key: "key", customAttributeDefinition: { key: "cover-count", visibility: "VISIBILITY_READ_ONLY", version: 1, }, idempotencyKey: "IDEMPOTENCY_KEY", }) }, ) ``` ## Inputs Every input accepts a compatible signal. It requires `ORDERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `key` | `string` | Yes | — | The key of the custom attribute definition to update. | | `customAttributeDefinition` | `Square.CustomAttributeDefinition` | Yes | — | The custom attribute definition that contains the fields to update. This endpoint supports sparse updates, so only new or changed fields need to be included in the request. For more information, see [Updatable definition fields](https://developer.squareup.com/docs/orders-custom-attributes-api/custom-attribute-definitions#updatable-definition-fields). To enable [optimistic concurrency](https://developer.squareup.com/docs/build-basics/common-api-patterns/optimistic-concurrency) control, include the optional `version` field and specify the current version of the custom attribute definition. | | `idempotencyKey` | `string \| null` | No | — | A unique identifier for this request, used to ensure idempotency. For more information, see [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency). | Use the official [UpdateOrderCustomAttributeDefinition reference](https://developer.squareup.com/reference/square/order-custom-attributes-api/update-order-custom-attribute-definition) for provider field semantics and limits. ## Output Returns the official `Square.UpdateOrderCustomAttributeDefinitionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Update Payment Source: https://docs.automate.ax/reference/integrations/square/actions/update-payment Updates a payment with the APPROVED status. `square.updatePayment` updates a payment with the APPROVED status. ## Example ```ts automations/square-update-payment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Update Square Payment", () => { onDashboardRun({ title: "Update Square Payment" }) square.updatePayment({ paymentId: "payment_id", payment: { amountMoney: { amount: BigInt("1000"), currency: "USD", }, tipMoney: { amount: BigInt("100"), currency: "USD", }, versionToken: "ODhwVQ35xwlzRuoZEwKXucfu7583sPTzK48c5zoGd0g6o", }, idempotencyKey: "956f8b13-e4ec-45d6-85e8-d1d95ef0c5de", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `PAYMENTS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `paymentId` | `string` | Yes | — | The ID of the payment to update. | | `payment` | `Square.Payment` | No | — | The updated `Payment` object. | | `idempotencyKey` | `string` | Yes | — | A unique string that identifies this `UpdatePayment` request. Keys can be any valid string but must be unique for every `UpdatePayment` request. For more information, see [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency). | Use the official [UpdatePayment reference](https://developer.squareup.com/reference/square/payments-api/update-payment) for provider field semantics and limits. ## Output Returns the official `Square.UpdatePaymentResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Update Payment Link Source: https://docs.automate.ax/reference/integrations/square/actions/update-payment-link Updates a payment link. `square.updatePaymentLink` updates a payment link. ## Example ```ts automations/square-update-payment-link.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Update Square Payment Link", () => { onDashboardRun({ title: "Update Square Payment Link" }) square.updatePaymentLink({ id: "id", paymentLink: { version: 1, checkoutOptions: { askForShippingAddress: true, }, }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ORDERS_READ` and `ORDERS_WRITE` and `PAYMENTS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `id` | `string` | Yes | — | The ID of the payment link to update. | | `paymentLink` | `Square.PaymentLink` | Yes | — | The `payment_link` object describing the updates to apply. For more information, see [Update a payment link](https://developer.squareup.com/docs/checkout-api/manage-checkout#update-a-payment-link). | Use the official [UpdatePaymentLink reference](https://developer.squareup.com/reference/square/checkout-api/update-payment-link) for provider field semantics and limits. ## Output Returns the official `Square.UpdatePaymentLinkResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Update Scheduled Shift Source: https://docs.automate.ax/reference/integrations/square/actions/update-scheduled-shift Updates the draft shift details for a scheduled shift. `square.updateScheduledShift` updates the draft shift details for a scheduled shift. ## Example ```ts automations/square-update-scheduled-shift.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Update Square Scheduled Shift", () => { onDashboardRun({ title: "Update Square Scheduled Shift" }) square.updateScheduledShift({ id: "id", scheduledShift: { draftShiftDetails: { teamMemberId: "ormj0jJJZ5OZIzxrZYJI", locationId: "PAA1RJZZKXBFG", jobId: "FzbJAtt9qEWncK1BWgVCxQ6M", startAt: "2019-03-25T03:11:00-05:00", endAt: "2019-03-25T13:18:00-05:00", notes: "Dont forget to prep the vegetables", isDeleted: false, }, version: 1, }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `TIMECARDS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `id` | `string` | Yes | — | The ID of the scheduled shift to update. | | `scheduledShift` | `Square.ScheduledShift` | Yes | — | The scheduled shift with any updates in the `draft_shift_details` field. If needed, call ListLocations to get location IDs, ListJobs to get job IDs, and SearchTeamMembers to get team member IDs and current job assignments. Updates made to `published_shift_details` are ignored. If provided, the `start_at` and `end_at` timestamps must be in the time zone + offset of the shift location specified in `location_id`. Example for Pacific Standard Time: 2024-10-31T12:30:00-08:00 To enable [optimistic concurrency](https://developer.squareup.com/docs/build-basics/common-api-patterns/optimistic-concurrency) control for the request, provide the current version of the shift in the `version` field. If the provided version doesn't match the server version, the request fails. If `version` is omitted, Square executes a blind write, potentially overwriting data from another publish request. | Use the official [UpdateScheduledShift reference](https://developer.squareup.com/reference/square/labor-api/update-scheduled-shift) for provider field semantics and limits. ## Output Returns the official `Square.UpdateScheduledShiftResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Update Subscription Source: https://docs.automate.ax/reference/integrations/square/actions/update-subscription Updates a subscription by modifying or clearing `subscription` field values. `square.updateSubscription` updates a subscription by modifying or clearing `subscription` field values. ## Example ```ts automations/square-update-subscription.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Update Square Subscription", () => { onDashboardRun({ title: "Update Square Subscription" }) square.updateSubscription({ subscriptionId: "subscription_id", subscription: { cardId: "{NEW CARD ID}", }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_READ` and `INVOICES_WRITE` and `ITEMS_READ` and `ORDERS_WRITE` and `PAYMENTS_WRITE` and `SUBSCRIPTIONS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `subscriptionId` | `string` | Yes | — | The ID of the subscription to update. | | `subscription` | `Square.Subscription` | No | — | The subscription object containing the current version, and fields to update. Unset fields will be left at their current server values, and JSON `null` values will be treated as a request to clear the relevant data. | Use the official [UpdateSubscription reference](https://developer.squareup.com/reference/square/subscriptions-api/update-subscription) for provider field semantics and limits. ## Output Returns the official `Square.UpdateSubscriptionResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Update Team Member Source: https://docs.automate.ax/reference/integrations/square/actions/update-team-member Updates a single `TeamMember` object. `square.updateTeamMember` updates a single `TeamMember` object. ## Example ```ts automations/square-update-team-member.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Update Square Team Member", () => { onDashboardRun({ title: "Update Square Team Member" }) square.updateTeamMember({ teamMemberId: "team_member_id", body: { teamMember: { referenceId: "reference_id_1", status: "ACTIVE", givenName: "Joe", familyName: "Doe", emailAddress: "joe_doe@gmail.com", phoneNumber: "+14159283333", assignedLocations: { assignmentType: "EXPLICIT_LOCATIONS", locationIds: ["YSGH2WBKG94QZ", "GA2Y9HSJ8KRYT"], }, wageSetting: { jobAssignments: [ { payType: "SALARY", annualRate: { amount: BigInt("3000000"), currency: "USD", }, weeklyHours: 40, jobId: "FjS8x95cqHiMenw4f1NAUH4P", }, { payType: "HOURLY", hourlyRate: { amount: BigInt("1200"), currency: "USD", }, jobId: "VDNpRv8da51NU8qZFC5zDWpF", }, ], isOvertimeExempt: true, }, }, }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `EMPLOYEES_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `teamMemberId` | `string` | Yes | — | The ID of the team member to update. | | `body` | `Square.UpdateTeamMemberRequest` | Yes | — | Square `body` request field. | Use the official [UpdateTeamMember reference](https://developer.squareup.com/reference/square/team-api/update-team-member) for provider field semantics and limits. ## Output Returns the official `Square.UpdateTeamMemberResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Update Timecard Source: https://docs.automate.ax/reference/integrations/square/actions/update-timecard Updates an existing `Timecard`. `square.updateTimecard` updates an existing `Timecard`. ## Example ```ts automations/square-update-timecard.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Update Square Timecard", () => { onDashboardRun({ title: "Update Square Timecard" }) square.updateTimecard({ id: "id", timecard: { locationId: "PAA1RJZZKXBFG", startAt: "2019-01-25T03:11:00-05:00", endAt: "2019-01-25T13:11:00-05:00", wage: { title: "Bartender", hourlyRate: { amount: BigInt("1500"), currency: "USD", }, tipEligible: true, }, breaks: [ { id: "X7GAQYVVRRG6P", startAt: "2019-01-25T06:11:00-05:00", endAt: "2019-01-25T06:16:00-05:00", breakTypeId: "REGS1EQR1TPZ5", name: "Tea Break", expectedDuration: "PT5M", isPaid: true, }, ], status: "CLOSED", version: 1, teamMemberId: "ormj0jJJZ5OZIzxrZYJI", declaredCashTipMoney: { amount: BigInt("500"), currency: "USD", }, }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `TIMECARDS_READ` and `TIMECARDS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `id` | `string` | Yes | — | The ID of the object being updated. | | `timecard` | `Square.Timecard` | Yes | — | The updated `Timecard` object. | Use the official [UpdateTimecard reference](https://developer.squareup.com/reference/square/labor-api/update-timecard) for provider field semantics and limits. ## Output Returns the official `Square.UpdateTimecardResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Update Transfer Order Source: https://docs.automate.ax/reference/integrations/square/actions/update-transfer-order Updates an existing transfer order. `square.updateTransferOrder` updates an existing transfer order. ## Example ```ts automations/square-update-transfer-order.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Update Square Transfer Order", () => { onDashboardRun({ title: "Update Square Transfer Order" }) square.updateTransferOrder({ transferOrderId: "transfer_order_id", idempotencyKey: "f47ac10b-58cc-4372-a567-0e02b2c3d479", transferOrder: { sourceLocationId: "EXAMPLE_SOURCE_LOCATION_ID_789", destinationLocationId: "EXAMPLE_DEST_LOCATION_ID_101", expectedAt: "2025-11-10T08:00:00Z", notes: "Updated: Priority transfer due to low stock at destination", trackingNumber: "TRACK987654321", lineItems: [ { uid: "1", quantityOrdered: "7", }, { itemVariationId: "EXAMPLE_NEW_ITEM_VARIATION_ID_003", quantityOrdered: "2", }, { uid: "2", remove: true, }, ], }, version: BigInt("1753109537351"), }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `INVENTORY_READ` and `INVENTORY_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `transferOrderId` | `string` | Yes | — | The ID of the transfer order to update | | `idempotencyKey` | `string` | Yes | — | A unique string that identifies this UpdateTransferOrder request. Keys must contain only alphanumeric characters, dashes and underscores | | `transferOrder` | `Square.UpdateTransferOrderData` | Yes | — | The transfer order updates to apply | | `version` | `bigint` | No | — | Version for optimistic concurrency | Use the official [UpdateTransferOrder reference](https://developer.squareup.com/reference/square/transfer-order-api/update-transfer-order) for provider field semantics and limits. ## Output Returns the official `Square.UpdateTransferOrderResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Update Vendor Source: https://docs.automate.ax/reference/integrations/square/actions/update-vendor Updates an existing [Vendor](entity:Vendor) object as a supplier to a seller. `square.updateVendor` updates an existing [Vendor](entity:Vendor) object as a supplier to a seller. ## Example ```ts automations/square-update-vendor.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Update Square Vendor", () => { onDashboardRun({ title: "Update Square Vendor" }) square.updateVendor({ vendorId: "vendor_id", body: { idempotencyKey: "8fc6a5b0-9fe8-4b46-b46b-2ef95793abbe", vendor: { id: "INV_V_JDKYHBWT1D4F8MFH63DBMEN8Y4", name: "Jack's Chicken Shack", version: 1, status: "ACTIVE", }, }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `VENDOR_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `vendorId` | `string` | Yes | — | ID of the Vendor to retrieve. | | `body` | `Square.UpdateVendorRequest` | Yes | — | Square `body` request field. | Use the official [UpdateVendor reference](https://developer.squareup.com/reference/square/vendors-api/update-vendor) for provider field semantics and limits. ## Output Returns the official `Square.UpdateVendorResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Update Wage Setting Source: https://docs.automate.ax/reference/integrations/square/actions/update-wage-setting Creates or updates a `WageSetting` object. `square.updateWageSetting` creates or updates a `WageSetting` object. ## Example ```ts automations/square-update-wage-setting.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Update Square Wage Setting", () => { onDashboardRun({ title: "Update Square Wage Setting" }) square.updateWageSetting({ teamMemberId: "team_member_id", wageSetting: { jobAssignments: [ { jobTitle: "Manager", payType: "SALARY", annualRate: { amount: BigInt("3000000"), currency: "USD", }, weeklyHours: 40, }, { jobTitle: "Cashier", payType: "HOURLY", hourlyRate: { amount: BigInt("2000"), currency: "USD", }, }, ], isOvertimeExempt: true, }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `EMPLOYEES_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `teamMemberId` | `string` | Yes | — | The ID of the team member for which to update the `WageSetting` object. | | `wageSetting` | `Square.WageSetting` | Yes | — | The complete `WageSetting` object. For all job assignments, specify one of the following: - `job_id` (recommended) - If needed, call ListJobs to get a list of all jobs. Requires Square API version 2024-12-18 or later. - `job_title` - Use the exact, case-sensitive spelling of an existing title unless you want to create a new job. This value is ignored if `job_id` is also provided. | Use the official [UpdateWageSetting reference](https://developer.squareup.com/reference/square/team-api/update-wage-setting) for provider field semantics and limits. ## Output Returns the official `Square.UpdateWageSettingResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Update Workweek Config Source: https://docs.automate.ax/reference/integrations/square/actions/update-workweek-config Updates a `WorkweekConfig`. `square.updateWorkweekConfig` updates a `WorkweekConfig`. ## Example ```ts automations/square-update-workweek-config.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Update Square Workweek Config", () => { onDashboardRun({ title: "Update Square Workweek Config" }) square.updateWorkweekConfig({ id: "id", workweekConfig: { startOfWeek: "MON", startOfDayLocalTime: "10:00", version: 10, }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `TIMECARDS_SETTINGS_READ` and `TIMECARDS_SETTINGS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `id` | `string` | Yes | — | The UUID for the `WorkweekConfig` object being updated. | | `workweekConfig` | `Square.WorkweekConfig` | Yes | — | The updated `WorkweekConfig` object. | Use the official [UpdateWorkweekConfig reference](https://developer.squareup.com/reference/square/labor-api/update-workweek-config) for provider field semantics and limits. ## Output Returns the official `Square.UpdateWorkweekConfigResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Upsert Booking Custom Attribute Source: https://docs.automate.ax/reference/integrations/square/actions/upsert-booking-custom-attribute Upserts a bookings custom attribute. `square.upsertBookingCustomAttribute` upserts a bookings custom attribute. ## Example ```ts automations/square-upsert-booking-custom-attribute.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Upsert Square Booking Custom Attribute", () => { onDashboardRun({ title: "Upsert Square Booking Custom Attribute" }) square.upsertBookingCustomAttribute({ bookingId: "booking_id", key: "key", customAttribute: {}, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `APPOINTMENTS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `bookingId` | `string` | Yes | — | The ID of the target booking. | | `key` | `string` | Yes | — | The key of the custom attribute to create or update. This key must match the `key` of a custom attribute definition in the Square seller account. If the requesting application is not the definition owner, you must use the qualified key. | | `customAttribute` | `Square.CustomAttribute` | Yes | — | The custom attribute to create or update, with the following fields: - `value`. This value must conform to the `schema` specified by the definition. For more information, see [Value data types](https://developer.squareup.com/docs/booking-custom-attributes-api/custom-attributes#value-data-types). - `version`. To enable [optimistic concurrency](https://developer.squareup.com/docs/build-basics/common-api-patterns/optimistic-concurrency) control for an update operation, include this optional field and specify the current version of the custom attribute. | | `idempotencyKey` | `string \| null` | No | — | A unique identifier for this request, used to ensure idempotency. For more information, see [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency). | Use the official [UpsertBookingCustomAttribute reference](https://developer.squareup.com/reference/square/booking-custom-attributes-api/upsert-booking-custom-attribute) for provider field semantics and limits. ## Output Returns the official `Square.UpsertBookingCustomAttributeResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Upsert Catalog Object Source: https://docs.automate.ax/reference/integrations/square/actions/upsert-catalog-object Creates a new or updates the specified [CatalogObject](entity:CatalogObject). `square.upsertCatalogObject` creates a new or updates the specified [CatalogObject](entity:CatalogObject). ## Example ```ts automations/square-upsert-catalog-object.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Upsert Square Catalog Object", () => { onDashboardRun({ title: "Upsert Square Catalog Object" }) square.upsertCatalogObject({ idempotencyKey: "af3d1afc-7212-4300-b463-0bfc5314a5ae", object: { type: "ITEM", id: "id", }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ITEMS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `idempotencyKey` | `string` | Yes | — | A value you specify that uniquely identifies this request among all your requests. A common way to create a valid idempotency key is to use a Universally unique identifier (UUID). If you're unsure whether a particular request was successful, you can reattempt it with the same idempotency key without worrying about creating duplicate objects. See [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency) for more information. | | `object` | `Square.CatalogObject` | Yes | — | A CatalogObject to be created or updated. - For updates, the object must be active (the `is_deleted` field is not `true`). - For creates, the object ID must start with `#`. The provided ID is replaced with a server-generated ID. | Use the official [UpsertCatalogObject reference](https://developer.squareup.com/reference/square/catalog-api/upsert-catalog-object) for provider field semantics and limits. ## Output Returns the official `Square.UpsertCatalogObjectResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Upsert Customer Custom Attribute Source: https://docs.automate.ax/reference/integrations/square/actions/upsert-customer-custom-attribute Creates or updates a [custom attribute](entity:CustomAttribute) for a customer profile. `square.upsertCustomerCustomAttribute` creates or updates a [custom attribute](entity:CustomAttribute) for a customer profile. ## Example ```ts automations/square-upsert-customer-custom-attribute.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Upsert Square Customer Custom Attribute", () => { onDashboardRun({ title: "Upsert Square Customer Custom Attribute" }) square.upsertCustomerCustomAttribute({ customerId: "customer_id", key: "key", customAttribute: { value: "Dune", }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `CUSTOMERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `customerId` | `string` | Yes | — | The ID of the target customer profile. | | `key` | `string` | Yes | — | The key of the custom attribute to create or update. This key must match the `key` of a custom attribute definition in the Square seller account. If the requesting application is not the definition owner, you must use the qualified key. | | `customAttribute` | `Square.CustomAttribute` | Yes | — | The custom attribute to create or update, with the following fields: - `value`. This value must conform to the `schema` specified by the definition. For more information, see [Value data types](https://developer.squareup.com/docs/customer-custom-attributes-api/custom-attributes#value-data-types). - `version`. To enable [optimistic concurrency](https://developer.squareup.com/docs/build-basics/common-api-patterns/optimistic-concurrency) control for an update operation, include this optional field and specify the current version of the custom attribute. | | `idempotencyKey` | `string \| null` | No | — | A unique identifier for this request, used to ensure idempotency. For more information, see [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency). | Use the official [UpsertCustomerCustomAttribute reference](https://developer.squareup.com/reference/square/customer-custom-attributes-api/upsert-customer-custom-attribute) for provider field semantics and limits. ## Output Returns the official `Square.UpsertCustomerCustomAttributeResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Upsert Location Custom Attribute Source: https://docs.automate.ax/reference/integrations/square/actions/upsert-location-custom-attribute Creates or updates a [custom attribute](entity:CustomAttribute) for a location. `square.upsertLocationCustomAttribute` creates or updates a [custom attribute](entity:CustomAttribute) for a location. ## Example ```ts automations/square-upsert-location-custom-attribute.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Upsert Square Location Custom Attribute", () => { onDashboardRun({ title: "Upsert Square Location Custom Attribute" }) square.upsertLocationCustomAttribute({ locationId: "location_id", key: "key", customAttribute: { value: "hot cocoa", }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `MERCHANT_PROFILE_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `locationId` | `string` | Yes | — | The ID of the target location. | | `key` | `string` | Yes | — | The key of the custom attribute to create or update. This key must match the `key` of a custom attribute definition in the Square seller account. If the requesting application is not the definition owner, you must use the qualified key. | | `customAttribute` | `Square.CustomAttribute` | Yes | — | The custom attribute to create or update, with the following fields: - `value`. This value must conform to the `schema` specified by the definition. For more information, see [Supported data types](https://developer.squareup.com/docs/devtools/customattributes/overview#supported-data-types). - `version`. To enable [optimistic concurrency](https://developer.squareup.com/docs/build-basics/common-api-patterns/optimistic-concurrency) control for an update operation, include the current version of the custom attribute. If this is not important for your application, version can be set to -1. | | `idempotencyKey` | `string \| null` | No | — | A unique identifier for this request, used to ensure idempotency. For more information, see [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency). | Use the official [UpsertLocationCustomAttribute reference](https://developer.squareup.com/reference/square/location-custom-attributes-api/upsert-location-custom-attribute) for provider field semantics and limits. ## Output Returns the official `Square.UpsertLocationCustomAttributeResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Upsert Merchant Custom Attribute Source: https://docs.automate.ax/reference/integrations/square/actions/upsert-merchant-custom-attribute Creates or updates a [custom attribute](entity:CustomAttribute) for a merchant. `square.upsertMerchantCustomAttribute` creates or updates a [custom attribute](entity:CustomAttribute) for a merchant. ## Example ```ts automations/square-upsert-merchant-custom-attribute.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Upsert Square Merchant Custom Attribute", () => { onDashboardRun({ title: "Upsert Square Merchant Custom Attribute" }) square.upsertMerchantCustomAttribute({ merchantId: "merchant_id", key: "key", customAttribute: { value: "Ultimate Sneaker Store", }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `MERCHANT_PROFILE_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `merchantId` | `string` | Yes | — | The ID of the target merchant. | | `key` | `string` | Yes | — | The key of the custom attribute to create or update. This key must match the `key` of a custom attribute definition in the Square seller account. If the requesting application is not the definition owner, you must use the qualified key. | | `customAttribute` | `Square.CustomAttribute` | Yes | — | The custom attribute to create or update, with the following fields: - `value`. This value must conform to the `schema` specified by the definition. For more information, see [Supported data types](https://developer.squareup.com/docs/devtools/customattributes/overview#supported-data-types). - The version field must match the current version of the custom attribute definition to enable [optimistic concurrency](https://developer.squareup.com/docs/build-basics/common-api-patterns/optimistic-concurrency) If this is not important for your application, version can be set to -1. For any other values, the request fails with a BAD\_REQUEST error. | | `idempotencyKey` | `string \| null` | No | — | A unique identifier for this request, used to ensure idempotency. For more information, see [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency). | Use the official [UpsertMerchantCustomAttribute reference](https://developer.squareup.com/reference/square/merchant-custom-attributes-api/upsert-merchant-custom-attribute) for provider field semantics and limits. ## Output Returns the official `Square.UpsertMerchantCustomAttributeResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Upsert Order Custom Attribute Source: https://docs.automate.ax/reference/integrations/square/actions/upsert-order-custom-attribute Creates or updates a [custom attribute](entity:CustomAttribute) for an order. `square.upsertOrderCustomAttribute` creates or updates a [custom attribute](entity:CustomAttribute) for an order. ## Example ```ts automations/square-upsert-order-custom-attribute.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Upsert Square Order Custom Attribute", () => { onDashboardRun({ title: "Upsert Square Order Custom Attribute" }) square.upsertOrderCustomAttribute({ orderId: "order_id", customAttributeKey: "custom_attribute_key", customAttribute: { key: "table-number", value: "42", version: 1, }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ORDERS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `orderId` | `string` | Yes | — | The ID of the target order. | | `customAttributeKey` | `string` | Yes | — | The key of the custom attribute to create or update. This key must match the key of an existing custom attribute definition. | | `customAttribute` | `Square.CustomAttribute` | Yes | — | The custom attribute to create or update, with the following fields: - `value`. This value must conform to the `schema` specified by the definition. For more information, see [Value data types](https://developer.squareup.com/docs/customer-custom-attributes-api/custom-attributes#value-data-types). - `version`. To enable [optimistic concurrency](https://developer.squareup.com/docs/build-basics/common-api-patterns/optimistic-concurrency) control, include this optional field and specify the current version of the custom attribute. | | `idempotencyKey` | `string \| null` | No | — | A unique identifier for this request, used to ensure idempotency. For more information, see [Idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency). | Use the official [UpsertOrderCustomAttribute reference](https://developer.squareup.com/reference/square/order-custom-attributes-api/upsert-order-custom-attribute) for provider field semantics and limits. ## Output Returns the official `Square.UpsertOrderCustomAttributeResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Upsert Snippet Source: https://docs.automate.ax/reference/integrations/square/actions/upsert-snippet Adds a snippet to a Square Online site or updates the existing snippet on the site. `square.upsertSnippet` adds a snippet to a Square Online site or updates the existing snippet on the site. ## Example ```ts automations/square-upsert-snippet.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { square } from "automate.ax/square" export default automation("Upsert Square Snippet", () => { onDashboardRun({ title: "Upsert Square Snippet" }) square.upsertSnippet({ siteId: "site_id", snippet: { content: "", }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires `ONLINE_STORE_SNIPPETS_WRITE`. | Field | Type | Required | Default | Description | | - | - | - | - | - | | `siteId` | `string` | Yes | — | The ID of the site where you want to add or update the snippet. | | `snippet` | `Square.Snippet` | Yes | — | The snippet for the site. | Use the official [UpsertSnippet reference](https://developer.squareup.com/reference/square/snippets-api/upsert-snippet) for provider field semantics and limits. ## Output Returns the official `Square.UpsertSnippetResponse` response as a codec-safe object. Square integer money amounts remain `bigint` values. # Square Source: https://docs.automate.ax/reference/integrations/square/index Automate Square payments, orders, customers, inventory, bookings, reporting, and seller events. Connect a Square seller with OAuth to use every current server API operation and webhook event supported by Square's 2026-09-16 API version. ## Connect Open **Connected accounts**, choose **Square**, and approve the permissions required by your automation. Automate.ax refreshes the grant asynchronously and validates Square webhook signatures before delivery. ## Use Square Import the provider surface from `automate.ax/square`: ```ts theme={null} import { square } from "automate.ax/square" ``` Actions use the official Square TypeScript SDK request and response types. Webhook triggers expose the official event payload type and accept an optional `account` binding. ## Triggers * [On event](/reference/integrations/square/triggers/on-event) * [On Bank Account Created](/reference/integrations/square/triggers/on-bank-account-created) * [On Bank Account Disabled](/reference/integrations/square/triggers/on-bank-account-disabled) * [On Bank Account Verified](/reference/integrations/square/triggers/on-bank-account-verified) * [On Booking Created](/reference/integrations/square/triggers/on-booking-created) * [On Booking Custom Attribute Definition Owned Created](/reference/integrations/square/triggers/on-booking-custom-attribute-definition-owned-created) * [On Booking Custom Attribute Definition Owned Deleted](/reference/integrations/square/triggers/on-booking-custom-attribute-definition-owned-deleted) * [On Booking Custom Attribute Definition Owned Updated](/reference/integrations/square/triggers/on-booking-custom-attribute-definition-owned-updated) * [On Booking Custom Attribute Definition Visible Created](/reference/integrations/square/triggers/on-booking-custom-attribute-definition-visible-created) * [On Booking Custom Attribute Definition Visible Deleted](/reference/integrations/square/triggers/on-booking-custom-attribute-definition-visible-deleted) * [On Booking Custom Attribute Definition Visible Updated](/reference/integrations/square/triggers/on-booking-custom-attribute-definition-visible-updated) * [On Booking Custom Attribute Owned Deleted](/reference/integrations/square/triggers/on-booking-custom-attribute-owned-deleted) * [On Booking Custom Attribute Owned Updated](/reference/integrations/square/triggers/on-booking-custom-attribute-owned-updated) * [On Booking Custom Attribute Visible Deleted](/reference/integrations/square/triggers/on-booking-custom-attribute-visible-deleted) * [On Booking Custom Attribute Visible Updated](/reference/integrations/square/triggers/on-booking-custom-attribute-visible-updated) * [On Booking Updated](/reference/integrations/square/triggers/on-booking-updated) * [On Card Automatically Updated](/reference/integrations/square/triggers/on-card-automatically-updated) * [On Card Created](/reference/integrations/square/triggers/on-card-created) * [On Card Disabled](/reference/integrations/square/triggers/on-card-disabled) * [On Card Forgotten](/reference/integrations/square/triggers/on-card-forgotten) * [On Card Updated](/reference/integrations/square/triggers/on-card-updated) * [On Catalog Version Updated](/reference/integrations/square/triggers/on-catalog-version-updated) * [On Customer Created](/reference/integrations/square/triggers/on-customer-created) * [On Customer Custom Attribute Definition Owned Created](/reference/integrations/square/triggers/on-customer-custom-attribute-definition-owned-created) * [On Customer Custom Attribute Definition Owned Deleted](/reference/integrations/square/triggers/on-customer-custom-attribute-definition-owned-deleted) * [On Customer Custom Attribute Definition Owned Updated](/reference/integrations/square/triggers/on-customer-custom-attribute-definition-owned-updated) * [On Customer Custom Attribute Definition Visible Created](/reference/integrations/square/triggers/on-customer-custom-attribute-definition-visible-created) * [On Customer Custom Attribute Definition Visible Deleted](/reference/integrations/square/triggers/on-customer-custom-attribute-definition-visible-deleted) * [On Customer Custom Attribute Definition Visible Updated](/reference/integrations/square/triggers/on-customer-custom-attribute-definition-visible-updated) * [On Customer Custom Attribute Owned Deleted](/reference/integrations/square/triggers/on-customer-custom-attribute-owned-deleted) * [On Customer Custom Attribute Owned Updated](/reference/integrations/square/triggers/on-customer-custom-attribute-owned-updated) * [On Customer Custom Attribute Visible Deleted](/reference/integrations/square/triggers/on-customer-custom-attribute-visible-deleted) * [On Customer Custom Attribute Visible Updated](/reference/integrations/square/triggers/on-customer-custom-attribute-visible-updated) * [On Customer Deleted](/reference/integrations/square/triggers/on-customer-deleted) * [On Customer Updated](/reference/integrations/square/triggers/on-customer-updated) * [On Device Code Paired](/reference/integrations/square/triggers/on-device-code-paired) * [On Device Created](/reference/integrations/square/triggers/on-device-created) * [On Dispute Created](/reference/integrations/square/triggers/on-dispute-created) * [On Dispute Evidence Created](/reference/integrations/square/triggers/on-dispute-evidence-created) * [On Dispute Evidence Deleted](/reference/integrations/square/triggers/on-dispute-evidence-deleted) * [On Dispute State Updated](/reference/integrations/square/triggers/on-dispute-state-updated) * [On Gift Card Activity Created](/reference/integrations/square/triggers/on-gift-card-activity-created) * [On Gift Card Activity Updated](/reference/integrations/square/triggers/on-gift-card-activity-updated) * [On Gift Card Created](/reference/integrations/square/triggers/on-gift-card-created) * [On Gift Card Customer Linked](/reference/integrations/square/triggers/on-gift-card-customer-linked) * [On Gift Card Customer Unlinked](/reference/integrations/square/triggers/on-gift-card-customer-unlinked) * [On Gift Card Updated](/reference/integrations/square/triggers/on-gift-card-updated) * [On Inventory Count Updated](/reference/integrations/square/triggers/on-inventory-count-updated) * [On Invoice Canceled](/reference/integrations/square/triggers/on-invoice-canceled) * [On Invoice Created](/reference/integrations/square/triggers/on-invoice-created) * [On Invoice Deleted](/reference/integrations/square/triggers/on-invoice-deleted) * [On Invoice Payment Made](/reference/integrations/square/triggers/on-invoice-payment-made) * [On Invoice Published](/reference/integrations/square/triggers/on-invoice-published) * [On Invoice Refunded](/reference/integrations/square/triggers/on-invoice-refunded) * [On Invoice Scheduled Charge Failed](/reference/integrations/square/triggers/on-invoice-scheduled-charge-failed) * [On Invoice Updated](/reference/integrations/square/triggers/on-invoice-updated) * [On Job Created](/reference/integrations/square/triggers/on-job-created) * [On Job Updated](/reference/integrations/square/triggers/on-job-updated) * [On Labor Scheduled Shift Created](/reference/integrations/square/triggers/on-labor-scheduled-shift-created) * [On Labor Scheduled Shift Deleted](/reference/integrations/square/triggers/on-labor-scheduled-shift-deleted) * [On Labor Scheduled Shift Published](/reference/integrations/square/triggers/on-labor-scheduled-shift-published) * [On Labor Scheduled Shift Updated](/reference/integrations/square/triggers/on-labor-scheduled-shift-updated) * [On Labor Timecard Created](/reference/integrations/square/triggers/on-labor-timecard-created) * [On Labor Timecard Deleted](/reference/integrations/square/triggers/on-labor-timecard-deleted) * [On Labor Timecard Updated](/reference/integrations/square/triggers/on-labor-timecard-updated) * [On Location Created](/reference/integrations/square/triggers/on-location-created) * [On Location Custom Attribute Definition Owned Created](/reference/integrations/square/triggers/on-location-custom-attribute-definition-owned-created) * [On Location Custom Attribute Definition Owned Deleted](/reference/integrations/square/triggers/on-location-custom-attribute-definition-owned-deleted) * [On Location Custom Attribute Definition Owned Updated](/reference/integrations/square/triggers/on-location-custom-attribute-definition-owned-updated) * [On Location Custom Attribute Definition Visible Created](/reference/integrations/square/triggers/on-location-custom-attribute-definition-visible-created) * [On Location Custom Attribute Definition Visible Deleted](/reference/integrations/square/triggers/on-location-custom-attribute-definition-visible-deleted) * [On Location Custom Attribute Definition Visible Updated](/reference/integrations/square/triggers/on-location-custom-attribute-definition-visible-updated) * [On Location Custom Attribute Owned Deleted](/reference/integrations/square/triggers/on-location-custom-attribute-owned-deleted) * [On Location Custom Attribute Owned Updated](/reference/integrations/square/triggers/on-location-custom-attribute-owned-updated) * [On Location Custom Attribute Visible Deleted](/reference/integrations/square/triggers/on-location-custom-attribute-visible-deleted) * [On Location Custom Attribute Visible Updated](/reference/integrations/square/triggers/on-location-custom-attribute-visible-updated) * [On Location Updated](/reference/integrations/square/triggers/on-location-updated) * [On Loyalty Account Created](/reference/integrations/square/triggers/on-loyalty-account-created) * [On Loyalty Account Deleted](/reference/integrations/square/triggers/on-loyalty-account-deleted) * [On Loyalty Account Updated](/reference/integrations/square/triggers/on-loyalty-account-updated) * [On Loyalty Event Created](/reference/integrations/square/triggers/on-loyalty-event-created) * [On Loyalty Program Created](/reference/integrations/square/triggers/on-loyalty-program-created) * [On Loyalty Program Updated](/reference/integrations/square/triggers/on-loyalty-program-updated) * [On Loyalty Promotion Created](/reference/integrations/square/triggers/on-loyalty-promotion-created) * [On Loyalty Promotion Updated](/reference/integrations/square/triggers/on-loyalty-promotion-updated) * [On Merchant Custom Attribute Definition Owned Created](/reference/integrations/square/triggers/on-merchant-custom-attribute-definition-owned-created) * [On Merchant Custom Attribute Definition Owned Deleted](/reference/integrations/square/triggers/on-merchant-custom-attribute-definition-owned-deleted) * [On Merchant Custom Attribute Definition Owned Updated](/reference/integrations/square/triggers/on-merchant-custom-attribute-definition-owned-updated) * [On Merchant Custom Attribute Definition Visible Created](/reference/integrations/square/triggers/on-merchant-custom-attribute-definition-visible-created) * [On Merchant Custom Attribute Definition Visible Deleted](/reference/integrations/square/triggers/on-merchant-custom-attribute-definition-visible-deleted) * [On Merchant Custom Attribute Definition Visible Updated](/reference/integrations/square/triggers/on-merchant-custom-attribute-definition-visible-updated) * [On Merchant Custom Attribute Owned Deleted](/reference/integrations/square/triggers/on-merchant-custom-attribute-owned-deleted) * [On Merchant Custom Attribute Owned Updated](/reference/integrations/square/triggers/on-merchant-custom-attribute-owned-updated) * [On Merchant Custom Attribute Visible Deleted](/reference/integrations/square/triggers/on-merchant-custom-attribute-visible-deleted) * [On Merchant Custom Attribute Visible Updated](/reference/integrations/square/triggers/on-merchant-custom-attribute-visible-updated) * [On Oauth Authorization Revoked](/reference/integrations/square/triggers/on-oauth-authorization-revoked) * [On Online Checkout Location Settings Updated](/reference/integrations/square/triggers/on-online-checkout-location-settings-updated) * [On Online Checkout Merchant Settings Updated](/reference/integrations/square/triggers/on-online-checkout-merchant-settings-updated) * [On Order Created](/reference/integrations/square/triggers/on-order-created) * [On Order Custom Attribute Definition Owned Created](/reference/integrations/square/triggers/on-order-custom-attribute-definition-owned-created) * [On Order Custom Attribute Definition Owned Deleted](/reference/integrations/square/triggers/on-order-custom-attribute-definition-owned-deleted) * [On Order Custom Attribute Definition Owned Updated](/reference/integrations/square/triggers/on-order-custom-attribute-definition-owned-updated) * [On Order Custom Attribute Definition Visible Created](/reference/integrations/square/triggers/on-order-custom-attribute-definition-visible-created) * [On Order Custom Attribute Definition Visible Deleted](/reference/integrations/square/triggers/on-order-custom-attribute-definition-visible-deleted) * [On Order Custom Attribute Definition Visible Updated](/reference/integrations/square/triggers/on-order-custom-attribute-definition-visible-updated) * [On Order Custom Attribute Owned Deleted](/reference/integrations/square/triggers/on-order-custom-attribute-owned-deleted) * [On Order Custom Attribute Owned Updated](/reference/integrations/square/triggers/on-order-custom-attribute-owned-updated) * [On Order Custom Attribute Visible Deleted](/reference/integrations/square/triggers/on-order-custom-attribute-visible-deleted) * [On Order Custom Attribute Visible Updated](/reference/integrations/square/triggers/on-order-custom-attribute-visible-updated) * [On Order Fulfillment Updated](/reference/integrations/square/triggers/on-order-fulfillment-updated) * [On Order Updated](/reference/integrations/square/triggers/on-order-updated) * [On Payment Created](/reference/integrations/square/triggers/on-payment-created) * [On Payment Updated](/reference/integrations/square/triggers/on-payment-updated) * [On Payout Failed](/reference/integrations/square/triggers/on-payout-failed) * [On Payout Paid](/reference/integrations/square/triggers/on-payout-paid) * [On Payout Sent](/reference/integrations/square/triggers/on-payout-sent) * [On Refund Created](/reference/integrations/square/triggers/on-refund-created) * [On Refund Updated](/reference/integrations/square/triggers/on-refund-updated) * [On Subscription Created](/reference/integrations/square/triggers/on-subscription-created) * [On Subscription Updated](/reference/integrations/square/triggers/on-subscription-updated) * [On Team Member Created](/reference/integrations/square/triggers/on-team-member-created) * [On Team Member Updated](/reference/integrations/square/triggers/on-team-member-updated) * [On Team Member Wage Setting Updated](/reference/integrations/square/triggers/on-team-member-wage-setting-updated) * [On Terminal Action Created](/reference/integrations/square/triggers/on-terminal-action-created) * [On Terminal Action Updated](/reference/integrations/square/triggers/on-terminal-action-updated) * [On Terminal Checkout Created](/reference/integrations/square/triggers/on-terminal-checkout-created) * [On Terminal Checkout Updated](/reference/integrations/square/triggers/on-terminal-checkout-updated) * [On Terminal Refund Created](/reference/integrations/square/triggers/on-terminal-refund-created) * [On Terminal Refund Updated](/reference/integrations/square/triggers/on-terminal-refund-updated) * [On Transfer Order Created](/reference/integrations/square/triggers/on-transfer-order-created) * [On Transfer Order Deleted](/reference/integrations/square/triggers/on-transfer-order-deleted) * [On Transfer Order Updated](/reference/integrations/square/triggers/on-transfer-order-updated) * [On Vendor Created](/reference/integrations/square/triggers/on-vendor-created) * [On Vendor Updated](/reference/integrations/square/triggers/on-vendor-updated) ## Actions ### Disputes * [Accept Dispute](/reference/integrations/square/actions/accept-dispute) * [Create Dispute Evidence File](/reference/integrations/square/actions/create-dispute-evidence-file) * [Create Dispute Evidence Text](/reference/integrations/square/actions/create-dispute-evidence-text) * [Delete Dispute Evidence](/reference/integrations/square/actions/delete-dispute-evidence) * [List Dispute Evidence](/reference/integrations/square/actions/list-dispute-evidence) * [List Disputes](/reference/integrations/square/actions/list-disputes) * [Retrieve Dispute](/reference/integrations/square/actions/retrieve-dispute) * [Retrieve Dispute Evidence](/reference/integrations/square/actions/retrieve-dispute-evidence) * [Submit Evidence](/reference/integrations/square/actions/submit-evidence) ### Loyalty * [Accumulate Loyalty Points](/reference/integrations/square/actions/accumulate-loyalty-points) * [Adjust Loyalty Points](/reference/integrations/square/actions/adjust-loyalty-points) * [Calculate Loyalty Points](/reference/integrations/square/actions/calculate-loyalty-points) * [Cancel Loyalty Promotion](/reference/integrations/square/actions/cancel-loyalty-promotion) * [Create Loyalty Account](/reference/integrations/square/actions/create-loyalty-account) * [Create Loyalty Promotion](/reference/integrations/square/actions/create-loyalty-promotion) * [Create Loyalty Reward](/reference/integrations/square/actions/create-loyalty-reward) * [Delete Loyalty Reward](/reference/integrations/square/actions/delete-loyalty-reward) * [List Loyalty Promotions](/reference/integrations/square/actions/list-loyalty-promotions) * [Redeem Loyalty Reward](/reference/integrations/square/actions/redeem-loyalty-reward) * [Retrieve Loyalty Account](/reference/integrations/square/actions/retrieve-loyalty-account) * [Retrieve Loyalty Program](/reference/integrations/square/actions/retrieve-loyalty-program) * [Retrieve Loyalty Promotion](/reference/integrations/square/actions/retrieve-loyalty-promotion) * [Retrieve Loyalty Reward](/reference/integrations/square/actions/retrieve-loyalty-reward) * [Search Loyalty Accounts](/reference/integrations/square/actions/search-loyalty-accounts) * [Search Loyalty Events](/reference/integrations/square/actions/search-loyalty-events) * [Search Loyalty Rewards](/reference/integrations/square/actions/search-loyalty-rewards) ### Customers * [Add Group To Customer](/reference/integrations/square/actions/add-group-to-customer) * [Bulk Create Customers](/reference/integrations/square/actions/bulk-create-customers) * [Bulk Delete Customers](/reference/integrations/square/actions/bulk-delete-customers) * [Bulk Retrieve Customers](/reference/integrations/square/actions/bulk-retrieve-customers) * [Bulk Update Customers](/reference/integrations/square/actions/bulk-update-customers) * [Create Customer](/reference/integrations/square/actions/create-customer) * [Delete Customer](/reference/integrations/square/actions/delete-customer) * [List Customers](/reference/integrations/square/actions/list-customers) * [Remove Group From Customer](/reference/integrations/square/actions/remove-group-from-customer) * [Retrieve Customer](/reference/integrations/square/actions/retrieve-customer) * [Search Customers](/reference/integrations/square/actions/search-customers) * [Update Customer](/reference/integrations/square/actions/update-customer) ### Inventory * [Batch Change Inventory](/reference/integrations/square/actions/batch-change-inventory) * [Batch Retrieve Inventory Changes](/reference/integrations/square/actions/batch-retrieve-inventory-changes) * [Batch Retrieve Inventory Counts](/reference/integrations/square/actions/batch-retrieve-inventory-counts) * [Create Inventory Adjustment Reason](/reference/integrations/square/actions/create-inventory-adjustment-reason) * [Delete Inventory Adjustment Reason](/reference/integrations/square/actions/delete-inventory-adjustment-reason) * [List Inventory Adjustment Reasons](/reference/integrations/square/actions/list-inventory-adjustment-reasons) * [Restore Inventory Adjustment Reason](/reference/integrations/square/actions/restore-inventory-adjustment-reason) * [Retrieve Inventory Adjustment](/reference/integrations/square/actions/retrieve-inventory-adjustment) * [Retrieve Inventory Adjustment Reason](/reference/integrations/square/actions/retrieve-inventory-adjustment-reason) * [Retrieve Inventory Count](/reference/integrations/square/actions/retrieve-inventory-count) * [Retrieve Inventory Physical Count](/reference/integrations/square/actions/retrieve-inventory-physical-count) * [Update Inventory Adjustment](/reference/integrations/square/actions/update-inventory-adjustment) * [Update Inventory Adjustment Reason](/reference/integrations/square/actions/update-inventory-adjustment-reason) ### Catalog * [Batch Delete Catalog Objects](/reference/integrations/square/actions/batch-delete-catalog-objects) * [Batch Retrieve Catalog Objects](/reference/integrations/square/actions/batch-retrieve-catalog-objects) * [Batch Upsert Catalog Objects](/reference/integrations/square/actions/batch-upsert-catalog-objects) * [Catalog Info](/reference/integrations/square/actions/catalog-info) * [Create Catalog Image](/reference/integrations/square/actions/create-catalog-image) * [Delete Catalog Object](/reference/integrations/square/actions/delete-catalog-object) * [List Catalog](/reference/integrations/square/actions/list-catalog) * [Retrieve Catalog Object](/reference/integrations/square/actions/retrieve-catalog-object) * [Search Catalog Items](/reference/integrations/square/actions/search-catalog-items) * [Search Catalog Objects](/reference/integrations/square/actions/search-catalog-objects) * [Update Catalog Image](/reference/integrations/square/actions/update-catalog-image) * [Update Item Modifier Lists](/reference/integrations/square/actions/update-item-modifier-lists) * [Update Item Taxes](/reference/integrations/square/actions/update-item-taxes) * [Upsert Catalog Object](/reference/integrations/square/actions/upsert-catalog-object) ### Orders * [Batch Retrieve Orders](/reference/integrations/square/actions/batch-retrieve-orders) * [Calculate Order](/reference/integrations/square/actions/calculate-order) * [Clone Order](/reference/integrations/square/actions/clone-order) * [Create Order](/reference/integrations/square/actions/create-order) * [Pay Order](/reference/integrations/square/actions/pay-order) * [Retrieve Order](/reference/integrations/square/actions/retrieve-order) * [Search Orders](/reference/integrations/square/actions/search-orders) * [Update Order](/reference/integrations/square/actions/update-order) ### Team * [Bulk Create Team Members](/reference/integrations/square/actions/bulk-create-team-members) * [Bulk Update Team Members](/reference/integrations/square/actions/bulk-update-team-members) * [Create Job](/reference/integrations/square/actions/create-job) * [Create Team Member](/reference/integrations/square/actions/create-team-member) * [List Jobs](/reference/integrations/square/actions/list-jobs) * [Retrieve Job](/reference/integrations/square/actions/retrieve-job) * [Retrieve Team Member](/reference/integrations/square/actions/retrieve-team-member) * [Retrieve Wage Setting](/reference/integrations/square/actions/retrieve-wage-setting) * [Search Team Members](/reference/integrations/square/actions/search-team-members) * [Update Job](/reference/integrations/square/actions/update-job) * [Update Team Member](/reference/integrations/square/actions/update-team-member) * [Update Wage Setting](/reference/integrations/square/actions/update-wage-setting) ### Vendors * [Bulk Create Vendors](/reference/integrations/square/actions/bulk-create-vendors) * [Bulk Retrieve Vendors](/reference/integrations/square/actions/bulk-retrieve-vendors) * [Bulk Update Vendors](/reference/integrations/square/actions/bulk-update-vendors) * [Create Vendor](/reference/integrations/square/actions/create-vendor) * [Retrieve Vendor](/reference/integrations/square/actions/retrieve-vendor) * [Search Vendors](/reference/integrations/square/actions/search-vendors) * [Update Vendor](/reference/integrations/square/actions/update-vendor) ### BookingCustomAttributes * [Bulk Delete Booking Custom Attributes](/reference/integrations/square/actions/bulk-delete-booking-custom-attributes) * [Bulk Upsert Booking Custom Attributes](/reference/integrations/square/actions/bulk-upsert-booking-custom-attributes) * [Create Booking Custom Attribute Definition](/reference/integrations/square/actions/create-booking-custom-attribute-definition) * [Delete Booking Custom Attribute](/reference/integrations/square/actions/delete-booking-custom-attribute) * [Delete Booking Custom Attribute Definition](/reference/integrations/square/actions/delete-booking-custom-attribute-definition) * [List Booking Custom Attribute Definitions](/reference/integrations/square/actions/list-booking-custom-attribute-definitions) * [List Booking Custom Attributes](/reference/integrations/square/actions/list-booking-custom-attributes) * [Retrieve Booking Custom Attribute](/reference/integrations/square/actions/retrieve-booking-custom-attribute) * [Retrieve Booking Custom Attribute Definition](/reference/integrations/square/actions/retrieve-booking-custom-attribute-definition) * [Update Booking Custom Attribute Definition](/reference/integrations/square/actions/update-booking-custom-attribute-definition) * [Upsert Booking Custom Attribute](/reference/integrations/square/actions/upsert-booking-custom-attribute) ### LocationCustomAttributes * [Bulk Delete Location Custom Attributes](/reference/integrations/square/actions/bulk-delete-location-custom-attributes) * [Bulk Upsert Location Custom Attributes](/reference/integrations/square/actions/bulk-upsert-location-custom-attributes) * [Create Location Custom Attribute Definition](/reference/integrations/square/actions/create-location-custom-attribute-definition) * [Delete Location Custom Attribute](/reference/integrations/square/actions/delete-location-custom-attribute) * [Delete Location Custom Attribute Definition](/reference/integrations/square/actions/delete-location-custom-attribute-definition) * [List Location Custom Attribute Definitions](/reference/integrations/square/actions/list-location-custom-attribute-definitions) * [List Location Custom Attributes](/reference/integrations/square/actions/list-location-custom-attributes) * [Retrieve Location Custom Attribute](/reference/integrations/square/actions/retrieve-location-custom-attribute) * [Retrieve Location Custom Attribute Definition](/reference/integrations/square/actions/retrieve-location-custom-attribute-definition) * [Update Location Custom Attribute Definition](/reference/integrations/square/actions/update-location-custom-attribute-definition) * [Upsert Location Custom Attribute](/reference/integrations/square/actions/upsert-location-custom-attribute) ### MerchantCustomAttributes * [Bulk Delete Merchant Custom Attributes](/reference/integrations/square/actions/bulk-delete-merchant-custom-attributes) * [Bulk Upsert Merchant Custom Attributes](/reference/integrations/square/actions/bulk-upsert-merchant-custom-attributes) * [Create Merchant Custom Attribute Definition](/reference/integrations/square/actions/create-merchant-custom-attribute-definition) * [Delete Merchant Custom Attribute](/reference/integrations/square/actions/delete-merchant-custom-attribute) * [Delete Merchant Custom Attribute Definition](/reference/integrations/square/actions/delete-merchant-custom-attribute-definition) * [List Merchant Custom Attribute Definitions](/reference/integrations/square/actions/list-merchant-custom-attribute-definitions) * [List Merchant Custom Attributes](/reference/integrations/square/actions/list-merchant-custom-attributes) * [Retrieve Merchant Custom Attribute](/reference/integrations/square/actions/retrieve-merchant-custom-attribute) * [Retrieve Merchant Custom Attribute Definition](/reference/integrations/square/actions/retrieve-merchant-custom-attribute-definition) * [Update Merchant Custom Attribute Definition](/reference/integrations/square/actions/update-merchant-custom-attribute-definition) * [Upsert Merchant Custom Attribute](/reference/integrations/square/actions/upsert-merchant-custom-attribute) ### OrderCustomAttributes * [Bulk Delete Order Custom Attributes](/reference/integrations/square/actions/bulk-delete-order-custom-attributes) * [Bulk Upsert Order Custom Attributes](/reference/integrations/square/actions/bulk-upsert-order-custom-attributes) * [Create Order Custom Attribute Definition](/reference/integrations/square/actions/create-order-custom-attribute-definition) * [Delete Order Custom Attribute](/reference/integrations/square/actions/delete-order-custom-attribute) * [Delete Order Custom Attribute Definition](/reference/integrations/square/actions/delete-order-custom-attribute-definition) * [List Order Custom Attribute Definitions](/reference/integrations/square/actions/list-order-custom-attribute-definitions) * [List Order Custom Attributes](/reference/integrations/square/actions/list-order-custom-attributes) * [Retrieve Order Custom Attribute](/reference/integrations/square/actions/retrieve-order-custom-attribute) * [Retrieve Order Custom Attribute Definition](/reference/integrations/square/actions/retrieve-order-custom-attribute-definition) * [Update Order Custom Attribute Definition](/reference/integrations/square/actions/update-order-custom-attribute-definition) * [Upsert Order Custom Attribute](/reference/integrations/square/actions/upsert-order-custom-attribute) ### Labor * [Bulk Publish Scheduled Shifts](/reference/integrations/square/actions/bulk-publish-scheduled-shifts) * [Create Break Type](/reference/integrations/square/actions/create-break-type) * [Create Scheduled Shift](/reference/integrations/square/actions/create-scheduled-shift) * [Create Timecard](/reference/integrations/square/actions/create-timecard) * [Delete Break Type](/reference/integrations/square/actions/delete-break-type) * [Delete Timecard](/reference/integrations/square/actions/delete-timecard) * [Get Break Type](/reference/integrations/square/actions/get-break-type) * [Get Team Member Wage](/reference/integrations/square/actions/get-team-member-wage) * [List Break Types](/reference/integrations/square/actions/list-break-types) * [List Team Member Wages](/reference/integrations/square/actions/list-team-member-wages) * [List Workweek Configs](/reference/integrations/square/actions/list-workweek-configs) * [Publish Scheduled Shift](/reference/integrations/square/actions/publish-scheduled-shift) * [Retrieve Scheduled Shift](/reference/integrations/square/actions/retrieve-scheduled-shift) * [Retrieve Timecard](/reference/integrations/square/actions/retrieve-timecard) * [Search Scheduled Shifts](/reference/integrations/square/actions/search-scheduled-shifts) * [Search Timecards](/reference/integrations/square/actions/search-timecards) * [Update Break Type](/reference/integrations/square/actions/update-break-type) * [Update Scheduled Shift](/reference/integrations/square/actions/update-scheduled-shift) * [Update Timecard](/reference/integrations/square/actions/update-timecard) * [Update Workweek Config](/reference/integrations/square/actions/update-workweek-config) ### Bookings * [Bulk Retrieve Bookings](/reference/integrations/square/actions/bulk-retrieve-bookings) * [Bulk Retrieve Team Member Booking Profiles](/reference/integrations/square/actions/bulk-retrieve-team-member-booking-profiles) * [Cancel Booking](/reference/integrations/square/actions/cancel-booking) * [Create Booking](/reference/integrations/square/actions/create-booking) * [List Bookings](/reference/integrations/square/actions/list-bookings) * [List Location Booking Profiles](/reference/integrations/square/actions/list-location-booking-profiles) * [List Team Member Booking Profiles](/reference/integrations/square/actions/list-team-member-booking-profiles) * [Retrieve Booking](/reference/integrations/square/actions/retrieve-booking) * [Retrieve Business Booking Profile](/reference/integrations/square/actions/retrieve-business-booking-profile) * [Retrieve Location Booking Profile](/reference/integrations/square/actions/retrieve-location-booking-profile) * [Retrieve Team Member Booking Profile](/reference/integrations/square/actions/retrieve-team-member-booking-profile) * [Search Availability](/reference/integrations/square/actions/search-availability) * [Update Booking](/reference/integrations/square/actions/update-booking) ### Channels * [Bulk Retrieve Channels](/reference/integrations/square/actions/bulk-retrieve-channels) * [List Channels](/reference/integrations/square/actions/list-channels) * [Retrieve Channel](/reference/integrations/square/actions/retrieve-channel) ### Subscriptions * [Bulk Swap Plan](/reference/integrations/square/actions/bulk-swap-plan) * [Cancel Subscription](/reference/integrations/square/actions/cancel-subscription) * [Change Billing Anchor Date](/reference/integrations/square/actions/change-billing-anchor-date) * [Create Subscription](/reference/integrations/square/actions/create-subscription) * [Delete Subscription Action](/reference/integrations/square/actions/delete-subscription-action) * [List Subscription Events](/reference/integrations/square/actions/list-subscription-events) * [Pause Subscription](/reference/integrations/square/actions/pause-subscription) * [Resume Subscription](/reference/integrations/square/actions/resume-subscription) * [Retrieve Subscription](/reference/integrations/square/actions/retrieve-subscription) * [Search Subscriptions](/reference/integrations/square/actions/search-subscriptions) * [Swap Plan](/reference/integrations/square/actions/swap-plan) * [Update Subscription](/reference/integrations/square/actions/update-subscription) ### CustomerCustomAttributes * [Bulk Upsert Customer Custom Attributes](/reference/integrations/square/actions/bulk-upsert-customer-custom-attributes) * [Create Customer Custom Attribute Definition](/reference/integrations/square/actions/create-customer-custom-attribute-definition) * [Delete Customer Custom Attribute](/reference/integrations/square/actions/delete-customer-custom-attribute) * [Delete Customer Custom Attribute Definition](/reference/integrations/square/actions/delete-customer-custom-attribute-definition) * [List Customer Custom Attribute Definitions](/reference/integrations/square/actions/list-customer-custom-attribute-definitions) * [List Customer Custom Attributes](/reference/integrations/square/actions/list-customer-custom-attributes) * [Retrieve Customer Custom Attribute](/reference/integrations/square/actions/retrieve-customer-custom-attribute) * [Retrieve Customer Custom Attribute Definition](/reference/integrations/square/actions/retrieve-customer-custom-attribute-definition) * [Update Customer Custom Attribute Definition](/reference/integrations/square/actions/update-customer-custom-attribute-definition) * [Upsert Customer Custom Attribute](/reference/integrations/square/actions/upsert-customer-custom-attribute) ### Invoices * [Cancel Invoice](/reference/integrations/square/actions/cancel-invoice) * [Create Invoice](/reference/integrations/square/actions/create-invoice) * [Create Invoice Attachment](/reference/integrations/square/actions/create-invoice-attachment) * [Delete Invoice](/reference/integrations/square/actions/delete-invoice) * [Delete Invoice Attachment](/reference/integrations/square/actions/delete-invoice-attachment) * [Get Invoice](/reference/integrations/square/actions/get-invoice) * [List Invoices](/reference/integrations/square/actions/list-invoices) * [Publish Invoice](/reference/integrations/square/actions/publish-invoice) * [Search Invoices](/reference/integrations/square/actions/search-invoices) * [Update Invoice](/reference/integrations/square/actions/update-invoice) ### Payments * [Cancel Payment](/reference/integrations/square/actions/cancel-payment) * [Cancel Payment By Idempotency Key](/reference/integrations/square/actions/cancel-payment-by-idempotency-key) * [Complete Payment](/reference/integrations/square/actions/complete-payment) * [Create Payment](/reference/integrations/square/actions/create-payment) * [Get Payment](/reference/integrations/square/actions/get-payment) * [List Payments](/reference/integrations/square/actions/list-payments) * [Update Payment](/reference/integrations/square/actions/update-payment) ### Terminal * [Cancel Terminal Action](/reference/integrations/square/actions/cancel-terminal-action) * [Cancel Terminal Checkout](/reference/integrations/square/actions/cancel-terminal-checkout) * [Cancel Terminal Refund](/reference/integrations/square/actions/cancel-terminal-refund) * [Create Terminal Action](/reference/integrations/square/actions/create-terminal-action) * [Create Terminal Checkout](/reference/integrations/square/actions/create-terminal-checkout) * [Create Terminal Refund](/reference/integrations/square/actions/create-terminal-refund) * [Dismiss Terminal Action](/reference/integrations/square/actions/dismiss-terminal-action) * [Dismiss Terminal Checkout](/reference/integrations/square/actions/dismiss-terminal-checkout) * [Dismiss Terminal Refund](/reference/integrations/square/actions/dismiss-terminal-refund) * [Get Terminal Action](/reference/integrations/square/actions/get-terminal-action) * [Get Terminal Checkout](/reference/integrations/square/actions/get-terminal-checkout) * [Get Terminal Refund](/reference/integrations/square/actions/get-terminal-refund) * [Search Terminal Actions](/reference/integrations/square/actions/search-terminal-actions) * [Search Terminal Checkouts](/reference/integrations/square/actions/search-terminal-checkouts) * [Search Terminal Refunds](/reference/integrations/square/actions/search-terminal-refunds) ### TransferOrder * [Cancel Transfer Order](/reference/integrations/square/actions/cancel-transfer-order) * [Create Transfer Order](/reference/integrations/square/actions/create-transfer-order) * [Delete Transfer Order](/reference/integrations/square/actions/delete-transfer-order) * [Receive Transfer Order](/reference/integrations/square/actions/receive-transfer-order) * [Retrieve Transfer Order](/reference/integrations/square/actions/retrieve-transfer-order) * [Search Transfer Orders](/reference/integrations/square/actions/search-transfer-orders) * [Start Transfer Order](/reference/integrations/square/actions/start-transfer-order) * [Update Transfer Order](/reference/integrations/square/actions/update-transfer-order) ### BankAccounts * [Create Bank Account](/reference/integrations/square/actions/create-bank-account) * [Disable Bank Account](/reference/integrations/square/actions/disable-bank-account) * [Get Bank Account](/reference/integrations/square/actions/get-bank-account) * [Get Bank Account By V1 Id](/reference/integrations/square/actions/get-bank-account-by-v1-id) * [List Bank Accounts](/reference/integrations/square/actions/list-bank-accounts) ### Cards * [Create Card](/reference/integrations/square/actions/create-card) * [Disable Card](/reference/integrations/square/actions/disable-card) * [List Cards](/reference/integrations/square/actions/list-cards) * [Retrieve Card](/reference/integrations/square/actions/retrieve-card) ### CustomerGroups * [Create Customer Group](/reference/integrations/square/actions/create-customer-group) * [Delete Customer Group](/reference/integrations/square/actions/delete-customer-group) * [List Customer Groups](/reference/integrations/square/actions/list-customer-groups) * [Retrieve Customer Group](/reference/integrations/square/actions/retrieve-customer-group) * [Update Customer Group](/reference/integrations/square/actions/update-customer-group) ### Devices * [Create Device Code](/reference/integrations/square/actions/create-device-code) * [Get Device](/reference/integrations/square/actions/get-device) * [Get Device Code](/reference/integrations/square/actions/get-device-code) * [List Device Codes](/reference/integrations/square/actions/list-device-codes) * [List Devices](/reference/integrations/square/actions/list-devices) ### GiftCards * [Create Gift Card](/reference/integrations/square/actions/create-gift-card) * [Link Customer To Gift Card](/reference/integrations/square/actions/link-customer-to-gift-card) * [List Gift Cards](/reference/integrations/square/actions/list-gift-cards) * [Retrieve Gift Card](/reference/integrations/square/actions/retrieve-gift-card) * [Retrieve Gift Card From GAN](/reference/integrations/square/actions/retrieve-gift-card-from-gan) * [Retrieve Gift Card From Nonce](/reference/integrations/square/actions/retrieve-gift-card-from-nonce) * [Unlink Customer From Gift Card](/reference/integrations/square/actions/unlink-customer-from-gift-card) ### GiftCardActivities * [Create Gift Card Activity](/reference/integrations/square/actions/create-gift-card-activity) * [List Gift Card Activities](/reference/integrations/square/actions/list-gift-card-activities) ### Locations * [Create Location](/reference/integrations/square/actions/create-location) * [List Locations](/reference/integrations/square/actions/list-locations) * [Retrieve Location](/reference/integrations/square/actions/retrieve-location) * [Update Location](/reference/integrations/square/actions/update-location) ### Checkout * [Create Payment Link](/reference/integrations/square/actions/create-payment-link) * [Delete Payment Link](/reference/integrations/square/actions/delete-payment-link) * [List Payment Links](/reference/integrations/square/actions/list-payment-links) * [Retrieve Location Settings](/reference/integrations/square/actions/retrieve-location-settings) * [Retrieve Merchant Settings](/reference/integrations/square/actions/retrieve-merchant-settings) * [Retrieve Payment Link](/reference/integrations/square/actions/retrieve-payment-link) * [Update Location Settings](/reference/integrations/square/actions/update-location-settings) * [Update Merchant Settings](/reference/integrations/square/actions/update-merchant-settings) * [Update Payment Link](/reference/integrations/square/actions/update-payment-link) ### Snippets * [Delete Snippet](/reference/integrations/square/actions/delete-snippet) * [Retrieve Snippet](/reference/integrations/square/actions/retrieve-snippet) * [Upsert Snippet](/reference/integrations/square/actions/upsert-snippet) ### Refunds * [Get Payment Refund](/reference/integrations/square/actions/get-payment-refund) * [List Payment Refunds](/reference/integrations/square/actions/list-payment-refunds) * [Refund Payment](/reference/integrations/square/actions/refund-payment) ### Payouts * [Get Payout](/reference/integrations/square/actions/get-payout) * [List Payout Entries](/reference/integrations/square/actions/list-payout-entries) * [List Payouts](/reference/integrations/square/actions/list-payouts) ### Reporting * [Get reporting metadata](/reference/integrations/square/actions/get-reporting-metadata) * [Load report](/reference/integrations/square/actions/load-report) ### CashDrawers * [List Cash Drawer Shift Events](/reference/integrations/square/actions/list-cash-drawer-shift-events) * [List Cash Drawer Shifts](/reference/integrations/square/actions/list-cash-drawer-shifts) * [Retrieve Cash Drawer Shift](/reference/integrations/square/actions/retrieve-cash-drawer-shift) ### CustomerSegments * [List Customer Segments](/reference/integrations/square/actions/list-customer-segments) * [Retrieve Customer Segment](/reference/integrations/square/actions/retrieve-customer-segment) ### Merchants * [List Merchants](/reference/integrations/square/actions/list-merchants) * [Retrieve Merchant](/reference/integrations/square/actions/retrieve-merchant) ### Sites * [List Sites](/reference/integrations/square/actions/list-sites) ### ApplePay * [Register Domain](/reference/integrations/square/actions/register-domain) # On Bank Account Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-bank-account-created Published when you link a seller's or buyer's bank account to a Square account. Square sets the initial status to VERIFICATION_IN_PROGRESS and publishes the event. `square.onBankAccountCreated` subscribes to `bank_account.created` for the selected seller. It requires `BANK_ACCOUNTS_READ`. ## Example ```ts automations/square-on-bank-account-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onBankAccountCreated", () => { const event = square.onBankAccountCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event Published when you link a seller's or buyer's bank account to a Square account. Square sets the initial status to VERIFICATION\_IN\_PROGRESS and publishes the event. The signal resolves to the official `Square.BankAccountCreatedEvent` payload with `type` narrowed to `bank_account.created`. # On Bank Account Disabled Source: https://docs.automate.ax/reference/integrations/square/triggers/on-bank-account-disabled Published when Square sets the status of a bank account to DISABLED. `square.onBankAccountDisabled` subscribes to `bank_account.disabled` for the selected seller. It requires `BANK_ACCOUNTS_READ`. ## Example ```ts automations/square-on-bank-account-disabled.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onBankAccountDisabled", () => { const event = square.onBankAccountDisabled() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event Published when Square sets the status of a bank account to DISABLED. The signal resolves to the official `Square.BankAccountDisabledEvent` payload with `type` narrowed to `bank_account.disabled`. # On Bank Account Verified Source: https://docs.automate.ax/reference/integrations/square/triggers/on-bank-account-verified Published when Square sets the status of a bank account to VERIFIED. `square.onBankAccountVerified` subscribes to `bank_account.verified` for the selected seller. It requires `BANK_ACCOUNTS_READ`. ## Example ```ts automations/square-on-bank-account-verified.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onBankAccountVerified", () => { const event = square.onBankAccountVerified() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event Published when Square sets the status of a bank account to VERIFIED. The signal resolves to the official `Square.BankAccountVerifiedEvent` payload with `type` narrowed to `bank_account.verified`. # On Booking Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-booking-created A booking is created by calling CreateBooking . `square.onBookingCreated` subscribes to `booking.created` for the selected seller. It requires `APPOINTMENTS_READ`. ## Example ```ts automations/square-on-booking-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onBookingCreated", () => { const event = square.onBookingCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A booking is created by calling CreateBooking . The signal resolves to the official `Square.BookingCreatedEvent` payload with `type` narrowed to `booking.created`. # On Booking Custom Attribute Definition Owned Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-booking-custom-attribute-definition-owned-created A custom attribute definition was created by your application. The application that created the custom attribute definition is the owner of the definition and corresponding custom attributes. `square.onBookingCustomAttributeDefinitionOwnedCreated` subscribes to `booking.custom_attribute_definition.owned.created` for the selected seller. It does not require an additional Square OAuth permission. ## Example ```ts automations/square-on-booking-custom-attribute-definition-owned-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation( "onBookingCustomAttributeDefinitionOwnedCreated", () => { const event = square.onBookingCustomAttributeDefinitionOwnedCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }, ) ``` ## Event A custom attribute definition was created by your application. The application that created the custom attribute definition is the owner of the definition and corresponding custom attributes. The signal resolves to the official `Square.BookingCustomAttributeDefinitionOwnedCreatedEvent` payload with `type` narrowed to `booking.custom_attribute_definition.owned.created`. # On Booking Custom Attribute Definition Owned Deleted Source: https://docs.automate.ax/reference/integrations/square/triggers/on-booking-custom-attribute-definition-owned-deleted A custom attribute definition owned by your application was deleted. Note that only the definition owner can delete a custom attribute definition. `square.onBookingCustomAttributeDefinitionOwnedDeleted` subscribes to `booking.custom_attribute_definition.owned.deleted` for the selected seller. It does not require an additional Square OAuth permission. ## Example ```ts automations/square-on-booking-custom-attribute-definition-owned-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation( "onBookingCustomAttributeDefinitionOwnedDeleted", () => { const event = square.onBookingCustomAttributeDefinitionOwnedDeleted() // Send event to the Square-aware order, CRM, or messaging action you use. }, ) ``` ## Event A custom attribute definition owned by your application was deleted. Note that only the definition owner can delete a custom attribute definition. The signal resolves to the official `Square.BookingCustomAttributeDefinitionOwnedDeletedEvent` payload with `type` narrowed to `booking.custom_attribute_definition.owned.deleted`. # On Booking Custom Attribute Definition Owned Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-booking-custom-attribute-definition-owned-updated A custom attribute definition owned by your application was updated. Note that only the definition owner can update a custom attribute definition. `square.onBookingCustomAttributeDefinitionOwnedUpdated` subscribes to `booking.custom_attribute_definition.owned.updated` for the selected seller. It does not require an additional Square OAuth permission. ## Example ```ts automations/square-on-booking-custom-attribute-definition-owned-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation( "onBookingCustomAttributeDefinitionOwnedUpdated", () => { const event = square.onBookingCustomAttributeDefinitionOwnedUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }, ) ``` ## Event A custom attribute definition owned by your application was updated. Note that only the definition owner can update a custom attribute definition. The signal resolves to the official `Square.BookingCustomAttributeDefinitionOwnedUpdatedEvent` payload with `type` narrowed to `booking.custom_attribute_definition.owned.updated`. # On Booking Custom Attribute Definition Visible Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-booking-custom-attribute-definition-visible-created A custom attribute definition that's visible to your application was created. `square.onBookingCustomAttributeDefinitionVisibleCreated` subscribes to `booking.custom_attribute_definition.visible.created` for the selected seller. It does not require an additional Square OAuth permission. ## Example ```ts automations/square-on-booking-custom-attribute-definition-visible-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation( "onBookingCustomAttributeDefinitionVisibleCreated", () => { const event = square.onBookingCustomAttributeDefinitionVisibleCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }, ) ``` ## Event A custom attribute definition that's visible to your application was created. The signal resolves to the official `Square.BookingCustomAttributeDefinitionVisibleCreatedEvent` payload with `type` narrowed to `booking.custom_attribute_definition.visible.created`. # On Booking Custom Attribute Definition Visible Deleted Source: https://docs.automate.ax/reference/integrations/square/triggers/on-booking-custom-attribute-definition-visible-deleted A custom attribute definition that's visible to your application was deleted. `square.onBookingCustomAttributeDefinitionVisibleDeleted` subscribes to `booking.custom_attribute_definition.visible.deleted` for the selected seller. It does not require an additional Square OAuth permission. ## Example ```ts automations/square-on-booking-custom-attribute-definition-visible-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation( "onBookingCustomAttributeDefinitionVisibleDeleted", () => { const event = square.onBookingCustomAttributeDefinitionVisibleDeleted() // Send event to the Square-aware order, CRM, or messaging action you use. }, ) ``` ## Event A custom attribute definition that's visible to your application was deleted. The signal resolves to the official `Square.BookingCustomAttributeDefinitionVisibleDeletedEvent` payload with `type` narrowed to `booking.custom_attribute_definition.visible.deleted`. # On Booking Custom Attribute Definition Visible Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-booking-custom-attribute-definition-visible-updated A custom attribute definition that's visible to your application was updated. `square.onBookingCustomAttributeDefinitionVisibleUpdated` subscribes to `booking.custom_attribute_definition.visible.updated` for the selected seller. It does not require an additional Square OAuth permission. ## Example ```ts automations/square-on-booking-custom-attribute-definition-visible-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation( "onBookingCustomAttributeDefinitionVisibleUpdated", () => { const event = square.onBookingCustomAttributeDefinitionVisibleUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }, ) ``` ## Event A custom attribute definition that's visible to your application was updated. The signal resolves to the official `Square.BookingCustomAttributeDefinitionVisibleUpdatedEvent` payload with `type` narrowed to `booking.custom_attribute_definition.visible.updated`. # On Booking Custom Attribute Owned Deleted Source: https://docs.automate.ax/reference/integrations/square/triggers/on-booking-custom-attribute-owned-deleted A custom attribute owned by your application was deleted from a booking. `square.onBookingCustomAttributeOwnedDeleted` subscribes to `booking.custom_attribute.owned.deleted` for the selected seller. It does not require an additional Square OAuth permission. ## Example ```ts automations/square-on-booking-custom-attribute-owned-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onBookingCustomAttributeOwnedDeleted", () => { const event = square.onBookingCustomAttributeOwnedDeleted() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A custom attribute owned by your application was deleted from a booking. The signal resolves to the official `Square.BookingCustomAttributeOwnedDeletedEvent` payload with `type` narrowed to `booking.custom_attribute.owned.deleted`. # On Booking Custom Attribute Owned Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-booking-custom-attribute-owned-updated A custom attribute owned by your application was created or updated for a booking. `square.onBookingCustomAttributeOwnedUpdated` subscribes to `booking.custom_attribute.owned.updated` for the selected seller. It does not require an additional Square OAuth permission. ## Example ```ts automations/square-on-booking-custom-attribute-owned-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onBookingCustomAttributeOwnedUpdated", () => { const event = square.onBookingCustomAttributeOwnedUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A custom attribute owned by your application was created or updated for a booking. The signal resolves to the official `Square.BookingCustomAttributeOwnedUpdatedEvent` payload with `type` narrowed to `booking.custom_attribute.owned.updated`. # On Booking Custom Attribute Visible Deleted Source: https://docs.automate.ax/reference/integrations/square/triggers/on-booking-custom-attribute-visible-deleted A custom attribute that's visible to your application was deleted from a booking. `square.onBookingCustomAttributeVisibleDeleted` subscribes to `booking.custom_attribute.visible.deleted` for the selected seller. It does not require an additional Square OAuth permission. ## Example ```ts automations/square-on-booking-custom-attribute-visible-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onBookingCustomAttributeVisibleDeleted", () => { const event = square.onBookingCustomAttributeVisibleDeleted() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A custom attribute that's visible to your application was deleted from a booking. The signal resolves to the official `Square.BookingCustomAttributeVisibleDeletedEvent` payload with `type` narrowed to `booking.custom_attribute.visible.deleted`. # On Booking Custom Attribute Visible Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-booking-custom-attribute-visible-updated A custom attribute that's visible to your application was created or updated for a booking. `square.onBookingCustomAttributeVisibleUpdated` subscribes to `booking.custom_attribute.visible.updated` for the selected seller. It does not require an additional Square OAuth permission. ## Example ```ts automations/square-on-booking-custom-attribute-visible-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onBookingCustomAttributeVisibleUpdated", () => { const event = square.onBookingCustomAttributeVisibleUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A custom attribute that's visible to your application was created or updated for a booking. The signal resolves to the official `Square.BookingCustomAttributeVisibleUpdatedEvent` payload with `type` narrowed to `booking.custom_attribute.visible.updated`. # On Booking Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-booking-updated An API-created booking is updated in the Square Dashboard, on the seller's online booking site, or by calling UpdateBooking . `square.onBookingUpdated` subscribes to `booking.updated` for the selected seller. It requires `APPOINTMENTS_READ`. ## Example ```ts automations/square-on-booking-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onBookingUpdated", () => { const event = square.onBookingUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event An API-created booking is updated in the Square Dashboard, on the seller's online booking site, or by calling UpdateBooking . The signal resolves to the official `Square.BookingUpdatedEvent` payload with `type` narrowed to `booking.updated`. # On Card Automatically Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-card-automatically-updated Published when Square automatically updates the expiration date or primary account number (PAN) of a card or adds or removes an issuer alert. `square.onCardAutomaticallyUpdated` subscribes to `card.automatically_updated` for the selected seller. It requires `PAYMENTS_READ`. ## Example ```ts automations/square-on-card-automatically-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onCardAutomaticallyUpdated", () => { const event = square.onCardAutomaticallyUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event Published when Square automatically updates the expiration date or primary account number (PAN) of a card or adds or removes an issuer alert. The signal resolves to the official `Square.CardAutomaticallyUpdatedEvent` payload with `type` narrowed to `card.automatically_updated`. # On Card Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-card-created Published when a card is created or imported. `square.onCardCreated` subscribes to `card.created` for the selected seller. It requires `PAYMENTS_READ`. ## Example ```ts automations/square-on-card-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onCardCreated", () => { const event = square.onCardCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event Published when a card is created or imported. The signal resolves to the official `Square.CardCreatedEvent` payload with `type` narrowed to `card.created`. # On Card Disabled Source: https://docs.automate.ax/reference/integrations/square/triggers/on-card-disabled Published when a card is disabled. `square.onCardDisabled` subscribes to `card.disabled` for the selected seller. It requires `PAYMENTS_READ`. ## Example ```ts automations/square-on-card-disabled.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onCardDisabled", () => { const event = square.onCardDisabled() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event Published when a card is disabled. The signal resolves to the official `Square.CardDisabledEvent` payload with `type` narrowed to `card.disabled`. # On Card Forgotten Source: https://docs.automate.ax/reference/integrations/square/triggers/on-card-forgotten Published when a card is GDPR forgotten or vaulted. `square.onCardForgotten` subscribes to `card.forgotten` for the selected seller. It requires `PAYMENTS_READ`. ## Example ```ts automations/square-on-card-forgotten.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onCardForgotten", () => { const event = square.onCardForgotten() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event Published when a card is GDPR forgotten or vaulted. The signal resolves to the official `Square.CardForgottenEvent` payload with `type` narrowed to `card.forgotten`. # On Card Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-card-updated Published when a card is updated by the seller in the Square Dashboard. `square.onCardUpdated` subscribes to `card.updated` for the selected seller. It requires `PAYMENTS_READ`. ## Example ```ts automations/square-on-card-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onCardUpdated", () => { const event = square.onCardUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event Published when a card is updated by the seller in the Square Dashboard. The signal resolves to the official `Square.CardUpdatedEvent` payload with `type` narrowed to `card.updated`. # On Catalog Version Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-catalog-version-updated The catalog was updated. Webhook notification data is packaged as "catalog_version": { "updated_at": "2019-05-14T17:51:27Z"} . `square.onCatalogVersionUpdated` subscribes to `catalog.version.updated` for the selected seller. It requires `ITEMS_READ`. ## Example ```ts automations/square-on-catalog-version-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onCatalogVersionUpdated", () => { const event = square.onCatalogVersionUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event The catalog was updated. Webhook notification data is packaged as "catalog\_version": \{ "updated\_at": "2019-05-14T17:51:27Z"} . The signal resolves to the official `Square.CatalogVersionUpdatedEvent` payload with `type` narrowed to `catalog.version.updated`. # On Customer Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-customer-created A customer profile is created, including when customer profiles are merged into a new customer profile. `square.onCustomerCreated` subscribes to `customer.created` for the selected seller. It requires `CUSTOMERS_READ`. ## Example ```ts automations/square-on-customer-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onCustomerCreated", () => { const event = square.onCustomerCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A customer profile is created, including when customer profiles are merged into a new customer profile. The signal resolves to the official `Square.CustomerCreatedEvent` payload with `type` narrowed to `customer.created`. # On Customer Custom Attribute Definition Owned Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-customer-custom-attribute-definition-owned-created A custom attribute definition was created by your application. The application that created the custom attribute definition is the owner of the definition and corresponding custom attributes. This event replaces the deprecated customer.custom_attribute_definition.created event. `square.onCustomerCustomAttributeDefinitionOwnedCreated` subscribes to `customer.custom_attribute_definition.owned.created` for the selected seller. It requires `CUSTOMERS_READ`. ## Example ```ts automations/square-on-customer-custom-attribute-definition-owned-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation( "onCustomerCustomAttributeDefinitionOwnedCreated", () => { const event = square.onCustomerCustomAttributeDefinitionOwnedCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }, ) ``` ## Event A custom attribute definition was created by your application. The application that created the custom attribute definition is the owner of the definition and corresponding custom attributes. This event replaces the deprecated customer.custom\_attribute\_definition.created event. The signal resolves to the official `Square.CustomerCustomAttributeDefinitionOwnedCreatedEvent` payload with `type` narrowed to `customer.custom_attribute_definition.owned.created`. # On Customer Custom Attribute Definition Owned Deleted Source: https://docs.automate.ax/reference/integrations/square/triggers/on-customer-custom-attribute-definition-owned-deleted A custom attribute definition owned by your application was deleted. Note that only the definition owner can delete a custom attribute definition. This event replaces the deprecated customer.custom_attribute_definition.deleted event. `square.onCustomerCustomAttributeDefinitionOwnedDeleted` subscribes to `customer.custom_attribute_definition.owned.deleted` for the selected seller. It requires `CUSTOMERS_READ`. ## Example ```ts automations/square-on-customer-custom-attribute-definition-owned-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation( "onCustomerCustomAttributeDefinitionOwnedDeleted", () => { const event = square.onCustomerCustomAttributeDefinitionOwnedDeleted() // Send event to the Square-aware order, CRM, or messaging action you use. }, ) ``` ## Event A custom attribute definition owned by your application was deleted. Note that only the definition owner can delete a custom attribute definition. This event replaces the deprecated customer.custom\_attribute\_definition.deleted event. The signal resolves to the official `Square.CustomerCustomAttributeDefinitionOwnedDeletedEvent` payload with `type` narrowed to `customer.custom_attribute_definition.owned.deleted`. # On Customer Custom Attribute Definition Owned Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-customer-custom-attribute-definition-owned-updated A custom attribute definition owned by your application was updated. Note that only the definition owner can update a custom attribute definition. This event replaces the deprecated customer.custom_attribute_definition.updated event. `square.onCustomerCustomAttributeDefinitionOwnedUpdated` subscribes to `customer.custom_attribute_definition.owned.updated` for the selected seller. It requires `CUSTOMERS_READ`. ## Example ```ts automations/square-on-customer-custom-attribute-definition-owned-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation( "onCustomerCustomAttributeDefinitionOwnedUpdated", () => { const event = square.onCustomerCustomAttributeDefinitionOwnedUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }, ) ``` ## Event A custom attribute definition owned by your application was updated. Note that only the definition owner can update a custom attribute definition. This event replaces the deprecated customer.custom\_attribute\_definition.updated event. The signal resolves to the official `Square.CustomerCustomAttributeDefinitionOwnedUpdatedEvent` payload with `type` narrowed to `customer.custom_attribute_definition.owned.updated`. # On Customer Custom Attribute Definition Visible Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-customer-custom-attribute-definition-visible-created A custom attribute definition that's visible to your application was created. This event replaces the deprecated customer.custom_attribute_definition.public.created event. `square.onCustomerCustomAttributeDefinitionVisibleCreated` subscribes to `customer.custom_attribute_definition.visible.created` for the selected seller. It requires `CUSTOMERS_READ`. ## Example ```ts automations/square-on-customer-custom-attribute-definition-visible-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation( "onCustomerCustomAttributeDefinitionVisibleCreated", () => { const event = square.onCustomerCustomAttributeDefinitionVisibleCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }, ) ``` ## Event A custom attribute definition that's visible to your application was created. This event replaces the deprecated customer.custom\_attribute\_definition.public.created event. The signal resolves to the official `Square.CustomerCustomAttributeDefinitionVisibleCreatedEvent` payload with `type` narrowed to `customer.custom_attribute_definition.visible.created`. # On Customer Custom Attribute Definition Visible Deleted Source: https://docs.automate.ax/reference/integrations/square/triggers/on-customer-custom-attribute-definition-visible-deleted A custom attribute definition that's visible to your application was deleted. This event replaces the deprecated customer.custom_attribute_definition.public.deleted event. `square.onCustomerCustomAttributeDefinitionVisibleDeleted` subscribes to `customer.custom_attribute_definition.visible.deleted` for the selected seller. It requires `CUSTOMERS_READ`. ## Example ```ts automations/square-on-customer-custom-attribute-definition-visible-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation( "onCustomerCustomAttributeDefinitionVisibleDeleted", () => { const event = square.onCustomerCustomAttributeDefinitionVisibleDeleted() // Send event to the Square-aware order, CRM, or messaging action you use. }, ) ``` ## Event A custom attribute definition that's visible to your application was deleted. This event replaces the deprecated customer.custom\_attribute\_definition.public.deleted event. The signal resolves to the official `Square.CustomerCustomAttributeDefinitionVisibleDeletedEvent` payload with `type` narrowed to `customer.custom_attribute_definition.visible.deleted`. # On Customer Custom Attribute Definition Visible Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-customer-custom-attribute-definition-visible-updated A custom attribute definition that's visible to your application was updated. This event replaces the deprecated customer.custom_attribute_definition.public.updated event. `square.onCustomerCustomAttributeDefinitionVisibleUpdated` subscribes to `customer.custom_attribute_definition.visible.updated` for the selected seller. It requires `CUSTOMERS_READ`. ## Example ```ts automations/square-on-customer-custom-attribute-definition-visible-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation( "onCustomerCustomAttributeDefinitionVisibleUpdated", () => { const event = square.onCustomerCustomAttributeDefinitionVisibleUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }, ) ``` ## Event A custom attribute definition that's visible to your application was updated. This event replaces the deprecated customer.custom\_attribute\_definition.public.updated event. The signal resolves to the official `Square.CustomerCustomAttributeDefinitionVisibleUpdatedEvent` payload with `type` narrowed to `customer.custom_attribute_definition.visible.updated`. # On Customer Custom Attribute Owned Deleted Source: https://docs.automate.ax/reference/integrations/square/triggers/on-customer-custom-attribute-owned-deleted A custom attribute owned by your application was deleted from a customer profile. This event replaces the deprecated customer.custom_attribute.deleted event. `square.onCustomerCustomAttributeOwnedDeleted` subscribes to `customer.custom_attribute.owned.deleted` for the selected seller. It requires `CUSTOMERS_READ`. ## Example ```ts automations/square-on-customer-custom-attribute-owned-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onCustomerCustomAttributeOwnedDeleted", () => { const event = square.onCustomerCustomAttributeOwnedDeleted() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A custom attribute owned by your application was deleted from a customer profile. This event replaces the deprecated customer.custom\_attribute.deleted event. The signal resolves to the official `Square.CustomerCustomAttributeOwnedDeletedEvent` payload with `type` narrowed to `customer.custom_attribute.owned.deleted`. # On Customer Custom Attribute Owned Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-customer-custom-attribute-owned-updated A custom attribute owned by your application was created or updated for a customer profile. This event replaces the deprecated customer.custom_attribute.updated event. `square.onCustomerCustomAttributeOwnedUpdated` subscribes to `customer.custom_attribute.owned.updated` for the selected seller. It requires `CUSTOMERS_READ`. ## Example ```ts automations/square-on-customer-custom-attribute-owned-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onCustomerCustomAttributeOwnedUpdated", () => { const event = square.onCustomerCustomAttributeOwnedUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A custom attribute owned by your application was created or updated for a customer profile. This event replaces the deprecated customer.custom\_attribute.updated event. The signal resolves to the official `Square.CustomerCustomAttributeOwnedUpdatedEvent` payload with `type` narrowed to `customer.custom_attribute.owned.updated`. # On Customer Custom Attribute Visible Deleted Source: https://docs.automate.ax/reference/integrations/square/triggers/on-customer-custom-attribute-visible-deleted A custom attribute that's visible to your application was deleted from a customer profile. This event replaces the deprecated customer.custom_attribute.public.deleted event. `square.onCustomerCustomAttributeVisibleDeleted` subscribes to `customer.custom_attribute.visible.deleted` for the selected seller. It requires `CUSTOMERS_READ`. ## Example ```ts automations/square-on-customer-custom-attribute-visible-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onCustomerCustomAttributeVisibleDeleted", () => { const event = square.onCustomerCustomAttributeVisibleDeleted() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A custom attribute that's visible to your application was deleted from a customer profile. This event replaces the deprecated customer.custom\_attribute.public.deleted event. The signal resolves to the official `Square.CustomerCustomAttributeVisibleDeletedEvent` payload with `type` narrowed to `customer.custom_attribute.visible.deleted`. # On Customer Custom Attribute Visible Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-customer-custom-attribute-visible-updated A custom attribute that's visible to your application was created or updated for a customer profile. This event replaces the deprecated customer.custom_attribute.public.updated event. `square.onCustomerCustomAttributeVisibleUpdated` subscribes to `customer.custom_attribute.visible.updated` for the selected seller. It requires `CUSTOMERS_READ`. ## Example ```ts automations/square-on-customer-custom-attribute-visible-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onCustomerCustomAttributeVisibleUpdated", () => { const event = square.onCustomerCustomAttributeVisibleUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A custom attribute that's visible to your application was created or updated for a customer profile. This event replaces the deprecated customer.custom\_attribute.public.updated event. The signal resolves to the official `Square.CustomerCustomAttributeVisibleUpdatedEvent` payload with `type` narrowed to `customer.custom_attribute.visible.updated`. # On Customer Deleted Source: https://docs.automate.ax/reference/integrations/square/triggers/on-customer-deleted A customer profile is deleted, including when customer profiles are merged into a new customer profile. `square.onCustomerDeleted` subscribes to `customer.deleted` for the selected seller. It requires `CUSTOMERS_READ`. ## Example ```ts automations/square-on-customer-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onCustomerDeleted", () => { const event = square.onCustomerDeleted() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A customer profile is deleted, including when customer profiles are merged into a new customer profile. The signal resolves to the official `Square.CustomerDeletedEvent` payload with `type` narrowed to `customer.deleted`. # On Customer Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-customer-updated An attribute on a customer profile is changed, except for the segment_ids field. `square.onCustomerUpdated` subscribes to `customer.updated` for the selected seller. It requires `CUSTOMERS_READ`. ## Example ```ts automations/square-on-customer-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onCustomerUpdated", () => { const event = square.onCustomerUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event An attribute on a customer profile is changed, except for the segment\_ids field. The signal resolves to the official `Square.CustomerUpdatedEvent` payload with `type` narrowed to `customer.updated`. # On Device Code Paired Source: https://docs.automate.ax/reference/integrations/square/triggers/on-device-code-paired A Square Terminal has been paired with a Terminal API client and the device_id of the paired Square Terminal is available. `square.onDeviceCodePaired` subscribes to `device.code.paired` for the selected seller. It requires `DEVICE_CREDENTIAL_MANAGEMENT`. ## Example ```ts automations/square-on-device-code-paired.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onDeviceCodePaired", () => { const event = square.onDeviceCodePaired() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A Square Terminal has been paired with a Terminal API client and the device\_id of the paired Square Terminal is available. The signal resolves to the official `Square.DeviceCodePairedEvent` payload with `type` narrowed to `device.code.paired`. # On Device Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-device-created A new Square Terminal was created. This means the Square Terminal has been associated with the given seller's account. `square.onDeviceCreated` subscribes to `device.created` for the selected seller. It requires `DEVICES_READ`. ## Example ```ts automations/square-on-device-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onDeviceCreated", () => { const event = square.onDeviceCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A new Square Terminal was created. This means the Square Terminal has been associated with the given seller's account. The signal resolves to the official `Square.DeviceCreatedEvent` payload with `type` narrowed to `device.created`. # On Dispute Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-dispute-created A dispute was created. `square.onDisputeCreated` subscribes to `dispute.created` for the selected seller. It requires `PAYMENTS_READ`. ## Example ```ts automations/square-on-dispute-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onDisputeCreated", () => { const event = square.onDisputeCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A dispute was created. The signal resolves to the official `Square.DisputeCreatedEvent` payload with `type` narrowed to `dispute.created`. # On Dispute Evidence Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-dispute-evidence-created Evidence was added to a dispute from the Disputes Dashboard in the Square Dashboard , in the Square Point of Sale application, or by calling the Disputes API (CreateDisputeEvidenceFile or CreateDisputeEvidenceText ). `square.onDisputeEvidenceCreated` subscribes to `dispute.evidence.created` for the selected seller. It requires `PAYMENTS_READ`. ## Example ```ts automations/square-on-dispute-evidence-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onDisputeEvidenceCreated", () => { const event = square.onDisputeEvidenceCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event Evidence was added to a dispute from the Disputes Dashboard in the Square Dashboard , in the Square Point of Sale application, or by calling the Disputes API (CreateDisputeEvidenceFile or CreateDisputeEvidenceText ). The signal resolves to the official `Square.DisputeEvidenceCreatedEvent` payload with `type` narrowed to `dispute.evidence.created`. # On Dispute Evidence Deleted Source: https://docs.automate.ax/reference/integrations/square/triggers/on-dispute-evidence-deleted Evidence was removed from a dispute from the Disputes Dashboard in the Square Dashboard , in the Square Point of Sale application, or by calling DeleteDisputeEvidence. `square.onDisputeEvidenceDeleted` subscribes to `dispute.evidence.deleted` for the selected seller. It requires `PAYMENTS_READ`. ## Example ```ts automations/square-on-dispute-evidence-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onDisputeEvidenceDeleted", () => { const event = square.onDisputeEvidenceDeleted() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event Evidence was removed from a dispute from the Disputes Dashboard in the Square Dashboard , in the Square Point of Sale application, or by calling DeleteDisputeEvidence. The signal resolves to the official `Square.DisputeEvidenceDeletedEvent` payload with `type` narrowed to `dispute.evidence.deleted`. # On Dispute State Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-dispute-state-updated The state of a dispute changed. This includes the dispute resolution (WON or LOST) reported by the bank. The event data includes details about what changed. `square.onDisputeStateUpdated` subscribes to `dispute.state.updated` for the selected seller. It requires `PAYMENTS_READ`. ## Example ```ts automations/square-on-dispute-state-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onDisputeStateUpdated", () => { const event = square.onDisputeStateUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event The state of a dispute changed. This includes the dispute resolution (WON or LOST) reported by the bank. The event data includes details about what changed. The signal resolves to the official `Square.DisputeStateUpdatedEvent` payload with `type` narrowed to `dispute.state.updated`. # On Event Source: https://docs.automate.ax/reference/integrations/square/triggers/on-event Starts an automation from any current Square seller event. `square.onEvent` subscribes to every current Square webhook event for the selected seller. It requests the combined OAuth permissions needed to deliver all supported event types. ## Example ```ts automations/square-on-event.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("Route Square events", () => { const event = square.onEvent() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event The signal resolves to the official `Square.Event` payload. Use a semantic trigger such as `square.onPaymentCreated` when you want a payload narrowed to one exact event interface. # On Gift Card Activity Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-gift-card-activity-created A gift card activity was created. `square.onGiftCardActivityCreated` subscribes to `gift_card.activity.created` for the selected seller. It requires `GIFTCARDS_READ`. ## Example ```ts automations/square-on-gift-card-activity-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onGiftCardActivityCreated", () => { const event = square.onGiftCardActivityCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A gift card activity was created. The signal resolves to the official `Square.GiftCardActivityCreatedEvent` payload with `type` narrowed to `gift_card.activity.created`. # On Gift Card Activity Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-gift-card-activity-updated A REDEEM or IMPORT gift card activity was updated. For REDEEM activities, this event is invoked when the status changes from PENDING to COMPLETED or CANCELED . This status change applies only when the gift card was redeemed using Square Point of Sale or the Square Dashboard. For IMPORT activities, this event is invoked when the balance of an imported third-party gift card is updated by Square. `square.onGiftCardActivityUpdated` subscribes to `gift_card.activity.updated` for the selected seller. It requires `GIFTCARDS_READ`. ## Example ```ts automations/square-on-gift-card-activity-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onGiftCardActivityUpdated", () => { const event = square.onGiftCardActivityUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A REDEEM or IMPORT gift card activity was updated. For REDEEM activities, this event is invoked when the status changes from PENDING to COMPLETED or CANCELED . This status change applies only when the gift card was redeemed using Square Point of Sale or the Square Dashboard. For IMPORT activities, this event is invoked when the balance of an imported third-party gift card is updated by Square. The signal resolves to the official `Square.GiftCardActivityUpdatedEvent` payload with `type` narrowed to `gift_card.activity.updated`. # On Gift Card Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-gift-card-created A digital gift card was created or a physical gift card was registered. `square.onGiftCardCreated` subscribes to `gift_card.created` for the selected seller. It requires `GIFTCARDS_READ`. ## Example ```ts automations/square-on-gift-card-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onGiftCardCreated", () => { const event = square.onGiftCardCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A digital gift card was created or a physical gift card was registered. The signal resolves to the official `Square.GiftCardCreatedEvent` payload with `type` narrowed to `gift_card.created`. # On Gift Card Customer Linked Source: https://docs.automate.ax/reference/integrations/square/triggers/on-gift-card-customer-linked A customer was linked to a gift card. `square.onGiftCardCustomerLinked` subscribes to `gift_card.customer_linked` for the selected seller. It requires `GIFTCARDS_READ`. ## Example ```ts automations/square-on-gift-card-customer-linked.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onGiftCardCustomerLinked", () => { const event = square.onGiftCardCustomerLinked() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A customer was linked to a gift card. The signal resolves to the official `Square.GiftCardCustomerLinkedEvent` payload with `type` narrowed to `gift_card.customer_linked`. # On Gift Card Customer Unlinked Source: https://docs.automate.ax/reference/integrations/square/triggers/on-gift-card-customer-unlinked A customer was unlinked from a gift card. `square.onGiftCardCustomerUnlinked` subscribes to `gift_card.customer_unlinked` for the selected seller. It requires `GIFTCARDS_READ`. ## Example ```ts automations/square-on-gift-card-customer-unlinked.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onGiftCardCustomerUnlinked", () => { const event = square.onGiftCardCustomerUnlinked() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A customer was unlinked from a gift card. The signal resolves to the official `Square.GiftCardCustomerUnlinkedEvent` payload with `type` narrowed to `gift_card.customer_unlinked`. # On Gift Card Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-gift-card-updated A gift card was updated. The balance_money , state , and customer_ids fields of a gift card can be updated through a gift card activity or when a customer is linked or unlinked. `square.onGiftCardUpdated` subscribes to `gift_card.updated` for the selected seller. It requires `GIFTCARDS_READ`. ## Example ```ts automations/square-on-gift-card-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onGiftCardUpdated", () => { const event = square.onGiftCardUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A gift card was updated. The balance\_money , state , and customer\_ids fields of a gift card can be updated through a gift card activity or when a customer is linked or unlinked. The signal resolves to the official `Square.GiftCardUpdatedEvent` payload with `type` narrowed to `gift_card.updated`. # On Inventory Count Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-inventory-count-updated The quantity was updated for a catalog item variation. Webhook notification data is packaged as InventoryCount[] . `square.onInventoryCountUpdated` subscribes to `inventory.count.updated` for the selected seller. It requires `INVENTORY_READ`. ## Example ```ts automations/square-on-inventory-count-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onInventoryCountUpdated", () => { const event = square.onInventoryCountUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event The quantity was updated for a catalog item variation. Webhook notification data is packaged as InventoryCount\[] . The signal resolves to the official `Square.InventoryCountUpdatedEvent` payload with `type` narrowed to `inventory.count.updated`. # On Invoice Canceled Source: https://docs.automate.ax/reference/integrations/square/triggers/on-invoice-canceled An invoice was canceled. `square.onInvoiceCanceled` subscribes to `invoice.canceled` for the selected seller. It requires `INVOICES_READ`. ## Example ```ts automations/square-on-invoice-canceled.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onInvoiceCanceled", () => { const event = square.onInvoiceCanceled() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event An invoice was canceled. The signal resolves to the official `Square.InvoiceCanceledEvent` payload with `type` narrowed to `invoice.canceled`. # On Invoice Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-invoice-created A draft invoice was created. `square.onInvoiceCreated` subscribes to `invoice.created` for the selected seller. It requires `INVOICES_READ`. ## Example ```ts automations/square-on-invoice-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onInvoiceCreated", () => { const event = square.onInvoiceCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A draft invoice was created. The signal resolves to the official `Square.InvoiceCreatedEvent` payload with `type` narrowed to `invoice.created`. # On Invoice Deleted Source: https://docs.automate.ax/reference/integrations/square/triggers/on-invoice-deleted A draft invoice was deleted. A deleted invoice is removed entirely from the seller account (including any attachments) and cannot be retrieved. `square.onInvoiceDeleted` subscribes to `invoice.deleted` for the selected seller. It requires `INVOICES_READ`. ## Example ```ts automations/square-on-invoice-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onInvoiceDeleted", () => { const event = square.onInvoiceDeleted() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A draft invoice was deleted. A deleted invoice is removed entirely from the seller account (including any attachments) and cannot be retrieved. The signal resolves to the official `Square.InvoiceDeletedEvent` payload with `type` narrowed to `invoice.deleted`. # On Invoice Payment Made Source: https://docs.automate.ax/reference/integrations/square/triggers/on-invoice-payment-made A payment was made for an invoice. `square.onInvoicePaymentMade` subscribes to `invoice.payment_made` for the selected seller. It requires `INVOICES_READ`. ## Example ```ts automations/square-on-invoice-payment-made.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onInvoicePaymentMade", () => { const event = square.onInvoicePaymentMade() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A payment was made for an invoice. The signal resolves to the official `Square.InvoicePaymentMadeEvent` payload with `type` narrowed to `invoice.payment_made`. # On Invoice Published Source: https://docs.automate.ax/reference/integrations/square/triggers/on-invoice-published An invoice was published. This also applies to invoices that are published but scheduled to be processed at a later time. `square.onInvoicePublished` subscribes to `invoice.published` for the selected seller. It requires `INVOICES_READ`. ## Example ```ts automations/square-on-invoice-published.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onInvoicePublished", () => { const event = square.onInvoicePublished() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event An invoice was published. This also applies to invoices that are published but scheduled to be processed at a later time. The signal resolves to the official `Square.InvoicePublishedEvent` payload with `type` narrowed to `invoice.published`. # On Invoice Refunded Source: https://docs.automate.ax/reference/integrations/square/triggers/on-invoice-refunded A refund was processed for an invoice. `square.onInvoiceRefunded` subscribes to `invoice.refunded` for the selected seller. It requires `INVOICES_READ`. ## Example ```ts automations/square-on-invoice-refunded.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onInvoiceRefunded", () => { const event = square.onInvoiceRefunded() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A refund was processed for an invoice. The signal resolves to the official `Square.InvoiceRefundedEvent` payload with `type` narrowed to `invoice.refunded`. # On Invoice Scheduled Charge Failed Source: https://docs.automate.ax/reference/integrations/square/triggers/on-invoice-scheduled-charge-failed A scheduled automatic payment has failed. `square.onInvoiceScheduledChargeFailed` subscribes to `invoice.scheduled_charge_failed` for the selected seller. It requires `INVOICES_READ`. ## Example ```ts automations/square-on-invoice-scheduled-charge-failed.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onInvoiceScheduledChargeFailed", () => { const event = square.onInvoiceScheduledChargeFailed() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A scheduled automatic payment has failed. The signal resolves to the official `Square.InvoiceScheduledChargeFailedEvent` payload with `type` narrowed to `invoice.scheduled_charge_failed`. # On Invoice Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-invoice-updated An invoice was changed. This event is also invoked following invoice.published and invoice.canceled events. Note that link expiry and dynamic link generation for the public_url field don't trigger an event. `square.onInvoiceUpdated` subscribes to `invoice.updated` for the selected seller. It requires `INVOICES_READ`. ## Example ```ts automations/square-on-invoice-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onInvoiceUpdated", () => { const event = square.onInvoiceUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event An invoice was changed. This event is also invoked following invoice.published and invoice.canceled events. Note that link expiry and dynamic link generation for the public\_url field don't trigger an event. The signal resolves to the official `Square.InvoiceUpdatedEvent` payload with `type` narrowed to `invoice.updated`. # On Job Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-job-created A job was created. `square.onJobCreated` subscribes to `job.created` for the selected seller. It requires `EMPLOYEES_READ`. ## Example ```ts automations/square-on-job-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onJobCreated", () => { const event = square.onJobCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A job was created. The signal resolves to the official `Square.JobCreatedEvent` payload with `type` narrowed to `job.created`. # On Job Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-job-updated A job was updated. `square.onJobUpdated` subscribes to `job.updated` for the selected seller. It requires `EMPLOYEES_READ`. ## Example ```ts automations/square-on-job-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onJobUpdated", () => { const event = square.onJobUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A job was updated. The signal resolves to the official `Square.JobUpdatedEvent` payload with `type` narrowed to `job.updated`. # On Labor Scheduled Shift Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-labor-scheduled-shift-created A scheduled shift was created. The event data contains the new ScheduledShift object. `square.onLaborScheduledShiftCreated` subscribes to `labor.scheduled_shift.created` for the selected seller. It requires `TIMECARDS_READ`. ## Example ```ts automations/square-on-labor-scheduled-shift-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onLaborScheduledShiftCreated", () => { const event = square.onLaborScheduledShiftCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A scheduled shift was created. The event data contains the new ScheduledShift object. The signal resolves to the official `Square.LaborScheduledShiftCreatedEvent` payload with `type` narrowed to `labor.scheduled_shift.created`. # On Labor Scheduled Shift Deleted Source: https://docs.automate.ax/reference/integrations/square/triggers/on-labor-scheduled-shift-deleted A scheduled shift was permanently deleted (hard delete). The event data contains the id of the deleted shift and the deleted field for the event is set to true . This event occurs in two scenarios: An update operation deletes a shift that was never published. It also triggers labor.scheduled_shift.updated . A publish operation deletes a previously published shift. Also triggers labor.scheduled_shift.updated and labor.scheduled_shift.published . For more information, see Deleting scheduled shifts . `square.onLaborScheduledShiftDeleted` subscribes to `labor.scheduled_shift.deleted` for the selected seller. It requires `TIMECARDS_READ`. ## Example ```ts automations/square-on-labor-scheduled-shift-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onLaborScheduledShiftDeleted", () => { const event = square.onLaborScheduledShiftDeleted() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A scheduled shift was permanently deleted (hard delete). The event data contains the id of the deleted shift and the deleted field for the event is set to true . This event occurs in two scenarios: An update operation deletes a shift that was never published. It also triggers labor.scheduled\_shift.updated . A publish operation deletes a previously published shift. Also triggers labor.scheduled\_shift.updated and labor.scheduled\_shift.published . For more information, see Deleting scheduled shifts . The signal resolves to the official `Square.LaborScheduledShiftDeletedEvent` payload with `type` narrowed to `labor.scheduled_shift.deleted`. # On Labor Scheduled Shift Published Source: https://docs.automate.ax/reference/integrations/square/triggers/on-labor-scheduled-shift-published A scheduled shift was published. The event data contains the published ScheduledShift object. For bulk operations, this event is triggered after each individual publish request succeeds. A publish operation also triggers a labor.scheduled_shift.updated event. `square.onLaborScheduledShiftPublished` subscribes to `labor.scheduled_shift.published` for the selected seller. It requires `TIMECARDS_READ`. ## Example ```ts automations/square-on-labor-scheduled-shift-published.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onLaborScheduledShiftPublished", () => { const event = square.onLaborScheduledShiftPublished() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A scheduled shift was published. The event data contains the published ScheduledShift object. For bulk operations, this event is triggered after each individual publish request succeeds. A publish operation also triggers a labor.scheduled\_shift.updated event. The signal resolves to the official `Square.LaborScheduledShiftPublishedEvent` payload with `type` narrowed to `labor.scheduled_shift.published`. # On Labor Scheduled Shift Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-labor-scheduled-shift-updated A scheduled shift was updated. The event data contains the updated ScheduledShift object. `square.onLaborScheduledShiftUpdated` subscribes to `labor.scheduled_shift.updated` for the selected seller. It requires `TIMECARDS_READ`. ## Example ```ts automations/square-on-labor-scheduled-shift-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onLaborScheduledShiftUpdated", () => { const event = square.onLaborScheduledShiftUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A scheduled shift was updated. The event data contains the updated ScheduledShift object. The signal resolves to the official `Square.LaborScheduledShiftUpdatedEvent` payload with `type` narrowed to `labor.scheduled_shift.updated`. # On Labor Timecard Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-labor-timecard-created A timecard was created at the start of a shift. The event data contains the complete Timecard object. `square.onLaborTimecardCreated` subscribes to `labor.timecard.created` for the selected seller. It requires `TIMECARDS_READ`. ## Example ```ts automations/square-on-labor-timecard-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onLaborTimecardCreated", () => { const event = square.onLaborTimecardCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A timecard was created at the start of a shift. The event data contains the complete Timecard object. The signal resolves to the official `Square.LaborTimecardCreatedEvent` payload with `type` narrowed to `labor.timecard.created`. # On Labor Timecard Deleted Source: https://docs.automate.ax/reference/integrations/square/triggers/on-labor-timecard-deleted A timecard was deleted. The event data contains only the id of the deleted timecard and the deleted field set to true . `square.onLaborTimecardDeleted` subscribes to `labor.timecard.deleted` for the selected seller. It requires `TIMECARDS_READ`. ## Example ```ts automations/square-on-labor-timecard-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onLaborTimecardDeleted", () => { const event = square.onLaborTimecardDeleted() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A timecard was deleted. The event data contains only the id of the deleted timecard and the deleted field set to true . The signal resolves to the official `Square.LaborTimecardDeletedEvent` payload with `type` narrowed to `labor.timecard.deleted`. # On Labor Timecard Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-labor-timecard-updated A timecard was updated. The event data contains the complete Timecard object. `square.onLaborTimecardUpdated` subscribes to `labor.timecard.updated` for the selected seller. It requires `TIMECARDS_READ`. ## Example ```ts automations/square-on-labor-timecard-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onLaborTimecardUpdated", () => { const event = square.onLaborTimecardUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A timecard was updated. The event data contains the complete Timecard object. The signal resolves to the official `Square.LaborTimecardUpdatedEvent` payload with `type` narrowed to `labor.timecard.updated`. # On Location Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-location-created A Location was created. `square.onLocationCreated` subscribes to `location.created` for the selected seller. It requires `MERCHANT_PROFILE_READ`. ## Example ```ts automations/square-on-location-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onLocationCreated", () => { const event = square.onLocationCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A Location was created. The signal resolves to the official `Square.LocationCreatedEvent` payload with `type` narrowed to `location.created`. # On Location Custom Attribute Definition Owned Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-location-custom-attribute-definition-owned-created A custom attribute definition was created by your application. The application that created the custom attribute definition is the owner of the definition and corresponding custom attributes. `square.onLocationCustomAttributeDefinitionOwnedCreated` subscribes to `location.custom_attribute_definition.owned.created` for the selected seller. It requires `MERCHANT_PROFILE_READ`. ## Example ```ts automations/square-on-location-custom-attribute-definition-owned-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation( "onLocationCustomAttributeDefinitionOwnedCreated", () => { const event = square.onLocationCustomAttributeDefinitionOwnedCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }, ) ``` ## Event A custom attribute definition was created by your application. The application that created the custom attribute definition is the owner of the definition and corresponding custom attributes. The signal resolves to the official `Square.LocationCustomAttributeDefinitionOwnedCreatedEvent` payload with `type` narrowed to `location.custom_attribute_definition.owned.created`. # On Location Custom Attribute Definition Owned Deleted Source: https://docs.automate.ax/reference/integrations/square/triggers/on-location-custom-attribute-definition-owned-deleted A custom attribute definition owned by your application was deleted. Note that only the definition owner can delete a custom attribute definition. `square.onLocationCustomAttributeDefinitionOwnedDeleted` subscribes to `location.custom_attribute_definition.owned.deleted` for the selected seller. It requires `MERCHANT_PROFILE_READ`. ## Example ```ts automations/square-on-location-custom-attribute-definition-owned-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation( "onLocationCustomAttributeDefinitionOwnedDeleted", () => { const event = square.onLocationCustomAttributeDefinitionOwnedDeleted() // Send event to the Square-aware order, CRM, or messaging action you use. }, ) ``` ## Event A custom attribute definition owned by your application was deleted. Note that only the definition owner can delete a custom attribute definition. The signal resolves to the official `Square.LocationCustomAttributeDefinitionOwnedDeletedEvent` payload with `type` narrowed to `location.custom_attribute_definition.owned.deleted`. # On Location Custom Attribute Definition Owned Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-location-custom-attribute-definition-owned-updated A custom attribute definition owned by your application was updated. Note that only the definition owner can update a custom attribute definition. `square.onLocationCustomAttributeDefinitionOwnedUpdated` subscribes to `location.custom_attribute_definition.owned.updated` for the selected seller. It requires `MERCHANT_PROFILE_READ`. ## Example ```ts automations/square-on-location-custom-attribute-definition-owned-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation( "onLocationCustomAttributeDefinitionOwnedUpdated", () => { const event = square.onLocationCustomAttributeDefinitionOwnedUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }, ) ``` ## Event A custom attribute definition owned by your application was updated. Note that only the definition owner can update a custom attribute definition. The signal resolves to the official `Square.LocationCustomAttributeDefinitionOwnedUpdatedEvent` payload with `type` narrowed to `location.custom_attribute_definition.owned.updated`. # On Location Custom Attribute Definition Visible Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-location-custom-attribute-definition-visible-created A custom attribute definition that's visible to your application was created. `square.onLocationCustomAttributeDefinitionVisibleCreated` subscribes to `location.custom_attribute_definition.visible.created` for the selected seller. It requires `MERCHANT_PROFILE_READ`. ## Example ```ts automations/square-on-location-custom-attribute-definition-visible-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation( "onLocationCustomAttributeDefinitionVisibleCreated", () => { const event = square.onLocationCustomAttributeDefinitionVisibleCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }, ) ``` ## Event A custom attribute definition that's visible to your application was created. The signal resolves to the official `Square.LocationCustomAttributeDefinitionVisibleCreatedEvent` payload with `type` narrowed to `location.custom_attribute_definition.visible.created`. # On Location Custom Attribute Definition Visible Deleted Source: https://docs.automate.ax/reference/integrations/square/triggers/on-location-custom-attribute-definition-visible-deleted A custom attribute definition that's visible to your application was deleted. `square.onLocationCustomAttributeDefinitionVisibleDeleted` subscribes to `location.custom_attribute_definition.visible.deleted` for the selected seller. It requires `MERCHANT_PROFILE_READ`. ## Example ```ts automations/square-on-location-custom-attribute-definition-visible-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation( "onLocationCustomAttributeDefinitionVisibleDeleted", () => { const event = square.onLocationCustomAttributeDefinitionVisibleDeleted() // Send event to the Square-aware order, CRM, or messaging action you use. }, ) ``` ## Event A custom attribute definition that's visible to your application was deleted. The signal resolves to the official `Square.LocationCustomAttributeDefinitionVisibleDeletedEvent` payload with `type` narrowed to `location.custom_attribute_definition.visible.deleted`. # On Location Custom Attribute Definition Visible Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-location-custom-attribute-definition-visible-updated A custom attribute definition that's visible to your application was updated. `square.onLocationCustomAttributeDefinitionVisibleUpdated` subscribes to `location.custom_attribute_definition.visible.updated` for the selected seller. It requires `MERCHANT_PROFILE_READ`. ## Example ```ts automations/square-on-location-custom-attribute-definition-visible-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation( "onLocationCustomAttributeDefinitionVisibleUpdated", () => { const event = square.onLocationCustomAttributeDefinitionVisibleUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }, ) ``` ## Event A custom attribute definition that's visible to your application was updated. The signal resolves to the official `Square.LocationCustomAttributeDefinitionVisibleUpdatedEvent` payload with `type` narrowed to `location.custom_attribute_definition.visible.updated`. # On Location Custom Attribute Owned Deleted Source: https://docs.automate.ax/reference/integrations/square/triggers/on-location-custom-attribute-owned-deleted A custom attribute owned by your application was deleted from a location. `square.onLocationCustomAttributeOwnedDeleted` subscribes to `location.custom_attribute.owned.deleted` for the selected seller. It requires `MERCHANT_PROFILE_READ`. ## Example ```ts automations/square-on-location-custom-attribute-owned-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onLocationCustomAttributeOwnedDeleted", () => { const event = square.onLocationCustomAttributeOwnedDeleted() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A custom attribute owned by your application was deleted from a location. The signal resolves to the official `Square.LocationCustomAttributeOwnedDeletedEvent` payload with `type` narrowed to `location.custom_attribute.owned.deleted`. # On Location Custom Attribute Owned Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-location-custom-attribute-owned-updated A custom attribute owned by your application was created or updated for a location. `square.onLocationCustomAttributeOwnedUpdated` subscribes to `location.custom_attribute.owned.updated` for the selected seller. It requires `MERCHANT_PROFILE_READ`. ## Example ```ts automations/square-on-location-custom-attribute-owned-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onLocationCustomAttributeOwnedUpdated", () => { const event = square.onLocationCustomAttributeOwnedUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A custom attribute owned by your application was created or updated for a location. The signal resolves to the official `Square.LocationCustomAttributeOwnedUpdatedEvent` payload with `type` narrowed to `location.custom_attribute.owned.updated`. # On Location Custom Attribute Visible Deleted Source: https://docs.automate.ax/reference/integrations/square/triggers/on-location-custom-attribute-visible-deleted A custom attribute that's visible to your application was deleted from a location. `square.onLocationCustomAttributeVisibleDeleted` subscribes to `location.custom_attribute.visible.deleted` for the selected seller. It requires `MERCHANT_PROFILE_READ`. ## Example ```ts automations/square-on-location-custom-attribute-visible-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onLocationCustomAttributeVisibleDeleted", () => { const event = square.onLocationCustomAttributeVisibleDeleted() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A custom attribute that's visible to your application was deleted from a location. The signal resolves to the official `Square.LocationCustomAttributeVisibleDeletedEvent` payload with `type` narrowed to `location.custom_attribute.visible.deleted`. # On Location Custom Attribute Visible Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-location-custom-attribute-visible-updated A custom attribute that's visible to your application was created or updated for a location. `square.onLocationCustomAttributeVisibleUpdated` subscribes to `location.custom_attribute.visible.updated` for the selected seller. It requires `MERCHANT_PROFILE_READ`. ## Example ```ts automations/square-on-location-custom-attribute-visible-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onLocationCustomAttributeVisibleUpdated", () => { const event = square.onLocationCustomAttributeVisibleUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A custom attribute that's visible to your application was created or updated for a location. The signal resolves to the official `Square.LocationCustomAttributeVisibleUpdatedEvent` payload with `type` narrowed to `location.custom_attribute.visible.updated`. # On Location Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-location-updated A Location was updated. `square.onLocationUpdated` subscribes to `location.updated` for the selected seller. It requires `MERCHANT_PROFILE_READ`. ## Example ```ts automations/square-on-location-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onLocationUpdated", () => { const event = square.onLocationUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A Location was updated. The signal resolves to the official `Square.LocationUpdatedEvent` payload with `type` narrowed to `location.updated`. # On Loyalty Account Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-loyalty-account-created A loyalty account was created for a buyer. A loyalty account can be created using any of the following methods, which all publish this event: An application calls the CreateLoyaltyAccount endpoint. A buyer enrolls in the program from a Square Point of Sale application. The seller enrolls a buyer using the Customer Directory. The seller merges two customer accounts into one account using the Customer Directory. In this process, sellers might merge the two corresponding loyalty accounts by creating a new account and deleting the existing accounts. `square.onLoyaltyAccountCreated` subscribes to `loyalty.account.created` for the selected seller. It requires `LOYALTY_READ`. ## Example ```ts automations/square-on-loyalty-account-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onLoyaltyAccountCreated", () => { const event = square.onLoyaltyAccountCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A loyalty account was created for a buyer. A loyalty account can be created using any of the following methods, which all publish this event: An application calls the CreateLoyaltyAccount endpoint. A buyer enrolls in the program from a Square Point of Sale application. The seller enrolls a buyer using the Customer Directory. The seller merges two customer accounts into one account using the Customer Directory. In this process, sellers might merge the two corresponding loyalty accounts by creating a new account and deleting the existing accounts. The signal resolves to the official `Square.LoyaltyAccountCreatedEvent` payload with `type` narrowed to `loyalty.account.created`. # On Loyalty Account Deleted Source: https://docs.automate.ax/reference/integrations/square/triggers/on-loyalty-account-deleted Published when a loyalty account is deleted. The published event does not contain the customer_id that was associated with the deleted account. The following actions to delete the account can publish this event: The seller deletes an account using the Square Dashboard. The seller merges two customer profiles using the Customer Directory. In this process, sellers might merge the two corresponding loyalty accounts by creating a new account and deleting the existing accounts. `square.onLoyaltyAccountDeleted` subscribes to `loyalty.account.deleted` for the selected seller. It requires `LOYALTY_READ`. ## Example ```ts automations/square-on-loyalty-account-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onLoyaltyAccountDeleted", () => { const event = square.onLoyaltyAccountDeleted() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event Published when a loyalty account is deleted. The published event does not contain the customer\_id that was associated with the deleted account. The following actions to delete the account can publish this event: The seller deletes an account using the Square Dashboard. The seller merges two customer profiles using the Customer Directory. In this process, sellers might merge the two corresponding loyalty accounts by creating a new account and deleting the existing accounts. The signal resolves to the official `Square.LoyaltyAccountDeletedEvent` payload with `type` narrowed to `loyalty.account.deleted`. # On Loyalty Account Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-loyalty-account-updated A loyalty account was updated. For example: The seller updates the phone number registered for the loyalty account using the Square Dashboard. For more information, see Square Loyalty FAQ . Any change in the loyalty point balance, such as points added for visits, points expiration, or a manual adjustment to the point balance that a seller might perform. The customer ID of the loyalty account was changed. For example, the loyalty account moved to another customer. `square.onLoyaltyAccountUpdated` subscribes to `loyalty.account.updated` for the selected seller. It requires `LOYALTY_READ`. ## Example ```ts automations/square-on-loyalty-account-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onLoyaltyAccountUpdated", () => { const event = square.onLoyaltyAccountUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A loyalty account was updated. For example: The seller updates the phone number registered for the loyalty account using the Square Dashboard. For more information, see Square Loyalty FAQ . Any change in the loyalty point balance, such as points added for visits, points expiration, or a manual adjustment to the point balance that a seller might perform. The customer ID of the loyalty account was changed. For example, the loyalty account moved to another customer. The signal resolves to the official `Square.LoyaltyAccountUpdatedEvent` payload with `type` narrowed to `loyalty.account.updated`. # On Loyalty Event Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-loyalty-event-created A balance-changing event occurred. Square Loyalty maintains a ledger of events that occur over the lifetime of a loyalty account. Square publishes notifications for each loyalty event logged to the ledger. These loyalty events are immutable, which means they are never updated or deleted. For example, when a buyer redeems a reward and then returns the order, Square publishes separate notifications for the corresponding CREATE_REWARD and DELETE_REWARD events. Similarly, Square publishes a notification for the OTHER event when points are deducted after a purchase that accrued points is refunded. `square.onLoyaltyEventCreated` subscribes to `loyalty.event.created` for the selected seller. It requires `LOYALTY_READ`. ## Example ```ts automations/square-on-loyalty-event-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onLoyaltyEventCreated", () => { const event = square.onLoyaltyEventCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A balance-changing event occurred. Square Loyalty maintains a ledger of events that occur over the lifetime of a loyalty account. Square publishes notifications for each loyalty event logged to the ledger. These loyalty events are immutable, which means they are never updated or deleted. For example, when a buyer redeems a reward and then returns the order, Square publishes separate notifications for the corresponding CREATE\_REWARD and DELETE\_REWARD events. Similarly, Square publishes a notification for the OTHER event when points are deducted after a purchase that accrued points is refunded. The signal resolves to the official `Square.LoyaltyEventCreatedEvent` payload with `type` narrowed to `loyalty.event.created`. # On Loyalty Program Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-loyalty-program-created A loyalty program was created. Loyalty programs can only be created from the Square Dashboard. `square.onLoyaltyProgramCreated` subscribes to `loyalty.program.created` for the selected seller. It requires `LOYALTY_READ`. ## Example ```ts automations/square-on-loyalty-program-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onLoyaltyProgramCreated", () => { const event = square.onLoyaltyProgramCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A loyalty program was created. Loyalty programs can only be created from the Square Dashboard. The signal resolves to the official `Square.LoyaltyProgramCreatedEvent` payload with `type` narrowed to `loyalty.program.created`. # On Loyalty Program Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-loyalty-program-updated A loyalty program was updated. Loyalty programs can only be updated from the Square Dashboard. `square.onLoyaltyProgramUpdated` subscribes to `loyalty.program.updated` for the selected seller. It requires `LOYALTY_READ`. ## Example ```ts automations/square-on-loyalty-program-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onLoyaltyProgramUpdated", () => { const event = square.onLoyaltyProgramUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A loyalty program was updated. Loyalty programs can only be updated from the Square Dashboard. The signal resolves to the official `Square.LoyaltyProgramUpdatedEvent` payload with `type` narrowed to `loyalty.program.updated`. # On Loyalty Promotion Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-loyalty-promotion-created A loyalty promotion was created. `square.onLoyaltyPromotionCreated` subscribes to `loyalty.promotion.created` for the selected seller. It requires `LOYALTY_READ`. ## Example ```ts automations/square-on-loyalty-promotion-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onLoyaltyPromotionCreated", () => { const event = square.onLoyaltyPromotionCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A loyalty promotion was created. The signal resolves to the official `Square.LoyaltyPromotionCreatedEvent` payload with `type` narrowed to `loyalty.promotion.created`. # On Loyalty Promotion Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-loyalty-promotion-updated A loyalty promotion was canceled. `square.onLoyaltyPromotionUpdated` subscribes to `loyalty.promotion.updated` for the selected seller. It requires `LOYALTY_READ`. ## Example ```ts automations/square-on-loyalty-promotion-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onLoyaltyPromotionUpdated", () => { const event = square.onLoyaltyPromotionUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A loyalty promotion was canceled. The signal resolves to the official `Square.LoyaltyPromotionUpdatedEvent` payload with `type` narrowed to `loyalty.promotion.updated`. # On Merchant Custom Attribute Definition Owned Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-merchant-custom-attribute-definition-owned-created A custom attribute definition was created by your application. The application that created the custom attribute definition is the owner of the definition and corresponding custom attributes. `square.onMerchantCustomAttributeDefinitionOwnedCreated` subscribes to `merchant.custom_attribute_definition.owned.created` for the selected seller. It requires `MERCHANT_PROFILE_READ`. ## Example ```ts automations/square-on-merchant-custom-attribute-definition-owned-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation( "onMerchantCustomAttributeDefinitionOwnedCreated", () => { const event = square.onMerchantCustomAttributeDefinitionOwnedCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }, ) ``` ## Event A custom attribute definition was created by your application. The application that created the custom attribute definition is the owner of the definition and corresponding custom attributes. The signal resolves to the official `Square.MerchantCustomAttributeDefinitionOwnedCreatedEvent` payload with `type` narrowed to `merchant.custom_attribute_definition.owned.created`. # On Merchant Custom Attribute Definition Owned Deleted Source: https://docs.automate.ax/reference/integrations/square/triggers/on-merchant-custom-attribute-definition-owned-deleted A custom attribute definition owned by your application was deleted. Note that only the definition owner can delete a custom attribute definition. `square.onMerchantCustomAttributeDefinitionOwnedDeleted` subscribes to `merchant.custom_attribute_definition.owned.deleted` for the selected seller. It requires `MERCHANT_PROFILE_READ`. ## Example ```ts automations/square-on-merchant-custom-attribute-definition-owned-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation( "onMerchantCustomAttributeDefinitionOwnedDeleted", () => { const event = square.onMerchantCustomAttributeDefinitionOwnedDeleted() // Send event to the Square-aware order, CRM, or messaging action you use. }, ) ``` ## Event A custom attribute definition owned by your application was deleted. Note that only the definition owner can delete a custom attribute definition. The signal resolves to the official `Square.MerchantCustomAttributeDefinitionOwnedDeletedEvent` payload with `type` narrowed to `merchant.custom_attribute_definition.owned.deleted`. # On Merchant Custom Attribute Definition Owned Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-merchant-custom-attribute-definition-owned-updated A custom attribute definition owned by your application was updated. Note that only the definition owner can update a custom attribute definition. `square.onMerchantCustomAttributeDefinitionOwnedUpdated` subscribes to `merchant.custom_attribute_definition.owned.updated` for the selected seller. It requires `MERCHANT_PROFILE_READ`. ## Example ```ts automations/square-on-merchant-custom-attribute-definition-owned-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation( "onMerchantCustomAttributeDefinitionOwnedUpdated", () => { const event = square.onMerchantCustomAttributeDefinitionOwnedUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }, ) ``` ## Event A custom attribute definition owned by your application was updated. Note that only the definition owner can update a custom attribute definition. The signal resolves to the official `Square.MerchantCustomAttributeDefinitionOwnedUpdatedEvent` payload with `type` narrowed to `merchant.custom_attribute_definition.owned.updated`. # On Merchant Custom Attribute Definition Visible Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-merchant-custom-attribute-definition-visible-created A custom attribute definition that's visible to your application was created. `square.onMerchantCustomAttributeDefinitionVisibleCreated` subscribes to `merchant.custom_attribute_definition.visible.created` for the selected seller. It requires `MERCHANT_PROFILE_READ`. ## Example ```ts automations/square-on-merchant-custom-attribute-definition-visible-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation( "onMerchantCustomAttributeDefinitionVisibleCreated", () => { const event = square.onMerchantCustomAttributeDefinitionVisibleCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }, ) ``` ## Event A custom attribute definition that's visible to your application was created. The signal resolves to the official `Square.MerchantCustomAttributeDefinitionVisibleCreatedEvent` payload with `type` narrowed to `merchant.custom_attribute_definition.visible.created`. # On Merchant Custom Attribute Definition Visible Deleted Source: https://docs.automate.ax/reference/integrations/square/triggers/on-merchant-custom-attribute-definition-visible-deleted A custom attribute definition that's visible to your application was deleted. `square.onMerchantCustomAttributeDefinitionVisibleDeleted` subscribes to `merchant.custom_attribute_definition.visible.deleted` for the selected seller. It requires `MERCHANT_PROFILE_READ`. ## Example ```ts automations/square-on-merchant-custom-attribute-definition-visible-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation( "onMerchantCustomAttributeDefinitionVisibleDeleted", () => { const event = square.onMerchantCustomAttributeDefinitionVisibleDeleted() // Send event to the Square-aware order, CRM, or messaging action you use. }, ) ``` ## Event A custom attribute definition that's visible to your application was deleted. The signal resolves to the official `Square.MerchantCustomAttributeDefinitionVisibleDeletedEvent` payload with `type` narrowed to `merchant.custom_attribute_definition.visible.deleted`. # On Merchant Custom Attribute Definition Visible Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-merchant-custom-attribute-definition-visible-updated A custom attribute definition that's visible to your application was updated. `square.onMerchantCustomAttributeDefinitionVisibleUpdated` subscribes to `merchant.custom_attribute_definition.visible.updated` for the selected seller. It requires `MERCHANT_PROFILE_READ`. ## Example ```ts automations/square-on-merchant-custom-attribute-definition-visible-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation( "onMerchantCustomAttributeDefinitionVisibleUpdated", () => { const event = square.onMerchantCustomAttributeDefinitionVisibleUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }, ) ``` ## Event A custom attribute definition that's visible to your application was updated. The signal resolves to the official `Square.MerchantCustomAttributeDefinitionVisibleUpdatedEvent` payload with `type` narrowed to `merchant.custom_attribute_definition.visible.updated`. # On Merchant Custom Attribute Owned Deleted Source: https://docs.automate.ax/reference/integrations/square/triggers/on-merchant-custom-attribute-owned-deleted A custom attribute owned by your application was deleted from a merchant. `square.onMerchantCustomAttributeOwnedDeleted` subscribes to `merchant.custom_attribute.owned.deleted` for the selected seller. It requires `MERCHANT_PROFILE_READ`. ## Example ```ts automations/square-on-merchant-custom-attribute-owned-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onMerchantCustomAttributeOwnedDeleted", () => { const event = square.onMerchantCustomAttributeOwnedDeleted() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A custom attribute owned by your application was deleted from a merchant. The signal resolves to the official `Square.MerchantCustomAttributeOwnedDeletedEvent` payload with `type` narrowed to `merchant.custom_attribute.owned.deleted`. # On Merchant Custom Attribute Owned Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-merchant-custom-attribute-owned-updated A custom attribute owned by your application was created or updated for a merchant. `square.onMerchantCustomAttributeOwnedUpdated` subscribes to `merchant.custom_attribute.owned.updated` for the selected seller. It requires `MERCHANT_PROFILE_READ`. ## Example ```ts automations/square-on-merchant-custom-attribute-owned-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onMerchantCustomAttributeOwnedUpdated", () => { const event = square.onMerchantCustomAttributeOwnedUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A custom attribute owned by your application was created or updated for a merchant. The signal resolves to the official `Square.MerchantCustomAttributeOwnedUpdatedEvent` payload with `type` narrowed to `merchant.custom_attribute.owned.updated`. # On Merchant Custom Attribute Visible Deleted Source: https://docs.automate.ax/reference/integrations/square/triggers/on-merchant-custom-attribute-visible-deleted A custom attribute that's visible to your application was deleted from a merchant. `square.onMerchantCustomAttributeVisibleDeleted` subscribes to `merchant.custom_attribute.visible.deleted` for the selected seller. It requires `MERCHANT_PROFILE_READ`. ## Example ```ts automations/square-on-merchant-custom-attribute-visible-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onMerchantCustomAttributeVisibleDeleted", () => { const event = square.onMerchantCustomAttributeVisibleDeleted() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A custom attribute that's visible to your application was deleted from a merchant. The signal resolves to the official `Square.MerchantCustomAttributeVisibleDeletedEvent` payload with `type` narrowed to `merchant.custom_attribute.visible.deleted`. # On Merchant Custom Attribute Visible Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-merchant-custom-attribute-visible-updated A custom attribute that's visible to your application was created or updated for a merchant. `square.onMerchantCustomAttributeVisibleUpdated` subscribes to `merchant.custom_attribute.visible.updated` for the selected seller. It requires `MERCHANT_PROFILE_READ`. ## Example ```ts automations/square-on-merchant-custom-attribute-visible-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onMerchantCustomAttributeVisibleUpdated", () => { const event = square.onMerchantCustomAttributeVisibleUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A custom attribute that's visible to your application was created or updated for a merchant. The signal resolves to the official `Square.MerchantCustomAttributeVisibleUpdatedEvent` payload with `type` narrowed to `merchant.custom_attribute.visible.updated`. # On Oauth Authorization Revoked Source: https://docs.automate.ax/reference/integrations/square/triggers/on-oauth-authorization-revoked Notifies an application whenever a seller revokes all access tokens and refresh tokens granted to the application. `square.onOauthAuthorizationRevoked` subscribes to `oauth.authorization.revoked` for the selected seller. It does not require an additional Square OAuth permission. ## Example ```ts automations/square-on-oauth-authorization-revoked.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onOauthAuthorizationRevoked", () => { const event = square.onOauthAuthorizationRevoked() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event Notifies an application whenever a seller revokes all access tokens and refresh tokens granted to the application. The signal resolves to the official `Square.OauthAuthorizationRevokedEvent` payload with `type` narrowed to `oauth.authorization.revoked`. # On Online Checkout Location Settings Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-online-checkout-location-settings-updated Published when online checkout location settings are updated. `square.onOnlineCheckoutLocationSettingsUpdated` subscribes to `online_checkout.location_settings.updated` for the selected seller. It requires `MERCHANT_PROFILE_WRITE` and `MERCHANT_PROFILE_READ`. ## Example ```ts automations/square-on-online-checkout-location-settings-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onOnlineCheckoutLocationSettingsUpdated", () => { const event = square.onOnlineCheckoutLocationSettingsUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event Published when online checkout location settings are updated. The signal resolves to the official `Square.LocationSettingsUpdatedEvent` payload with `type` narrowed to `online_checkout.location_settings.updated`. # On Online Checkout Merchant Settings Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-online-checkout-merchant-settings-updated Published when online checkout merchant settings are updated. `square.onOnlineCheckoutMerchantSettingsUpdated` subscribes to `online_checkout.merchant_settings.updated` for the selected seller. It requires `MERCHANT_PROFILE_WRITE` and `MERCHANT_PROFILE_READ`. ## Example ```ts automations/square-on-online-checkout-merchant-settings-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onOnlineCheckoutMerchantSettingsUpdated", () => { const event = square.onOnlineCheckoutMerchantSettingsUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event Published when online checkout merchant settings are updated. The signal resolves to the official `Square.MerchantSettingsUpdatedEvent` payload with `type` narrowed to `online_checkout.merchant_settings.updated`. # On Order Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-order-created An Order was created. This event is triggered when an order is created by a Square product or your application. `square.onOrderCreated` subscribes to `order.created` for the selected seller. It requires `ORDERS_READ`. ## Example ```ts automations/square-on-order-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onOrderCreated", () => { const event = square.onOrderCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event An Order was created. This event is triggered when an order is created by a Square product or your application. The signal resolves to the official `Square.OrderCreatedEvent` payload with `type` narrowed to `order.created`. # On Order Custom Attribute Definition Owned Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-order-custom-attribute-definition-owned-created A custom attribute definition was created by your application. The application that created the custom attribute definition is the owner of the definition and corresponding custom attributes. `square.onOrderCustomAttributeDefinitionOwnedCreated` subscribes to `order.custom_attribute_definition.owned.created` for the selected seller. It requires `ORDERS_READ`. ## Example ```ts automations/square-on-order-custom-attribute-definition-owned-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation( "onOrderCustomAttributeDefinitionOwnedCreated", () => { const event = square.onOrderCustomAttributeDefinitionOwnedCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }, ) ``` ## Event A custom attribute definition was created by your application. The application that created the custom attribute definition is the owner of the definition and corresponding custom attributes. The signal resolves to the official `Square.OrderCustomAttributeDefinitionOwnedCreatedEvent` payload with `type` narrowed to `order.custom_attribute_definition.owned.created`. # On Order Custom Attribute Definition Owned Deleted Source: https://docs.automate.ax/reference/integrations/square/triggers/on-order-custom-attribute-definition-owned-deleted A custom attribute definition owned by your application was deleted. Note that only the definition owner can delete a custom attribute definition. `square.onOrderCustomAttributeDefinitionOwnedDeleted` subscribes to `order.custom_attribute_definition.owned.deleted` for the selected seller. It requires `ORDERS_READ`. ## Example ```ts automations/square-on-order-custom-attribute-definition-owned-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation( "onOrderCustomAttributeDefinitionOwnedDeleted", () => { const event = square.onOrderCustomAttributeDefinitionOwnedDeleted() // Send event to the Square-aware order, CRM, or messaging action you use. }, ) ``` ## Event A custom attribute definition owned by your application was deleted. Note that only the definition owner can delete a custom attribute definition. The signal resolves to the official `Square.OrderCustomAttributeDefinitionOwnedDeletedEvent` payload with `type` narrowed to `order.custom_attribute_definition.owned.deleted`. # On Order Custom Attribute Definition Owned Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-order-custom-attribute-definition-owned-updated A custom attribute definition owned by your application was updated. Note that only the definition owner can update a custom attribute definition. `square.onOrderCustomAttributeDefinitionOwnedUpdated` subscribes to `order.custom_attribute_definition.owned.updated` for the selected seller. It requires `ORDERS_READ`. ## Example ```ts automations/square-on-order-custom-attribute-definition-owned-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation( "onOrderCustomAttributeDefinitionOwnedUpdated", () => { const event = square.onOrderCustomAttributeDefinitionOwnedUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }, ) ``` ## Event A custom attribute definition owned by your application was updated. Note that only the definition owner can update a custom attribute definition. The signal resolves to the official `Square.OrderCustomAttributeDefinitionOwnedUpdatedEvent` payload with `type` narrowed to `order.custom_attribute_definition.owned.updated`. # On Order Custom Attribute Definition Visible Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-order-custom-attribute-definition-visible-created A custom attribute definition that's visible to your application was created. `square.onOrderCustomAttributeDefinitionVisibleCreated` subscribes to `order.custom_attribute_definition.visible.created` for the selected seller. It requires `ORDERS_READ`. ## Example ```ts automations/square-on-order-custom-attribute-definition-visible-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation( "onOrderCustomAttributeDefinitionVisibleCreated", () => { const event = square.onOrderCustomAttributeDefinitionVisibleCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }, ) ``` ## Event A custom attribute definition that's visible to your application was created. The signal resolves to the official `Square.OrderCustomAttributeDefinitionVisibleCreatedEvent` payload with `type` narrowed to `order.custom_attribute_definition.visible.created`. # On Order Custom Attribute Definition Visible Deleted Source: https://docs.automate.ax/reference/integrations/square/triggers/on-order-custom-attribute-definition-visible-deleted A custom attribute definition that's visible to your application was deleted. `square.onOrderCustomAttributeDefinitionVisibleDeleted` subscribes to `order.custom_attribute_definition.visible.deleted` for the selected seller. It requires `ORDERS_READ`. ## Example ```ts automations/square-on-order-custom-attribute-definition-visible-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation( "onOrderCustomAttributeDefinitionVisibleDeleted", () => { const event = square.onOrderCustomAttributeDefinitionVisibleDeleted() // Send event to the Square-aware order, CRM, or messaging action you use. }, ) ``` ## Event A custom attribute definition that's visible to your application was deleted. The signal resolves to the official `Square.OrderCustomAttributeDefinitionVisibleDeletedEvent` payload with `type` narrowed to `order.custom_attribute_definition.visible.deleted`. # On Order Custom Attribute Definition Visible Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-order-custom-attribute-definition-visible-updated A custom attribute definition that's visible to your application was updated. `square.onOrderCustomAttributeDefinitionVisibleUpdated` subscribes to `order.custom_attribute_definition.visible.updated` for the selected seller. It requires `ORDERS_READ`. ## Example ```ts automations/square-on-order-custom-attribute-definition-visible-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation( "onOrderCustomAttributeDefinitionVisibleUpdated", () => { const event = square.onOrderCustomAttributeDefinitionVisibleUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }, ) ``` ## Event A custom attribute definition that's visible to your application was updated. The signal resolves to the official `Square.OrderCustomAttributeDefinitionVisibleUpdatedEvent` payload with `type` narrowed to `order.custom_attribute_definition.visible.updated`. # On Order Custom Attribute Owned Deleted Source: https://docs.automate.ax/reference/integrations/square/triggers/on-order-custom-attribute-owned-deleted A custom attribute owned by your application was deleted from an order. `square.onOrderCustomAttributeOwnedDeleted` subscribes to `order.custom_attribute.owned.deleted` for the selected seller. It requires `ORDERS_READ`. ## Example ```ts automations/square-on-order-custom-attribute-owned-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onOrderCustomAttributeOwnedDeleted", () => { const event = square.onOrderCustomAttributeOwnedDeleted() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A custom attribute owned by your application was deleted from an order. The signal resolves to the official `Square.OrderCustomAttributeOwnedDeletedEvent` payload with `type` narrowed to `order.custom_attribute.owned.deleted`. # On Order Custom Attribute Owned Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-order-custom-attribute-owned-updated A custom attribute owned by your application was created or updated for an order. `square.onOrderCustomAttributeOwnedUpdated` subscribes to `order.custom_attribute.owned.updated` for the selected seller. It requires `ORDERS_READ`. ## Example ```ts automations/square-on-order-custom-attribute-owned-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onOrderCustomAttributeOwnedUpdated", () => { const event = square.onOrderCustomAttributeOwnedUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A custom attribute owned by your application was created or updated for an order. The signal resolves to the official `Square.OrderCustomAttributeOwnedUpdatedEvent` payload with `type` narrowed to `order.custom_attribute.owned.updated`. # On Order Custom Attribute Visible Deleted Source: https://docs.automate.ax/reference/integrations/square/triggers/on-order-custom-attribute-visible-deleted A custom attribute that's visible to your application was deleted from an order. `square.onOrderCustomAttributeVisibleDeleted` subscribes to `order.custom_attribute.visible.deleted` for the selected seller. It requires `ORDERS_READ`. ## Example ```ts automations/square-on-order-custom-attribute-visible-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onOrderCustomAttributeVisibleDeleted", () => { const event = square.onOrderCustomAttributeVisibleDeleted() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A custom attribute that's visible to your application was deleted from an order. The signal resolves to the official `Square.OrderCustomAttributeVisibleDeletedEvent` payload with `type` narrowed to `order.custom_attribute.visible.deleted`. # On Order Custom Attribute Visible Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-order-custom-attribute-visible-updated A custom attribute that's visible to your application was created or updated for an order. `square.onOrderCustomAttributeVisibleUpdated` subscribes to `order.custom_attribute.visible.updated` for the selected seller. It requires `ORDERS_READ`. ## Example ```ts automations/square-on-order-custom-attribute-visible-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onOrderCustomAttributeVisibleUpdated", () => { const event = square.onOrderCustomAttributeVisibleUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A custom attribute that's visible to your application was created or updated for an order. The signal resolves to the official `Square.OrderCustomAttributeVisibleUpdatedEvent` payload with `type` narrowed to `order.custom_attribute.visible.updated`. # On Order Fulfillment Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-order-fulfillment-updated An OrderFulfillment was created or updated. This event is triggered when a Square product updates an order fulfillment or when a fulfillment is updated by an UpdateOrder endpoint call. `square.onOrderFulfillmentUpdated` subscribes to `order.fulfillment.updated` for the selected seller. It requires `ORDERS_READ`. ## Example ```ts automations/square-on-order-fulfillment-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onOrderFulfillmentUpdated", () => { const event = square.onOrderFulfillmentUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event An OrderFulfillment was created or updated. This event is triggered when a Square product updates an order fulfillment or when a fulfillment is updated by an UpdateOrder endpoint call. The signal resolves to the official `Square.OrderFulfillmentUpdatedEvent` payload with `type` narrowed to `order.fulfillment.updated`. # On Order Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-order-updated An Order was updated. This event is triggered only by the UpdateOrder endpoint call or when a seller updates an order using a Square product. `square.onOrderUpdated` subscribes to `order.updated` for the selected seller. It requires `ORDERS_READ`. ## Example ```ts automations/square-on-order-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onOrderUpdated", () => { const event = square.onOrderUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event An Order was updated. This event is triggered only by the UpdateOrder endpoint call or when a seller updates an order using a Square product. The signal resolves to the official `Square.OrderUpdatedEvent` payload with `type` narrowed to `order.updated`. # On Payment Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-payment-created A Payment was created. `square.onPaymentCreated` subscribes to `payment.created` for the selected seller. It requires `PAYMENTS_READ`. ## Example ```ts automations/square-on-payment-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onPaymentCreated", () => { const event = square.onPaymentCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A Payment was created. The signal resolves to the official `Square.PaymentCreatedEvent` payload with `type` narrowed to `payment.created`. # On Payment Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-payment-updated A Payment field was updated. For example, the payment.status or card_details.status field is updated when a payment is authorized, canceled, or completed. `square.onPaymentUpdated` subscribes to `payment.updated` for the selected seller. It requires `PAYMENTS_READ`. ## Example ```ts automations/square-on-payment-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onPaymentUpdated", () => { const event = square.onPaymentUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A Payment field was updated. For example, the payment.status or card\_details.status field is updated when a payment is authorized, canceled, or completed. The signal resolves to the official `Square.PaymentUpdatedEvent` payload with `type` narrowed to `payment.updated`. # On Payout Failed Source: https://docs.automate.ax/reference/integrations/square/triggers/on-payout-failed A Payout has failed. `square.onPayoutFailed` subscribes to `payout.failed` for the selected seller. It requires `PAYOUTS_READ`. ## Example ```ts automations/square-on-payout-failed.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onPayoutFailed", () => { const event = square.onPayoutFailed() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A Payout has failed. The signal resolves to the official `Square.PayoutFailedEvent` payload with `type` narrowed to `payout.failed`. # On Payout Paid Source: https://docs.automate.ax/reference/integrations/square/triggers/on-payout-paid A Payout was completed. `square.onPayoutPaid` subscribes to `payout.paid` for the selected seller. It requires `PAYOUTS_READ`. ## Example ```ts automations/square-on-payout-paid.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onPayoutPaid", () => { const event = square.onPayoutPaid() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A Payout was completed. The signal resolves to the official `Square.PayoutPaidEvent` payload with `type` narrowed to `payout.paid`. # On Payout Sent Source: https://docs.automate.ax/reference/integrations/square/triggers/on-payout-sent A Payout was sent. `square.onPayoutSent` subscribes to `payout.sent` for the selected seller. It requires `PAYOUTS_READ`. ## Example ```ts automations/square-on-payout-sent.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onPayoutSent", () => { const event = square.onPayoutSent() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A Payout was sent. The signal resolves to the official `Square.PayoutSentEvent` payload with `type` narrowed to `payout.sent`. # On Refund Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-refund-created A Refund was created. `square.onRefundCreated` subscribes to `refund.created` for the selected seller. It requires `PAYMENTS_READ`. ## Example ```ts automations/square-on-refund-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onRefundCreated", () => { const event = square.onRefundCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A Refund was created. The signal resolves to the official `Square.RefundCreatedEvent` payload with `type` narrowed to `refund.created`. # On Refund Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-refund-updated A Refund was updated. Typically, the refund.status field changes when a refund is completed. `square.onRefundUpdated` subscribes to `refund.updated` for the selected seller. It requires `PAYMENTS_READ`. ## Example ```ts automations/square-on-refund-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onRefundUpdated", () => { const event = square.onRefundUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A Refund was updated. Typically, the refund.status field changes when a refund is completed. The signal resolves to the official `Square.RefundUpdatedEvent` payload with `type` narrowed to `refund.updated`. # On Subscription Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-subscription-created A Subscription object was created. `square.onSubscriptionCreated` subscribes to `subscription.created` for the selected seller. It requires `SUBSCRIPTIONS_READ`. ## Example ```ts automations/square-on-subscription-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onSubscriptionCreated", () => { const event = square.onSubscriptionCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A Subscription object was created. The signal resolves to the official `Square.SubscriptionCreatedEvent` payload with `type` narrowed to `subscription.created`. # On Subscription Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-subscription-updated A Subscription object was updated. `square.onSubscriptionUpdated` subscribes to `subscription.updated` for the selected seller. It requires `SUBSCRIPTIONS_READ`. ## Example ```ts automations/square-on-subscription-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onSubscriptionUpdated", () => { const event = square.onSubscriptionUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A Subscription object was updated. The signal resolves to the official `Square.SubscriptionUpdatedEvent` payload with `type` narrowed to `subscription.updated`. # On Team Member Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-team-member-created A team member was created. `square.onTeamMemberCreated` subscribes to `team_member.created` for the selected seller. It requires `EMPLOYEES_READ`. ## Example ```ts automations/square-on-team-member-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onTeamMemberCreated", () => { const event = square.onTeamMemberCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A team member was created. The signal resolves to the official `Square.TeamMemberCreatedEvent` payload with `type` narrowed to `team_member.created`. # On Team Member Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-team-member-updated A team member was updated. `square.onTeamMemberUpdated` subscribes to `team_member.updated` for the selected seller. It requires `EMPLOYEES_READ`. ## Example ```ts automations/square-on-team-member-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onTeamMemberUpdated", () => { const event = square.onTeamMemberUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A team member was updated. The signal resolves to the official `Square.TeamMemberUpdatedEvent` payload with `type` narrowed to `team_member.updated`. # On Team Member Wage Setting Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-team-member-wage-setting-updated A team member's wage setting was updated. `square.onTeamMemberWageSettingUpdated` subscribes to `team_member.wage_setting.updated` for the selected seller. It requires `EMPLOYEES_READ`. ## Example ```ts automations/square-on-team-member-wage-setting-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onTeamMemberWageSettingUpdated", () => { const event = square.onTeamMemberWageSettingUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A team member's wage setting was updated. The signal resolves to the official `Square.TeamMemberWageSettingUpdatedEvent` payload with `type` narrowed to `team_member.wage_setting.updated`. # On Terminal Action Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-terminal-action-created A TerminalAction request was created. `square.onTerminalActionCreated` subscribes to `terminal.action.created` for the selected seller. It requires `PAYMENTS_READ`. ## Example ```ts automations/square-on-terminal-action-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onTerminalActionCreated", () => { const event = square.onTerminalActionCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A TerminalAction request was created. The signal resolves to the official `Square.TerminalActionCreatedEvent` payload with `type` narrowed to `terminal.action.created`. # On Terminal Action Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-terminal-action-updated A TerminalAction status was updated. `square.onTerminalActionUpdated` subscribes to `terminal.action.updated` for the selected seller. It requires `PAYMENTS_READ`. ## Example ```ts automations/square-on-terminal-action-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onTerminalActionUpdated", () => { const event = square.onTerminalActionUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A TerminalAction status was updated. The signal resolves to the official `Square.TerminalActionUpdatedEvent` payload with `type` narrowed to `terminal.action.updated`. # On Terminal Checkout Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-terminal-checkout-created A TerminalCheckout request was created. `square.onTerminalCheckoutCreated` subscribes to `terminal.checkout.created` for the selected seller. It requires `PAYMENTS_READ`. ## Example ```ts automations/square-on-terminal-checkout-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onTerminalCheckoutCreated", () => { const event = square.onTerminalCheckoutCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A TerminalCheckout request was created. The signal resolves to the official `Square.TerminalCheckoutCreatedEvent` payload with `type` narrowed to `terminal.checkout.created`. # On Terminal Checkout Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-terminal-checkout-updated A TerminalCheckout status was changed. `square.onTerminalCheckoutUpdated` subscribes to `terminal.checkout.updated` for the selected seller. It requires `PAYMENTS_READ`. ## Example ```ts automations/square-on-terminal-checkout-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onTerminalCheckoutUpdated", () => { const event = square.onTerminalCheckoutUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A TerminalCheckout status was changed. The signal resolves to the official `Square.TerminalCheckoutUpdatedEvent` payload with `type` narrowed to `terminal.checkout.updated`. # On Terminal Refund Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-terminal-refund-created A TerminalRefund request was created. `square.onTerminalRefundCreated` subscribes to `terminal.refund.created` for the selected seller. It requires `PAYMENTS_READ`. ## Example ```ts automations/square-on-terminal-refund-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onTerminalRefundCreated", () => { const event = square.onTerminalRefundCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A TerminalRefund request was created. The signal resolves to the official `Square.TerminalRefundCreatedEvent` payload with `type` narrowed to `terminal.refund.created`. # On Terminal Refund Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-terminal-refund-updated A TerminalRefund status was changed. `square.onTerminalRefundUpdated` subscribes to `terminal.refund.updated` for the selected seller. It requires `PAYMENTS_READ`. ## Example ```ts automations/square-on-terminal-refund-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onTerminalRefundUpdated", () => { const event = square.onTerminalRefundUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event A TerminalRefund status was changed. The signal resolves to the official `Square.TerminalRefundUpdatedEvent` payload with `type` narrowed to `terminal.refund.updated`. # On Transfer Order Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-transfer-order-created Published when a new transfer order is created. `square.onTransferOrderCreated` subscribes to `transfer_order.created` for the selected seller. It requires `INVENTORY_WRITE` and `INVENTORY_READ`. ## Example ```ts automations/square-on-transfer-order-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onTransferOrderCreated", () => { const event = square.onTransferOrderCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event Published when a new transfer order is created. The signal resolves to the official `Square.TransferOrderCreatedEvent` payload with `type` narrowed to `transfer_order.created`. # On Transfer Order Deleted Source: https://docs.automate.ax/reference/integrations/square/triggers/on-transfer-order-deleted Published when a transfer order is updated. `square.onTransferOrderDeleted` subscribes to `transfer_order.deleted` for the selected seller. It requires `INVENTORY_WRITE`. ## Example ```ts automations/square-on-transfer-order-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onTransferOrderDeleted", () => { const event = square.onTransferOrderDeleted() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event Published when a transfer order is updated. The signal resolves to the official `Square.TransferOrderDeletedEvent` payload with `type` narrowed to `transfer_order.deleted`. # On Transfer Order Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-transfer-order-updated Published when a transfer order is updated. `square.onTransferOrderUpdated` subscribes to `transfer_order.updated` for the selected seller. It requires `INVENTORY_WRITE` and `INVENTORY_READ`. ## Example ```ts automations/square-on-transfer-order-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onTransferOrderUpdated", () => { const event = square.onTransferOrderUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event Published when a transfer order is updated. The signal resolves to the official `Square.TransferOrderUpdatedEvent` payload with `type` narrowed to `transfer_order.updated`. # On Vendor Created Source: https://docs.automate.ax/reference/integrations/square/triggers/on-vendor-created Published when a vendor is created by calling CreateVendor or BulkCreateVendors , as well as using the Square Dashboard. `square.onVendorCreated` subscribes to `vendor.created` for the selected seller. It requires `VENDOR_READ`. ## Example ```ts automations/square-on-vendor-created.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onVendorCreated", () => { const event = square.onVendorCreated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event Published when a vendor is created by calling CreateVendor or BulkCreateVendors , as well as using the Square Dashboard. The signal resolves to the official `Square.VendorCreatedEvent` payload with `type` narrowed to `vendor.created`. # On Vendor Updated Source: https://docs.automate.ax/reference/integrations/square/triggers/on-vendor-updated Published when a vendor is updated by calling UpdateVendor or BulkUpdateVendors , as well as using the Square Dashboard. `square.onVendorUpdated` subscribes to `vendor.updated` for the selected seller. It requires `VENDOR_READ`. ## Example ```ts automations/square-on-vendor-updated.automation.ts theme={null} import { automation } from "automate.ax" import { square } from "automate.ax/square" export default automation("onVendorUpdated", () => { const event = square.onVendorUpdated() // Send event to the Square-aware order, CRM, or messaging action you use. }) ``` ## Event Published when a vendor is updated by calling UpdateVendor or BulkUpdateVendors , as well as using the Square Dashboard. The signal resolves to the official `Square.VendorUpdatedEvent` payload with `type` narrowed to `vendor.updated`. # Archive price Source: https://docs.automate.ax/reference/integrations/stripe/actions/archive-price Deactivate a Stripe price without deleting its history. Use `stripe.archivePrice` to deactivate a Stripe price without deleting its history. ## Example ```ts automations/stripe-archive-price.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Archive price", () => { onDashboardRun({ title: "Archive price" }) stripe.archivePrice({ priceId: "price_123" }) }) ``` ## Inputs `priceId` is required. This action sets `active` to `false`; existing subscriptions and transactions keep their price history. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the inactive Stripe Price. Output fields use camel case. Stripe decimal fields such as `unitAmountDecimal` are lossless strings. # Archive product Source: https://docs.automate.ax/reference/integrations/stripe/actions/archive-product Deactivate a Stripe product without deleting its history. Use `stripe.archiveProduct` to deactivate a Stripe product without deleting its history. ## Example ```ts automations/stripe-archive-product.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Archive product", () => { onDashboardRun({ title: "Archive product" }) stripe.archiveProduct({ productId: "prod_123" }) }) ``` ## Inputs `productId` is required. This action sets `active` to `false`; existing transactions keep their product history. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the inactive Stripe Product. Output fields use camel case. Expanded Price decimal fields such as `unitAmountDecimal` are lossless strings. # Attach PaymentMethod Source: https://docs.automate.ax/reference/integrations/stripe/actions/attach-payment-method Attach a Stripe PaymentMethod to a customer. Use `stripe.attachPaymentMethod` to attach an existing method to a customer. For future use, Stripe recommends first optimizing it with a SetupIntent or PaymentIntent. ```ts automations/stripe-attach-payment-method.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Attach PaymentMethod", () => { onDashboardRun({ title: "Attach PaymentMethod" }) stripe.attachPaymentMethod({ customer: "cus_123", paymentMethodId: "pm_123" }) }) ``` ## Inputs `customer` and `paymentMethodId` are required. `idempotencyKey` is optional. ## Output Returns the attached PaymentMethod. # Cancel PaymentIntent Source: https://docs.automate.ax/reference/integrations/stripe/actions/cancel-payment-intent Cancel a Stripe PaymentIntent that is still cancelable. Use `stripe.cancelPaymentIntent` to cancel a Stripe PaymentIntent that is still cancelable. ## Example ```ts automations/stripe-cancel-payment-intent.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Cancel PaymentIntent", () => { onDashboardRun({ title: "Cancel PaymentIntent" }) stripe.cancelPaymentIntent({ paymentIntentId: "pi_123", cancellationReason: "requested_by_customer", }) }) ``` ## Inputs `paymentIntentId` is required. Stripe limits cancellation to supported PaymentIntent states. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the canceled Stripe PaymentIntent. Output fields use camel case. # Cancel payout Source: https://docs.automate.ax/reference/integrations/stripe/actions/cancel-payout Cancel a pending manual Stripe payout. Use `stripe.cancelPayout` to return funds from a pending manual payout to the available balance. Automatic payouts cannot be canceled. ```ts automations/stripe-cancel-payout.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Cancel payout", () => { onDashboardRun({ title: "Cancel payout" }) stripe.cancelPayout({ payoutId: "po_123" }) }) ``` ## Inputs `payoutId` is required. `idempotencyKey` is optional. ## Output Returns the canceled payout. # Cancel refund Source: https://docs.automate.ax/reference/integrations/stripe/actions/cancel-refund Cancel a Stripe refund that is still cancelable. Use `stripe.cancelRefund` to cancel a Stripe refund that is still cancelable. ## Example ```ts automations/stripe-cancel-refund.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Cancel refund", () => { onDashboardRun({ title: "Cancel refund" }) stripe.cancelRefund({ refundId: "rcb_123" }) }) ``` ## Inputs `refundId` is required and accepts any valid Stripe Refund ID. Stripe documents `re_`, `rcb_`, and `pyr_` Refund ID families. Stripe only allows cancellation when the refund has a `requires_action` status. Customer-balance refunds enter that state while Stripe waits for the customer to provide payout details. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the canceled Stripe Refund. Output fields use camel case. # Cancel SetupIntent Source: https://docs.automate.ax/reference/integrations/stripe/actions/cancel-setup-intent Cancel a Stripe SetupIntent that is no longer needed. Use `stripe.cancelSetupIntent` to abandon a setup flow in a cancelable state. ```ts automations/stripe-cancel-setup-intent.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Cancel SetupIntent", () => { onDashboardRun({ title: "Cancel SetupIntent" }) stripe.cancelSetupIntent({ setupIntentId: "seti_123", cancellationReason: "requested_by_customer", }) }) ``` ## Inputs `setupIntentId` is required. Stripe accepts `abandoned`, `duplicate`, or `requested_by_customer` as the cancellation reason when applicable. ## Output Returns the canceled SetupIntent. # Cancel subscription Source: https://docs.automate.ax/reference/integrations/stripe/actions/cancel-subscription Cancel a Stripe subscription immediately. Use `stripe.cancelSubscription` to cancel a Stripe subscription immediately. ## Example ```ts automations/stripe-cancel-subscription.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Cancel subscription", () => { onDashboardRun({ title: "Cancel subscription" }) stripe.cancelSubscription({ subscriptionId: "sub_123", invoiceNow: true, prorate: true, }) }) ``` ## Inputs `subscriptionId` is required. Configure invoice and proration behavior as needed. To cancel at period end instead, update `cancelAtPeriodEnd`. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the canceled Stripe Subscription. Output fields use camel case. Nested Stripe decimal fields such as `unitAmountDecimal` are lossless strings. # Capture PaymentIntent Source: https://docs.automate.ax/reference/integrations/stripe/actions/capture-payment-intent Capture funds from a manually authorized Stripe PaymentIntent. Use `stripe.capturePaymentIntent` to capture funds from a manually authorized Stripe PaymentIntent. ## Example ```ts automations/stripe-capture-payment-intent.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Capture PaymentIntent", () => { onDashboardRun({ title: "Capture PaymentIntent" }) stripe.capturePaymentIntent({ paymentIntentId: "pi_123", amountToCapture: 2000, }) }) ``` ## Inputs `paymentIntentId` is required and must be awaiting capture. Omit `amountToCapture` to capture the amount available to capture. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the captured Stripe PaymentIntent. Output fields use camel case. # Close dispute Source: https://docs.automate.ax/reference/integrations/stripe/actions/close-dispute Close a Stripe dispute and accept it as lost. Use `stripe.closeDispute` only when you intend to stop contesting a dispute. Closing is irreversible. ```ts automations/stripe-close-dispute.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Close dispute", () => { onDashboardRun({ title: "Close dispute" }) stripe.closeDispute({ disputeId: "du_123" }) }) ``` ## Inputs `disputeId` is required. `idempotencyKey` is optional. ## Output Returns the closed dispute with its resulting status. # Confirm PaymentIntent Source: https://docs.automate.ax/reference/integrations/stripe/actions/confirm-payment-intent Confirm a Stripe PaymentIntent and attempt payment when possible. Use `stripe.confirmPaymentIntent` to confirm a Stripe PaymentIntent and attempt payment when possible. ## Example ```ts automations/stripe-confirm-payment-intent.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Confirm PaymentIntent", () => { onDashboardRun({ title: "Confirm PaymentIntent" }) stripe.confirmPaymentIntent({ paymentIntentId: "pi_123", paymentMethod: "pm_123", returnUrl: "https://example.com/complete", }) }) ``` ## Inputs `paymentIntentId` is required. Additional customer action can still be required; inspect the returned status and next action. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the confirmed Stripe PaymentIntent. Output fields use camel case. # Confirm SetupIntent Source: https://docs.automate.ax/reference/integrations/stripe/actions/confirm-setup-intent Confirm a Stripe SetupIntent and collect reuse permission. Use `stripe.confirmSetupIntent` after selecting the payment method to save. ```ts automations/stripe-confirm-setup-intent.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Confirm SetupIntent", () => { onDashboardRun({ title: "Confirm SetupIntent" }) stripe.confirmSetupIntent({ setupIntentId: "seti_123", paymentMethod: "pm_123", }) }) ``` ## Inputs `setupIntentId` is required. You can provide a payment method, return URL, mandate data, and payment-method options. ## Output Returns the confirmed SetupIntent. Inspect `status` and `nextAction` before treating setup as complete. # Create billing portal session Source: https://docs.automate.ax/reference/integrations/stripe/actions/create-billing-portal-session Create a short-lived Stripe-hosted billing portal session. Use `stripe.createBillingPortalSession` to create a short-lived Stripe-hosted billing portal session. ## Example ```ts automations/stripe-create-billing-portal-session.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Create billing portal session", () => { onDashboardRun({ title: "Create billing portal session" }) stripe.createBillingPortalSession({ customer: "cus_123", returnUrl: "https://example.com/account", }) }) ``` ## Inputs `customer` is required. Configure the portal in Stripe or pass a configuration ID. Redirect the customer to the returned URL promptly because sessions are short-lived. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the created billing portal Session, including its URL. Output fields use camel case. # Create Checkout Session Source: https://docs.automate.ax/reference/integrations/stripe/actions/create-checkout-session Create a Stripe-hosted, embedded, Elements, or form Checkout Session. Use `stripe.createCheckoutSession` to create a Stripe-hosted, embedded, Elements, or form Checkout Session. ## Example ```ts automations/stripe-create-checkout-session.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Create Checkout Session", () => { onDashboardRun({ title: "Create Checkout Session" }) stripe.createCheckoutSession({ mode: "payment", lineItems: [{ price: "price_123", quantity: 1 }], successUrl: "https://example.com/success", }) }) ``` ## Inputs Choose `payment`, `setup`, or `subscription` mode and provide the matching Stripe fields. `uiMode` accepts `hosted_page`, `embedded_page`, `elements`, or `form`; only `hosted_page` accepts `successUrl`. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the created Stripe Checkout Session, including its hosted URL when applicable. Output fields use camel case. Stripe decimal fields such as `fxRate` are lossless strings. # Create customer Source: https://docs.automate.ax/reference/integrations/stripe/actions/create-customer Create a Stripe customer for payments, invoices, and subscriptions. Use `stripe.createCustomer` to create a Stripe customer for payments, invoices, and subscriptions. ## Example ```ts automations/stripe-create-customer.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Create customer", () => { onDashboardRun({ title: "Create customer" }) stripe.createCustomer({ email: "buyer@example.com", name: "Ada Lovelace", metadata: { crmId: "crm_123" }, }) }) ``` ## Inputs Provide any Stripe customer creation fields in camel case. `idempotencyKey` is optional and prevents duplicate mutations when the same request is retried. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the created Stripe Customer. Output fields use camel case. Nested Stripe decimal fields such as `unitAmountDecimal` are lossless strings. # Create invoice Source: https://docs.automate.ax/reference/integrations/stripe/actions/create-invoice Create a draft Stripe invoice. Use `stripe.createInvoice` to create a draft Stripe invoice. ## Example ```ts automations/stripe-create-invoice.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Create invoice", () => { onDashboardRun({ title: "Create invoice" }) stripe.createInvoice({ customer: "cus_123", collectionMethod: "send_invoice", daysUntilDue: 30, }) }) ``` ## Inputs Provide the customer and collection settings. Pending invoice items can be included according to Stripe's invoice creation behavior. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the created Stripe Invoice. Output fields use camel case. Stripe decimal fields such as `quantityDecimal` are lossless strings. # Create invoice item Source: https://docs.automate.ax/reference/integrations/stripe/actions/create-invoice-item Add an amount or price to a customer or draft Stripe invoice. Use `stripe.createInvoiceItem` to add an amount or price to a customer or draft Stripe invoice. ## Example ```ts automations/stripe-create-invoice-item.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Create invoice item", () => { onDashboardRun({ title: "Create invoice item" }) stripe.createInvoiceItem({ customer: "cus_123", price: "price_123", quantity: 1, }) }) ``` ## Inputs Provide a customer and either pricing information or an amount and currency. Set `invoice` to target a particular draft invoice. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the created Stripe InvoiceItem. Output fields use camel case. Stripe decimal fields such as `quantityDecimal` are lossless strings. # Create PaymentIntent Source: https://docs.automate.ax/reference/integrations/stripe/actions/create-payment-intent Create a Stripe PaymentIntent to track a payment lifecycle. Use `stripe.createPaymentIntent` to create a Stripe PaymentIntent to track a payment lifecycle. ## Example ```ts automations/stripe-create-payment-intent.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Create PaymentIntent", () => { onDashboardRun({ title: "Create PaymentIntent" }) stripe.createPaymentIntent({ amount: 2500, currency: "usd", automaticPaymentMethods: { enabled: true }, metadata: { orderId: "order_123" }, }) }) ``` ## Inputs `amount` uses the currency's smallest unit. Choose payment-method and confirmation settings that match your flow. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the created Stripe PaymentIntent. Output fields use camel case. # Create Payment Link Source: https://docs.automate.ax/reference/integrations/stripe/actions/create-payment-link Create a reusable Stripe-hosted payment URL. Use `stripe.createPaymentLink` to create a reusable Stripe-hosted payment URL. ## Example ```ts automations/stripe-create-payment-link.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Create Payment Link", () => { onDashboardRun({ title: "Create Payment Link" }) stripe.createPaymentLink({ lineItems: [{ price: "price_123", quantity: 1 }], afterCompletion: { type: "redirect", redirect: { url: "https://example.com/thanks" }, }, }) }) ``` ## Inputs Provide line items and any collection, checkout, or completion settings. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the created Stripe Payment Link, including its URL. Output fields use camel case. Nested Stripe decimal fields such as `unitAmountDecimal` are lossless strings. # Create PaymentMethod Source: https://docs.automate.ax/reference/integrations/stripe/actions/create-payment-method Create a Stripe PaymentMethod from provider-supported details. Use `stripe.createPaymentMethod` for server-side payment-method types supported by Stripe. Prefer Stripe.js for raw card details so they do not pass through your automation. ```ts automations/stripe-create-payment-method.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Create PaymentMethod", () => { onDashboardRun({ title: "Create PaymentMethod" }) stripe.createPaymentMethod({ type: "customer_balance" }) }) ``` ## Inputs Supply the payment-method `type` and its matching detail object. `billingDetails`, `metadata`, and `idempotencyKey` are optional. ## Output Returns the created PaymentMethod. # Create payout Source: https://docs.automate.ax/reference/integrations/stripe/actions/create-payout Create a manual payout from a Stripe balance. Use `stripe.createPayout` to send available Stripe funds to an eligible external account. ```ts automations/stripe-create-payout.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Create payout", () => { onDashboardRun({ title: "Create payout" }) stripe.createPayout({ amount: 5000, currency: "usd", method: "standard" }) }) ``` ## Inputs `amount` is a positive integer in the currency's smallest unit, and `currency` is a lowercase three-letter code. You can choose destination, method, source type, and metadata. `idempotencyKey` is optional. ## Output Returns the created payout. Creation does not mean the bank has received the funds; inspect `status` or use payout triggers. # Create price Source: https://docs.automate.ax/reference/integrations/stripe/actions/create-price Create a Stripe price for a product. Use `stripe.createPrice` to create a Stripe price for a product. ## Example ```ts automations/stripe-create-price.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Create price", () => { onDashboardRun({ title: "Create price" }) stripe.createPrice({ currency: "usd", product: "prod_123", unitAmount: 2500, recurring: { interval: "month" }, }) }) ``` ## Inputs Provide a currency, product or inline product data, and an amount or pricing scheme. Recurring settings create subscription prices. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the created Stripe Price. Output fields use camel case. Stripe decimal fields such as `unitAmountDecimal` are lossless strings. # Create product Source: https://docs.automate.ax/reference/integrations/stripe/actions/create-product Create a Stripe product to represent a good or service for sale. Use `stripe.createProduct` to create a Stripe product for a good or service. ## Example ```ts automations/stripe-create-product.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Create product", () => { onDashboardRun({ title: "Create product" }) stripe.createProduct({ name: "Pro plan", description: "Monthly access", metadata: { sku: "pro" }, }) }) ``` ## Inputs `name` is required. Provide other Stripe product fields in camel case. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the created Stripe Product. Output fields use camel case. Expanded Price decimal fields such as `unitAmountDecimal` are lossless strings. # Create refund Source: https://docs.automate.ax/reference/integrations/stripe/actions/create-refund Refund a Stripe charge, PaymentIntent, or customer balance. Use `stripe.createRefund` to refund a Stripe charge, PaymentIntent, or customer balance. ## Example ```ts automations/stripe-create-refund.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Create refund", () => { onDashboardRun({ title: "Create refund" }) stripe.createRefund({ paymentIntent: "pi_123", amount: 2500, reason: "requested_by_customer", }) }) ``` ## Inputs Provide exactly one refund source: a `charge`, a `paymentIntent`, or the customer-balance fields `origin: "customer_balance"`, `customer`, and `currency`. Omit `amount` for the remaining refundable amount. `idempotencyKey` is optional. Stripe Refund IDs can use different prefixes depending on the refund source and payment method. Common examples include `re_` for card refunds, `rcb_` for customer-balance refunds, and `pyr_` for selected local payment methods. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the created Stripe Refund. Output fields use camel case. # Create SetupIntent Source: https://docs.automate.ax/reference/integrations/stripe/actions/create-setup-intent Create a Stripe SetupIntent for a future payment method. Use `stripe.createSetupIntent` to collect permission to reuse a payment method later. ## Example ```ts automations/stripe-create-setup-intent.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Create SetupIntent", () => { onDashboardRun({ title: "Create SetupIntent" }) stripe.createSetupIntent({ customer: "cus_123", usage: "off_session" }) }) ``` ## Inputs Set `customer`, `paymentMethod`, payment-method options, and `usage` as needed. `idempotencyKey` is optional. ## Output Returns the created SetupIntent with camel-cased fields. # Create subscription Source: https://docs.automate.ax/reference/integrations/stripe/actions/create-subscription Create a recurring Stripe subscription for a customer. Use `stripe.createSubscription` to create a recurring Stripe subscription for a customer. ## Example ```ts automations/stripe-create-subscription.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Create subscription", () => { onDashboardRun({ title: "Create subscription" }) stripe.createSubscription({ customer: "cus_123", items: [{ price: "price_123" }], collectionMethod: "charge_automatically", }) }) ``` ## Inputs `customer` and at least one item are typical. Payment behavior, trials, proration, and collection settings follow Stripe's subscription contract. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the created Stripe Subscription. Output fields use camel case. Nested Stripe decimal fields such as `unitAmountDecimal` are lossless strings. # Delete customer Source: https://docs.automate.ax/reference/integrations/stripe/actions/delete-customer Permanently delete a Stripe customer. Use `stripe.deleteCustomer` to permanently delete a Stripe customer. ## Example ```ts automations/stripe-delete-customer.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Delete customer", () => { onDashboardRun({ title: "Delete customer" }) stripe.deleteCustomer({ customerId: "cus_123" }) }) ``` ## Inputs `customerId` is required. Deletion is permanent and cancels active subscriptions according to Stripe's customer-deletion behavior. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns a deleted Stripe Customer confirmation. Output fields use camel case. # Delete invoice Source: https://docs.automate.ax/reference/integrations/stripe/actions/delete-invoice Permanently delete a draft Stripe invoice. Use `stripe.deleteInvoice` to permanently delete a draft Stripe invoice. ## Example ```ts automations/stripe-delete-invoice.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Delete invoice", () => { onDashboardRun({ title: "Delete invoice" }) stripe.deleteInvoice({ invoiceId: "in_123" }) }) ``` ## Inputs `invoiceId` is required, and the invoice must still be a draft. Deletion is permanent. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns a deleted Stripe Invoice confirmation. Output fields use camel case. # Delete invoice item Source: https://docs.automate.ax/reference/integrations/stripe/actions/delete-invoice-item Delete a pending or draft Stripe invoice item. Use `stripe.deleteInvoiceItem` to remove an item before its invoice closes. ```ts automations/stripe-delete-invoice-item.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Delete invoice item", () => { onDashboardRun({ title: "Delete invoice item" }) stripe.deleteInvoiceItem({ invoiceItemId: "ii_123" }) }) ``` ## Inputs `invoiceItemId` is required. Stripe rejects deletion after the invoice closes. `idempotencyKey` is optional. ## Output Returns Stripe's deleted invoice-item tombstone. # Detach PaymentMethod Source: https://docs.automate.ax/reference/integrations/stripe/actions/detach-payment-method Detach a Stripe PaymentMethod from its customer. Use `stripe.detachPaymentMethod` when a customer removes a saved payment method. Detachment is permanent; Stripe does not allow reattaching the same object. ```ts automations/stripe-detach-payment-method.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Detach PaymentMethod", () => { onDashboardRun({ title: "Detach PaymentMethod" }) stripe.detachPaymentMethod({ paymentMethodId: "pm_123" }) }) ``` ## Inputs `paymentMethodId` is required. `idempotencyKey` is optional. ## Output Returns the detached PaymentMethod. # Expire Checkout Session Source: https://docs.automate.ax/reference/integrations/stripe/actions/expire-checkout-session Expire an open Stripe Checkout Session immediately. Use `stripe.expireCheckoutSession` to expire an open Stripe Checkout Session immediately. ## Example ```ts automations/stripe-expire-checkout-session.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Expire Checkout Session", () => { onDashboardRun({ title: "Expire Checkout Session" }) stripe.expireCheckoutSession({ checkoutSessionId: "cs_123" }) }) ``` ## Inputs `checkoutSessionId` is required. Only open sessions can be expired. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the expired Stripe Checkout Session. Output fields use camel case. Stripe decimal fields such as `fxRate` are lossless strings. # Finalize invoice Source: https://docs.automate.ax/reference/integrations/stripe/actions/finalize-invoice Finalize a draft Stripe invoice so it can be collected or sent. Use `stripe.finalizeInvoice` to finalize a draft Stripe invoice so it can be collected or sent. ## Example ```ts automations/stripe-finalize-invoice.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Finalize invoice", () => { onDashboardRun({ title: "Finalize invoice" }) stripe.finalizeInvoice({ invoiceId: "in_123", autoAdvance: true }) }) ``` ## Inputs `invoiceId` is required. Finalization locks key invoice fields and creates the provider state needed for collection. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the finalized Stripe Invoice. Output fields use camel case. Nested Stripe decimal fields such as `quantityDecimal` are lossless strings. # Get balance Source: https://docs.automate.ax/reference/integrations/stripe/actions/get-balance Retrieve the connected Stripe account's available and pending balances. Use `stripe.getBalance` to retrieve the connected Stripe account's available and pending balances. ## Example ```ts automations/stripe-get-balance.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Get balance", () => { onDashboardRun({ title: "Get balance" }) stripe.getBalance({}) }) ``` ## Inputs No fields are required. Use `account` to select a non-default project binding. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the Stripe Balance object, including available and pending amounts by currency. Output fields use camel case. # Get Checkout Session Source: https://docs.automate.ax/reference/integrations/stripe/actions/get-checkout-session Retrieve a Stripe Checkout Session by ID. Use `stripe.getCheckoutSession` to retrieve a Stripe Checkout Session by ID. ## Example ```ts automations/stripe-get-checkout-session.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Get Checkout Session", () => { onDashboardRun({ title: "Get Checkout Session" }) stripe.getCheckoutSession({ checkoutSessionId: "cs_123", expand: ["line_items"], }) }) ``` ## Inputs `checkoutSessionId` is required. Use `expand` for supported related objects such as line items. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the Stripe Checkout Session. Output fields use camel case. Stripe decimal fields such as `fxRate` are lossless strings. # Get current account Source: https://docs.automate.ax/reference/integrations/stripe/actions/get-current-account Retrieve the Stripe account connected to this project. Use `stripe.getCurrentAccount` to retrieve the Stripe account connected to this project. ## Example ```ts automations/stripe-get-current-account.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Get current account", () => { onDashboardRun({ title: "Get current account" }) stripe.getCurrentAccount({}) }) ``` ## Inputs No fields are required. Use `account` to select a non-default project binding. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the connected Stripe Account object. Output fields use camel case. # Get customer Source: https://docs.automate.ax/reference/integrations/stripe/actions/get-customer Retrieve a Stripe customer by ID. Use `stripe.getCustomer` to retrieve a Stripe customer by ID. ## Example ```ts automations/stripe-get-customer.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Get customer", () => { onDashboardRun({ title: "Get customer" }) stripe.getCustomer({ customerId: "cus_123" }) }) ``` ## Inputs `customerId` is required. Optional `expand` values retrieve related objects in the same request. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the Stripe Customer or deleted-customer object. Output fields use camel case. Nested Stripe decimal fields such as `unitAmountDecimal` are lossless strings. # Get dispute Source: https://docs.automate.ax/reference/integrations/stripe/actions/get-dispute Retrieve a Stripe dispute by ID. Use `stripe.getDispute` to inspect evidence, deadlines, and status for a disputed charge. ```ts automations/stripe-get-dispute.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Get dispute", () => { onDashboardRun({ title: "Get dispute" }) stripe.getDispute({ disputeId: "du_123" }) }) ``` ## Inputs `disputeId` is required. Use `expand` for supported relationships. ## Output Returns the requested dispute. # Get invoice Source: https://docs.automate.ax/reference/integrations/stripe/actions/get-invoice Retrieve a Stripe invoice by ID. Use `stripe.getInvoice` to retrieve a Stripe invoice by ID. ## Example ```ts automations/stripe-get-invoice.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Get invoice", () => { onDashboardRun({ title: "Get invoice" }) stripe.getInvoice({ invoiceId: "in_123" }) }) ``` ## Inputs `invoiceId` is required. Optional `expand` values retrieve supported related objects. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the Stripe Invoice. Output fields use camel case. Stripe decimal fields such as `quantityDecimal` are lossless strings. # Get invoice item Source: https://docs.automate.ax/reference/integrations/stripe/actions/get-invoice-item Retrieve a Stripe invoice item by ID. Use `stripe.getInvoiceItem` to inspect an item queued for an invoice or attached to a draft. ```ts automations/stripe-get-invoice-item.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Get invoice item", () => { onDashboardRun({ title: "Get invoice item" }) stripe.getInvoiceItem({ invoiceItemId: "ii_123" }) }) ``` ## Inputs `invoiceItemId` is required. Use `expand` for supported relationships. ## Output Returns the requested invoice item. Stripe decimal fields such as `quantityDecimal` are lossless strings. # Get PaymentIntent Source: https://docs.automate.ax/reference/integrations/stripe/actions/get-payment-intent Retrieve a Stripe PaymentIntent by ID. Use `stripe.getPaymentIntent` to retrieve a Stripe PaymentIntent by ID. ## Example ```ts automations/stripe-get-payment-intent.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Get PaymentIntent", () => { onDashboardRun({ title: "Get PaymentIntent" }) stripe.getPaymentIntent({ paymentIntentId: "pi_123" }) }) ``` ## Inputs `paymentIntentId` is required. Optional `clientSecret` and `expand` values follow Stripe's retrieval contract. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the Stripe PaymentIntent. Output fields use camel case. # Get Payment Link Source: https://docs.automate.ax/reference/integrations/stripe/actions/get-payment-link Retrieve a Stripe Payment Link by ID. Use `stripe.getPaymentLink` to retrieve a Stripe Payment Link by ID. ## Example ```ts automations/stripe-get-payment-link.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Get Payment Link", () => { onDashboardRun({ title: "Get Payment Link" }) stripe.getPaymentLink({ paymentLinkId: "plink_123" }) }) ``` ## Inputs `paymentLinkId` is required. Optional `expand` values retrieve supported related objects. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the Stripe Payment Link. Output fields use camel case. Nested Stripe decimal fields such as `unitAmountDecimal` are lossless strings. # Get PaymentMethod Source: https://docs.automate.ax/reference/integrations/stripe/actions/get-payment-method Retrieve a Stripe PaymentMethod by ID. Use `stripe.getPaymentMethod` to inspect a reusable payment method. ```ts automations/stripe-get-payment-method.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Get PaymentMethod", () => { onDashboardRun({ title: "Get PaymentMethod" }) stripe.getPaymentMethod({ paymentMethodId: "pm_123" }) }) ``` ## Inputs `paymentMethodId` is required. Use `expand` for supported relationships. ## Output Returns the PaymentMethod, including its type-specific details. # Get payout Source: https://docs.automate.ax/reference/integrations/stripe/actions/get-payout Retrieve a Stripe payout by ID. Use `stripe.getPayout` to inspect a manual or automatic payout. ```ts automations/stripe-get-payout.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Get payout", () => { onDashboardRun({ title: "Get payout" }) stripe.getPayout({ payoutId: "po_123" }) }) ``` ## Inputs `payoutId` is required. Use `expand` for supported relationships. ## Output Returns the requested payout. # Get price Source: https://docs.automate.ax/reference/integrations/stripe/actions/get-price Retrieve a Stripe price by ID. Use `stripe.getPrice` to retrieve a Stripe price by ID. ## Example ```ts automations/stripe-get-price.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Get price", () => { onDashboardRun({ title: "Get price" }) stripe.getPrice({ priceId: "price_123" }) }) ``` ## Inputs `priceId` is required. Optional `expand` values retrieve related objects. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the Stripe Price. Output fields use camel case. Stripe decimal fields such as `unitAmountDecimal` are lossless strings. # Get product Source: https://docs.automate.ax/reference/integrations/stripe/actions/get-product Retrieve a Stripe product by ID. Use `stripe.getProduct` to retrieve a Stripe product by ID. ## Example ```ts automations/stripe-get-product.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Get product", () => { onDashboardRun({ title: "Get product" }) stripe.getProduct({ productId: "prod_123" }) }) ``` ## Inputs `productId` is required. Optional `expand` values retrieve related objects. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the Stripe Product. Output fields use camel case. Expanded Price decimal fields such as `unitAmountDecimal` are lossless strings. # Get refund Source: https://docs.automate.ax/reference/integrations/stripe/actions/get-refund Retrieve a Stripe refund by ID. Use `stripe.getRefund` to retrieve a Stripe refund by ID. ## Example ```ts automations/stripe-get-refund.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Get refund", () => { onDashboardRun({ title: "Get refund" }) stripe.getRefund({ refundId: "re_123" }) }) ``` ## Inputs `refundId` is required and accepts any valid Stripe Refund ID. Stripe documents `re_`, `rcb_`, and `pyr_` Refund ID families. Optional `expand` values retrieve supported related objects. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the Stripe Refund. Output fields use camel case. # Get SetupIntent Source: https://docs.automate.ax/reference/integrations/stripe/actions/get-setup-intent Retrieve a Stripe SetupIntent by ID. Use `stripe.getSetupIntent` to inspect a saved-payment setup flow. ```ts automations/stripe-get-setup-intent.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Get SetupIntent", () => { onDashboardRun({ title: "Get SetupIntent" }) stripe.getSetupIntent({ setupIntentId: "seti_123" }) }) ``` ## Inputs `setupIntentId` is required. Use `expand` for supported nested resources. ## Output Returns the requested SetupIntent. # Get subscription Source: https://docs.automate.ax/reference/integrations/stripe/actions/get-subscription Retrieve a Stripe subscription by ID. Use `stripe.getSubscription` to retrieve a Stripe subscription by ID. ## Example ```ts automations/stripe-get-subscription.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Get subscription", () => { onDashboardRun({ title: "Get subscription" }) stripe.getSubscription({ subscriptionId: "sub_123" }) }) ``` ## Inputs `subscriptionId` is required. Optional `expand` values retrieve supported related objects. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the Stripe Subscription. Output fields use camel case. Nested Stripe decimal fields such as `unitAmountDecimal` are lossless strings. # List balance transactions Source: https://docs.automate.ax/reference/integrations/stripe/actions/list-balance-transactions List transactions that changed the Stripe account balance. Use `stripe.listBalanceTransactions` to list transactions that changed the Stripe account balance. ## Example ```ts automations/stripe-list-balance-transactions.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("List balance transactions", () => { onDashboardRun({ title: "List balance transactions" }) stripe.listBalanceTransactions({ limit: 25, type: "charge" }) }) ``` ## Inputs Filter by creation time, currency, payout, source, reporting category, or transaction type. Use `startingAfter` or `endingBefore` for cursor pagination. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns a Stripe cursor-paginated list of balance transactions. Output fields use camel case. # List Checkout Sessions Source: https://docs.automate.ax/reference/integrations/stripe/actions/list-checkout-sessions List Stripe Checkout Sessions with customer, payment, subscription, and creation filters. Use `stripe.listCheckoutSessions` to list Stripe Checkout Sessions with customer, payment, subscription, and creation filters. ## Example ```ts automations/stripe-list-checkout-sessions.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("List Checkout Sessions", () => { onDashboardRun({ title: "List Checkout Sessions" }) stripe.listCheckoutSessions({ customer: "cus_123", limit: 25 }) }) ``` ## Inputs Filter by customer, customer details, payment intent, subscription, status, or creation time. Use Stripe cursor fields for pagination. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns a Stripe cursor-paginated list of Checkout Sessions. Output fields use camel case. Stripe decimal fields such as `fxRate` are lossless strings. # List customers Source: https://docs.automate.ax/reference/integrations/stripe/actions/list-customers List Stripe customers with cursor pagination and filters. Use `stripe.listCustomers` to list Stripe customers with cursor pagination and filters. ## Example ```ts automations/stripe-list-customers.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("List customers", () => { onDashboardRun({ title: "List customers" }) stripe.listCustomers({ email: "buyer@example.com", limit: 25 }) }) ``` ## Inputs Filter by creation time, email, or test clock. Use `startingAfter` or `endingBefore` for cursor pagination. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns a Stripe cursor-paginated list of customers. Output fields use camel case. Nested Stripe decimal fields such as `unitAmountDecimal` are lossless strings. # List disputes Source: https://docs.automate.ax/reference/integrations/stripe/actions/list-disputes List Stripe disputes with filters and pagination. Use `stripe.listDisputes` to review disputes that need a response or track resolved cases. ```ts automations/stripe-list-disputes.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("List disputes", () => { onDashboardRun({ title: "List disputes" }) stripe.listDisputes({ limit: 25 }) }) ``` ## Inputs Filter by charge, PaymentIntent, creation time, or status. `limit` accepts 1–100; use Stripe cursor fields for another page. ## Output Returns Stripe's paginated dispute list. # List invoice items Source: https://docs.automate.ax/reference/integrations/stripe/actions/list-invoice-items List Stripe invoice items with filters and pagination. Use `stripe.listInvoiceItems` to inspect pending customer charges or the line items feeding a draft invoice. ```ts automations/stripe-list-invoice-items.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("List invoice items", () => { onDashboardRun({ title: "List invoice items" }) stripe.listInvoiceItems({ customer: "cus_123", pending: true, limit: 25 }) }) ``` ## Inputs Filter by customer, invoice, pending state, or creation time. `limit` accepts 1–100; use Stripe cursor fields for another page. ## Output Returns Stripe's paginated invoice-item list. Stripe decimal fields such as `quantityDecimal` are lossless strings. # List invoices Source: https://docs.automate.ax/reference/integrations/stripe/actions/list-invoices List Stripe invoices with customer, subscription, status, and creation filters. Use `stripe.listInvoices` to list Stripe invoices with customer, subscription, status, and creation filters. ## Example ```ts automations/stripe-list-invoices.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("List invoices", () => { onDashboardRun({ title: "List invoices" }) stripe.listInvoices({ customer: "cus_123", status: "open", limit: 25 }) }) ``` ## Inputs Filter by customer, subscription, status, collection method, or creation time. Use Stripe cursor fields for pagination. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns a Stripe cursor-paginated list of invoices. Output fields use camel case. Nested Stripe decimal fields such as `quantityDecimal` are lossless strings. # List PaymentIntents Source: https://docs.automate.ax/reference/integrations/stripe/actions/list-payment-intents List Stripe PaymentIntents with customer and creation filters. Use `stripe.listPaymentIntents` to list Stripe PaymentIntents with customer and creation filters. ## Example ```ts automations/stripe-list-payment-intents.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("List PaymentIntents", () => { onDashboardRun({ title: "List PaymentIntents" }) stripe.listPaymentIntents({ customer: "cus_123", limit: 25 }) }) ``` ## Inputs Filter by customer or creation time and use Stripe cursor fields for pagination. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns a Stripe cursor-paginated list of PaymentIntents. Output fields use camel case. # List Payment Links Source: https://docs.automate.ax/reference/integrations/stripe/actions/list-payment-links List Stripe Payment Links with activity and pagination filters. Use `stripe.listPaymentLinks` to list Stripe Payment Links with activity and pagination filters. ## Example ```ts automations/stripe-list-payment-links.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("List Payment Links", () => { onDashboardRun({ title: "List Payment Links" }) stripe.listPaymentLinks({ active: true, limit: 25 }) }) ``` ## Inputs Filter by active state and use Stripe cursor fields for pagination. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns a Stripe cursor-paginated list of Payment Links. Output fields use camel case. Nested Stripe decimal fields such as `unitAmountDecimal` are lossless strings. # List PaymentMethods Source: https://docs.automate.ax/reference/integrations/stripe/actions/list-payment-methods List Stripe PaymentMethods for a customer or account. Use `stripe.listPaymentMethods` to find reusable methods attached to a customer. ```ts automations/stripe-list-payment-methods.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("List PaymentMethods", () => { onDashboardRun({ title: "List PaymentMethods" }) stripe.listPaymentMethods({ customer: "cus_123", type: "card", limit: 25 }) }) ``` ## Inputs Filter by `customer` and payment-method `type`. `limit` accepts 1–100; use Stripe cursor fields for another page. ## Output Returns Stripe's paginated PaymentMethod list. # List payouts Source: https://docs.automate.ax/reference/integrations/stripe/actions/list-payouts List Stripe payouts with filters and pagination. Use `stripe.listPayouts` to reconcile recent bank transfers and monitor failures. ```ts automations/stripe-list-payouts.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("List payouts", () => { onDashboardRun({ title: "List payouts" }) stripe.listPayouts({ status: "pending", limit: 25 }) }) ``` ## Inputs Filter by destination, creation time, or status. `limit` accepts 1–100; use Stripe cursor fields for another page. ## Output Returns Stripe's paginated payout list. # List prices Source: https://docs.automate.ax/reference/integrations/stripe/actions/list-prices List Stripe prices with product, currency, type, and activity filters. Use `stripe.listPrices` to list Stripe prices with product, currency, type, and activity filters. ## Example ```ts automations/stripe-list-prices.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("List prices", () => { onDashboardRun({ title: "List prices" }) stripe.listPrices({ product: "prod_123", active: true, limit: 25 }) }) ``` ## Inputs Use filters to narrow the catalog and Stripe cursor fields for pagination. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns a Stripe cursor-paginated list of prices. Output fields use camel case. Stripe decimal fields such as `unitAmountDecimal` are lossless strings. # List products Source: https://docs.automate.ax/reference/integrations/stripe/actions/list-products List Stripe products with activity, creation, and lookup filters. Use `stripe.listProducts` to list Stripe products with activity, creation, and lookup filters. ## Example ```ts automations/stripe-list-products.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("List products", () => { onDashboardRun({ title: "List products" }) stripe.listProducts({ active: true, limit: 25 }) }) ``` ## Inputs Filter by active state, creation time, IDs, shipping details, or URL. Use Stripe cursor fields for pagination. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns a Stripe cursor-paginated list of products. Output fields use camel case. Expanded Price decimal fields such as `unitAmountDecimal` are lossless strings. # List refunds Source: https://docs.automate.ax/reference/integrations/stripe/actions/list-refunds List Stripe refunds with charge, PaymentIntent, and creation filters. Use `stripe.listRefunds` to list Stripe refunds with charge, PaymentIntent, and creation filters. ## Example ```ts automations/stripe-list-refunds.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("List refunds", () => { onDashboardRun({ title: "List refunds" }) stripe.listRefunds({ paymentIntent: "pi_123", limit: 25 }) }) ``` ## Inputs Filter by charge, PaymentIntent, or creation time and use Stripe cursor fields for pagination. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns a Stripe cursor-paginated list of refunds. Output fields use camel case. # List SetupIntents Source: https://docs.automate.ax/reference/integrations/stripe/actions/list-setup-intents List Stripe SetupIntents with filters and pagination. Use `stripe.listSetupIntents` to inspect recent payment-method setup flows. ```ts automations/stripe-list-setup-intents.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("List SetupIntents", () => { onDashboardRun({ title: "List SetupIntents" }) stripe.listSetupIntents({ customer: "cus_123", limit: 25 }) }) ``` ## Inputs Filter by customer, payment method, creation time, or status. `limit` accepts 1–100; use Stripe cursor fields for another page. ## Output Returns Stripe's paginated SetupIntent list. # List subscriptions Source: https://docs.automate.ax/reference/integrations/stripe/actions/list-subscriptions List Stripe subscriptions with customer, price, status, and creation filters. Use `stripe.listSubscriptions` to list Stripe subscriptions with customer, price, status, and creation filters. ## Example ```ts automations/stripe-list-subscriptions.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("List subscriptions", () => { onDashboardRun({ title: "List subscriptions" }) stripe.listSubscriptions({ customer: "cus_123", status: "active", limit: 25 }) }) ``` ## Inputs Filter by customer, price, status, test clock, or creation time. Use Stripe cursor fields for pagination. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns a Stripe cursor-paginated list of subscriptions. Output fields use camel case. Nested Stripe decimal fields such as `unitAmountDecimal` are lossless strings. # Mark invoice as bad debt Source: https://docs.automate.ax/reference/integrations/stripe/actions/mark-invoice-uncollectible Close an open Stripe invoice as bad debt without voiding it. Use `stripe.markInvoiceUncollectible` to close an open Stripe invoice as bad debt without voiding it. ## Example ```ts automations/stripe-mark-invoice-uncollectible.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Record Stripe invoice bad debt", () => { onDashboardRun({ title: "Record Stripe invoice bad debt" }) stripe.markInvoiceUncollectible({ invoiceId: "in_123" }) }) ``` ## Inputs `invoiceId` is required, and the invoice must be open. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the Stripe Invoice with `status: "uncollectible"`. Output fields use camel case. Nested Stripe decimal fields such as `quantityDecimal` are lossless strings. # Pay invoice Source: https://docs.automate.ax/reference/integrations/stripe/actions/pay-invoice Attempt payment for an open Stripe invoice. Use `stripe.payInvoice` to attempt payment for an open Stripe invoice. ## Example ```ts automations/stripe-pay-invoice.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Pay invoice", () => { onDashboardRun({ title: "Pay invoice" }) stripe.payInvoice({ invoiceId: "in_123" }) }) ``` ## Inputs `invoiceId` is required. Payment overrides such as a payment method or off-session handling follow Stripe's invoice payment contract. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the resulting Stripe Invoice. Output fields use camel case. Nested Stripe decimal fields such as `quantityDecimal` are lossless strings. # Resume subscription Source: https://docs.automate.ax/reference/integrations/stripe/actions/resume-subscription Resume a paused Stripe subscription. Use `stripe.resumeSubscription` to resume a paused Stripe subscription. ## Example ```ts automations/stripe-resume-subscription.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Resume subscription", () => { onDashboardRun({ title: "Resume subscription" }) stripe.resumeSubscription({ subscriptionId: "sub_123", billingCycleAnchor: "now", }) }) ``` ## Inputs `subscriptionId` is required. Configure the resumption billing-cycle anchor and proration behavior. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the resumed Stripe Subscription. Output fields use camel case. Nested Stripe decimal fields such as `unitAmountDecimal` are lossless strings. # Reverse payout Source: https://docs.automate.ax/reference/integrations/stripe/actions/reverse-payout Reverse a supported Stripe payout. Use `stripe.reversePayout` to debit a supported payout destination after funds left Stripe. Stripe restricts reversal by account, country, bank, and payout state. ```ts automations/stripe-reverse-payout.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Reverse payout", () => { onDashboardRun({ title: "Reverse payout" }) stripe.reversePayout({ connectedAccountId: "acct_123", payoutId: "po_123", }) }) ``` ## Inputs `connectedAccountId` and `payoutId` are required. Automate.ax sends the request in that connected account's Stripe context. `idempotencyKey` is optional. ## Output Returns the payout that records the reversal relationship. # Search customers Source: https://docs.automate.ax/reference/integrations/stripe/actions/search-customers Search Stripe customers with Stripe Search Query Language. Use `stripe.searchCustomers` to search Stripe customers with Stripe Search Query Language. ## Example ```ts automations/stripe-search-customers.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Search customers", () => { onDashboardRun({ title: "Search customers" }) stripe.searchCustomers({ query: "email:'buyer@example.com'", limit: 25 }) }) ``` ## Inputs `query` uses Stripe Search Query Language. Search availability and freshness follow Stripe's search service. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns a Stripe search result containing matching customers. Output fields use camel case. Nested Stripe decimal fields such as `unitAmountDecimal` are lossless strings. # Search invoices Source: https://docs.automate.ax/reference/integrations/stripe/actions/search-invoices Search Stripe invoices with Stripe Search Query Language. Use `stripe.searchInvoices` to search Stripe invoices with Stripe Search Query Language. ## Example ```ts automations/stripe-search-invoices.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Search invoices", () => { onDashboardRun({ title: "Search invoices" }) stripe.searchInvoices({ query: "status:'open' AND customer:'cus_123'" }) }) ``` ## Inputs `query` uses Stripe Search Query Language. Search availability and freshness follow Stripe's search service. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns a Stripe search result containing matching invoices. Output fields use camel case. Stripe decimal fields such as `quantityDecimal` are lossless strings. # Search PaymentIntents Source: https://docs.automate.ax/reference/integrations/stripe/actions/search-payment-intents Search Stripe PaymentIntents with Stripe Search Query Language. Use `stripe.searchPaymentIntents` to search Stripe PaymentIntents with Stripe Search Query Language. ## Example ```ts automations/stripe-search-payment-intents.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Search PaymentIntents", () => { onDashboardRun({ title: "Search PaymentIntents" }) stripe.searchPaymentIntents({ query: "metadata['orderId']:'order_123'" }) }) ``` ## Inputs `query` uses Stripe Search Query Language. Metadata keys remain exactly as supplied. Search availability and freshness follow Stripe's search service. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns a Stripe search result containing matching PaymentIntents. Output fields use camel case. # Search prices Source: https://docs.automate.ax/reference/integrations/stripe/actions/search-prices Search Stripe prices with Stripe Search Query Language. Use `stripe.searchPrices` to search Stripe prices with Stripe Search Query Language. ## Example ```ts automations/stripe-search-prices.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Search prices", () => { onDashboardRun({ title: "Search prices" }) stripe.searchPrices({ query: "active:'true' AND currency:'usd'" }) }) ``` ## Inputs `query` uses Stripe Search Query Language. Search availability and freshness follow Stripe's search service. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns a Stripe search result containing matching prices. Output fields use camel case. Stripe decimal fields such as `unitAmountDecimal` are lossless strings. # Search products Source: https://docs.automate.ax/reference/integrations/stripe/actions/search-products Search Stripe products with Stripe Search Query Language. Use `stripe.searchProducts` to search Stripe products with Stripe Search Query Language. ## Example ```ts automations/stripe-search-products.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Search products", () => { onDashboardRun({ title: "Search products" }) stripe.searchProducts({ query: "active:'true' AND name~'Pro'" }) }) ``` ## Inputs `query` uses Stripe Search Query Language. Search availability and freshness follow Stripe's search service. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns a Stripe search result containing matching products. Output fields use camel case. Expanded Price decimal fields such as `unitAmountDecimal` are lossless strings. # Search subscriptions Source: https://docs.automate.ax/reference/integrations/stripe/actions/search-subscriptions Search Stripe subscriptions with Stripe Search Query Language. Use `stripe.searchSubscriptions` to search Stripe subscriptions with Stripe Search Query Language. ## Example ```ts automations/stripe-search-subscriptions.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Search subscriptions", () => { onDashboardRun({ title: "Search subscriptions" }) stripe.searchSubscriptions({ query: "status:'active' AND metadata['plan']:'pro'", }) }) ``` ## Inputs `query` uses Stripe Search Query Language. Search availability and freshness follow Stripe's search service. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns a Stripe search result containing matching subscriptions. Output fields use camel case. Nested Stripe decimal fields such as `unitAmountDecimal` are lossless strings. # Send invoice Source: https://docs.automate.ax/reference/integrations/stripe/actions/send-invoice Email a finalized manual-collection Stripe invoice to its customer. Use `stripe.sendInvoice` to email a finalized manual-collection Stripe invoice to its customer. ## Example ```ts automations/stripe-send-invoice.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Send invoice", () => { onDashboardRun({ title: "Send invoice" }) stripe.sendInvoice({ invoiceId: "in_123" }) }) ``` ## Inputs `invoiceId` is required. The invoice must use `send_invoice` collection and be finalized. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the sent Stripe Invoice. Output fields use camel case. Nested Stripe decimal fields such as `quantityDecimal` are lossless strings. # Update customer Source: https://docs.automate.ax/reference/integrations/stripe/actions/update-customer Update contact, billing, tax, shipping, or metadata fields on a Stripe customer. Use `stripe.updateCustomer` to update contact, billing, tax, shipping, or metadata fields on a Stripe customer. ## Example ```ts automations/stripe-update-customer.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Update customer", () => { onDashboardRun({ title: "Update customer" }) stripe.updateCustomer({ customerId: "cus_123", name: "Ada Byron", metadata: { crmId: "crm_123" }, }) }) ``` ## Inputs `customerId` is required. Supply only fields to change. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the updated Stripe Customer. Output fields use camel case. Nested Stripe decimal fields such as `unitAmountDecimal` are lossless strings. # Update dispute Source: https://docs.automate.ax/reference/integrations/stripe/actions/update-dispute Update evidence or metadata on a Stripe dispute. Use `stripe.updateDispute` to save evidence or submit a response before Stripe's deadline. ```ts automations/stripe-update-dispute.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Update dispute", () => { onDashboardRun({ title: "Update dispute" }) stripe.updateDispute({ disputeId: "du_123", evidence: { customerName: "Ada Lovelace" }, submit: false, }) }) ``` ## Inputs `disputeId` is required. Set `submit: true` only when the evidence is final; Stripe can restrict later edits. `idempotencyKey` is optional. ## Output Returns the updated dispute. # Update invoice Source: https://docs.automate.ax/reference/integrations/stripe/actions/update-invoice Update collection, payment, tax, display, or metadata fields on a draft Stripe invoice. Use `stripe.updateInvoice` to update collection, payment, tax, display, or metadata fields on a draft Stripe invoice. ## Example ```ts automations/stripe-update-invoice.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Update invoice", () => { onDashboardRun({ title: "Update invoice" }) stripe.updateInvoice({ invoiceId: "in_123", description: "August services" }) }) ``` ## Inputs `invoiceId` is required. Most fields are mutable only while the invoice is a draft. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the updated Stripe Invoice. Output fields use camel case. Stripe decimal fields such as `quantityDecimal` are lossless strings. # Update invoice item Source: https://docs.automate.ax/reference/integrations/stripe/actions/update-invoice-item Update a pending or draft Stripe invoice item. Use `stripe.updateInvoiceItem` before its invoice closes to change pricing, quantity, description, discounts, or metadata. ```ts automations/stripe-update-invoice-item.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Update invoice item", () => { onDashboardRun({ title: "Update invoice item" }) stripe.updateInvoiceItem({ invoiceItemId: "ii_123", description: "Priority support", }) }) ``` ## Inputs `invoiceItemId` is required. Stripe permits updates only while the item is pending or belongs to a draft invoice. `idempotencyKey` is optional. ## Output Returns the updated invoice item. Stripe decimal fields such as `quantityDecimal` are lossless strings. # Update PaymentIntent Source: https://docs.automate.ax/reference/integrations/stripe/actions/update-payment-intent Update mutable payment, customer, receipt, shipping, or metadata fields. Use `stripe.updatePaymentIntent` to update mutable payment, customer, receipt, shipping, or metadata fields. ## Example ```ts automations/stripe-update-payment-intent.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Update PaymentIntent", () => { onDashboardRun({ title: "Update PaymentIntent" }) stripe.updatePaymentIntent({ paymentIntentId: "pi_123", description: "Order 123", }) }) ``` ## Inputs `paymentIntentId` is required. Some changes require reconfirmation. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the updated Stripe PaymentIntent. Output fields use camel case. # Update Payment Link Source: https://docs.automate.ax/reference/integrations/stripe/actions/update-payment-link Update purchase settings, metadata, or activity state for a Stripe Payment Link. Use `stripe.updatePaymentLink` to update purchase settings, metadata, or activity state for a Stripe Payment Link. ## Example ```ts automations/stripe-update-payment-link.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Update Payment Link", () => { onDashboardRun({ title: "Update Payment Link" }) stripe.updatePaymentLink({ paymentLinkId: "plink_123", active: false }) }) ``` ## Inputs `paymentLinkId` is required. Supply only fields to change. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the updated Stripe Payment Link. Output fields use camel case. Nested Stripe decimal fields such as `unitAmountDecimal` are lossless strings. # Update PaymentMethod Source: https://docs.automate.ax/reference/integrations/stripe/actions/update-payment-method Update an attached Stripe PaymentMethod. Use `stripe.updatePaymentMethod` to change billing details or metadata after attachment. ```ts automations/stripe-update-payment-method.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Update PaymentMethod", () => { onDashboardRun({ title: "Update PaymentMethod" }) stripe.updatePaymentMethod({ paymentMethodId: "pm_123", billingDetails: { name: "Ada Lovelace" }, }) }) ``` ## Inputs `paymentMethodId` is required. The method must be attached before Stripe permits updates. `idempotencyKey` is optional. ## Output Returns the updated PaymentMethod. # Update payout Source: https://docs.automate.ax/reference/integrations/stripe/actions/update-payout Update metadata on a Stripe payout. Use `stripe.updatePayout` to attach or clear reconciliation metadata. ```ts automations/stripe-update-payout.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Update payout", () => { onDashboardRun({ title: "Update payout" }) stripe.updatePayout({ payoutId: "po_123", metadata: { batchId: "batch_42" } }) }) ``` ## Inputs `payoutId` is required. Stripe currently permits payout metadata updates. `idempotencyKey` is optional. ## Output Returns the updated payout. # Update price Source: https://docs.automate.ax/reference/integrations/stripe/actions/update-price Update mutable fields on a Stripe price. Use `stripe.updatePrice` to update mutable fields on a Stripe price. ## Example ```ts automations/stripe-update-price.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Update price", () => { onDashboardRun({ title: "Update price" }) stripe.updatePrice({ priceId: "price_123", nickname: "Pro monthly" }) }) ``` ## Inputs `priceId` is required. Stripe doesn't allow changing a price's amount or currency after creation. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the updated Stripe Price. Output fields use camel case. Stripe decimal fields such as `unitAmountDecimal` are lossless strings. # Update product Source: https://docs.automate.ax/reference/integrations/stripe/actions/update-product Update a Stripe product's catalog fields. Use `stripe.updateProduct` to update a Stripe product's catalog fields. ## Example ```ts automations/stripe-update-product.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Update product", () => { onDashboardRun({ title: "Update product" }) stripe.updateProduct({ productId: "prod_123", description: "Annual access" }) }) ``` ## Inputs `productId` is required. Supply only fields to change. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the updated Stripe Product. Output fields use camel case. Expanded Price decimal fields such as `unitAmountDecimal` are lossless strings. # Update refund Source: https://docs.automate.ax/reference/integrations/stripe/actions/update-refund Update metadata on a Stripe refund. Use `stripe.updateRefund` to update metadata on a Stripe refund. ## Example ```ts automations/stripe-update-refund.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Update refund", () => { onDashboardRun({ title: "Update refund" }) stripe.updateRefund({ refundId: "re_123", metadata: { ticketId: "support_123" }, }) }) ``` ## Inputs `refundId` is required and accepts any valid Stripe Refund ID. Stripe documents `re_`, `rcb_`, and `pyr_` Refund ID families. Stripe refund updates support metadata. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the updated Stripe Refund. Output fields use camel case. # Update SetupIntent Source: https://docs.automate.ax/reference/integrations/stripe/actions/update-setup-intent Update mutable fields on a Stripe SetupIntent. Use `stripe.updateSetupIntent` before confirmation to change its payment method, usage, or metadata. ```ts automations/stripe-update-setup-intent.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Update SetupIntent", () => { onDashboardRun({ title: "Update SetupIntent" }) stripe.updateSetupIntent({ setupIntentId: "seti_123", description: "Save card", }) }) ``` ## Inputs `setupIntentId` is required. Supply only fields Stripe allows in the intent's current state. `idempotencyKey` is optional. ## Output Returns the updated SetupIntent. # Update subscription Source: https://docs.automate.ax/reference/integrations/stripe/actions/update-subscription Update items, billing behavior, trials, or cancellation settings on a Stripe subscription. Use `stripe.updateSubscription` to update items, billing behavior, trials, or cancellation settings on a Stripe subscription. ## Example ```ts automations/stripe-update-subscription.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Update subscription", () => { onDashboardRun({ title: "Update subscription" }) stripe.updateSubscription({ subscriptionId: "sub_123", cancelAtPeriodEnd: true, }) }) ``` ## Inputs `subscriptionId` is required. Review Stripe's proration and payment behavior when changing prices or quantities. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the updated Stripe Subscription. Output fields use camel case. Nested Stripe decimal fields such as `unitAmountDecimal` are lossless strings. # Void invoice Source: https://docs.automate.ax/reference/integrations/stripe/actions/void-invoice Void an open Stripe invoice while preserving its audit record. Use `stripe.voidInvoice` to void an open Stripe invoice while preserving its audit record. ## Example ```ts automations/stripe-void-invoice.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Void invoice", () => { onDashboardRun({ title: "Void invoice" }) stripe.voidInvoice({ invoiceId: "in_123" }) }) ``` ## Inputs `invoiceId` is required, and the invoice must be open. Voiding is distinct from deleting a draft. `idempotencyKey` is optional. Inputs use camel case and accept compatible signals. Automate.ax converts provider fields to Stripe's wire format. Metadata keys remain unchanged. ## Output Returns the void Stripe Invoice. Output fields use camel case. Nested Stripe decimal fields such as `quantityDecimal` are lossless strings. # Stripe Source: https://docs.automate.ax/reference/integrations/stripe/index Manage Stripe customers, payments, invoices, products, prices, subscriptions, and Checkout, or react to verified billing events. ## Exports ```ts theme={null} import { stripe, stripeAccount, getStripeApi } from "automate.ax/stripe" ``` * `stripe` contains the packaged Stripe actions and triggers. * `stripeAccount("name")` selects a named Stripe connection. * `getStripeApi` creates the authenticated Stripe API helper for a custom account-backed action. ## Triggers * [On Stripe event](/reference/integrations/stripe/triggers/on-stripe-event) * [On Stripe customer created](/reference/integrations/stripe/triggers/on-stripe-customer-created) * [On Stripe customer updated](/reference/integrations/stripe/triggers/on-stripe-customer-updated) * [On Stripe customer deleted](/reference/integrations/stripe/triggers/on-stripe-customer-deleted) * [On Stripe subscription created](/reference/integrations/stripe/triggers/on-stripe-subscription-created) * [On Stripe subscription updated](/reference/integrations/stripe/triggers/on-stripe-subscription-updated) * [On Stripe subscription trial will end](/reference/integrations/stripe/triggers/on-stripe-subscription-trial-will-end) * [On Stripe subscription deleted](/reference/integrations/stripe/triggers/on-stripe-subscription-deleted) * [On Stripe Checkout Session completed](/reference/integrations/stripe/triggers/on-stripe-checkout-session-completed) * [On Stripe Checkout delayed payment succeeded](/reference/integrations/stripe/triggers/on-stripe-checkout-session-async-payment-succeeded) * [On Stripe Checkout delayed payment failed](/reference/integrations/stripe/triggers/on-stripe-checkout-session-async-payment-failed) * [On Stripe Checkout Session expired](/reference/integrations/stripe/triggers/on-stripe-checkout-session-expired) * [On Stripe invoice finalized](/reference/integrations/stripe/triggers/on-stripe-invoice-finalized) * [On Stripe invoice paid](/reference/integrations/stripe/triggers/on-stripe-invoice-paid) * [On Stripe invoice payment failed](/reference/integrations/stripe/triggers/on-stripe-invoice-payment-failed) * [On Stripe invoice overdue](/reference/integrations/stripe/triggers/on-stripe-invoice-overdue) * [On Stripe invoice voided](/reference/integrations/stripe/triggers/on-stripe-invoice-voided) * [On Stripe PaymentIntent succeeded](/reference/integrations/stripe/triggers/on-stripe-payment-intent-succeeded) * [On Stripe PaymentIntent payment failed](/reference/integrations/stripe/triggers/on-stripe-payment-intent-payment-failed) * [On Stripe PaymentIntent canceled](/reference/integrations/stripe/triggers/on-stripe-payment-intent-canceled) * [On Stripe charge dispute created](/reference/integrations/stripe/triggers/on-stripe-charge-dispute-created) * [On Stripe charge dispute closed](/reference/integrations/stripe/triggers/on-stripe-charge-dispute-closed) * [On Stripe refund created](/reference/integrations/stripe/triggers/on-stripe-refund-created) * [On Stripe refund failed](/reference/integrations/stripe/triggers/on-stripe-refund-failed) * [On Stripe payout paid](/reference/integrations/stripe/triggers/on-stripe-payout-paid) * [On Stripe payout failed](/reference/integrations/stripe/triggers/on-stripe-payout-failed) ## Actions * [Get current account](/reference/integrations/stripe/actions/get-current-account) * [Get balance](/reference/integrations/stripe/actions/get-balance) * [List balance transactions](/reference/integrations/stripe/actions/list-balance-transactions) * [Create customer](/reference/integrations/stripe/actions/create-customer) * [Get customer](/reference/integrations/stripe/actions/get-customer) * [List customers](/reference/integrations/stripe/actions/list-customers) * [Search customers](/reference/integrations/stripe/actions/search-customers) * [Update customer](/reference/integrations/stripe/actions/update-customer) * [Delete customer](/reference/integrations/stripe/actions/delete-customer) * [Create product](/reference/integrations/stripe/actions/create-product) * [Get product](/reference/integrations/stripe/actions/get-product) * [List products](/reference/integrations/stripe/actions/list-products) * [Search products](/reference/integrations/stripe/actions/search-products) * [Update product](/reference/integrations/stripe/actions/update-product) * [Archive product](/reference/integrations/stripe/actions/archive-product) * [Create price](/reference/integrations/stripe/actions/create-price) * [Get price](/reference/integrations/stripe/actions/get-price) * [List prices](/reference/integrations/stripe/actions/list-prices) * [Search prices](/reference/integrations/stripe/actions/search-prices) * [Update price](/reference/integrations/stripe/actions/update-price) * [Archive price](/reference/integrations/stripe/actions/archive-price) * [Create Checkout Session](/reference/integrations/stripe/actions/create-checkout-session) * [Get Checkout Session](/reference/integrations/stripe/actions/get-checkout-session) * [List Checkout Sessions](/reference/integrations/stripe/actions/list-checkout-sessions) * [Expire Checkout Session](/reference/integrations/stripe/actions/expire-checkout-session) * [Create Payment Link](/reference/integrations/stripe/actions/create-payment-link) * [Get Payment Link](/reference/integrations/stripe/actions/get-payment-link) * [List Payment Links](/reference/integrations/stripe/actions/list-payment-links) * [Update Payment Link](/reference/integrations/stripe/actions/update-payment-link) * [Create billing portal session](/reference/integrations/stripe/actions/create-billing-portal-session) * [Create PaymentIntent](/reference/integrations/stripe/actions/create-payment-intent) * [Get PaymentIntent](/reference/integrations/stripe/actions/get-payment-intent) * [List PaymentIntents](/reference/integrations/stripe/actions/list-payment-intents) * [Search PaymentIntents](/reference/integrations/stripe/actions/search-payment-intents) * [Update PaymentIntent](/reference/integrations/stripe/actions/update-payment-intent) * [Confirm PaymentIntent](/reference/integrations/stripe/actions/confirm-payment-intent) * [Cancel PaymentIntent](/reference/integrations/stripe/actions/cancel-payment-intent) * [Capture PaymentIntent](/reference/integrations/stripe/actions/capture-payment-intent) * [Create refund](/reference/integrations/stripe/actions/create-refund) * [Get refund](/reference/integrations/stripe/actions/get-refund) * [List refunds](/reference/integrations/stripe/actions/list-refunds) * [Update refund](/reference/integrations/stripe/actions/update-refund) * [Cancel refund](/reference/integrations/stripe/actions/cancel-refund) * [Create SetupIntent](/reference/integrations/stripe/actions/create-setup-intent) * [Get SetupIntent](/reference/integrations/stripe/actions/get-setup-intent) * [List SetupIntents](/reference/integrations/stripe/actions/list-setup-intents) * [Update SetupIntent](/reference/integrations/stripe/actions/update-setup-intent) * [Confirm SetupIntent](/reference/integrations/stripe/actions/confirm-setup-intent) * [Cancel SetupIntent](/reference/integrations/stripe/actions/cancel-setup-intent) * [Create PaymentMethod](/reference/integrations/stripe/actions/create-payment-method) * [Get PaymentMethod](/reference/integrations/stripe/actions/get-payment-method) * [List PaymentMethods](/reference/integrations/stripe/actions/list-payment-methods) * [Update PaymentMethod](/reference/integrations/stripe/actions/update-payment-method) * [Attach PaymentMethod](/reference/integrations/stripe/actions/attach-payment-method) * [Detach PaymentMethod](/reference/integrations/stripe/actions/detach-payment-method) * [Get dispute](/reference/integrations/stripe/actions/get-dispute) * [List disputes](/reference/integrations/stripe/actions/list-disputes) * [Update dispute](/reference/integrations/stripe/actions/update-dispute) * [Close dispute](/reference/integrations/stripe/actions/close-dispute) * [Create payout](/reference/integrations/stripe/actions/create-payout) * [Get payout](/reference/integrations/stripe/actions/get-payout) * [List payouts](/reference/integrations/stripe/actions/list-payouts) * [Update payout](/reference/integrations/stripe/actions/update-payout) * [Cancel payout](/reference/integrations/stripe/actions/cancel-payout) * [Reverse payout](/reference/integrations/stripe/actions/reverse-payout) * [Create subscription](/reference/integrations/stripe/actions/create-subscription) * [Get subscription](/reference/integrations/stripe/actions/get-subscription) * [List subscriptions](/reference/integrations/stripe/actions/list-subscriptions) * [Search subscriptions](/reference/integrations/stripe/actions/search-subscriptions) * [Update subscription](/reference/integrations/stripe/actions/update-subscription) * [Cancel subscription](/reference/integrations/stripe/actions/cancel-subscription) * [Resume subscription](/reference/integrations/stripe/actions/resume-subscription) * [Create invoice](/reference/integrations/stripe/actions/create-invoice) * [Create invoice item](/reference/integrations/stripe/actions/create-invoice-item) * [Get invoice item](/reference/integrations/stripe/actions/get-invoice-item) * [List invoice items](/reference/integrations/stripe/actions/list-invoice-items) * [Update invoice item](/reference/integrations/stripe/actions/update-invoice-item) * [Delete invoice item](/reference/integrations/stripe/actions/delete-invoice-item) * [Get invoice](/reference/integrations/stripe/actions/get-invoice) * [List invoices](/reference/integrations/stripe/actions/list-invoices) * [Search invoices](/reference/integrations/stripe/actions/search-invoices) * [Update invoice](/reference/integrations/stripe/actions/update-invoice) * [Delete invoice](/reference/integrations/stripe/actions/delete-invoice) * [Finalize invoice](/reference/integrations/stripe/actions/finalize-invoice) * [Pay invoice](/reference/integrations/stripe/actions/pay-invoice) * [Send invoice](/reference/integrations/stripe/actions/send-invoice) * [Void invoice](/reference/integrations/stripe/actions/void-invoice) * [Mark invoice as bad debt](/reference/integrations/stripe/actions/mark-invoice-uncollectible) # On Stripe charge dispute closed Source: https://docs.automate.ax/reference/integrations/stripe/triggers/on-stripe-charge-dispute-closed Run an automation when Stripe closes a charge dispute. Use `stripe.onChargeDisputeClosed` to run an automation when Stripe closes a charge dispute. ## Example ```ts automations/stripe-on-stripe-charge-dispute-closed.automation.ts theme={null} import { automation } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("On Stripe charge dispute closed", () => { const event = stripe.onChargeDisputeClosed() event.transform(({ id, data }) => ({ eventId: id, stripeObjectId: data.object.id, })) }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns the complete Stripe Event envelope with `type: "charge.dispute.closed"`. The typed `data.object` contains the Stripe resource for this event. Automate.ax verifies Stripe's signature against the exact request body before accepting an event. Event fields use camel case, while metadata keys remain unchanged. Stripe doesn't guarantee event delivery order, so use `id`, resource IDs, and timestamps when coordinating related events. See [On Stripe event](/reference/integrations/stripe/triggers/on-stripe-event) for the shared envelope and delivery behavior. # On Stripe charge dispute created Source: https://docs.automate.ax/reference/integrations/stripe/triggers/on-stripe-charge-dispute-created Run an automation when Stripe creates a dispute against a charge. Use `stripe.onChargeDisputeCreated` to run an automation when Stripe creates a dispute against a charge. ## Example ```ts automations/stripe-on-stripe-charge-dispute-created.automation.ts theme={null} import { automation } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("On Stripe charge dispute created", () => { const event = stripe.onChargeDisputeCreated() event.transform(({ id, data }) => ({ eventId: id, stripeObjectId: data.object.id, })) }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns the complete Stripe Event envelope with `type: "charge.dispute.created"`. The typed `data.object` contains the Stripe resource for this event. Automate.ax verifies Stripe's signature against the exact request body before accepting an event. Event fields use camel case, while metadata keys remain unchanged. Stripe doesn't guarantee event delivery order, so use `id`, resource IDs, and timestamps when coordinating related events. See [On Stripe event](/reference/integrations/stripe/triggers/on-stripe-event) for the shared envelope and delivery behavior. # On Stripe Checkout delayed payment failed Source: https://docs.automate.ax/reference/integrations/stripe/triggers/on-stripe-checkout-session-async-payment-failed Run an automation when a delayed Checkout Session payment fails. Use `stripe.onCheckoutSessionAsyncPaymentFailed` when Stripe reports that a delayed payment method failed after Checkout completed. ## Example ```ts automations/stripe-on-checkout-delayed-payment-failed.automation.ts theme={null} import { automation } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Checkout delayed payment failed", () => { const event = stripe.onCheckoutSessionAsyncPaymentFailed() event.transform(({ id, data }) => ({ eventId: id, sessionId: data.object.id, })) }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns the complete Stripe Event envelope with `type: "checkout.session.async_payment_failed"`. The typed `data.object` is the Checkout Session whose delayed payment failed. See [On Stripe event](/reference/integrations/stripe/triggers/on-stripe-event) for signature verification, ordering, account permissions, and delivery behavior. # On Stripe Checkout delayed payment succeeded Source: https://docs.automate.ax/reference/integrations/stripe/triggers/on-stripe-checkout-session-async-payment-succeeded Run an automation when a delayed Checkout Session payment succeeds. Use `stripe.onCheckoutSessionAsyncPaymentSucceeded` when Stripe confirms a delayed payment method after Checkout completed. ## Example ```ts automations/stripe-on-checkout-delayed-payment-succeeded.automation.ts theme={null} import { automation } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("Checkout delayed payment succeeded", () => { const event = stripe.onCheckoutSessionAsyncPaymentSucceeded() event.transform(({ id, data }) => ({ eventId: id, sessionId: data.object.id, })) }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns the complete Stripe Event envelope with `type: "checkout.session.async_payment_succeeded"`. The typed `data.object` is the Checkout Session whose delayed payment succeeded. See [On Stripe event](/reference/integrations/stripe/triggers/on-stripe-event) for signature verification, ordering, account permissions, and delivery behavior. # On Stripe Checkout Session completed Source: https://docs.automate.ax/reference/integrations/stripe/triggers/on-stripe-checkout-session-completed Run an automation when a Stripe Checkout Session completes. Use `stripe.onCheckoutSessionCompleted` to run an automation when a Stripe Checkout Session completes. ## Example ```ts automations/stripe-on-stripe-checkout-session-completed.automation.ts theme={null} import { automation } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("On Stripe Checkout Session completed", () => { const event = stripe.onCheckoutSessionCompleted() event.transform(({ id, data }) => ({ eventId: id, stripeObjectId: data.object.id, })) }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns the complete Stripe Event envelope with `type: "checkout.session.completed"`. The typed `data.object` contains the Stripe resource for this event. Automate.ax verifies Stripe's signature against the exact request body before accepting an event. Event fields use camel case, while metadata keys remain unchanged. Stripe doesn't guarantee event delivery order, so use `id`, resource IDs, and timestamps when coordinating related events. For delayed payment methods, completion can arrive with `data.object.paymentStatus: "unpaid"`. Wait for [On Stripe Checkout delayed payment succeeded](/reference/integrations/stripe/triggers/on-stripe-checkout-session-async-payment-succeeded) before fulfillment. Use [On Stripe Checkout delayed payment failed](/reference/integrations/stripe/triggers/on-stripe-checkout-session-async-payment-failed) to handle a later failure. See [On Stripe event](/reference/integrations/stripe/triggers/on-stripe-event) for the shared envelope and delivery behavior. # On Stripe Checkout Session expired Source: https://docs.automate.ax/reference/integrations/stripe/triggers/on-stripe-checkout-session-expired Run an automation when a Stripe Checkout Session expires. Use `stripe.onCheckoutSessionExpired` to run an automation when a Stripe Checkout Session expires. ## Example ```ts automations/stripe-on-stripe-checkout-session-expired.automation.ts theme={null} import { automation } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("On Stripe Checkout Session expired", () => { const event = stripe.onCheckoutSessionExpired() event.transform(({ id, data }) => ({ eventId: id, stripeObjectId: data.object.id, })) }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns the complete Stripe Event envelope with `type: "checkout.session.expired"`. The typed `data.object` contains the Stripe resource for this event. Automate.ax verifies Stripe's signature against the exact request body before accepting an event. Event fields use camel case, while metadata keys remain unchanged. Stripe doesn't guarantee event delivery order, so use `id`, resource IDs, and timestamps when coordinating related events. See [On Stripe event](/reference/integrations/stripe/triggers/on-stripe-event) for the shared envelope and delivery behavior. # On Stripe customer created Source: https://docs.automate.ax/reference/integrations/stripe/triggers/on-stripe-customer-created Run an automation when Stripe creates a customer. Use `stripe.onCustomerCreated` to run an automation when Stripe creates a customer. ## Example ```ts automations/stripe-on-stripe-customer-created.automation.ts theme={null} import { automation } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("On Stripe customer created", () => { const event = stripe.onCustomerCreated() event.transform(({ id, data }) => ({ eventId: id, stripeObjectId: data.object.id, })) }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns the complete Stripe Event envelope with `type: "customer.created"`. The typed `data.object` contains the Stripe resource for this event. Automate.ax verifies Stripe's signature against the exact request body before accepting an event. Event fields use camel case, while metadata keys remain unchanged. Stripe doesn't guarantee event delivery order, so use `id`, resource IDs, and timestamps when coordinating related events. See [On Stripe event](/reference/integrations/stripe/triggers/on-stripe-event) for the shared envelope and delivery behavior. # On Stripe customer deleted Source: https://docs.automate.ax/reference/integrations/stripe/triggers/on-stripe-customer-deleted Run an automation when Stripe deletes a customer. Use `stripe.onCustomerDeleted` to run an automation when Stripe deletes a customer. ## Example ```ts automations/stripe-on-stripe-customer-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("On Stripe customer deleted", () => { const event = stripe.onCustomerDeleted() event.transform(({ id, data }) => ({ eventId: id, stripeObjectId: data.object.id, })) }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns the complete Stripe Event envelope with `type: "customer.deleted"`. The typed `data.object` contains the Stripe resource for this event. Automate.ax verifies Stripe's signature against the exact request body before accepting an event. Event fields use camel case, while metadata keys remain unchanged. Stripe doesn't guarantee event delivery order, so use `id`, resource IDs, and timestamps when coordinating related events. See [On Stripe event](/reference/integrations/stripe/triggers/on-stripe-event) for the shared envelope and delivery behavior. # On Stripe customer updated Source: https://docs.automate.ax/reference/integrations/stripe/triggers/on-stripe-customer-updated Run an automation when Stripe updates a customer. Use `stripe.onCustomerUpdated` to run an automation when Stripe updates a customer. ## Example ```ts automations/stripe-on-stripe-customer-updated.automation.ts theme={null} import { automation } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("On Stripe customer updated", () => { const event = stripe.onCustomerUpdated() event.transform(({ id, data }) => ({ eventId: id, stripeObjectId: data.object.id, })) }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns the complete Stripe Event envelope with `type: "customer.updated"`. The typed `data.object` contains the Stripe resource for this event. Automate.ax verifies Stripe's signature against the exact request body before accepting an event. Event fields use camel case, while metadata keys remain unchanged. Stripe doesn't guarantee event delivery order, so use `id`, resource IDs, and timestamps when coordinating related events. See [On Stripe event](/reference/integrations/stripe/triggers/on-stripe-event) for the shared envelope and delivery behavior. # On Stripe event Source: https://docs.automate.ax/reference/integrations/stripe/triggers/on-stripe-event Run an automation for every event delivered by the managed Stripe webhook. Use `stripe.onEvent` to run an automation for every event delivered by the managed Stripe webhook. ## Example ```ts automations/stripe-on-stripe-event.automation.ts theme={null} import { automation } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("On Stripe event", () => { const event = stripe.onEvent() event.transform(({ id, type }) => ({ eventId: id, eventType: type, })) }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns Stripe's complete Event envelope. `type` identifies the provider event and `data.object` contains the versioned Stripe resource. Automate.ax verifies Stripe's signature against the exact request body before accepting an event. Event fields use camel case, while metadata keys remain unchanged. Stripe `decimal_string` fields are lossless strings. Stripe doesn't guarantee event delivery order, so use `id`, resource IDs, and timestamps when coordinating related events. Automate.ax provisions one managed webhook endpoint for the account. This broad trigger subscribes it to all ordinary Stripe events; semantic triggers subscribe only to their required event types. If you connect a restricted key, grant it read access to Account and write access to Webhook Endpoints. The connection check needs Account access, and trigger deployment needs Webhook Endpoints access. See [Stripe's restricted-key guide](https://docs.stripe.com/keys#limit-access). # On Stripe invoice finalized Source: https://docs.automate.ax/reference/integrations/stripe/triggers/on-stripe-invoice-finalized Run an automation when Stripe finalizes an invoice. Use `stripe.onInvoiceFinalized` to run an automation when Stripe finalizes an invoice. ## Example ```ts automations/stripe-on-stripe-invoice-finalized.automation.ts theme={null} import { automation } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("On Stripe invoice finalized", () => { const event = stripe.onInvoiceFinalized() event.transform(({ id, data }) => ({ eventId: id, stripeObjectId: data.object.id, })) }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns the complete Stripe Event envelope with `type: "invoice.finalized"`. The typed `data.object` contains the Stripe resource for this event. Automate.ax verifies Stripe's signature against the exact request body before accepting an event. Event fields use camel case, while metadata keys remain unchanged. Stripe doesn't guarantee event delivery order, so use `id`, resource IDs, and timestamps when coordinating related events. See [On Stripe event](/reference/integrations/stripe/triggers/on-stripe-event) for the shared envelope and delivery behavior. # On Stripe invoice overdue Source: https://docs.automate.ax/reference/integrations/stripe/triggers/on-stripe-invoice-overdue Run an automation when a Stripe invoice becomes overdue. Use `stripe.onInvoiceOverdue` to run an automation when a Stripe invoice becomes overdue. ## Example ```ts automations/stripe-on-stripe-invoice-overdue.automation.ts theme={null} import { automation } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("On Stripe invoice overdue", () => { const event = stripe.onInvoiceOverdue() event.transform(({ id, data }) => ({ eventId: id, stripeObjectId: data.object.id, })) }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns the complete Stripe Event envelope with `type: "invoice.overdue"`. The typed `data.object` contains the Stripe resource for this event. Stripe generates `invoice.overdue` only when a [Stripe Billing Automation](https://docs.stripe.com/billing/automations) sends that webhook after an invoice becomes overdue. Automate.ax verifies Stripe's signature against the exact request body before accepting an event. Event fields use camel case, while metadata keys remain unchanged. Stripe doesn't guarantee event delivery order, so use `id`, resource IDs, and timestamps when coordinating related events. See [On Stripe event](/reference/integrations/stripe/triggers/on-stripe-event) for the shared envelope and delivery behavior. # On Stripe invoice paid Source: https://docs.automate.ax/reference/integrations/stripe/triggers/on-stripe-invoice-paid Run an automation when a Stripe invoice is paid. Use `stripe.onInvoicePaid` to run an automation when a Stripe invoice is paid. ## Example ```ts automations/stripe-on-stripe-invoice-paid.automation.ts theme={null} import { automation } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("On Stripe invoice paid", () => { const event = stripe.onInvoicePaid() event.transform(({ id, data }) => ({ eventId: id, stripeObjectId: data.object.id, })) }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns the complete Stripe Event envelope with `type: "invoice.paid"`. The typed `data.object` contains the Stripe resource for this event. Automate.ax verifies Stripe's signature against the exact request body before accepting an event. Event fields use camel case, while metadata keys remain unchanged. Stripe doesn't guarantee event delivery order, so use `id`, resource IDs, and timestamps when coordinating related events. See [On Stripe event](/reference/integrations/stripe/triggers/on-stripe-event) for the shared envelope and delivery behavior. # On Stripe invoice payment failed Source: https://docs.automate.ax/reference/integrations/stripe/triggers/on-stripe-invoice-payment-failed Run an automation when Stripe cannot collect an invoice payment. Use `stripe.onInvoicePaymentFailed` to run an automation when Stripe cannot collect an invoice payment. ## Example ```ts automations/stripe-on-stripe-invoice-payment-failed.automation.ts theme={null} import { automation } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("On Stripe invoice payment failed", () => { const event = stripe.onInvoicePaymentFailed() event.transform(({ id, data }) => ({ eventId: id, stripeObjectId: data.object.id, })) }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns the complete Stripe Event envelope with `type: "invoice.payment_failed"`. The typed `data.object` contains the Stripe resource for this event. Automate.ax verifies Stripe's signature against the exact request body before accepting an event. Event fields use camel case, while metadata keys remain unchanged. Stripe doesn't guarantee event delivery order, so use `id`, resource IDs, and timestamps when coordinating related events. See [On Stripe event](/reference/integrations/stripe/triggers/on-stripe-event) for the shared envelope and delivery behavior. # On Stripe invoice voided Source: https://docs.automate.ax/reference/integrations/stripe/triggers/on-stripe-invoice-voided Run an automation when Stripe voids an invoice. Use `stripe.onInvoiceVoided` to run an automation when Stripe voids an invoice. ## Example ```ts automations/stripe-on-stripe-invoice-voided.automation.ts theme={null} import { automation } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("On Stripe invoice voided", () => { const event = stripe.onInvoiceVoided() event.transform(({ id, data }) => ({ eventId: id, stripeObjectId: data.object.id, })) }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns the complete Stripe Event envelope with `type: "invoice.voided"`. The typed `data.object` contains the Stripe resource for this event. Automate.ax verifies Stripe's signature against the exact request body before accepting an event. Event fields use camel case, while metadata keys remain unchanged. Stripe doesn't guarantee event delivery order, so use `id`, resource IDs, and timestamps when coordinating related events. See [On Stripe event](/reference/integrations/stripe/triggers/on-stripe-event) for the shared envelope and delivery behavior. # On Stripe PaymentIntent canceled Source: https://docs.automate.ax/reference/integrations/stripe/triggers/on-stripe-payment-intent-canceled Run an automation when Stripe cancels a PaymentIntent. Use `stripe.onPaymentIntentCanceled` to run an automation when Stripe cancels a PaymentIntent. ## Example ```ts automations/stripe-on-stripe-payment-intent-canceled.automation.ts theme={null} import { automation } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("On Stripe PaymentIntent canceled", () => { const event = stripe.onPaymentIntentCanceled() event.transform(({ id, data }) => ({ eventId: id, stripeObjectId: data.object.id, })) }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns the complete Stripe Event envelope with `type: "payment_intent.canceled"`. The typed `data.object` contains the Stripe resource for this event. Automate.ax verifies Stripe's signature against the exact request body before accepting an event. Event fields use camel case, while metadata keys remain unchanged. Stripe doesn't guarantee event delivery order, so use `id`, resource IDs, and timestamps when coordinating related events. See [On Stripe event](/reference/integrations/stripe/triggers/on-stripe-event) for the shared envelope and delivery behavior. # On Stripe PaymentIntent payment failed Source: https://docs.automate.ax/reference/integrations/stripe/triggers/on-stripe-payment-intent-payment-failed Run an automation when a Stripe PaymentIntent payment fails. Use `stripe.onPaymentIntentPaymentFailed` to run an automation when a Stripe PaymentIntent payment fails. ## Example ```ts automations/stripe-on-stripe-payment-intent-payment-failed.automation.ts theme={null} import { automation } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("On Stripe PaymentIntent payment failed", () => { const event = stripe.onPaymentIntentPaymentFailed() event.transform(({ id, data }) => ({ eventId: id, stripeObjectId: data.object.id, })) }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns the complete Stripe Event envelope with `type: "payment_intent.payment_failed"`. The typed `data.object` contains the Stripe resource for this event. Automate.ax verifies Stripe's signature against the exact request body before accepting an event. Event fields use camel case, while metadata keys remain unchanged. Stripe doesn't guarantee event delivery order, so use `id`, resource IDs, and timestamps when coordinating related events. See [On Stripe event](/reference/integrations/stripe/triggers/on-stripe-event) for the shared envelope and delivery behavior. # On Stripe PaymentIntent succeeded Source: https://docs.automate.ax/reference/integrations/stripe/triggers/on-stripe-payment-intent-succeeded Run an automation when a Stripe PaymentIntent succeeds. Use `stripe.onPaymentIntentSucceeded` to run an automation when a Stripe PaymentIntent succeeds. ## Example ```ts automations/stripe-on-stripe-payment-intent-succeeded.automation.ts theme={null} import { automation } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("On Stripe PaymentIntent succeeded", () => { const event = stripe.onPaymentIntentSucceeded() event.transform(({ id, data }) => ({ eventId: id, stripeObjectId: data.object.id, })) }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns the complete Stripe Event envelope with `type: "payment_intent.succeeded"`. The typed `data.object` contains the Stripe resource for this event. Automate.ax verifies Stripe's signature against the exact request body before accepting an event. Event fields use camel case, while metadata keys remain unchanged. Stripe doesn't guarantee event delivery order, so use `id`, resource IDs, and timestamps when coordinating related events. See [On Stripe event](/reference/integrations/stripe/triggers/on-stripe-event) for the shared envelope and delivery behavior. # On Stripe payout failed Source: https://docs.automate.ax/reference/integrations/stripe/triggers/on-stripe-payout-failed Run an automation when a Stripe payout fails. Use `stripe.onPayoutFailed` to run an automation when a Stripe payout fails. ## Example ```ts automations/stripe-on-stripe-payout-failed.automation.ts theme={null} import { automation } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("On Stripe payout failed", () => { const event = stripe.onPayoutFailed() event.transform(({ id, data }) => ({ eventId: id, stripeObjectId: data.object.id, })) }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns the complete Stripe Event envelope with `type: "payout.failed"`. The typed `data.object` contains the Stripe resource for this event. Automate.ax verifies Stripe's signature against the exact request body before accepting an event. Event fields use camel case, while metadata keys remain unchanged. Stripe doesn't guarantee event delivery order, so use `id`, resource IDs, and timestamps when coordinating related events. See [On Stripe event](/reference/integrations/stripe/triggers/on-stripe-event) for the shared envelope and delivery behavior. # On Stripe payout paid Source: https://docs.automate.ax/reference/integrations/stripe/triggers/on-stripe-payout-paid Run an automation when Stripe marks a payout paid. Use `stripe.onPayoutPaid` to run an automation when Stripe marks a payout paid. ## Example ```ts automations/stripe-on-stripe-payout-paid.automation.ts theme={null} import { automation } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("On Stripe payout paid", () => { const event = stripe.onPayoutPaid() event.transform(({ id, data }) => ({ eventId: id, stripeObjectId: data.object.id, })) }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns the complete Stripe Event envelope with `type: "payout.paid"`. The typed `data.object` contains the Stripe resource for this event. Automate.ax verifies Stripe's signature against the exact request body before accepting an event. Event fields use camel case, while metadata keys remain unchanged. Stripe doesn't guarantee event delivery order, so use `id`, resource IDs, and timestamps when coordinating related events. See [On Stripe event](/reference/integrations/stripe/triggers/on-stripe-event) for the shared envelope and delivery behavior. # On Stripe refund created Source: https://docs.automate.ax/reference/integrations/stripe/triggers/on-stripe-refund-created Run an automation when Stripe creates a refund. Use `stripe.onRefundCreated` to run an automation when Stripe creates a refund. ## Example ```ts automations/stripe-on-stripe-refund-created.automation.ts theme={null} import { automation } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("On Stripe refund created", () => { const event = stripe.onRefundCreated() event.transform(({ id, data }) => ({ eventId: id, stripeObjectId: data.object.id, })) }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns the complete Stripe Event envelope with `type: "refund.created"`. The typed `data.object` contains the Stripe resource for this event. Automate.ax verifies Stripe's signature against the exact request body before accepting an event. Event fields use camel case, while metadata keys remain unchanged. Stripe doesn't guarantee event delivery order, so use `id`, resource IDs, and timestamps when coordinating related events. See [On Stripe event](/reference/integrations/stripe/triggers/on-stripe-event) for the shared envelope and delivery behavior. # On Stripe refund failed Source: https://docs.automate.ax/reference/integrations/stripe/triggers/on-stripe-refund-failed Run an automation when a Stripe refund fails. Use `stripe.onRefundFailed` to run an automation when a Stripe refund fails. ## Example ```ts automations/stripe-on-stripe-refund-failed.automation.ts theme={null} import { automation } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("On Stripe refund failed", () => { const event = stripe.onRefundFailed() event.transform(({ id, data }) => ({ eventId: id, stripeObjectId: data.object.id, })) }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns the complete Stripe Event envelope with `type: "refund.failed"`. The typed `data.object` contains the Stripe resource for this event. Automate.ax verifies Stripe's signature against the exact request body before accepting an event. Event fields use camel case, while metadata keys remain unchanged. Stripe doesn't guarantee event delivery order, so use `id`, resource IDs, and timestamps when coordinating related events. See [On Stripe event](/reference/integrations/stripe/triggers/on-stripe-event) for the shared envelope and delivery behavior. # On Stripe subscription created Source: https://docs.automate.ax/reference/integrations/stripe/triggers/on-stripe-subscription-created Run an automation when Stripe creates a subscription. Use `stripe.onSubscriptionCreated` to run an automation when Stripe creates a subscription. ## Example ```ts automations/stripe-on-stripe-subscription-created.automation.ts theme={null} import { automation } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("On Stripe subscription created", () => { const event = stripe.onSubscriptionCreated() event.transform(({ id, data }) => ({ eventId: id, stripeObjectId: data.object.id, })) }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns the complete Stripe Event envelope with `type: "customer.subscription.created"`. The typed `data.object` contains the Stripe resource for this event. Automate.ax verifies Stripe's signature against the exact request body before accepting an event. Event fields use camel case, while metadata keys remain unchanged. Stripe doesn't guarantee event delivery order, so use `id`, resource IDs, and timestamps when coordinating related events. See [On Stripe event](/reference/integrations/stripe/triggers/on-stripe-event) for the shared envelope and delivery behavior. # On Stripe subscription deleted Source: https://docs.automate.ax/reference/integrations/stripe/triggers/on-stripe-subscription-deleted Run an automation when Stripe deletes or cancels a subscription. Use `stripe.onSubscriptionDeleted` to run an automation when Stripe deletes or cancels a subscription. ## Example ```ts automations/stripe-on-stripe-subscription-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("On Stripe subscription deleted", () => { const event = stripe.onSubscriptionDeleted() event.transform(({ id, data }) => ({ eventId: id, stripeObjectId: data.object.id, })) }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns the complete Stripe Event envelope with `type: "customer.subscription.deleted"`. The typed `data.object` contains the Stripe resource for this event. Automate.ax verifies Stripe's signature against the exact request body before accepting an event. Event fields use camel case, while metadata keys remain unchanged. Stripe doesn't guarantee event delivery order, so use `id`, resource IDs, and timestamps when coordinating related events. See [On Stripe event](/reference/integrations/stripe/triggers/on-stripe-event) for the shared envelope and delivery behavior. # On Stripe subscription trial will end Source: https://docs.automate.ax/reference/integrations/stripe/triggers/on-stripe-subscription-trial-will-end Run an automation shortly before a Stripe subscription trial ends. Use `stripe.onSubscriptionTrialWillEnd` to run an automation shortly before a Stripe subscription trial ends. ## Example ```ts automations/stripe-on-stripe-subscription-trial-will-end.automation.ts theme={null} import { automation } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("On Stripe subscription trial will end", () => { const event = stripe.onSubscriptionTrialWillEnd() event.transform(({ id, data }) => ({ eventId: id, stripeObjectId: data.object.id, })) }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns the complete Stripe Event envelope with `type: "customer.subscription.trial_will_end"`. The typed `data.object` contains the Stripe resource for this event. Automate.ax verifies Stripe's signature against the exact request body before accepting an event. Event fields use camel case, while metadata keys remain unchanged. Stripe doesn't guarantee event delivery order, so use `id`, resource IDs, and timestamps when coordinating related events. See [On Stripe event](/reference/integrations/stripe/triggers/on-stripe-event) for the shared envelope and delivery behavior. # On Stripe subscription updated Source: https://docs.automate.ax/reference/integrations/stripe/triggers/on-stripe-subscription-updated Run an automation when Stripe updates a subscription. Use `stripe.onSubscriptionUpdated` to run an automation when Stripe updates a subscription. ## Example ```ts automations/stripe-on-stripe-subscription-updated.automation.ts theme={null} import { automation } from "automate.ax" import { stripe } from "automate.ax/stripe" export default automation("On Stripe subscription updated", () => { const event = stripe.onSubscriptionUpdated() event.transform(({ id, data }) => ({ eventId: id, stripeObjectId: data.object.id, })) }) ``` Optional static `account` defaults to the project binding. ## Trigger data Returns the complete Stripe Event envelope with `type: "customer.subscription.updated"`. The typed `data.object` contains the Stripe resource for this event. Automate.ax verifies Stripe's signature against the exact request body before accepting an event. Event fields use camel case, while metadata keys remain unchanged. Stripe doesn't guarantee event delivery order, so use `id`, resource IDs, and timestamps when coordinating related events. See [On Stripe event](/reference/integrations/stripe/triggers/on-stripe-event) for the shared envelope and delivery behavior. # Cancel organization invite Source: https://docs.automate.ax/reference/integrations/tally/actions/cancel-organization-invite Cancels one pending invitation in a Tally organization. `tally.cancelOrganizationInvite` cancels one pending invitation in a Tally organization. ## Example ```ts automations/tally-cancel-organization-invite.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("Cancel organization invite", () => { onHttpRequest({ scope: "automation" }) tally.cancelOrganizationInvite({ organizationId: "org-id", inviteId: "invite-id", }) }) ``` ## Inputs `organizationId` and `inviteId` are required. Pass `account` to select a named Tally connection. ## Output Returns an empty object after Tally cancels the invite. # Create folder Source: https://docs.automate.ax/reference/integrations/tally/actions/create-folder Creates a top-level or nested folder in a Tally workspace. `tally.createFolder` creates a top-level or nested folder in a Tally workspace. ## Example ```ts automations/tally-create-folder.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("Create folder", () => { onHttpRequest({ scope: "automation" }) tally.createFolder({ workspaceId: "workspace-id", name: "Quarterly surveys", parentId: "parent-folder-id", }) }) ``` ## Inputs `workspaceId` and a non-empty `name` are required. Omit `parentId` for a top-level folder. Pass `account` to select a named Tally connection. ## Output Returns the created folder. Tally folders require a Pro subscription. # Create form Source: https://docs.automate.ax/reference/integrations/tally/actions/create-form Creates a Tally form from typed blocks or a template. `tally.createForm` creates a Tally form from typed blocks or a template. ## Example ```ts automations/tally-create-form.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("Create form", () => { onHttpRequest({ scope: "automation" }) tally.createForm({ status: "DRAFT", blocks: [], workspaceId: "workspace-id", }) }) ``` ## Inputs `status` and the ordered `blocks` array are required. Optionally pass `workspaceId`, `folderId`, `templateId`, and form `settings`. Block objects use Tally's discriminated block types. Pass `account` to select a named Tally connection. ## Output Returns the created form. Creating a form is not replay-safe, so the action is not retried after an uncertain provider response. # Create organization invites Source: https://docs.automate.ax/reference/integrations/tally/actions/create-organization-invites Invites one or more email addresses to selected Tally workspaces. `tally.createOrganizationInvites` invites one or more email addresses to selected Tally workspaces. ## Example ```ts automations/tally-create-organization-invites.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("Create organization invites", () => { onHttpRequest({ scope: "automation" }) tally.createOrganizationInvites({ organizationId: "org-id", workspaceIds: ["workspace-id"], emails: ["teammate@example.com"], }) }) ``` ## Inputs `organizationId`, one or more `workspaceIds`, and one or more valid `emails` are required. Pass `account` to select a named Tally connection. ## Output Returns an empty object after Tally creates the invitations. This action sends invitations and is not retried after an uncertain response. # Create webhook Source: https://docs.automate.ax/reference/integrations/tally/actions/create-webhook Creates an independent Tally form-response webhook. `tally.createWebhook` creates an independent Tally form-response webhook. ## Example ```ts automations/tally-create-webhook.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("Create webhook", () => { onHttpRequest({ scope: "automation" }) tally.createWebhook({ formId: "form-id", url: "https://example.com/tally", eventTypes: ["FORM_RESPONSE"], signingSecret: "replace-with-a-secret", }) }) ``` ## Inputs `formId`, an HTTP or HTTPS `url`, and `eventTypes` are required. Tally currently supports `FORM_RESPONSE`. Optionally pass `signingSecret`, `httpHeaders`, and `externalSubscriber`. Pass `account` to select a named Tally connection. ## Output Returns the ID, URL, event types, state, and creation time for the created webhook. Use `onFormResponse` for an Automate.ax-managed webhook. This action is for an external endpoint you manage. # Create workspace Source: https://docs.automate.ax/reference/integrations/tally/actions/create-workspace Creates a Tally workspace. `tally.createWorkspace` creates a Tally workspace. ## Example ```ts automations/tally-create-workspace.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("Create workspace", () => { onHttpRequest({ scope: "automation" }) tally.createWorkspace({ name: "Customer research", }) }) ``` ## Inputs A non-empty workspace `name` is required. Pass `account` to select a named Tally connection. ## Output Returns the created workspace. Tally requires a Pro subscription to create workspaces. This action is not retried after an uncertain response. # Delete folder Source: https://docs.automate.ax/reference/integrations/tally/actions/delete-folder Deletes a Tally folder and its nested folders, then moves their forms to the trash. `tally.deleteFolder` deletes a Tally folder and its nested folders, then moves their forms to the trash. ## Example ```ts automations/tally-delete-folder.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("Delete folder", () => { onHttpRequest({ scope: "automation" }) tally.deleteFolder({ workspaceId: "workspace-id", folderId: "folder-id", }) }) ``` ## Inputs `workspaceId` and `folderId` are required. Pass `account` to select a named Tally connection. ## Output Returns an empty object after Tally deletes the folder and its nested folders. This action affects nested folders and forms and is not retried after an uncertain response. # Delete form Source: https://docs.automate.ax/reference/integrations/tally/actions/delete-form Moves a Tally form to the trash. `tally.deleteForm` moves a Tally form to the trash. ## Example ```ts automations/tally-delete-form.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("Delete form", () => { onHttpRequest({ scope: "automation" }) tally.deleteForm({ formId: "form-id", }) }) ``` ## Inputs `formId` is required. Pass `account` to select a named Tally connection. ## Output Returns an empty object after Tally moves the form to the trash. You can restore the form in Tally. This action is not retried after an uncertain response. # Delete form submission Source: https://docs.automate.ax/reference/integrations/tally/actions/delete-form-submission Moves one Tally form submission to the trash. `tally.deleteFormSubmission` moves one Tally form submission to the trash. ## Example ```ts automations/tally-delete-form-submission.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("Delete form submission", () => { onHttpRequest({ scope: "automation" }) tally.deleteFormSubmission({ formId: "form-id", submissionId: "submission-id", }) }) ``` ## Inputs `formId` and `submissionId` are required. Pass `account` to select a named Tally connection. ## Output Returns an empty object after Tally moves the submission to the trash. This action is not retried after an uncertain response. # Delete webhook Source: https://docs.automate.ax/reference/integrations/tally/actions/delete-webhook Deletes one webhook from its Tally form. `tally.deleteWebhook` deletes one webhook from its Tally form. ## Example ```ts automations/tally-delete-webhook.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("Delete webhook", () => { onHttpRequest({ scope: "automation" }) tally.deleteWebhook({ webhookId: "webhook-id", }) }) ``` ## Inputs `webhookId` is required. Pass `account` to select a named Tally connection. ## Output Returns an empty object after Tally deletes the webhook. # Delete workspace Source: https://docs.automate.ax/reference/integrations/tally/actions/delete-workspace Moves a Tally workspace and all its forms to the trash. `tally.deleteWorkspace` moves a Tally workspace and all its forms to the trash. ## Example ```ts automations/tally-delete-workspace.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("Delete workspace", () => { onHttpRequest({ scope: "automation" }) tally.deleteWorkspace({ workspaceId: "workspace-id", }) }) ``` ## Inputs `workspaceId` is required. Pass `account` to select a named Tally connection. ## Output Returns an empty object after Tally moves the workspace and forms to the trash. This action affects every form in the workspace and is not retried after an uncertain response. # Get current user Source: https://docs.automate.ax/reference/integrations/tally/actions/get-current-user Gets the Tally user, organization, and subscription plan for the connected API key. `tally.getCurrentUser` gets the Tally user, organization, and subscription plan for the connected API key. ## Example ```ts automations/tally-get-current-user.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("Get current user", () => { onHttpRequest({ scope: "automation" }) tally.getCurrentUser({ timezone: "America/Los_Angeles", }) }) ``` ## Inputs `timezone` is an optional IANA time zone used when Tally formats account data. Pass `account` to select a named Tally connection. ## Output Returns the connected user, organization context, and subscription plan. # Get form Source: https://docs.automate.ax/reference/integrations/tally/actions/get-form Gets one Tally form with its settings and complete block structure. `tally.getForm` gets one Tally form with its settings and complete block structure. ## Example ```ts automations/tally-get-form.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("Get form", () => { onHttpRequest({ scope: "automation" }) tally.getForm({ formId: "form-id", }) }) ``` ## Inputs `formId` is required. Pass `account` to select a named Tally connection. ## Output Returns the form, settings, and ordered typed blocks. # Get form dimensions Source: https://docs.automate.ax/reference/integrations/tally/actions/get-form-dimensions Gets Tally form visitors grouped by source, browser, device, and location. `tally.getFormDimensions` gets Tally form visitors grouped by source, browser, device, and location. ## Example ```ts automations/tally-get-form-dimensions.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("Get form dimensions", () => { onHttpRequest({ scope: "automation" }) tally.getFormDimensions({ formId: "form-id", period: "7d", }) }) ``` ## Inputs `formId` and `period` are required. `period` accepts `today`, `yesterday`, `24h`, `7d`, `30d`, `3m`, `6m`, `12m`, or `all`. The Free plan supports the past seven days. Longer periods require [Tally Pro](https://tally.so/help/form-insights). Pass `account` to select a named Tally connection. ## Output Returns source, browser, operating-system, device, country, and city breakdowns. # Get form drop-off Source: https://docs.automate.ax/reference/integrations/tally/actions/get-form-drop-off Gets funnel and per-question drop-off statistics for a Tally form. `tally.getFormDropOff` gets funnel and per-question drop-off statistics for a Tally form. ## Example ```ts automations/tally-get-form-drop-off.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("Get form drop-off", () => { onHttpRequest({ scope: "automation" }) tally.getFormDropOff({ formId: "form-id", period: "30d", }) }) ``` ## Inputs `formId` and `period` are required. `period` accepts `today`, `yesterday`, `24h`, `7d`, `30d`, `3m`, `6m`, `12m`, or `all`. Tally requires a Pro subscription for drop-off insights. Pass `account` to select a named Tally connection. ## Output Returns the form funnel and per-question view, answer, and drop-off rates. # Get form metrics Source: https://docs.automate.ax/reference/integrations/tally/actions/get-form-metrics Gets aggregate traffic, response, and completion metrics for a Tally form. `tally.getFormMetrics` gets aggregate traffic, response, and completion metrics for a Tally form. ## Example ```ts automations/tally-get-form-metrics.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("Get form metrics", () => { onHttpRequest({ scope: "automation" }) tally.getFormMetrics({ formId: "form-id", period: "30d", }) }) ``` ## Inputs `formId` and `period` are required. `period` accepts `today`, `yesterday`, `24h`, `7d`, `30d`, `3m`, `6m`, `12m`, or `all`. Pass `account` to select a named Tally connection. ## Output Returns visit, submission, respondent, view, start, and completion metrics. # Get form submission Source: https://docs.automate.ax/reference/integrations/tally/actions/get-form-submission Gets one Tally submission with its responses and form questions. `tally.getFormSubmission` gets one Tally submission with its responses and form questions. ## Example ```ts automations/tally-get-form-submission.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("Get form submission", () => { onHttpRequest({ scope: "automation" }) tally.getFormSubmission({ formId: "form-id", submissionId: "submission-id", }) }) ``` ## Inputs `formId` and `submissionId` are required. Pass `account` to select a named Tally connection. ## Output Returns the submission, response values, and the matching question definitions. # Get form submission analytics Source: https://docs.automate.ax/reference/integrations/tally/actions/get-form-submission-analytics Gets completed and partial Tally submission counts over time. `tally.getFormSubmissionAnalytics` gets completed and partial Tally submission counts over time. ## Example ```ts automations/tally-get-form-submission-analytics.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("Get form submission analytics", () => { onHttpRequest({ scope: "automation" }) tally.getFormSubmissionAnalytics({ formId: "form-id", period: "7d", }) }) ``` ## Inputs `formId` and `period` are required. `period` accepts `today`, `yesterday`, `24h`, `7d`, `30d`, `3m`, `6m`, `12m`, or `all`. The Free plan supports the past seven days. Longer periods require [Tally Pro](https://tally.so/help/form-insights). Pass `account` to select a named Tally connection. ## Output Returns completed and partial submission counts over time. # Get form visits Source: https://docs.automate.ax/reference/integrations/tally/actions/get-form-visits Gets Tally form visits grouped into provider-selected intervals. `tally.getFormVisits` gets Tally form visits grouped into provider-selected intervals. ## Example ```ts automations/tally-get-form-visits.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("Get form visits", () => { onHttpRequest({ scope: "automation" }) tally.getFormVisits({ formId: "form-id", period: "7d", }) }) ``` ## Inputs `formId` and `period` are required. `period` accepts `today`, `yesterday`, `24h`, `7d`, `30d`, `3m`, `6m`, `12m`, or `all`. The Free plan supports the past seven days. Longer periods require [Tally Pro](https://tally.so/help/form-insights). Pass `account` to select a named Tally connection. ## Output Returns visit totals grouped into time intervals selected by Tally. # Get workspace Source: https://docs.automate.ax/reference/integrations/tally/actions/get-workspace Gets one Tally workspace with members, invites, and folders. `tally.getWorkspace` gets one Tally workspace with members, invites, and folders. ## Example ```ts automations/tally-get-workspace.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("Get workspace", () => { onHttpRequest({ scope: "automation" }) tally.getWorkspace({ workspaceId: "workspace-id", }) }) ``` ## Inputs `workspaceId` is required. Pass `account` to select a named Tally connection. ## Output Returns the workspace, organization context, members, invites, and folders. # List folders Source: https://docs.automate.ax/reference/integrations/tally/actions/list-folders Lists the complete folder hierarchy in a Tally workspace. `tally.listFolders` lists the complete folder hierarchy in a Tally workspace. ## Example ```ts automations/tally-list-folders.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("List folders", () => { onHttpRequest({ scope: "automation" }) tally.listFolders({ workspaceId: "workspace-id", }) }) ``` ## Inputs `workspaceId` is required. Pass `account` to select a named Tally connection. ## Output Returns the workspace's ordered folder hierarchy. Tally folders require a Pro subscription. # List form questions Source: https://docs.automate.ax/reference/integrations/tally/actions/list-form-questions Lists every question in a Tally form and whether it has responses. `tally.listFormQuestions` lists every question in a Tally form and whether it has responses. ## Example ```ts automations/tally-list-form-questions.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("List form questions", () => { onHttpRequest({ scope: "automation" }) tally.listFormQuestions({ formId: "form-id", }) }) ``` ## Inputs `formId` is required. Pass `account` to select a named Tally connection. ## Output Returns the form's questions with IDs, types, titles, and response state. # List form submissions Source: https://docs.automate.ax/reference/integrations/tally/actions/list-form-submissions Lists completed or partial submissions for one Tally form. `tally.listFormSubmissions` lists completed or partial submissions for one Tally form. ## Example ```ts automations/tally-list-form-submissions.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("List form submissions", () => { onHttpRequest({ scope: "automation" }) tally.listFormSubmissions({ formId: "form-id", filter: "completed", limit: 100, }) }) ``` ## Inputs `formId` is required. `filter` accepts `all`, `completed`, or `partial`. Filter by inclusive ISO 8601 `startDate` and `endDate`, continue after `afterId`, or use `page` and `limit` (1–500). Pass `account` to select a named Tally connection. ## Output Returns a page of submissions and pagination metadata. # List forms Source: https://docs.automate.ax/reference/integrations/tally/actions/list-forms Lists forms visible to the connected Tally user. `tally.listForms` lists forms visible to the connected Tally user. ## Example ```ts automations/tally-list-forms.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("List forms", () => { onHttpRequest({ scope: "automation" }) tally.listForms({ workspaceIds: ["workspace-id"], limit: 100, }) }) ``` ## Inputs `workspaceIds` optionally filters by one or more workspaces. `page` starts at 1 and `limit` accepts 1–500. Pass `account` to select a named Tally connection. ## Output Returns a page of forms with `page`, `limit`, `total`, and `hasMore`. # List organization invites Source: https://docs.automate.ax/reference/integrations/tally/actions/list-organization-invites Lists pending invitations for a Tally organization. `tally.listOrganizationInvites` lists pending invitations for a Tally organization. ## Example ```ts automations/tally-list-organization-invites.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("List organization invites", () => { onHttpRequest({ scope: "automation" }) tally.listOrganizationInvites({ organizationId: "org-id", }) }) ``` ## Inputs `organizationId` is required. Pass `account` to select a named Tally connection. ## Output Returns pending invites with IDs, email addresses, and timestamps. # List organization users Source: https://docs.automate.ax/reference/integrations/tally/actions/list-organization-users Lists users and workspace memberships in a Tally organization. `tally.listOrganizationUsers` lists users and workspace memberships in a Tally organization. ## Example ```ts automations/tally-list-organization-users.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("List organization users", () => { onHttpRequest({ scope: "automation" }) tally.listOrganizationUsers({ organizationId: "org-id", }) }) ``` ## Inputs `organizationId` is required. Pass `account` to select a named Tally connection. ## Output Returns the organization's users with profile, account-state, and plan details. # List webhook events Source: https://docs.automate.ax/reference/integrations/tally/actions/list-webhook-events Lists delivery attempts for one Tally webhook. `tally.listWebhookEvents` lists delivery attempts for one Tally webhook. ## Example ```ts automations/tally-list-webhook-events.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("List webhook events", () => { onHttpRequest({ scope: "automation" }) tally.listWebhookEvents({ webhookId: "webhook-id", page: 1, }) }) ``` ## Inputs `webhookId` is required. `page` is optional and starts at 1. Pass `account` to select a named Tally connection. ## Output Returns delivery status, retry count, request payload, provider response, timestamps, and pagination data. # List webhooks Source: https://docs.automate.ax/reference/integrations/tally/actions/list-webhooks Lists webhooks visible to the connected Tally user. `tally.listWebhooks` lists webhooks visible to the connected Tally user. ## Example ```ts automations/tally-list-webhooks.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("List webhooks", () => { onHttpRequest({ scope: "automation" }) tally.listWebhooks({ page: 1, limit: 100, }) }) ``` ## Inputs `page` starts at 1 and `limit` accepts 1–100. Both are optional. Pass `account` to select a named Tally connection. ## Output Returns a page of webhooks with form, URL, event, state, and pagination data. # List workspaces Source: https://docs.automate.ax/reference/integrations/tally/actions/list-workspaces Lists workspaces visible to the connected Tally user. `tally.listWorkspaces` lists workspaces visible to the connected Tally user. ## Example ```ts automations/tally-list-workspaces.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("List workspaces", () => { onHttpRequest({ scope: "automation" }) tally.listWorkspaces({ page: 1, }) }) ``` ## Inputs `page` is optional and starts at 1. Pass `account` to select a named Tally connection. ## Output Returns a page of workspaces with organization context and pagination metadata. # Remove organization user Source: https://docs.automate.ax/reference/integrations/tally/actions/remove-organization-user Removes a user from a Tally organization. `tally.removeOrganizationUser` removes a user from a Tally organization. ## Example ```ts automations/tally-remove-organization-user.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("Remove organization user", () => { onHttpRequest({ scope: "automation" }) tally.removeOrganizationUser({ organizationId: "org-id", userId: "user-id", }) }) ``` ## Inputs `organizationId` and `userId` are required. Pass `account` to select a named Tally connection. ## Output Returns an empty object after Tally removes the user. Only the organization creator can remove other users. This action changes membership and is not retried after an uncertain response. # Retry webhook event Source: https://docs.automate.ax/reference/integrations/tally/actions/retry-webhook-event Requests immediate redelivery of one failed Tally webhook event. `tally.retryWebhookEvent` requests immediate redelivery of one failed Tally webhook event. ## Example ```ts automations/tally-retry-webhook-event.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("Retry webhook event", () => { onHttpRequest({ scope: "automation" }) tally.retryWebhookEvent({ webhookId: "webhook-id", eventId: "event-id", }) }) ``` ## Inputs `webhookId` and `eventId` are required. Pass `account` to select a named Tally connection. ## Output Returns an empty object after Tally accepts the retry request. Your endpoint can receive the same event more than once and must remain idempotent. # Update folder Source: https://docs.automate.ax/reference/integrations/tally/actions/update-folder Renames one folder in a Tally workspace. `tally.updateFolder` renames one folder in a Tally workspace. ## Example ```ts automations/tally-update-folder.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("Update folder", () => { onHttpRequest({ scope: "automation" }) tally.updateFolder({ workspaceId: "workspace-id", folderId: "folder-id", name: "Archived surveys", }) }) ``` ## Inputs `workspaceId`, `folderId`, and a non-empty `name` are required. Pass `account` to select a named Tally connection. ## Output Returns an empty object after Tally renames the folder. # Update form Source: https://docs.automate.ax/reference/integrations/tally/actions/update-form Updates a Tally form's name, status, blocks, or settings. `tally.updateForm` updates a Tally form's name, status, blocks, or settings. ## Example ```ts automations/tally-update-form.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("Update form", () => { onHttpRequest({ scope: "automation" }) tally.updateForm({ formId: "form-id", name: "Customer feedback", status: "PUBLISHED", }) }) ``` ## Inputs `formId` is required. Pass any of `name`, `status`, `blocks`, or `settings` to change those fields. Pass `account` to select a named Tally connection. ## Output Returns the updated form. # Update form blocks Source: https://docs.automate.ax/reference/integrations/tally/actions/update-form-blocks Replaces every block in a Tally form and optionally updates its settings. `tally.updateFormBlocks` replaces every block in a Tally form and optionally updates its settings. ## Example ```ts automations/tally-update-form-blocks.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("Update form blocks", () => { onHttpRequest({ scope: "automation" }) tally.updateFormBlocks({ formId: "form-id", blocks: [], }) }) ``` ## Inputs `formId` and the complete ordered `blocks` array are required. Optionally pass form `settings`. Existing blocks omitted from the array are removed. Pass `account` to select a named Tally connection. ## Output Returns the updated form, including its ID, name, workspace, status, and timestamps. This is a complete replacement, not an append operation. # Update webhook Source: https://docs.automate.ax/reference/integrations/tally/actions/update-webhook Replaces the form, URL, events, security, and enabled state for a Tally webhook. `tally.updateWebhook` replaces the form, URL, events, security, and enabled state for a Tally webhook. ## Example ```ts automations/tally-update-webhook.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("Update webhook", () => { onHttpRequest({ scope: "automation" }) tally.updateWebhook({ webhookId: "webhook-id", formId: "form-id", url: "https://example.com/tally", eventTypes: ["FORM_RESPONSE"], isEnabled: true, }) }) ``` ## Inputs `webhookId`, `formId`, `url`, `eventTypes`, and `isEnabled` are required. Optionally replace `signingSecret` and `httpHeaders`. Pass `account` to select a named Tally connection. ## Output Returns an empty object after Tally updates the webhook. This replaces the webhook configuration. Include every value you want to keep. # Update workspace Source: https://docs.automate.ax/reference/integrations/tally/actions/update-workspace Renames one Tally workspace. `tally.updateWorkspace` renames one Tally workspace. ## Example ```ts automations/tally-update-workspace.automation.ts theme={null} import { automation, onHttpRequest } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("Update workspace", () => { onHttpRequest({ scope: "automation" }) tally.updateWorkspace({ workspaceId: "workspace-id", name: "Research operations", }) }) ``` ## Inputs `workspaceId` and a non-empty `name` are required. Pass `account` to select a named Tally connection. ## Output Returns an empty object after Tally renames the workspace. # Tally Source: https://docs.automate.ax/reference/integrations/tally/index Build and manage Tally forms, responses, analytics, workspaces, and signed form-response automations. Use Tally to build forms, inspect submissions and analytics, manage workspaces and webhooks, and start automations when a form receives a response. Connect Tally with an API key from [Tally API keys](https://tally.so/settings/api-keys). Tally API keys start with `tly-` and grant access to every resource available to their user, so protect them like passwords. ## Exports ```ts theme={null} import { tally, tallyAccount } from "automate.ax/tally" ``` * `tally` contains all packaged Tally actions and triggers. * `tallyAccount("name")` selects a named Tally API-key connection. Automate.ax pins requests to Tally API version `2026-08-04`. Tally limits API keys to 100 requests per minute. Rate-limited actions retry after Tally's `Retry-After` delay when provided. ## Triggers * [Form event](/reference/integrations/tally/triggers/on-form-event) * [Form response](/reference/integrations/tally/triggers/on-form-response) Automate.ax creates and signs the Tally webhook for each trigger. You do not need to create a webhook manually. ## Actions * [Get current user](/reference/integrations/tally/actions/get-current-user) * [List organization users](/reference/integrations/tally/actions/list-organization-users) * [Remove organization user](/reference/integrations/tally/actions/remove-organization-user) * [List organization invites](/reference/integrations/tally/actions/list-organization-invites) * [Create organization invites](/reference/integrations/tally/actions/create-organization-invites) * [Cancel organization invite](/reference/integrations/tally/actions/cancel-organization-invite) * [List forms](/reference/integrations/tally/actions/list-forms) * [Create form](/reference/integrations/tally/actions/create-form) * [Get form](/reference/integrations/tally/actions/get-form) * [Update form](/reference/integrations/tally/actions/update-form) * [Delete form](/reference/integrations/tally/actions/delete-form) * [List form questions](/reference/integrations/tally/actions/list-form-questions) * [Update form blocks](/reference/integrations/tally/actions/update-form-blocks) * [List form submissions](/reference/integrations/tally/actions/list-form-submissions) * [Get form submission](/reference/integrations/tally/actions/get-form-submission) * [Delete form submission](/reference/integrations/tally/actions/delete-form-submission) * [Get form metrics](/reference/integrations/tally/actions/get-form-metrics) * [Get form visits](/reference/integrations/tally/actions/get-form-visits) * [Get form submission analytics](/reference/integrations/tally/actions/get-form-submission-analytics) * [Get form dimensions](/reference/integrations/tally/actions/get-form-dimensions) * [Get form drop-off](/reference/integrations/tally/actions/get-form-drop-off) * [List workspaces](/reference/integrations/tally/actions/list-workspaces) * [Create workspace](/reference/integrations/tally/actions/create-workspace) * [Get workspace](/reference/integrations/tally/actions/get-workspace) * [Update workspace](/reference/integrations/tally/actions/update-workspace) * [Delete workspace](/reference/integrations/tally/actions/delete-workspace) * [List folders](/reference/integrations/tally/actions/list-folders) * [Create folder](/reference/integrations/tally/actions/create-folder) * [Update folder](/reference/integrations/tally/actions/update-folder) * [Delete folder](/reference/integrations/tally/actions/delete-folder) * [List webhooks](/reference/integrations/tally/actions/list-webhooks) * [Create webhook](/reference/integrations/tally/actions/create-webhook) * [Update webhook](/reference/integrations/tally/actions/update-webhook) * [Delete webhook](/reference/integrations/tally/actions/delete-webhook) * [List webhook events](/reference/integrations/tally/actions/list-webhook-events) * [Retry webhook event](/reference/integrations/tally/actions/retry-webhook-event) # Form event Source: https://docs.automate.ax/reference/integrations/tally/triggers/on-form-event Starts from any supported webhook event for one Tally form. `tally.onFormEvent` is the broad Tally trigger. It currently receives `FORM_RESPONSE` events and remains the stable choice when Tally adds supported form webhook event types. ## Example ```ts automations/tally-on-form-event.automation.ts theme={null} import { automation } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("Inspect Tally form events", () => { const event = tally.onFormEvent({ formId: "form-id" }) tally.getFormSubmission({ formId: event.data.formId, submissionId: event.data.submissionId, }) }) ``` ## Inputs `formId` is required and limits the managed webhook to one Tally form. Pass `account` to select a named Tally connection. ## Delivery behavior Automate.ax creates a signed `FORM_RESPONSE` webhook, verifies `Tally-Signature` against the exact request body, and deduplicates retries by Tally event ID. Tally retries failed deliveries after 5 minutes, 30 minutes, 1 hour, 6 hours, and 1 day. Each authenticated delivery starts an ordinary root context. ## Output Returns the same signed payload as `onFormResponse`: `eventId`, `eventType`, `createdAt`, and form-response `data` with submission fields and typed values. # Form response Source: https://docs.automate.ax/reference/integrations/tally/triggers/on-form-response Starts when one Tally form receives a submitted response. `tally.onFormResponse` starts when one Tally form receives a `FORM_RESPONSE` webhook. ## Example ```ts automations/tally-on-form-response.automation.ts theme={null} import { automation } from "automate.ax" import { tally } from "automate.ax/tally" export default automation("Inspect Tally responses", () => { const response = tally.onFormResponse({ formId: "form-id" }) tally.getFormSubmission({ formId: response.data.formId, submissionId: response.data.submissionId, }) }) ``` ## Inputs `formId` is required and limits the managed webhook to one Tally form. Pass `account` to select a named Tally connection. ## Delivery behavior Automate.ax creates a signed `FORM_RESPONSE` webhook, verifies `Tally-Signature` against the exact request body, and deduplicates retries by Tally event ID. Tally retries failed deliveries after 5 minutes, 30 minutes, 1 hour, 6 hours, and 1 day. Each authenticated delivery starts an ordinary root context. ## Output Returns `eventId`, `eventType`, `createdAt`, and `data`. The data includes response, submission, and respondent IDs; the form ID and name; submission time; typed response fields; and optional PDF and preview URLs. # Add channel member Source: https://docs.automate.ax/reference/integrations/teams/actions/add-channel-member Adds and returns a direct private or shared channel member. `teams.addChannelMember` adds and returns a direct private or shared channel member. ## Example ```ts automations/teams-add-channel-member.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Add channel member", () => { teams.addChannelMember({ team: "Engineering", channel: "Private", userId: "user-id", roles: [], }) }) ``` ## Inputs Pass `team` and `channel` as exact display names or provider IDs and provide the Microsoft Entra `userId`. `roles` defaults to an empty array for a regular member; use `["owner"]` for an owner. The optional second argument `{ account }` selects a Microsoft binding. ## Output Adds and returns a direct private or shared channel member. Microsoft Graph IDs are opaque and should be passed through unchanged. Private and shared channel membership operations do not apply to standard channels. # Add chat member Source: https://docs.automate.ax/reference/integrations/teams/actions/add-chat-member Adds and returns a chat member. `teams.addChatMember` adds and returns a chat member. ## Example ```ts automations/teams-add-chat-member.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Add chat member", () => { teams.addChatMember({ chatId: "chat-id", userId: "user-id", roles: [] }) }) ``` ## Inputs Pass the opaque `chatId` and Microsoft Entra `userId`. `roles` defaults to an empty array for a regular member; use `["owner"]` for an owner. Optional `visibleHistoryStartAt` controls the earliest chat history visible to the new member. The optional second argument `{ account }` selects a Microsoft binding. ## Output Adds and returns a chat member. Microsoft Graph IDs are opaque and should be passed through unchanged. # Add team member Source: https://docs.automate.ax/reference/integrations/teams/actions/add-team-member Adds and returns a direct team member. `teams.addTeamMember` adds and returns a direct team member. ## Example ```ts automations/teams-add-team-member.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Add team member", () => { teams.addTeamMember({ team: "Engineering", userId: "user-id", roles: [] }) }) ``` ## Inputs Pass `team` as an exact display name or provider ID and provide the Microsoft Entra `userId`. `roles` defaults to an empty array for a regular member; use `["owner"]` for an owner. The optional second argument `{ account }` selects a Microsoft binding. ## Output Adds and returns a direct team member. Microsoft Graph IDs are opaque and should be passed through unchanged. # Archive channel Source: https://docs.automate.ax/reference/integrations/teams/actions/archive-channel Archives a channel and completes without output. `teams.archiveChannel` archives a channel and completes without output. ## Example ```ts automations/teams-archive-channel.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Archive channel", () => { teams.archiveChannel({ team: "Engineering", channel: "Incidents" }) }) ``` ## Inputs Pass `{ team: "Engineering", channel: "Incidents" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Archives a channel and completes without output. Microsoft Graph IDs are opaque and should be passed through unchanged. # Create channel Source: https://docs.automate.ax/reference/integrations/teams/actions/create-channel Creates and returns a Teams channel. `teams.createChannel` creates and returns a Teams channel. ## Example ```ts automations/teams-create-channel.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Create channel", () => { teams.createChannel({ team: "Engineering", displayName: "Incidents", membershipType: "standard", }) }) ``` ## Inputs Pass `team` as an exact display name or provider ID and set `displayName`. Optional `description` sets the channel description. `membershipType` accepts `"standard"`, `"private"`, or `"shared"` and defaults to `"standard"`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Creates and returns a Teams channel. Microsoft Graph IDs are opaque and should be passed through unchanged. # Create chat Source: https://docs.automate.ax/reference/integrations/teams/actions/create-chat Create a one-to-one or group Microsoft Teams chat. `teams.createChat` creates a chat with Microsoft 365 users and adds the connected user as an owner. ## Example ```ts automations/create-launch-chat.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Create launch chat", () => { teams.createChat({ chatType: "group", topic: "Launch room", participants: [ { user: "alex@example.com" }, { user: "guest-user-id", role: "guest" }, ], }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `chatType` | `"oneOnOne" \| "group"` | Yes | None | Chat kind to create. | | `participants` | `{ user: string; role?: "owner" \| "guest" }[]` | Yes | None | Other users by Entra ID or user principal name. Role defaults to `owner`. | | `topic` | `string` | Group only | None | Non-empty group-chat title. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"microsoft">` | No | Project default | Microsoft binding. | A one-to-one chat requires exactly one other participant and can't have a topic. A group chat requires at least two other participants. Use `guest` only for guest users in the same tenant. ## Output Returns the `TeamsChat` with `chatId`, `chatType`, and available topic, tenant, timestamps, and web URL. Graph may return an existing one-to-one chat between the same people. # Delete channel Source: https://docs.automate.ax/reference/integrations/teams/actions/delete-channel Deletes a Teams channel and completes without output. `teams.deleteChannel` deletes a Teams channel and completes without output. ## Example ```ts automations/teams-delete-channel.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Delete channel", () => { teams.deleteChannel({ team: "Engineering", channel: "Incidents" }) }) ``` ## Inputs Pass `{ team: "Engineering", channel: "Incidents" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Deletes a Teams channel and completes without output. Microsoft Graph IDs are opaque and should be passed through unchanged. # Get channel Source: https://docs.automate.ax/reference/integrations/teams/actions/get-channel Returns one Teams channel. `teams.getChannel` returns one Teams channel. ## Example ```ts automations/teams-get-channel.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Get channel", () => { teams.getChannel({ team: "Engineering", channel: "General" }) }) ``` ## Inputs Pass `{ team: "Engineering", channel: "General" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Returns one Teams channel. Microsoft Graph IDs are opaque and should be passed through unchanged. # Get channel member Source: https://docs.automate.ax/reference/integrations/teams/actions/get-channel-member Returns one direct channel member. `teams.getChannelMember` returns one direct channel member. ## Example ```ts automations/teams-get-channel-member.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Get channel member", () => { teams.getChannelMember({ team: "Engineering", channel: "Private", memberId: "member-id", }) }) ``` ## Inputs Pass `{ team: "Engineering", channel: "Private", memberId: "member-id" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Returns one direct channel member. Microsoft Graph IDs are opaque and should be passed through unchanged. Private and shared channel membership operations do not apply to standard channels. # Get channel message Source: https://docs.automate.ax/reference/integrations/teams/actions/get-channel-message Get one root or reply message from a Teams channel. `teams.getChannelMessage` retrieves a root message or reply. For a reply, provide the root ID as `replyToMessageId` and the reply ID as `messageId`. ## Example ```ts automations/get-teams-reply.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Get Teams reply", () => { teams.getChannelMessage({ team: "Engineering", channel: "General", replyToMessageId: "root-message-id", messageId: "reply-message-id", }) }) ``` ## Inputs `getTeamsChannelMessage` requires string values for `team`, `channel`, and `messageId`. `replyToMessageId` is optional. Team and channel accept exact names or IDs. Message fields are opaque IDs. Optional second argument `{ account }` selects the Microsoft binding. ## Output Returns a `TeamsChatMessage` with body, sender, timestamps, attachments, mentions, reactions, importance, reply, subject, summary, locale, web URL, and ETag. # Get channel message hosted content Source: https://docs.automate.ax/reference/integrations/teams/actions/get-channel-message-hosted-content Downloads hosted content as a `File`. `teams.getChannelMessageHostedContent` downloads hosted content as a `File`. ## Example ```ts automations/teams-get-channel-message-hosted-content.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Get channel message hosted content", () => { teams.getChannelMessageHostedContent({ team: "Engineering", channel: "General", messageId: "message-id", contentId: "content-id", }) }) ``` ## Inputs Pass `{ team: "Engineering", channel: "General", messageId: "message-id", contentId: "content-id" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Downloads hosted content as a `File`. Microsoft Graph IDs are opaque and should be passed through unchanged. # Get chat Source: https://docs.automate.ax/reference/integrations/teams/actions/get-chat Get one Microsoft Teams chat by ID. `teams.getChat` returns chat metadata without members or messages. Use the list actions for those collections. ## Example ```ts automations/get-teams-chat.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Get Teams chat", () => { teams.getChat({ chatId: "19:opaque-chat-id@thread.v2" }) }) ``` ## Inputs Required `chatId: string` is Microsoft's opaque identifier. Optional second argument `{ account }` selects a Microsoft binding and defaults to the project binding. ## Output Returns `chatId`, `chatType`, and optional `topic`, `tenantId`, `createdAt`, `updatedAt`, and `webUrl`. # Get chat member Source: https://docs.automate.ax/reference/integrations/teams/actions/get-chat-member Returns one chat member. `teams.getChatMember` returns one chat member. ## Example ```ts automations/teams-get-chat-member.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Get chat member", () => { teams.getChatMember({ chatId: "chat-id", memberId: "member-id" }) }) ``` ## Inputs Pass `{ chatId: "chat-id", memberId: "member-id" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Returns one chat member. Microsoft Graph IDs are opaque and should be passed through unchanged. # Get chat message Source: https://docs.automate.ax/reference/integrations/teams/actions/get-chat-message Get one message from a Microsoft Teams chat. `teams.getChatMessage` retrieves a chat message by its chat and message IDs. ## Example ```ts automations/get-teams-chat-message.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Get Teams chat message", () => { teams.getChatMessage({ chatId: "19:opaque-chat-id@thread.v2", messageId: "message-id", }) }) ``` ## Inputs `getTeamsChatMessage` requires opaque strings for `chatId` and `messageId`. Optional second argument `{ account }` selects the Microsoft binding. Inputs accept compatible signals. ## Output Returns a `TeamsChatMessage` with `messageId`, body, importance, sender, timestamps, attachments, mentions, reactions, and available Microsoft metadata. # Get chat message hosted content Source: https://docs.automate.ax/reference/integrations/teams/actions/get-chat-message-hosted-content Downloads chat-message hosted content as a `File`. `teams.getChatMessageHostedContent` downloads chat-message hosted content as a `File`. ## Example ```ts automations/teams-get-chat-message-hosted-content.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Get chat message hosted content", () => { teams.getChatMessageHostedContent({ chatId: "chat-id", messageId: "message-id", contentId: "content-id", }) }) ``` ## Inputs Pass `{ chatId: "chat-id", messageId: "message-id", contentId: "content-id" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Downloads chat-message hosted content as a `File`. Microsoft Graph IDs are opaque and should be passed through unchanged. # Get team Source: https://docs.automate.ax/reference/integrations/teams/actions/get-team Returns one joined Microsoft Team. `teams.getTeam` returns one joined Microsoft Team. ## Example ```ts automations/teams-get-team.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Get team", () => { teams.getTeam({ team: "Engineering" }) }) ``` ## Inputs Pass `{ team: "Engineering" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Returns one joined Microsoft Team. Microsoft Graph IDs are opaque and should be passed through unchanged. # Get team member Source: https://docs.automate.ax/reference/integrations/teams/actions/get-team-member Returns one direct team member. `teams.getTeamMember` returns one direct team member. ## Example ```ts automations/teams-get-team-member.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Get team member", () => { teams.getTeamMember({ team: "Engineering", memberId: "member-id" }) }) ``` ## Inputs Pass `{ team: "Engineering", memberId: "member-id" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Returns one direct team member. Microsoft Graph IDs are opaque and should be passed through unchanged. # List channel members Source: https://docs.automate.ax/reference/integrations/teams/actions/list-channel-members List direct members and owners of a Microsoft Teams channel. `teams.listChannelMembers` returns a channel's direct members after resolving the team and channel by exact name or ID. Private and shared channel membership can differ from team membership. ## Example ```ts automations/list-private-channel-members.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("List leadership channel members", () => { teams.listChannelMembers({ team: "Engineering", channel: "Leadership", limit: 100, }) }) ``` ## Inputs `listTeamsChannelMembers` requires exact display names or IDs for `team` and `channel`. `limit` defaults to 100 and permits 1–10,000 across pages. Optional second argument `{ account }` selects a Microsoft binding. ## Output Returns `TeamsMember[]` with `memberId`, `roles`, and available display name, email, tenant, user ID, and visible-history start time. Missing and ambiguous team or channel names fail with the matching IDs when available. # List channel message hosted content Source: https://docs.automate.ax/reference/integrations/teams/actions/list-channel-message-hosted-content Returns hosted-content metadata for a channel message. `teams.listChannelMessageHostedContent` returns hosted-content metadata for a channel message. ## Example ```ts automations/teams-list-channel-message-hosted-content.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("List channel message hosted content", () => { teams.listChannelMessageHostedContent({ team: "Engineering", channel: "General", messageId: "message-id", }) }) ``` ## Inputs Pass `{ team: "Engineering", channel: "General", messageId: "message-id" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Returns `contentId` and optional `contentType` metadata. Pass the opaque `contentId` to `teams.getChannelMessageHostedContent` to download the bytes. # List channel message replies Source: https://docs.automate.ax/reference/integrations/teams/actions/list-channel-message-replies List replies beneath one Microsoft Teams channel message. `teams.listChannelReplies` returns replies to a root channel message. ## Example ```ts automations/list-teams-replies.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("List Teams replies", () => { teams.listChannelReplies({ team: "Engineering", channel: "General", messageId: "root-message-id", limit: 100, }) }) ``` ## Inputs `listTeamsChannelMessageReplies` requires `team`, `channel`, and the root `messageId`. Optional `limit` defaults to 100 and ranges from 1 to 10,000. Optional second argument `{ account }` selects the Microsoft binding. Every action input also accepts a compatible signal. ## Output Returns `TeamsChatMessage[]`. Each reply normally has `replyToId` set to the root ID. Results follow Graph's order and stop at the limit across pages. # List channel messages Source: https://docs.automate.ax/reference/integrations/teams/actions/list-channel-messages List root messages in a Microsoft Teams channel. `teams.listChannelMessages` lists top-level messages without replies. Use `teams.listChannelReplies` for a thread. ## Example ```ts automations/read-teams-channel.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Read Teams channel", () => { teams.listChannelMessages({ team: "Engineering", channel: "General", limit: 50, }) }) ``` ## Inputs `listTeamsChannelMessages` requires `team` and `channel`, which accept exact display names or IDs. Optional `limit` defaults to 100 and accepts 1–10,000. Second argument `{ account }` defaults to the project binding. ## Output Returns messages with `messageId`, `messageType`, `body`, `importance`, and default-empty `attachments`, `mentions`, and `reactions`. The default `importance` is `normal`. Available fields include timestamps, sender, reply parent, subject, summary, locale, web URL, and ETag. Body content may be `text` or `html`. # List channels Source: https://docs.automate.ax/reference/integrations/teams/actions/list-channels List channels in a Microsoft Team. `teams.listChannels` returns a joined team's channels across Graph pages. The team accepts an exact display name or ID. ## Example ```ts automations/list-team-channels.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("List Engineering channels", () => { teams.listChannels({ team: "Engineering", limit: 100 }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `team` | `string` | Yes | None | Exact joined-team display name or team ID. | | `limit` | `number` | No | `100` | Maximum returned across Graph pages, from 1 to 10,000. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"microsoft">` | No | Project default | Microsoft binding. | ## Output Returns channels with `channelId`, `displayName`, `isArchived`, and optional `createdAt`, `description`, `email`, `membershipType`, and `webUrl`. `isArchived` defaults to false. Exact name lookup ignores case and whitespace and fails on missing or ambiguous matches. IDs avoid that lookup. # List chat members Source: https://docs.automate.ax/reference/integrations/teams/actions/list-chat-members List participants in a Microsoft Teams chat. `teams.listChatMembers` lists the direct membership of one chat. ## Example ```ts automations/list-chat-members.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("List Teams chat members", () => { teams.listChatMembers({ chatId: "19:opaque-chat-id@thread.v2", limit: 100, }) }) ``` ## Inputs `listTeamsChatMembers` requires `chatId`. `limit` defaults to 100 and accepts 1–10,000 across Graph pages. Optional second argument `{ account }` selects the Microsoft binding. ## Output Returns `TeamsMember[]` with `memberId`, roles, and available display name, email, tenant ID, Entra `userId`, and visible-history start date. Membership IDs and user IDs are distinct. # List chat message hosted content Source: https://docs.automate.ax/reference/integrations/teams/actions/list-chat-message-hosted-content Returns hosted-content metadata for a chat message. `teams.listChatMessageHostedContent` returns hosted-content metadata for a chat message. ## Example ```ts automations/teams-list-chat-message-hosted-content.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("List chat message hosted content", () => { teams.listChatMessageHostedContent({ chatId: "chat-id", messageId: "message-id", }) }) ``` ## Inputs Pass `{ chatId: "chat-id", messageId: "message-id" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Returns `contentId` and optional `contentType` metadata. Pass the opaque `contentId` to `teams.getChatMessageHostedContent` to download the bytes. # List chat messages Source: https://docs.automate.ax/reference/integrations/teams/actions/list-chat-messages List messages in a Microsoft Teams chat. `teams.listChatMessages` returns one chat's messages across Graph pages. ## Example ```ts automations/read-teams-chat.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Read Teams chat", () => { teams.listChatMessages({ chatId: "19:opaque-chat-id@thread.v2", limit: 100, }) }) ``` ## Inputs Required `chatId` identifies the chat. Optional `limit` defaults to 100 and allows 1–10,000. Optional second argument `{ account }` selects the Microsoft binding. ## Output Returns `TeamsChatMessage[]` with body, IDs, sender, timestamps, attachments, mentions, reactions, importance, reply parent, subject, summary, locale, web URL, and ETag. Attachments, mentions, and reactions default to empty arrays. Importance defaults to `normal`. # List chats Source: https://docs.automate.ax/reference/integrations/teams/actions/list-chats List one-to-one, group, and meeting chats for a Microsoft 365 user. `teams.listChats` returns the connected user's chats across Graph pages. ## Example ```ts automations/list-teams-chats.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("List Teams chats", () => { teams.listChats({ limit: 250 }) }) ``` ## Inputs Optional `limit` defaults to 100 and accepts 1–10,000 results across Graph pages. Optional second argument `{ account }` selects the Microsoft binding. ## Output Returns chats with `chatId`, `chatType`, and optional `topic`, `tenantId`, `createdAt`, `updatedAt`, and `webUrl`. `chatType` is `oneOnOne`, `group`, `meeting`, or `unknownFutureValue`. # List joined teams Source: https://docs.automate.ax/reference/integrations/teams/actions/list-joined-teams List Microsoft Teams joined by the connected user. `teams.listJoinedTeams` returns every team joined by the connected user. Use it to find team IDs or validate display names. ## Example ```ts automations/list-teams.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("List joined teams", () => { teams.listJoinedTeams() }) ``` ## Inputs The action has no schema input fields. Its optional second argument `{ account: string | IntegrationAccountReference<"microsoft"> }` defaults to the project's Microsoft binding. ## Output Returns `Signal`. Each team has `teamId`, `displayName`, `isArchived`, and optional `description`, `classification`, `specialization`, `visibility`, and `webUrl`. `isArchived` defaults to `false`. Microsoft Graph doesn't support this operation for personal Microsoft accounts. # List team members Source: https://docs.automate.ax/reference/integrations/teams/actions/list-team-members List direct members and owners of a Microsoft Team. `teams.listTeamMembers` lists the direct membership of one joined team. ## Example ```ts automations/list-team-members.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("List Engineering members", () => { teams.listTeamMembers({ team: "Engineering", limit: 500 }) }) ``` ## Inputs `team: string` is an exact display name or ID. Optional `limit` defaults to 100 and accepts 1–10,000. Second argument `{ account }` defaults to the project Microsoft binding. ## Output Returns members with `memberId`, `roles`, and optional `displayName`, `email`, `tenantId`, `userId`, and `visibleHistoryStartAt`. `roles` defaults to `[]`. `memberId` is the conversation membership ID. Use `userId` when another Graph operation expects an Entra user ID. # Remove channel member Source: https://docs.automate.ax/reference/integrations/teams/actions/remove-channel-member Removes a direct channel member and completes without output. `teams.removeChannelMember` removes a direct channel member and completes without output. ## Example ```ts automations/teams-remove-channel-member.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Remove channel member", () => { teams.removeChannelMember({ team: "Engineering", channel: "Private", memberId: "member-id", }) }) ``` ## Inputs Pass `{ team: "Engineering", channel: "Private", memberId: "member-id" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Removes a direct channel member and completes without output. Microsoft Graph IDs are opaque and should be passed through unchanged. Private and shared channel membership operations do not apply to standard channels. # Remove chat member Source: https://docs.automate.ax/reference/integrations/teams/actions/remove-chat-member Removes a chat member and completes without output. `teams.removeChatMember` removes a chat member and completes without output. ## Example ```ts automations/teams-remove-chat-member.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Remove chat member", () => { teams.removeChatMember({ chatId: "chat-id", memberId: "member-id" }) }) ``` ## Inputs Pass `{ chatId: "chat-id", memberId: "member-id" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Removes a chat member and completes without output. Microsoft Graph IDs are opaque and should be passed through unchanged. # Remove team member Source: https://docs.automate.ax/reference/integrations/teams/actions/remove-team-member Removes a direct team member and completes without output. `teams.removeTeamMember` removes a direct team member and completes without output. ## Example ```ts automations/teams-remove-team-member.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Remove team member", () => { teams.removeTeamMember({ team: "Engineering", memberId: "member-id" }) }) ``` ## Inputs Pass `{ team: "Engineering", memberId: "member-id" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Removes a direct team member and completes without output. Microsoft Graph IDs are opaque and should be passed through unchanged. # Reply to channel message Source: https://docs.automate.ax/reference/integrations/teams/actions/reply-to-channel-message Send a reply beneath a Microsoft Teams channel message. `teams.replyToChannelMessage` posts in the reply thread of a root channel message. ## Example ```ts automations/reply-in-teams.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Reply in Teams", () => { const posted = teams.onChannelMessagePosted({ team: "Engineering", channel: "Help", }) teams.replyToChannelMessage({ team: posted.teamId, channel: posted.channelId, messageId: posted.messageId, body: "We’re investigating.", }) }) ``` ## Inputs Required `team`, `channel`, root `messageId`, and `body` accept compatible signals. `bodyType` is `"text" | "html"` and defaults to `"text"`. Optional second argument `{ account }` defaults to the project Microsoft binding. ## Output Returns the created `TeamsChatMessage`. `messageId` identifies the reply and `replyToId` the root. Use the root ID to post another reply or list the thread. # Send channel message Source: https://docs.automate.ax/reference/integrations/teams/actions/send-channel-message Send a new root message to a Microsoft Teams channel. `teams.sendChannelMessage` posts a top-level channel message. ## Example ```ts automations/post-teams-update.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Post Teams update", () => { onDashboardRun({ title: "Post Teams update" }) teams.sendChannelMessage({ team: "Engineering", channel: "General", bodyType: "html", body: "

Deployment complete

", }) }) ``` ## Inputs | Input | Type | Required | Default | Description | | - | - | - | - | - | | `team` | `string` | Yes | None | Exact team name or ID. | | `channel` | `string` | Yes | None | Exact channel name or ID. | | `body` | `string` | Yes | None | Message content. | | `bodyType` | `"text" \| "html"` | No | `"text"` | Content representation. HTML must use Teams-supported markup. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"microsoft">` | No | Project default | Microsoft binding. | ## Output Returns the created `TeamsChatMessage` with `messageId`, body, and available timestamps, URL, sender, and Microsoft metadata. # Send chat message Source: https://docs.automate.ax/reference/integrations/teams/actions/send-chat-message Send a message to an existing Microsoft Teams chat. `teams.sendChatMessage` posts to a one-to-one, group, or meeting chat identified by `chatId`. ## Example ```ts automations/send-teams-chat-message.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Send Teams chat message", () => { teams.sendChatMessage({ chatId: "19:opaque-chat-id@thread.v2", bodyType: "html", body: "

The report is ready.

", }) }) ``` ## Inputs `sendTeamsChatMessage` requires `chatId` and `body`. `bodyType` is `"text" | "html"` and defaults to `"text"`. HTML must use Teams-supported markup. Optional second argument `{ account }` selects the Microsoft binding. ## Output Returns the created `TeamsChatMessage` with `messageId`, body, and available sender, timestamp, URL, and Microsoft metadata. # Set channel message reaction Source: https://docs.automate.ax/reference/integrations/teams/actions/set-channel-message-reaction Sets the connected user's reaction and completes without output. `teams.setChannelMessageReaction` sets the connected user's reaction and completes without output. ## Example ```ts automations/teams-set-channel-message-reaction.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Set channel message reaction", () => { teams.setChannelMessageReaction({ team: "Engineering", channel: "General", messageId: "message-id", reactionType: "heart", }) }) ``` ## Inputs Pass `{ team: "Engineering", channel: "General", messageId: "message-id", reactionType: "heart" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Sets the connected user's reaction and completes without output. Microsoft Graph IDs are opaque and should be passed through unchanged. # Set chat message reaction Source: https://docs.automate.ax/reference/integrations/teams/actions/set-chat-message-reaction Sets the connected user's reaction and completes without output. `teams.setChatMessageReaction` sets the connected user's reaction and completes without output. ## Example ```ts automations/teams-set-chat-message-reaction.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Set chat message reaction", () => { teams.setChatMessageReaction({ chatId: "chat-id", messageId: "message-id", reactionType: "like", }) }) ``` ## Inputs Pass `{ chatId: "chat-id", messageId: "message-id", reactionType: "like" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Sets the connected user's reaction and completes without output. Microsoft Graph IDs are opaque and should be passed through unchanged. # Unarchive channel Source: https://docs.automate.ax/reference/integrations/teams/actions/unarchive-channel Restores an archived channel and completes without output. `teams.unarchiveChannel` restores an archived channel and completes without output. ## Example ```ts automations/teams-unarchive-channel.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Unarchive channel", () => { teams.unarchiveChannel({ team: "Engineering", channel: "Incidents" }) }) ``` ## Inputs Pass `{ team: "Engineering", channel: "Incidents" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Restores an archived channel and completes without output. Microsoft Graph IDs are opaque and should be passed through unchanged. # Unset channel message reaction Source: https://docs.automate.ax/reference/integrations/teams/actions/unset-channel-message-reaction Removes the connected user's reaction and completes without output. `teams.unsetChannelMessageReaction` removes the connected user's reaction and completes without output. ## Example ```ts automations/teams-unset-channel-message-reaction.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Unset channel message reaction", () => { teams.unsetChannelMessageReaction({ team: "Engineering", channel: "General", messageId: "message-id", reactionType: "heart", }) }) ``` ## Inputs Pass `{ team: "Engineering", channel: "General", messageId: "message-id", reactionType: "heart" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Removes the connected user's reaction and completes without output. Microsoft Graph IDs are opaque and should be passed through unchanged. # Unset chat message reaction Source: https://docs.automate.ax/reference/integrations/teams/actions/unset-chat-message-reaction Removes the connected user's reaction and completes without output. `teams.unsetChatMessageReaction` removes the connected user's reaction and completes without output. ## Example ```ts automations/teams-unset-chat-message-reaction.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Unset chat message reaction", () => { teams.unsetChatMessageReaction({ chatId: "chat-id", messageId: "message-id", reactionType: "like", }) }) ``` ## Inputs Pass `{ chatId: "chat-id", messageId: "message-id", reactionType: "like" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Removes the connected user's reaction and completes without output. Microsoft Graph IDs are opaque and should be passed through unchanged. # Update channel Source: https://docs.automate.ax/reference/integrations/teams/actions/update-channel Updates and returns a Teams channel. `teams.updateChannel` updates and returns a Teams channel. ## Example ```ts automations/teams-update-channel.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Update channel", () => { teams.updateChannel({ team: "Engineering", channel: "Incidents", description: "Operational incidents", }) }) ``` ## Inputs Pass `{ team: "Engineering", channel: "Incidents", description: "Operational incidents" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Updates and returns a Teams channel. Microsoft Graph IDs are opaque and should be passed through unchanged. # Update channel member Source: https://docs.automate.ax/reference/integrations/teams/actions/update-channel-member Updates and returns a direct channel member. `teams.updateChannelMember` updates and returns a direct channel member. ## Example ```ts automations/teams-update-channel-member.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Update channel member", () => { teams.updateChannelMember({ team: "Engineering", channel: "Private", memberId: "member-id", roles: ["owner"], }) }) ``` ## Inputs Pass `{ team: "Engineering", channel: "Private", memberId: "member-id", roles: ["owner"] }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Updates and returns a direct channel member. Microsoft Graph IDs are opaque and should be passed through unchanged. Private and shared channel membership operations do not apply to standard channels. # Update chat Source: https://docs.automate.ax/reference/integrations/teams/actions/update-chat Updates and returns a group chat. `teams.updateChat` updates and returns a group chat. ## Example ```ts automations/teams-update-chat.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Update chat", () => { teams.updateChat({ chatId: "chat-id", topic: "Launch room" }) }) ``` ## Inputs Pass `{ chatId: "chat-id", topic: "Launch room" }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Updates and returns a group chat. Microsoft Graph IDs are opaque and should be passed through unchanged. # Update team member Source: https://docs.automate.ax/reference/integrations/teams/actions/update-team-member Updates and returns a direct team member. `teams.updateTeamMember` updates and returns a direct team member. ## Example ```ts automations/teams-update-team-member.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Update team member", () => { teams.updateTeamMember({ team: "Engineering", memberId: "member-id", roles: ["owner"], }) }) ``` ## Inputs Pass `{ team: "Engineering", memberId: "member-id", roles: ["owner"] }`. The optional second argument `{ account }` selects a Microsoft binding. ## Output Updates and returns a direct team member. Microsoft Graph IDs are opaque and should be passed through unchanged. # Microsoft Teams Source: https://docs.automate.ax/reference/integrations/teams/index Manage Microsoft Teams, channels, messages, tabs, and members, or react to team and channel changes. ## Exports ```ts theme={null} import { teams, microsoftAccount, getTeamsGraphApi } from "automate.ax/teams" ``` * `teams` contains the packaged Microsoft Teams actions and triggers. * `microsoftAccount("name")` selects a named Microsoft connection. * `getTeamsGraphApi` creates the authenticated Microsoft Teams API helper for a custom account-backed action. ## Triggers * [On channel message posted](/reference/integrations/teams/triggers/on-channel-message-posted) * [On chat message posted](/reference/integrations/teams/triggers/on-chat-message-posted) * [On team event](/reference/integrations/teams/triggers/on-team-event) * [On team updated](/reference/integrations/teams/triggers/on-team-updated) * [On team deleted](/reference/integrations/teams/triggers/on-team-deleted) * [On channel event](/reference/integrations/teams/triggers/on-channel-event) * [On channel created](/reference/integrations/teams/triggers/on-channel-created) * [On channel updated](/reference/integrations/teams/triggers/on-channel-updated) * [On channel deleted](/reference/integrations/teams/triggers/on-channel-deleted) * [On channel message event](/reference/integrations/teams/triggers/on-channel-message-event) * [On channel message updated](/reference/integrations/teams/triggers/on-channel-message-updated) * [On channel message deleted](/reference/integrations/teams/triggers/on-channel-message-deleted) * [On team member event](/reference/integrations/teams/triggers/on-team-member-event) * [On team member added](/reference/integrations/teams/triggers/on-team-member-added) * [On team member updated](/reference/integrations/teams/triggers/on-team-member-updated) * [On team member removed](/reference/integrations/teams/triggers/on-team-member-removed) * [On channel member event](/reference/integrations/teams/triggers/on-channel-member-event) * [On channel member added](/reference/integrations/teams/triggers/on-channel-member-added) * [On channel member updated](/reference/integrations/teams/triggers/on-channel-member-updated) * [On channel member removed](/reference/integrations/teams/triggers/on-channel-member-removed) * [On chat event](/reference/integrations/teams/triggers/on-chat-event) * [On chat updated](/reference/integrations/teams/triggers/on-chat-updated) * [On chat message event](/reference/integrations/teams/triggers/on-chat-message-event) * [On chat message updated](/reference/integrations/teams/triggers/on-chat-message-updated) * [On chat message deleted](/reference/integrations/teams/triggers/on-chat-message-deleted) * [On chat member event](/reference/integrations/teams/triggers/on-chat-member-event) * [On chat member added](/reference/integrations/teams/triggers/on-chat-member-added) * [On chat member removed](/reference/integrations/teams/triggers/on-chat-member-removed) ## Actions * [Create chat](/reference/integrations/teams/actions/create-chat) * [Get channel message](/reference/integrations/teams/actions/get-channel-message) * [Get chat message](/reference/integrations/teams/actions/get-chat-message) * [Get chat](/reference/integrations/teams/actions/get-chat) * [List channel members](/reference/integrations/teams/actions/list-channel-members) * [List channel message replies](/reference/integrations/teams/actions/list-channel-message-replies) * [List channel messages](/reference/integrations/teams/actions/list-channel-messages) * [List channels](/reference/integrations/teams/actions/list-channels) * [List chat members](/reference/integrations/teams/actions/list-chat-members) * [List chat messages](/reference/integrations/teams/actions/list-chat-messages) * [List chats](/reference/integrations/teams/actions/list-chats) * [List joined teams](/reference/integrations/teams/actions/list-joined-teams) * [List team members](/reference/integrations/teams/actions/list-team-members) * [Reply to channel message](/reference/integrations/teams/actions/reply-to-channel-message) * [Send channel message](/reference/integrations/teams/actions/send-channel-message) * [Send chat message](/reference/integrations/teams/actions/send-chat-message) * [Add channel member](/reference/integrations/teams/actions/add-channel-member) * [Add chat member](/reference/integrations/teams/actions/add-chat-member) * [Add team member](/reference/integrations/teams/actions/add-team-member) * [Archive channel](/reference/integrations/teams/actions/archive-channel) * [Create channel](/reference/integrations/teams/actions/create-channel) * [Delete channel](/reference/integrations/teams/actions/delete-channel) * [Get channel](/reference/integrations/teams/actions/get-channel) * [Get channel member](/reference/integrations/teams/actions/get-channel-member) * [Get channel message hosted content](/reference/integrations/teams/actions/get-channel-message-hosted-content) * [Get chat member](/reference/integrations/teams/actions/get-chat-member) * [Get chat message hosted content](/reference/integrations/teams/actions/get-chat-message-hosted-content) * [Get team](/reference/integrations/teams/actions/get-team) * [Get team member](/reference/integrations/teams/actions/get-team-member) * [List channel message hosted content](/reference/integrations/teams/actions/list-channel-message-hosted-content) * [List chat message hosted content](/reference/integrations/teams/actions/list-chat-message-hosted-content) * [Remove channel member](/reference/integrations/teams/actions/remove-channel-member) * [Remove chat member](/reference/integrations/teams/actions/remove-chat-member) * [Remove team member](/reference/integrations/teams/actions/remove-team-member) * [Set channel message reaction](/reference/integrations/teams/actions/set-channel-message-reaction) * [Set chat message reaction](/reference/integrations/teams/actions/set-chat-message-reaction) * [Unarchive channel](/reference/integrations/teams/actions/unarchive-channel) * [Unset channel message reaction](/reference/integrations/teams/actions/unset-channel-message-reaction) * [Unset chat message reaction](/reference/integrations/teams/actions/unset-chat-message-reaction) * [Update channel](/reference/integrations/teams/actions/update-channel) * [Update channel member](/reference/integrations/teams/actions/update-channel-member) * [Update chat](/reference/integrations/teams/actions/update-chat) * [Update team member](/reference/integrations/teams/actions/update-team-member) # On channel created Source: https://docs.automate.ax/reference/integrations/teams/triggers/on-channel-created Runs when a channel is created. `teams.onChannelCreated` subscribes to Microsoft Graph change notifications. ## Example ```ts automations/teams-on-channel-created.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("On channel created", () => { const event = teams.onChannelCreated({ team: "Engineering" }) return event }) ``` ## Options Pass `{ team: "Engineering" }`. Team and channel values accept an exact display name or provider ID. Chat triggers require the opaque `chatId`. Optional `account` selects a Microsoft binding. ## Event Runs when a channel is created. The event includes `changeType`, `resourceType`, `resourceId`, contextual team/channel/chat IDs, and normalized `data` when Graph still exposes the resource. Deletions are ID-only tombstones. Teams subscriptions are short-lived and Automate.ax renews them automatically. # On channel deleted Source: https://docs.automate.ax/reference/integrations/teams/triggers/on-channel-deleted Runs when a channel is deleted. `teams.onChannelDeleted` subscribes to Microsoft Graph change notifications. ## Example ```ts automations/teams-on-channel-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("On channel deleted", () => { const event = teams.onChannelDeleted({ team: "Engineering" }) return event }) ``` ## Options Pass `{ team: "Engineering" }`. Team and channel values accept an exact display name or provider ID. Chat triggers require the opaque `chatId`. Optional `account` selects a Microsoft binding. ## Event Runs when a channel is deleted. The event includes `changeType`, `resourceType`, `resourceId`, contextual team/channel/chat IDs, and normalized `data` when Graph still exposes the resource. Deletions are ID-only tombstones. Teams subscriptions are short-lived and Automate.ax renews them automatically. # On channel event Source: https://docs.automate.ax/reference/integrations/teams/triggers/on-channel-event Runs when a channel is created, updated, or deleted. `teams.onChannelEvent` subscribes to Microsoft Graph change notifications. ## Example ```ts automations/teams-on-channel-event.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("On channel event", () => { const event = teams.onChannelEvent({ team: "Engineering" }) return event }) ``` ## Options Pass `{ team: "Engineering" }`. Team and channel values accept an exact display name or provider ID. Chat triggers require the opaque `chatId`. Optional `account` selects a Microsoft binding. ## Event Runs when a channel is created, updated, or deleted. The event includes `changeType`, `resourceType`, `resourceId`, contextual team/channel/chat IDs, and normalized `data` when Graph still exposes the resource. Deletions are ID-only tombstones. Teams subscriptions are short-lived and Automate.ax renews them automatically. # On channel member added Source: https://docs.automate.ax/reference/integrations/teams/triggers/on-channel-member-added Runs when a direct channel member is added. `teams.onChannelMemberAdded` subscribes to Microsoft Graph change notifications. ## Example ```ts automations/teams-on-channel-member-added.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("On channel member added", () => { const event = teams.onChannelMemberAdded({ team: "Engineering", channel: "Private", }) return event }) ``` ## Options Pass `{ team: "Engineering", channel: "Private" }`. `team` and `channel` accept exact display names or provider IDs. Optional `account` selects a Microsoft binding. ## Event Runs when a direct channel member is added. The event includes `changeType`, `resourceType`, `resourceId`, contextual team/channel/chat IDs, and normalized `data` when Graph still exposes the resource. Deletions are ID-only tombstones. Teams subscriptions are short-lived and Automate.ax renews them automatically. Channel membership is subscribed team-wide and filtered to the configured private or shared channel. # On channel member event Source: https://docs.automate.ax/reference/integrations/teams/triggers/on-channel-member-event Runs when a direct private or shared channel member is added, updated, or removed. `teams.onChannelMemberEvent` subscribes to Microsoft Graph change notifications. ## Example ```ts automations/teams-on-channel-member-event.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("On channel member event", () => { const event = teams.onChannelMemberEvent({ team: "Engineering", channel: "Private", }) return event }) ``` ## Options Pass `{ team: "Engineering", channel: "Private" }`. `team` and `channel` accept exact display names or provider IDs. Optional `account` selects a Microsoft binding. ## Event Runs when a direct private or shared channel member is added, updated, or removed. The event includes `changeType`, `resourceType`, `resourceId`, contextual team/channel/chat IDs, and normalized `data` when Graph still exposes the resource. Deletions are ID-only tombstones. Teams subscriptions are short-lived and Automate.ax renews them automatically. Channel membership is subscribed team-wide and filtered to the configured private or shared channel. # On channel member removed Source: https://docs.automate.ax/reference/integrations/teams/triggers/on-channel-member-removed Runs when a direct channel member is removed. `teams.onChannelMemberRemoved` subscribes to Microsoft Graph change notifications. ## Example ```ts automations/teams-on-channel-member-removed.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("On channel member removed", () => { const event = teams.onChannelMemberRemoved({ team: "Engineering", channel: "Private", }) return event }) ``` ## Options Pass `{ team: "Engineering", channel: "Private" }`. `team` and `channel` accept exact display names or provider IDs. Optional `account` selects a Microsoft binding. ## Event Runs when a direct channel member is removed. The event includes `changeType`, `resourceType`, `resourceId`, contextual team/channel/chat IDs, and normalized `data` when Graph still exposes the resource. Deletions are ID-only tombstones. Teams subscriptions are short-lived and Automate.ax renews them automatically. Channel membership is subscribed team-wide and filtered to the configured private or shared channel. # On channel member updated Source: https://docs.automate.ax/reference/integrations/teams/triggers/on-channel-member-updated Runs when a direct channel member is updated. `teams.onChannelMemberUpdated` subscribes to Microsoft Graph change notifications. ## Example ```ts automations/teams-on-channel-member-updated.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("On channel member updated", () => { const event = teams.onChannelMemberUpdated({ team: "Engineering", channel: "Private", }) return event }) ``` ## Options Pass `{ team: "Engineering", channel: "Private" }`. `team` and `channel` accept exact display names or provider IDs. Optional `account` selects a Microsoft binding. ## Event Runs when a direct channel member is updated. The event includes `changeType`, `resourceType`, `resourceId`, contextual team/channel/chat IDs, and normalized `data` when Graph still exposes the resource. Deletions are ID-only tombstones. Teams subscriptions are short-lived and Automate.ax renews them automatically. Channel membership is subscribed team-wide and filtered to the configured private or shared channel. # On channel message deleted Source: https://docs.automate.ax/reference/integrations/teams/triggers/on-channel-message-deleted Runs when a channel message is deleted. `teams.onChannelMessageDeleted` subscribes to Microsoft Graph change notifications. ## Example ```ts automations/teams-on-channel-message-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("On channel message deleted", () => { const event = teams.onChannelMessageDeleted({ team: "Engineering", channel: "General", }) return event }) ``` ## Options Pass `{ team: "Engineering", channel: "General" }`. `team` and `channel` accept exact display names or provider IDs. Optional `account` selects a Microsoft binding. ## Event Runs when a channel message is deleted. The event includes `changeType`, `resourceType`, `resourceId`, contextual team/channel/chat IDs, and normalized `data` when Graph still exposes the resource. Deletions are ID-only tombstones. Teams subscriptions are short-lived and Automate.ax renews them automatically. # On channel message event Source: https://docs.automate.ax/reference/integrations/teams/triggers/on-channel-message-event Runs when a channel message is created, updated, or deleted. `teams.onChannelMessageEvent` subscribes to Microsoft Graph change notifications. ## Example ```ts automations/teams-on-channel-message-event.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("On channel message event", () => { const event = teams.onChannelMessageEvent({ team: "Engineering", channel: "General", }) return event }) ``` ## Options Pass `{ team: "Engineering", channel: "General" }`. `team` and `channel` accept exact display names or provider IDs. Optional `account` selects a Microsoft binding. ## Event Runs when a channel message is created, updated, or deleted. The event includes `changeType`, `resourceType`, `resourceId`, contextual team/channel/chat IDs, and normalized `data` when Graph still exposes the resource. Deletions are ID-only tombstones. Teams subscriptions are short-lived and Automate.ax renews them automatically. # On channel message posted Source: https://docs.automate.ax/reference/integrations/teams/triggers/on-channel-message-posted Run an automation for a new root message or reply in a Teams channel. `teams.onChannelMessagePosted` watches one team channel and emits both root messages and replies. ## Example ```ts automations/watch-teams-channel.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Watch Teams help channel", () => { const message = teams.onChannelMessagePosted({ team: "Engineering", channel: "Help", }) teams.replyToChannelMessage({ team: message.teamId, channel: message.channelId, messageId: message.messageId, body: "Your request is in the queue.", }) }) ``` ## Options | Option | Type | Required | Default | Description | | - | - | - | - | - | | `team` | `string` | Yes | None | Exact team display name or ID, trimmed at deployment. | | `channel` | `string` | Yes | None | Exact channel display name or ID, trimmed at deployment. | | `account` | `string \| IntegrationAccountReference<"microsoft">` | No | Project default | Static Microsoft binding. | ## Trigger data Returns `TeamsChatMessage & { teamId: string; channelId: string }`. The message includes body, ID, sender, timestamps, attachments, mentions, reactions, importance, optional `replyToId`, and Microsoft metadata. `replyToId` distinguishes replies from root posts. Options are static subscription configuration and can't use runtime signals. # On channel message updated Source: https://docs.automate.ax/reference/integrations/teams/triggers/on-channel-message-updated Runs when a channel message is updated. `teams.onChannelMessageUpdated` subscribes to Microsoft Graph change notifications. ## Example ```ts automations/teams-on-channel-message-updated.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("On channel message updated", () => { const event = teams.onChannelMessageUpdated({ team: "Engineering", channel: "General", }) return event }) ``` ## Options Pass `{ team: "Engineering", channel: "General" }`. `team` and `channel` accept exact display names or provider IDs. Optional `account` selects a Microsoft binding. ## Event Runs when a channel message is updated. The event includes `changeType`, `resourceType`, `resourceId`, contextual team/channel/chat IDs, and normalized `data` when Graph still exposes the resource. Deletions are ID-only tombstones. Teams subscriptions are short-lived and Automate.ax renews them automatically. # On channel updated Source: https://docs.automate.ax/reference/integrations/teams/triggers/on-channel-updated Runs when a channel is updated. `teams.onChannelUpdated` subscribes to Microsoft Graph change notifications. ## Example ```ts automations/teams-on-channel-updated.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("On channel updated", () => { const event = teams.onChannelUpdated({ team: "Engineering" }) return event }) ``` ## Options Pass `{ team: "Engineering" }`. Team and channel values accept an exact display name or provider ID. Chat triggers require the opaque `chatId`. Optional `account` selects a Microsoft binding. ## Event Runs when a channel is updated. The event includes `changeType`, `resourceType`, `resourceId`, contextual team/channel/chat IDs, and normalized `data` when Graph still exposes the resource. Deletions are ID-only tombstones. Teams subscriptions are short-lived and Automate.ax renews them automatically. # On chat event Source: https://docs.automate.ax/reference/integrations/teams/triggers/on-chat-event Runs when a chat is updated. `teams.onChatEvent` subscribes to Microsoft Graph change notifications. ## Example ```ts automations/teams-on-chat-event.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("On chat event", () => { const event = teams.onChatEvent({ chatId: "chat-id" }) return event }) ``` ## Options Pass `{ chatId: "chat-id" }`. `chatId` is the opaque provider ID. Optional `account` selects a Microsoft binding. ## Event Runs when a chat is updated. The event includes `changeType`, `resourceType`, `resourceId`, contextual team/channel/chat IDs, and normalized `data` when Graph still exposes the resource. Deletions are ID-only tombstones. Teams subscriptions are short-lived and Automate.ax renews them automatically. # On chat member added Source: https://docs.automate.ax/reference/integrations/teams/triggers/on-chat-member-added Runs when a chat member is added. `teams.onChatMemberAdded` subscribes to Microsoft Graph change notifications. ## Example ```ts automations/teams-on-chat-member-added.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("On chat member added", () => { const event = teams.onChatMemberAdded({ chatId: "chat-id" }) return event }) ``` ## Options Pass `{ chatId: "chat-id" }`. `chatId` is the opaque provider ID. Optional `account` selects a Microsoft binding. ## Event Runs when a chat member is added. The event includes `changeType`, `resourceType`, `resourceId`, contextual team/channel/chat IDs, and normalized `data` when Graph still exposes the resource. Deletions are ID-only tombstones. Teams subscriptions are short-lived and Automate.ax renews them automatically. # On chat member event Source: https://docs.automate.ax/reference/integrations/teams/triggers/on-chat-member-event Runs when a chat member is added or removed. `teams.onChatMemberEvent` subscribes to Microsoft Graph change notifications. ## Example ```ts automations/teams-on-chat-member-event.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("On chat member event", () => { const event = teams.onChatMemberEvent({ chatId: "chat-id" }) return event }) ``` ## Options Pass `{ chatId: "chat-id" }`. `chatId` is the opaque provider ID. Optional `account` selects a Microsoft binding. ## Event Runs when a chat member is added or removed. The event includes `changeType`, `resourceType`, `resourceId`, contextual team/channel/chat IDs, and normalized `data` when Graph still exposes the resource. Deletions are ID-only tombstones. Teams subscriptions are short-lived and Automate.ax renews them automatically. # On chat member removed Source: https://docs.automate.ax/reference/integrations/teams/triggers/on-chat-member-removed Runs when a chat member is removed. `teams.onChatMemberRemoved` subscribes to Microsoft Graph change notifications. ## Example ```ts automations/teams-on-chat-member-removed.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("On chat member removed", () => { const event = teams.onChatMemberRemoved({ chatId: "chat-id" }) return event }) ``` ## Options Pass `{ chatId: "chat-id" }`. `chatId` is the opaque provider ID. Optional `account` selects a Microsoft binding. ## Event Runs when a chat member is removed. The event includes `changeType`, `resourceType`, `resourceId`, contextual team/channel/chat IDs, and normalized `data` when Graph still exposes the resource. Deletions are ID-only tombstones. Teams subscriptions are short-lived and Automate.ax renews them automatically. # On chat message deleted Source: https://docs.automate.ax/reference/integrations/teams/triggers/on-chat-message-deleted Runs when a chat message is deleted. `teams.onChatMessageDeleted` subscribes to Microsoft Graph change notifications. ## Example ```ts automations/teams-on-chat-message-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("On chat message deleted", () => { const event = teams.onChatMessageDeleted({ chatId: "chat-id" }) return event }) ``` ## Options Pass `{ chatId: "chat-id" }`. `chatId` is the opaque provider ID. Optional `account` selects a Microsoft binding. ## Event Runs when a chat message is deleted. The event includes `changeType`, `resourceType`, `resourceId`, contextual team/channel/chat IDs, and normalized `data` when Graph still exposes the resource. Deletions are ID-only tombstones. Teams subscriptions are short-lived and Automate.ax renews them automatically. # On chat message event Source: https://docs.automate.ax/reference/integrations/teams/triggers/on-chat-message-event Runs when a chat message is created, updated, or deleted. `teams.onChatMessageEvent` subscribes to Microsoft Graph change notifications. ## Example ```ts automations/teams-on-chat-message-event.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("On chat message event", () => { const event = teams.onChatMessageEvent({ chatId: "chat-id" }) return event }) ``` ## Options Pass `{ chatId: "chat-id" }`. `chatId` is the opaque provider ID. Optional `account` selects a Microsoft binding. ## Event Runs when a chat message is created, updated, or deleted. The event includes `changeType`, `resourceType`, `resourceId`, contextual team/channel/chat IDs, and normalized `data` when Graph still exposes the resource. Deletions are ID-only tombstones. Teams subscriptions are short-lived and Automate.ax renews them automatically. # On chat message posted Source: https://docs.automate.ax/reference/integrations/teams/triggers/on-chat-message-posted Run an automation for a new message in one Teams chat. `teams.onChatMessagePosted` watches one existing one-to-one, group, or meeting chat. ## Example ```ts automations/watch-teams-chat.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("Watch Teams chat", () => { const message = teams.onChatMessagePosted({ chatId: "19:opaque-chat-id@thread.v2", }) teams.sendChatMessage({ chatId: message.chatId, body: "Message received.", }) }) ``` ## Options The trigger requires the opaque Graph chat ID as `chatId: string`. Optional static `account` defaults to the project Microsoft binding. A runtime signal can't choose either value. ## Trigger data Returns `TeamsChatMessage & { chatId: string }` with body, message ID, sender, timestamps, attachments, mentions, reactions, importance, reply parent, subject, summary, locale, URL, and Graph ETag when available. # On chat message updated Source: https://docs.automate.ax/reference/integrations/teams/triggers/on-chat-message-updated Runs when a chat message is updated. `teams.onChatMessageUpdated` subscribes to Microsoft Graph change notifications. ## Example ```ts automations/teams-on-chat-message-updated.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("On chat message updated", () => { const event = teams.onChatMessageUpdated({ chatId: "chat-id" }) return event }) ``` ## Options Pass `{ chatId: "chat-id" }`. `chatId` is the opaque provider ID. Optional `account` selects a Microsoft binding. ## Event Runs when a chat message is updated. The event includes `changeType`, `resourceType`, `resourceId`, contextual team/channel/chat IDs, and normalized `data` when Graph still exposes the resource. Deletions are ID-only tombstones. Teams subscriptions are short-lived and Automate.ax renews them automatically. # On chat updated Source: https://docs.automate.ax/reference/integrations/teams/triggers/on-chat-updated Runs when a chat is updated. `teams.onChatUpdated` subscribes to Microsoft Graph change notifications. ## Example ```ts automations/teams-on-chat-updated.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("On chat updated", () => { const event = teams.onChatUpdated({ chatId: "chat-id" }) return event }) ``` ## Options Pass `{ chatId: "chat-id" }`. `chatId` is the opaque provider ID. Optional `account` selects a Microsoft binding. ## Event Runs when a chat is updated. The event includes `changeType`, `resourceType`, `resourceId`, contextual team/channel/chat IDs, and normalized `data` when Graph still exposes the resource. Deletions are ID-only tombstones. Teams subscriptions are short-lived and Automate.ax renews them automatically. # On team deleted Source: https://docs.automate.ax/reference/integrations/teams/triggers/on-team-deleted Runs when the team is deleted. `teams.onTeamDeleted` subscribes to Microsoft Graph change notifications. ## Example ```ts automations/teams-on-team-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("On team deleted", () => { const event = teams.onTeamDeleted({ team: "Engineering" }) return event }) ``` ## Options Pass `{ team: "Engineering" }`. Team and channel values accept an exact display name or provider ID. Chat triggers require the opaque `chatId`. Optional `account` selects a Microsoft binding. ## Event Runs when the team is deleted. The event includes `changeType`, `resourceType`, `resourceId`, contextual team/channel/chat IDs, and normalized `data` when Graph still exposes the resource. Deletions are ID-only tombstones. Teams subscriptions are short-lived and Automate.ax renews them automatically. # On team event Source: https://docs.automate.ax/reference/integrations/teams/triggers/on-team-event Runs when the team is updated or deleted. `teams.onTeamEvent` subscribes to Microsoft Graph change notifications. ## Example ```ts automations/teams-on-team-event.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("On team event", () => { const event = teams.onTeamEvent({ team: "Engineering" }) return event }) ``` ## Options Pass `{ team: "Engineering" }`. Team and channel values accept an exact display name or provider ID. Chat triggers require the opaque `chatId`. Optional `account` selects a Microsoft binding. ## Event Runs when the team is updated or deleted. The event includes `changeType`, `resourceType`, `resourceId`, contextual team/channel/chat IDs, and normalized `data` when Graph still exposes the resource. Deletions are ID-only tombstones. Teams subscriptions are short-lived and Automate.ax renews them automatically. # On team member added Source: https://docs.automate.ax/reference/integrations/teams/triggers/on-team-member-added Runs when a direct team member is added. `teams.onTeamMemberAdded` subscribes to Microsoft Graph change notifications. ## Example ```ts automations/teams-on-team-member-added.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("On team member added", () => { const event = teams.onTeamMemberAdded({ team: "Engineering" }) return event }) ``` ## Options Pass `{ team: "Engineering" }`. Team and channel values accept an exact display name or provider ID. Chat triggers require the opaque `chatId`. Optional `account` selects a Microsoft binding. ## Event Runs when a direct team member is added. The event includes `changeType`, `resourceType`, `resourceId`, contextual team/channel/chat IDs, and normalized `data` when Graph still exposes the resource. Deletions are ID-only tombstones. Teams subscriptions are short-lived and Automate.ax renews them automatically. # On team member event Source: https://docs.automate.ax/reference/integrations/teams/triggers/on-team-member-event Runs when a direct team member is added, updated, or removed. `teams.onTeamMemberEvent` subscribes to Microsoft Graph change notifications. ## Example ```ts automations/teams-on-team-member-event.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("On team member event", () => { const event = teams.onTeamMemberEvent({ team: "Engineering" }) return event }) ``` ## Options Pass `{ team: "Engineering" }`. Team and channel values accept an exact display name or provider ID. Chat triggers require the opaque `chatId`. Optional `account` selects a Microsoft binding. ## Event Runs when a direct team member is added, updated, or removed. The event includes `changeType`, `resourceType`, `resourceId`, contextual team/channel/chat IDs, and normalized `data` when Graph still exposes the resource. Deletions are ID-only tombstones. Teams subscriptions are short-lived and Automate.ax renews them automatically. # On team member removed Source: https://docs.automate.ax/reference/integrations/teams/triggers/on-team-member-removed Runs when a direct team member is removed. `teams.onTeamMemberRemoved` subscribes to Microsoft Graph change notifications. ## Example ```ts automations/teams-on-team-member-removed.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("On team member removed", () => { const event = teams.onTeamMemberRemoved({ team: "Engineering" }) return event }) ``` ## Options Pass `{ team: "Engineering" }`. Team and channel values accept an exact display name or provider ID. Chat triggers require the opaque `chatId`. Optional `account` selects a Microsoft binding. ## Event Runs when a direct team member is removed. The event includes `changeType`, `resourceType`, `resourceId`, contextual team/channel/chat IDs, and normalized `data` when Graph still exposes the resource. Deletions are ID-only tombstones. Teams subscriptions are short-lived and Automate.ax renews them automatically. # On team member updated Source: https://docs.automate.ax/reference/integrations/teams/triggers/on-team-member-updated Runs when a direct team member is updated. `teams.onTeamMemberUpdated` subscribes to Microsoft Graph change notifications. ## Example ```ts automations/teams-on-team-member-updated.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("On team member updated", () => { const event = teams.onTeamMemberUpdated({ team: "Engineering" }) return event }) ``` ## Options Pass `{ team: "Engineering" }`. Team and channel values accept an exact display name or provider ID. Chat triggers require the opaque `chatId`. Optional `account` selects a Microsoft binding. ## Event Runs when a direct team member is updated. The event includes `changeType`, `resourceType`, `resourceId`, contextual team/channel/chat IDs, and normalized `data` when Graph still exposes the resource. Deletions are ID-only tombstones. Teams subscriptions are short-lived and Automate.ax renews them automatically. # On team updated Source: https://docs.automate.ax/reference/integrations/teams/triggers/on-team-updated Runs when the team is updated. `teams.onTeamUpdated` subscribes to Microsoft Graph change notifications. ## Example ```ts automations/teams-on-team-updated.automation.ts theme={null} import { automation } from "automate.ax" import { teams } from "automate.ax/teams" export default automation("On team updated", () => { const event = teams.onTeamUpdated({ team: "Engineering" }) return event }) ``` ## Options Pass `{ team: "Engineering" }`. Team and channel values accept an exact display name or provider ID. Chat triggers require the opaque `chatId`. Optional `account` selects a Microsoft binding. ## Event Runs when the team is updated. The event includes `changeType`, `resourceType`, `resourceId`, contextual team/channel/chat IDs, and normalized `data` when Graph still exposes the resource. Deletions are ID-only tombstones. Teams subscriptions are short-lived and Automate.ax renews them automatically. # Add team user Source: https://docs.automate.ax/reference/integrations/tidycal/actions/add-team-user Invites a user to a TidyCal team. `tidyCal.addTeamUser` sends a team invitation email. ```ts automations/add-tidycal-team-user.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { tidyCal } from "automate.ax/tidycal" export default automation("Add TidyCal team user", () => { onDashboardRun({ title: "Add TidyCal team user" }) tidyCal.addTeamUser({ teamId: 123, email: "ada@example.com", roleName: "admin", }) }) ``` Team actions require an Agency or Pro plan. `roleName` can be `admin` or `user` and may be omitted for TidyCal's default. The result contains the provider message and `teamUserId`. TidyCal rejects duplicate invitations and existing members. # Cancel booking Source: https://docs.automate.ax/reference/integrations/tidycal/actions/cancel-booking Cancels one TidyCal booking. `tidyCal.cancelBooking` cancels a booking and can record a reason. ```ts automations/cancel-tidycal-booking.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { tidyCal } from "automate.ax/tidycal" export default automation("Cancel TidyCal booking", () => { onDashboardRun({ title: "Cancel TidyCal booking" }) tidyCal.cancelBooking({ bookingId: 123, reason: "Client requested a different time", }) }) ``` `reason` is optional. The action returns the cancelled booking. TidyCal rejects an already-cancelled booking, so do not use this action as an idempotent state setter. # Create booking Source: https://docs.automate.ax/reference/integrations/tidycal/actions/create-booking Books one or several TidyCal time slots. `tidyCal.createBooking` books one time slot or a package of time slots. ```ts automations/create-tidycal-booking.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { tidyCal } from "automate.ax/tidycal" export default automation("Create TidyCal booking", () => { onDashboardRun({ title: "Create TidyCal booking" }) tidyCal.createBooking({ bookingTypeId: 123, startsAt: "2026-08-28T18:00:00Z", name: "Ada Lovelace", email: "ada@example.com", timezone: "America/Los_Angeles", bookingQuestions: [ { bookingTypeQuestionId: 456, answer: "Analytical engines" }, ], }) }) ``` Provide either `startsAt` for one booking or `bookings: [{ startsAt }]` for a package. `name`, `email`, and `timezone` are always required. A question answer can be a string or an array of strings. The action returns one booking for a single request or an array for a package. TidyCal returns `409` when a slot is unavailable, a duplicate was submitted within five minutes, or another request held the slot lock. Check availability immediately before booking, but still handle conflicts because availability can change. # Create booking type Source: https://docs.automate.ax/reference/integrations/tidycal/actions/create-booking-type Creates a personal TidyCal scheduling page. `tidyCal.createBookingType` creates a booking type for the connected account. ```ts automations/create-tidycal-booking-type.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { tidyCal } from "automate.ax/tidycal" export default automation("Create TidyCal booking type", () => { onDashboardRun({ title: "Create TidyCal booking type" }) tidyCal.createBookingType({ title: "30-minute consultation", description: "Discuss your project.", durationMinutes: 30, urlSlug: "consultation", paddingMinutes: 10, }) }) ``` Required inputs are `title`, `description`, `durationMinutes`, and `urlSlug`. `paddingMinutes` defaults to `0`, `latestAvailabilityDays` to `60`, `private` to `false`, `maxBookings` to `1`, `maxGuestInvitesPerBooker` to `0`, `displaySeatsRemaining` to `false`, `bookingAvailabilityIntervalMinutes` to `15`, `bookingThreshold` to `120`, and `price` to `0`. For a paid type, provide `paymentPlatform` (`stripe`, `paypal`, or `tidycal`) and optionally an ISO 4217 `currencyCode`. The payment platform must already be connected in TidyCal. The result is the created booking type. `disabledAt` is present when TidyCal includes its disabled state. # Create contact Source: https://docs.automate.ax/reference/integrations/tidycal/actions/create-contact Creates a TidyCal contact. `tidyCal.createContact` creates a contact independently of a booking. ```ts automations/create-tidycal-contact.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { tidyCal } from "automate.ax/tidycal" export default automation("Create TidyCal contact", () => { onDashboardRun({ title: "Create TidyCal contact" }) tidyCal.createContact({ name: "Ada Lovelace", email: "ada@example.com", timezone: "Europe/London", }) }) ``` `name` and `email` are required; `timezone` is optional. The result is the created contact. TidyCal can return `402` when the account's plan does not permit contact creation. # Create team booking type Source: https://docs.automate.ax/reference/integrations/tidycal/actions/create-team-booking-type Creates a scheduling page for a TidyCal team. `tidyCal.createTeamBookingType` creates a booking type owned by one team. ```ts automations/create-tidycal-team-booking-type.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { tidyCal } from "automate.ax/tidycal" export default automation("Create TidyCal team booking type", () => { onDashboardRun({ title: "Create TidyCal team booking type" }) tidyCal.createTeamBookingType({ teamId: 123, title: "Sales consultation", description: "Meet with our sales team.", durationMinutes: 30, urlSlug: "sales-consultation", }) }) ``` Team actions require an Agency or Pro plan. `teamId`, `title`, `description`, `durationMinutes`, and `urlSlug` are required. All other pricing, availability, capacity, privacy, and redirect inputs match `createBookingType`, including its defaults. The connected account must have permission to create booking types for the team. # Get account Source: https://docs.automate.ax/reference/integrations/tidycal/actions/get-account Retrieves the connected TidyCal account profile. `tidyCal.getAccount` retrieves the identity and scheduling profile behind the selected connection. ```ts automations/get-tidycal-account.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { tidyCal } from "automate.ax/tidycal" export default automation("Get TidyCal account", () => { onDashboardRun({ title: "Get TidyCal account" }) tidyCal.getAccount({}) }) ``` The action takes no input. An optional second argument `{ account }` selects a static project account binding. It returns the account's name, email, vanity path, language, profile picture URL, currency symbol, and nullable lifetime-plan date. # Get booking Source: https://docs.automate.ax/reference/integrations/tidycal/actions/get-booking Retrieves one TidyCal booking. `tidyCal.getBooking` retrieves one booking by its numeric TidyCal ID. ```ts automations/get-tidycal-booking.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { tidyCal } from "automate.ax/tidycal" export default automation("Get TidyCal booking", () => { onDashboardRun({ title: "Get TidyCal booking" }) tidyCal.getBooking({ bookingId: 123 }) }) ``` Returns the booking, including its contact, questions, optional payment, meeting details, timezone, and cancellation timestamp. TidyCal returns `403` when the account cannot view the booking and `404` when it does not exist. # Get team Source: https://docs.automate.ax/reference/integrations/tidycal/actions/get-team Retrieves one TidyCal team. `tidyCal.getTeam` retrieves a team by its numeric TidyCal ID. ```ts automations/get-tidycal-team.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { tidyCal } from "automate.ax/tidycal" export default automation("Get TidyCal team", () => { onDashboardRun({ title: "Get TidyCal team" }) tidyCal.getTeam({ teamId: 123 }) }) ``` Team actions require an Agency or Pro plan. Returns the team's ID, name, and timestamps. TidyCal returns `403` when the account cannot view the team and `404` when it does not exist. # List available time slots Source: https://docs.automate.ax/reference/integrations/tidycal/actions/list-available-timeslots Lists bookable times for a TidyCal booking type. `tidyCal.listAvailableTimeslots` lists availability for one booking type. ```ts automations/list-tidycal-timeslots.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { tidyCal } from "automate.ax/tidycal" export default automation("List TidyCal availability", () => { onDashboardRun({ title: "List TidyCal availability" }) tidyCal.listAvailableTimeslots({ bookingTypeId: 123, startsAt: "2026-08-28T00:00:00Z", endsAt: "2026-08-29T00:00:00Z", }) }) ``` Both bounds are required ISO date-times; TidyCal expects UTC. The result contains `items` with `startsAt`, `endsAt`, and `availableBookings`. Capacity matters for group booking types. # List booking types Source: https://docs.automate.ax/reference/integrations/tidycal/actions/list-booking-types Lists the connected account's TidyCal booking types. `tidyCal.listBookingTypes` lists the scheduling pages owned by the connected account. ```ts automations/list-tidycal-booking-types.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { tidyCal } from "automate.ax/tidycal" export default automation("List TidyCal booking types", () => { onDashboardRun({ title: "List TidyCal booking types" }) tidyCal.listBookingTypes({ page: 1 }) }) ``` `page` defaults to `1`. The result contains `items` with each type's title, duration, padding, availability horizon, minimum notice, capacity, privacy, numeric price, and payment settings. `url` is present when TidyCal includes the public scheduling URL. # List bookings Source: https://docs.automate.ax/reference/integrations/tidycal/actions/list-bookings Lists personal and optional team bookings. `tidyCal.listBookings` lists bookings visible to the connected account. ```ts automations/list-tidycal-bookings.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { tidyCal } from "automate.ax/tidycal" export default automation("List TidyCal bookings", () => { onDashboardRun({ title: "List TidyCal bookings" }) tidyCal.listBookings({ startsAt: "2026-08-01", endsAt: "2026-08-31", cancelled: false, includeTeams: true, }) }) ``` `startsAt` and `endsAt` are ISO dates. `cancelled` filters by cancellation state, `includeTeams` includes team bookings, and `page` defaults to `1`. The result contains `items`, with each booking's times, contact, questions, payment, meeting details, and cancellation state. # List contacts Source: https://docs.automate.ax/reference/integrations/tidycal/actions/list-contacts Lists TidyCal contacts. `tidyCal.listContacts` lists contacts visible to the connected account. ```ts automations/list-tidycal-contacts.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { tidyCal } from "automate.ax/tidycal" export default automation("List TidyCal contacts", () => { onDashboardRun({ title: "List TidyCal contacts" }) tidyCal.listContacts({ page: 1 }) }) ``` `page` defaults to `1`. The result contains `items` with contact IDs, names, emails, phone numbers, IP addresses, timezones, and timestamps when TidyCal provides them. # List team booking types Source: https://docs.automate.ax/reference/integrations/tidycal/actions/list-team-booking-types Lists booking types for one TidyCal team. `tidyCal.listTeamBookingTypes` lists a team's scheduling pages. ```ts automations/list-tidycal-team-booking-types.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { tidyCal } from "automate.ax/tidycal" export default automation("List TidyCal team booking types", () => { onDashboardRun({ title: "List TidyCal team booking types" }) tidyCal.listTeamBookingTypes({ teamId: 123, page: 1 }) }) ``` Team actions require an Agency or Pro plan. `teamId` is required and `page` defaults to `1`. The result contains `items` using the same booking-type shape as `listBookingTypes`. TidyCal may omit `paymentPlatform` for free team booking types. # List team bookings Source: https://docs.automate.ax/reference/integrations/tidycal/actions/list-team-bookings Lists bookings for one TidyCal team. `tidyCal.listTeamBookings` lists bookings owned by one team. ```ts automations/list-tidycal-team-bookings.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { tidyCal } from "automate.ax/tidycal" export default automation("List TidyCal team bookings", () => { onDashboardRun({ title: "List TidyCal team bookings" }) tidyCal.listTeamBookings({ teamId: 123, startDate: "2026-08-01", endDate: "2026-08-31", cancelled: false, }) }) ``` Team actions require an Agency or Pro plan. `teamId` is required. Optional filters are `startDate`, `endDate`, contact `email`, `hostId`, `cancelled`, and `page`, which defaults to `1`. The result contains `items` using the same complete booking shape as `listBookings`. # List team users Source: https://docs.automate.ax/reference/integrations/tidycal/actions/list-team-users Lists members of one TidyCal team. `tidyCal.listTeamUsers` lists the users in one team. ```ts automations/list-tidycal-team-users.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { tidyCal } from "automate.ax/tidycal" export default automation("List TidyCal team users", () => { onDashboardRun({ title: "List TidyCal team users" }) tidyCal.listTeamUsers({ teamId: 123, page: 1 }) }) ``` Team actions require an Agency or Pro plan. `teamId` is required and `page` defaults to `1`. Each item contains the team-user record `id`, team and user IDs, role, invitation email and acceptance time, timestamps, and the nested TidyCal user. Pending invitations have `userId: null` and `user: null`; use `invitationEmail` to identify them. Pass the record `id` as `teamUserId` to `removeTeamUser`. # List teams Source: https://docs.automate.ax/reference/integrations/tidycal/actions/list-teams Lists TidyCal teams available to the account. `tidyCal.listTeams` lists teams the connected account owns or belongs to. ```ts automations/list-tidycal-teams.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { tidyCal } from "automate.ax/tidycal" export default automation("List TidyCal teams", () => { onDashboardRun({ title: "List TidyCal teams" }) tidyCal.listTeams({ page: 1 }) }) ``` Team actions require an Agency or Pro plan. `page` defaults to `1`. The result contains `items` with each team's numeric ID, name, and timestamps. # Remove team user Source: https://docs.automate.ax/reference/integrations/tidycal/actions/remove-team-user Removes a user from a TidyCal team. `tidyCal.removeTeamUser` removes one team-user record. ```ts automations/remove-tidycal-team-user.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { tidyCal } from "automate.ax/tidycal" export default automation("Remove TidyCal team user", () => { onDashboardRun({ title: "Remove TidyCal team user" }) tidyCal.removeTeamUser({ teamId: 123, teamUserId: 456 }) }) ``` Team actions require an Agency or Pro plan. Use a team-user record `id` from `listTeamUsers` or `teamUserId` from `addTeamUser`, not an account user ID. The result contains TidyCal's confirmation message. Removing a missing or already-removed user fails. # TidyCal Source: https://docs.automate.ax/reference/integrations/tidycal/index Manage TidyCal bookings and teams through OAuth or personal tokens, and poll because TidyCal has no webhooks. Automate.ax connects to TidyCal with OAuth or a personal access token. TidyCal requires an Individual, Agency, or Pro plan for API access. Team actions require an Agency or Pro plan; TidyCal's Individual plan does not include Team Features. Use the TidyCal actions to inspect bookings and availability, create booking types and bookings, manage contacts, and work with teams. TidyCal does not provide native webhooks, so this integration has no provider event triggers. Use `onSchedule` with a list action when you need polling. ```ts automations/check-tidycal-bookings.automation.ts theme={null} import { automation, filter, markSignificant, onSchedule } from "automate.ax" import { tidyCal } from "automate.ax/tidycal" export default automation("Check TidyCal bookings", () => { const tick = onSchedule({ schedule: "0 * * * *" }) const bookings = tidyCal.listBookings({ startsAt: tick.scheduledAt.transform((date) => date.toISOString().slice(0, 10), ), includeTeams: true, }) const nonEmptyBookings = filter(bookings, (result) => result.items.length > 0) markSignificant(nonEmptyBookings) }) ``` TidyCal does not publish granular REST API scopes. OAuth and personal tokens therefore authorize the provider's complete API surface. Automate.ax never exposes the credential to your automation. Create personal tokens from [TidyCal's advanced integrations settings](https://tidycal.com/integrations/advanced). See the [official API documentation](https://tidycal.com/developer/docs/) for provider plan and endpoint behavior. ## Exports ```ts theme={null} import { tidyCal, tidyCalAccount, getTidyCalApi } from "automate.ax/tidycal" ``` * `tidyCal` contains the packaged TidyCal actions. * `tidyCalAccount("name")` selects a named TidyCal connection. * `getTidyCalApi` creates the authenticated TidyCal API helper for a custom account-backed action. ## Actions * [Get account](/reference/integrations/tidycal/actions/get-account) * [List bookings](/reference/integrations/tidycal/actions/list-bookings) * [Get booking](/reference/integrations/tidycal/actions/get-booking) * [Cancel booking](/reference/integrations/tidycal/actions/cancel-booking) * [List booking types](/reference/integrations/tidycal/actions/list-booking-types) * [Create booking type](/reference/integrations/tidycal/actions/create-booking-type) * [List available time slots](/reference/integrations/tidycal/actions/list-available-timeslots) * [Create booking](/reference/integrations/tidycal/actions/create-booking) * [List contacts](/reference/integrations/tidycal/actions/list-contacts) * [Create contact](/reference/integrations/tidycal/actions/create-contact) * [List teams](/reference/integrations/tidycal/actions/list-teams) * [Get team](/reference/integrations/tidycal/actions/get-team) * [List team bookings](/reference/integrations/tidycal/actions/list-team-bookings) * [List team users](/reference/integrations/tidycal/actions/list-team-users) * [Add team user](/reference/integrations/tidycal/actions/add-team-user) * [Remove team user](/reference/integrations/tidycal/actions/remove-team-user) * [List team booking types](/reference/integrations/tidycal/actions/list-team-booking-types) * [Create team booking type](/reference/integrations/tidycal/actions/create-team-booking-type) # Add attachment Source: https://docs.automate.ax/reference/integrations/trello/actions/add-attachment Attach a public URL to a Trello card. `trello.addAttachment` adds a URL attachment and can use it as the card cover. It doesn't upload local file bytes. ```ts automations/attach-trello-link.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Attach release notes", () => { onDashboardRun({ title: "Attach release notes" }) trello.addAttachment({ card: "card-id", url: "https://automate.ax/releases/1", name: "Release notes", setCover: false, }) }) ``` Provide `card` and a valid public `url`. Optional `name` sets the display label. `setCover` defaults to `false`. Second argument `{ account }` defaults to the project binding. Returns `Signal` with `id`, `name`, `url`, `createdAt`, `position`, `isUpload`, and nullable `bytes` and `mimeType`. Keep `id` for deletion. # Add board member Source: https://docs.automate.ax/reference/integrations/trello/actions/add-board-member Add an existing Trello member to a board. `trello.addBoardMember` adds an existing member to one board. ```ts automations/add-trello-board-member.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Add Trello board member", () => { onDashboardRun({ title: "Add Trello board member" }) trello.addBoardMember({ board: "board-id", memberId: "member-id", role: "normal", }) }) ``` Provide `board` as an ID, short link, or standard board URL and a stable `memberId`. `role` accepts `"admin"`, `"normal"`, or `"observer"` and defaults to `"normal"`. Optional `allowBillableGuest` permits a Workspace administrator to add a multi-board guest. Optional second argument `{ account }` selects a Trello binding. Returns `Signal<{ boardId: string; memberId: string; role: "admin" | "normal" | "observer" }>`. # Add card label Source: https://docs.automate.ax/reference/integrations/trello/actions/add-card-label Apply one existing board label to a Trello card. `trello.addCardLabel` applies a reusable label and returns a mutation receipt. ```ts automations/label-trello-card.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Label Trello card", () => { onDashboardRun({ title: "Label Trello card" }) trello.addCardLabel({ card: "card-id", labelId: "label-id" }) }) ``` Provide `card` as an ID, short link, or URL and a stable `labelId`. Optional second argument `{ account }` defaults to the project binding. Returns `Signal<{ added: true; cardId: string; labelId: string }>` after Trello confirms the mutation. The label must belong to the card's board. Discover IDs with [List board labels](/reference/integrations/trello/actions/list-board-labels), and call [Get card](/reference/integrations/trello/actions/get-card) separately when the updated card is needed. # Add card member Source: https://docs.automate.ax/reference/integrations/trello/actions/add-card-member Assign one Trello member to a card. `trello.addCardMember` assigns a board member and returns a mutation receipt. ```ts automations/assign-trello-card.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Assign Trello card", () => { onDashboardRun({ title: "Assign Trello card" }) trello.addCardMember({ card: "card-id", memberId: "member-id" }) }) ``` Provide `card` as an ID, short link, or URL and a stable `memberId`. Optional second argument `{ account }` defaults to the project binding. Returns `Signal<{ added: true; cardId: string; memberId: string }>` after Trello confirms the mutation. Use [List board members](/reference/integrations/trello/actions/list-board-members) to discover valid IDs and [Get card](/reference/integrations/trello/actions/get-card) when the updated card is needed. # Add comment Source: https://docs.automate.ax/reference/integrations/trello/actions/add-comment Add a comment to a Trello card. `trello.addComment` posts plain text to a card's activity. ```ts automations/comment-on-trello-card.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Comment on Trello card", () => { onDashboardRun({ title: "Comment on Trello card" }) trello.addComment({ card: "card-id", text: "Ready for review." }) }) ``` Provide `card` as an ID, short link, or URL and non-empty `text`. Optional second argument `{ account }` defaults to the project binding. Returns `Signal` with action `id`, `text`, `commentedAt: Date`, and nullable `creator`. Keep the returned `id` for update or deletion. # Clear card Custom Field value Source: https://docs.automate.ax/reference/integrations/trello/actions/clear-card-custom-field-value Clear one Custom Field value from a Trello card. `trello.clearCardCustomFieldValue` removes one populated value from a card without deleting the field definition. ```ts automations/clear-trello-card-custom-field-value.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Clear Trello card estimate", () => { onDashboardRun({ title: "Clear Trello card estimate" }) trello.clearCardCustomFieldValue({ card: "card-id", customFieldId: "custom-field-id", }) }) ``` Provide `card` as an ID, short link, or standard card URL and a stable `customFieldId`. Optional second argument `{ account }` selects a Trello binding. Returns `Signal<{ cardId: string; cleared: true; customFieldId: string }>`. # Create board Source: https://docs.automate.ax/reference/integrations/trello/actions/create-board Create a Trello board, optionally from another board. `trello.createBoard` creates a private board by default. It can use another board as a template and set the Workspace or visibility. ```ts automations/create-trello-board.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Create launch board", () => { onDashboardRun({ title: "Create launch board" }) trello.createBoard({ name: "Product launch", permissionLevel: "org", defaultLists: false, }) }) ``` ## Inputs | Property | Type | Required | Default | Description | | - | - | - | - | - | | `name` | `string` | Yes | None | Non-empty board name. | | `description` | `string` | No | None | Board description. | | `organizationId` | `string` | No | None | Owning Workspace ID. | | `permissionLevel` | `"org" \| "private" \| "public"` | No | `"private"` | Board visibility. | | `defaultLists` | `boolean` | No | `true` | Let Trello create its default lists. | | `selfJoin` | `boolean` | No | None | Allow Workspace members to join without an invitation. | | `sourceBoard` | `string` | No | None | Board ID, short link, or URL to copy. | | `keepFromSource` | `"cards" \| "none"` | No | Provider default | Content retained from the source board. | | Second argument: `{ account }` | Trello account reference | No | Project default | Account creating the board. | ## Output Returns the created `TrelloBoard`. Trello must allow the connected member to create boards with the requested Workspace and visibility settings. # Create board label Source: https://docs.automate.ax/reference/integrations/trello/actions/create-board-label Create a reusable label on a Trello board. `trello.createBoardLabel` creates a reusable label for cards on the same board. ```ts automations/create-trello-label.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Create Trello label", () => { onDashboardRun({ title: "Create Trello label" }) trello.createBoardLabel({ board: "board-id", color: "green", name: "Ready" }) }) ``` Provide `board`, non-empty `name`, and `color`. `color` accepts `"black"`, `"blue"`, `"green"`, `"lime"`, `"orange"`, `"pink"`, `"purple"`, `"red"`, `"sky"`, `"yellow"`, or `null` for colorless. Optional second argument `{ account }` defaults to the project binding. Returns the created `TrelloLabel`. Use its `id` with `trello.addCardLabel` or `trello.createCard.labelIds`. # Create card Source: https://docs.automate.ax/reference/integrations/trello/actions/create-card Create or copy a Trello card. `trello.createCard` adds a card to a list with optional dates, assignees, labels, location, attachment, or copied content. ```ts automations/create-trello-card.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Create Trello launch card", () => { onDashboardRun({ title: "Create Trello launch card" }) trello.createCard({ listId: "list-id", name: "Publish release", description: "Complete the launch checklist.", dueAt: "2026-09-01T17:00:00-07:00", labelIds: ["label-id"], memberIds: ["member-id"], position: "top", }) }) ``` ## Inputs Provide `listId` and non-empty `name`. Optional fields are `address`, `description`, `locationName`, `dueAt`, `startAt`, `dueComplete`, `labelIds`, `memberIds`, `position`, `sourceCard`, `keepFromSource`, and `sourceUrl`. Optional second argument `{ account }` selects the Trello binding. Dates accept `Date` or an `ISO 8601` timestamp with an offset. `position` accepts `"top"`, `"bottom"`, or a nonnegative number and defaults to `"bottom"`. `sourceCard` accepts an ID, short link, or URL. `keepFromSource` is a nonempty array containing `"attachments"`, `"checklists"`, `"comments"`, `"customFields"`, `"due"`, `"labels"`, `"members"`, `"start"`, or `"stickers"`; use `["all"]` by itself to retain every supported property. `sourceUrl` must be a valid URL. ## Output Returns the created `TrelloCard`. Label and member inputs are stable IDs, not names. The connected account needs access to the destination list and any copied card. # Create checklist item Source: https://docs.automate.ax/reference/integrations/trello/actions/create-check-item Add a dated or assigned item to a Trello checklist. `trello.createChecklistItem` adds an item with optional assignment, due time, reminder, and completion state. ```ts automations/create-trello-check-item.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Create Trello checklist item", () => { onDashboardRun({ title: "Create Trello checklist item" }) trello.createChecklistItem({ checklistId: "checklist-id", name: "Review release", dueReminder: 60, }) }) ``` Provide `checklistId` and non-empty `name`. `completed` defaults to `false`. `position` defaults to `"bottom"` and also accepts `"top"` or a nonnegative number. Optional `dueAt` accepts `Date` or an `ISO 8601` timestamp with offset. `dueReminder` is an integer of at least `-1`. `memberId` is a stable member ID. Second argument `{ account }` defaults to the project binding. Trello's [advanced checklists](https://support.atlassian.com/trello/docs/how-to-use-advanced-checklists-to-set-due-dates/) restrict checklist-item dates, reminders, and member assignments to boards in Standard, Premium, or Enterprise Workspaces. If Trello accepts a request but silently omits one of these fields, the action fails explicitly; a failed create also removes the basic item Trello created. Name, position, and completion state remain available on Free Workspace boards. Returns `Signal` with stable ID, text, state, position, and nullable date, reminder, and assignee. # Create checklist Source: https://docs.automate.ax/reference/integrations/trello/actions/create-checklist Create or copy a checklist on a Trello card. `trello.createChecklist` creates an empty checklist or copies one with its items. ```ts automations/create-trello-checklist.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Create Trello checklist", () => { onDashboardRun({ title: "Create Trello checklist" }) trello.createChecklist({ card: "card-id", name: "Launch", position: "bottom", }) }) ``` Provide `card`. `name` and `sourceChecklistId` are optional. `position` accepts `"top"`, `"bottom"`, or a nonnegative number and defaults to `"bottom"`. Optional second argument `{ account }` defaults to the project binding. When copying, Trello controls how `name` interacts with the source name. Returns the created `TrelloChecklist`, including any copied `checkItems` supplied by Trello. # Create Custom Field Source: https://docs.automate.ax/reference/integrations/trello/actions/create-custom-field Create a typed Custom Field on a Trello board. `trello.createCustomField` creates a Custom Field definition on one board. The board must belong to a Standard, Premium, or Enterprise Workspace. Free Workspaces return Trello's `403 Custom Fields Power-Up disabled for board` response; see [Authorization and raw API](/reference/integrations/trello/authorization-and-raw-api#custom-fields-prerequisite). ```ts automations/create-trello-custom-field.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Create Trello Custom Field", () => { onDashboardRun({ title: "Create Trello Custom Field" }) trello.createCustomField({ board: "board-id", displayOnCardFront: true, name: "Estimate", position: "bottom", type: "number", }) }) ``` Provide `board`, non-empty `name`, and `type` as `"checkbox"`, `"date"`, `"list"`, `"number"`, or `"text"`. `displayOnCardFront` defaults to `true`. `position` accepts `"top"`, `"bottom"`, or a nonnegative number and defaults to `"bottom"`. Optional second argument `{ account }` selects a Trello binding. Returns the created `TrelloCustomField`. Add dropdown choices separately with `trello.createCustomFieldOption` when `type` is `"list"`. # Create Custom Field option Source: https://docs.automate.ax/reference/integrations/trello/actions/create-custom-field-option Create a Trello Custom Field dropdown option. `trello.createCustomFieldOption` adds a choice to a list-type Custom Field. ```ts automations/create-trello-custom-field-option.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Create Trello Custom Field option", () => { onDashboardRun({ title: "Create Trello Custom Field option" }) trello.createCustomFieldOption({ customFieldId: "custom-field-id", text: "Ready", color: "green", position: "bottom", }) }) ``` Provide `customFieldId` and non-empty `text`. `color` accepts `"black"`, `"blue"`, `"green"`, `"lime"`, `"none"`, `"orange"`, `"pink"`, `"purple"`, `"red"`, `"sky"`, or `"yellow"` and defaults to `"none"`. `position` accepts `"top"`, `"bottom"`, or a nonnegative number and defaults to `"bottom"`. Optional second argument `{ account }` selects a Trello binding. Returns the created `TrelloCustomFieldOption`. # Create list Source: https://docs.automate.ax/reference/integrations/trello/actions/create-list Create a list at a chosen position on a Trello board. `trello.createList` adds a workflow column to a board. ```ts automations/create-trello-list.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Create review list", () => { onDashboardRun({ title: "Create review list" }) trello.createList({ board: "board-id", name: "Review", position: "top" }) }) ``` Provide `board` and non-empty `name`. `position` accepts `"top"`, `"bottom"`, or a nonnegative Trello position number and defaults to `"bottom"`. Optional second argument `{ account }` defaults to the project binding. Returns the created `TrelloList`. Pass its `id` to `trello.createCard.listId`. # Delete attachment Source: https://docs.automate.ax/reference/integrations/trello/actions/delete-attachment Delete an attachment from a Trello card. `trello.deleteAttachment` removes a URL or uploaded-file attachment. ```ts automations/delete-trello-attachment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Delete Trello attachment", () => { onDashboardRun({ title: "Delete Trello attachment" }) trello.deleteAttachment({ card: "card-id", attachmentId: "attachment-id" }) }) ``` Provide `card` and a stable `attachmentId`. `card` accepts an ID, short link, or URL. Optional second argument `{ account }` defaults to the project binding. Returns `Signal<{ attachmentId: string; deleted: true }>`. # Delete board Source: https://docs.automate.ax/reference/integrations/trello/actions/delete-board Permanently delete a Trello board. `trello.deleteBoard` is permanent. Archive with [Update board](/reference/integrations/trello/actions/update-board) when you may need the board later. ```ts automations/delete-trello-board.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Delete Trello board", () => { onDashboardRun({ title: "Delete Trello board" }) trello.deleteBoard({ board: "board-id" }) }) ``` Provide `board` as an ID, short link, or URL. Optional second argument `{ account }` defaults to the project binding. The action returns `Signal<{ boardId: string; deleted: true }>` and fails if the member can't administer the board. You can't undo deletion. # Delete card Source: https://docs.automate.ax/reference/integrations/trello/actions/delete-card Permanently delete a Trello card. `trello.deleteCard` is permanent. Use `trello.updateCard({ closed: true })` to archive instead. ```ts automations/delete-trello-card.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Delete Trello card", () => { onDashboardRun({ title: "Delete Trello card" }) trello.deleteCard({ card: "card-id" }) }) ``` Provide `card` as an ID, short link, or URL. Optional second argument `{ account }` defaults to the project binding. Returns `Signal<{ cardId: string; deleted: true }>` after Trello confirms deletion. You can't undo deletion. # Delete checklist item Source: https://docs.automate.ax/reference/integrations/trello/actions/delete-check-item Delete one item from a Trello checklist. `trello.deleteChecklistItem` permanently removes a checklist item. ```ts automations/delete-trello-check-item.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Delete Trello checklist item", () => { onDashboardRun({ title: "Delete Trello checklist item" }) trello.deleteChecklistItem({ checklistId: "checklist-id", itemId: "item-id" }) }) ``` Provide stable `checklistId` and `itemId`. Optional second argument `{ account }` defaults to the project binding. Returns `Signal<{ itemId: string; deleted: true }>`. # Delete checklist Source: https://docs.automate.ax/reference/integrations/trello/actions/delete-checklist Delete a Trello checklist and all its items. `trello.deleteChecklist` permanently removes a checklist and its items from the card. ```ts automations/delete-trello-checklist.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Delete Trello checklist", () => { onDashboardRun({ title: "Delete Trello checklist" }) trello.deleteChecklist({ checklistId: "checklist-id" }) }) ``` Provide `checklistId`. Optional second argument `{ account }` defaults to the project binding. Returns `Signal<{ checklistId: string; deleted: true }>`. # Delete comment Source: https://docs.automate.ax/reference/integrations/trello/actions/delete-comment Delete a comment from a Trello card. `trello.deleteComment` removes a comment action. ```ts automations/delete-trello-comment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Delete Trello comment", () => { onDashboardRun({ title: "Delete Trello comment" }) trello.deleteComment({ card: "card-id", commentId: "action-id" }) }) ``` Provide `card` and a stable `commentId`. `card` accepts an ID, short link, or URL. Optional second argument `{ account }` defaults to the project binding. Returns `Signal<{ commentId: string; deleted: true }>` after Trello confirms deletion. # Delete Custom Field Source: https://docs.automate.ax/reference/integrations/trello/actions/delete-custom-field Delete a Trello Custom Field and its card values. `trello.deleteCustomField` permanently deletes a definition and every card value that uses it. ```ts automations/delete-trello-custom-field.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Delete Trello Custom Field", () => { onDashboardRun({ title: "Delete Trello Custom Field" }) trello.deleteCustomField({ customFieldId: "custom-field-id" }) }) ``` Provide a stable `customFieldId`. Optional second argument `{ account }` selects a Trello binding. Returns `Signal<{ customFieldId: string; deleted: true }>`. # Delete Custom Field option Source: https://docs.automate.ax/reference/integrations/trello/actions/delete-custom-field-option Delete a Trello Custom Field dropdown option. `trello.deleteCustomFieldOption` permanently removes one option from a list-type Custom Field. ```ts automations/delete-trello-custom-field-option.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Delete Trello Custom Field option", () => { onDashboardRun({ title: "Delete Trello Custom Field option" }) trello.deleteCustomFieldOption({ customFieldId: "custom-field-id", optionId: "option-id", }) }) ``` Provide stable `customFieldId` and `optionId` values. Optional second argument `{ account }` selects a Trello binding. Returns `Signal<{ customFieldId: string; deleted: true; optionId: string }>`. # Delete label Source: https://docs.automate.ax/reference/integrations/trello/actions/delete-label Permanently delete a Trello board label. `trello.deleteLabel` permanently removes a reusable label from its board and cards. ```ts automations/delete-trello-label.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Delete Trello label", () => { onDashboardRun({ title: "Delete Trello label" }) trello.deleteLabel({ labelId: "label-id" }) }) ``` Provide a stable `labelId`. Optional second argument `{ account }` selects a Trello binding. Returns `Signal<{ deleted: true; labelId: string }>`. # Get board Source: https://docs.automate.ax/reference/integrations/trello/actions/get-board Get a Trello board by ID, short link, or URL. `trello.getBoard` returns a board's metadata. ```ts automations/get-trello-board.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Get Trello board", () => { onDashboardRun({ title: "Get Trello board" }) trello.getBoard({ board: "https://trello.com/b/abc123/launch" }) }) ``` ## Inputs Provide `board: string` as a board ID, short link, or standard board URL. Optional second argument `{ account }` selects the Trello binding and defaults to the project account. ## Output Returns `Signal` with `id`, `name`, `description`, `closed`, `organizationId`, `url`, `shortUrl`, `lastActivityAt`, `starred`, and `subscribed`. # Get card Source: https://docs.automate.ax/reference/integrations/trello/actions/get-card Get a Trello card by ID, short link, or URL. `trello.getCard` returns a card's assignments, labels, schedule, and location. ```ts automations/get-trello-card.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Get Trello card", () => { onDashboardRun({ title: "Get Trello card" }) trello.getCard({ card: "https://trello.com/c/abc123/ship-it" }) }) ``` Required `card` accepts an ID, short link, or standard card URL. Optional second argument `{ account }` defaults to the project binding. Returns `Signal` with IDs and URLs, name and description, board and list IDs, archive/watch state, ordering position, `Date | null` schedule and activity fields, due completion, member IDs, and labels. # Get current member Source: https://docs.automate.ax/reference/integrations/trello/actions/get-current-member Get the Trello member represented by the connected account. `trello.getCurrentMember` returns the connected member's profile. Use its `id` for card assignments. ```ts automations/get-trello-member.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Get Trello member", () => { onDashboardRun({ title: "Get Trello member" }) trello.getCurrentMember() }) ``` ## Inputs The action has no schema input fields. Optional second argument `{ account: string | IntegrationAccountReference<"trello"> }` selects the Trello binding and defaults to the project account. ## Output Returns `Signal` with `id`, `fullName`, `username`, optional `initials`, and nullable `avatarUrl` and `url`. # Get Custom Field Source: https://docs.automate.ax/reference/integrations/trello/actions/get-custom-field Get a Trello Custom Field definition. `trello.getCustomField` retrieves one Custom Field definition. ```ts automations/get-trello-custom-field.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Get Trello Custom Field", () => { onDashboardRun({ title: "Get Trello Custom Field" }) trello.getCustomField({ customFieldId: "custom-field-id" }) }) ``` Provide a stable `customFieldId`. Optional second argument `{ account }` selects a Trello binding. Returns `Signal`. # Get Custom Field option Source: https://docs.automate.ax/reference/integrations/trello/actions/get-custom-field-option Get one Trello Custom Field dropdown option. `trello.getCustomFieldOption` retrieves one option from a list-type Custom Field. ```ts automations/get-trello-custom-field-option.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Get Trello Custom Field option", () => { onDashboardRun({ title: "Get Trello Custom Field option" }) trello.getCustomFieldOption({ customFieldId: "custom-field-id", optionId: "option-id", }) }) ``` Provide stable `customFieldId` and `optionId` values. Optional second argument `{ account }` selects a Trello binding. Returns `Signal`. # Get label Source: https://docs.automate.ax/reference/integrations/trello/actions/get-label Get a Trello label by ID. `trello.getLabel` retrieves one reusable board label. ```ts automations/get-trello-label.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Get Trello label", () => { onDashboardRun({ title: "Get Trello label" }) trello.getLabel({ labelId: "label-id" }) }) ``` Provide a stable `labelId`. Optional second argument `{ account }` selects a Trello binding. Returns `Signal` with `id`, `name`, nullable `color`, and optional `boardId`. # Get list Source: https://docs.automate.ax/reference/integrations/trello/actions/get-list Get a Trello list by stable ID. `trello.getList` returns a list's name, board, archive status, order, and watch state. ```ts automations/get-trello-list.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Get Trello list", () => { onDashboardRun({ title: "Get Trello list" }) trello.getList({ listId: "list-id" }) }) ``` Provide `listId`. Trello list URLs aren't accepted. Optional second argument `{ account }` defaults to the project binding. Returns `Signal` with `id`, `boardId`, `name`, `closed`, `position`, and `subscribed`. # Get Workspace Source: https://docs.automate.ax/reference/integrations/trello/actions/get-workspace Get a Trello Workspace by ID or URL-safe name. `trello.getWorkspace` retrieves one Workspace visible to the connected member. ```ts automations/get-trello-workspace.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Get Trello Workspace", () => { onDashboardRun({ title: "Get Trello Workspace" }) trello.getWorkspace({ workspace: "engineering" }) }) ``` Provide `workspace` as a stable Workspace ID or its URL-safe name. Optional second argument `{ account }` selects a Trello binding. Returns `Signal` with `id`, `name`, `displayName`, and nullable `lastActivityAt`, `url`, and `website`. # Invite board member Source: https://docs.automate.ax/reference/integrations/trello/actions/invite-board-member Invite a Trello board member by email address. `trello.inviteBoardMember` invites an email address to one board. ```ts automations/invite-trello-board-member.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Invite Trello board member", () => { onDashboardRun({ title: "Invite Trello board member" }) trello.inviteBoardMember({ board: "board-id", email: "ada@example.com", fullName: "Ada Lovelace", role: "normal", }) }) ``` Provide `board` as an ID, short link, or standard board URL and `email` as a valid address. Optional `fullName` is used when Trello creates a member account. `role` accepts `"admin"`, `"normal"`, or `"observer"` and defaults to `"normal"`. Optional second argument `{ account }` selects a Trello binding. Returns `Signal<{ boardId: string; email: string; role: "admin" | "normal" | "observer" }>`. # List attachments Source: https://docs.automate.ax/reference/integrations/trello/actions/list-attachments List URL and uploaded-file attachments on a Trello card. `trello.listAttachments` returns all attachments on a card. ```ts automations/list-trello-attachments.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("List Trello attachments", () => { onDashboardRun({ title: "List Trello attachments" }) trello.listAttachments({ card: "card-id" }) }) ``` Provide `card` as an ID, short link, or URL. Optional second argument `{ account }` defaults to the project binding. Returns `Signal`. URL attachments can have `bytes` or `mimeType` set to `null`, while `isUpload` distinguishes uploaded files from links. # List board cards Source: https://docs.automate.ax/reference/integrations/trello/actions/list-board-cards List cards across every list on a Trello board. `trello.listBoardCards` lists cards across every list on one board. ```ts automations/list-trello-board-cards.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("List Trello board cards", () => { onDashboardRun({ title: "List Trello board cards" }) trello.listBoardCards({ board: "board-id", filter: "open", limit: 100 }) }) ``` Provide `board` as an ID, short link, or standard board URL. `filter` accepts `"open"`, `"closed"`, or `"all"` and defaults to `"open"`. `limit` is an integer from 1 through 1,000 and defaults to `100`. Optional `before` and `since` accept a card ID or timestamp cursor. Optional second argument `{ account }` selects a Trello binding. Returns `Signal` in Trello's provider order. # List board Custom Fields Source: https://docs.automate.ax/reference/integrations/trello/actions/list-board-custom-fields List Custom Field definitions on a Trello board. `trello.listBoardCustomFields` lists the Custom Field definitions available to cards on one board. ```ts automations/list-trello-custom-fields.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("List Trello Custom Fields", () => { onDashboardRun({ title: "List Trello Custom Fields" }) trello.listBoardCustomFields({ board: "board-id" }) }) ``` Provide `board` as an ID, short link, or standard board URL. Optional second argument `{ account }` selects a Trello binding. Returns `Signal`, including each definition's ID, board model ID, name, type, position, card-front display setting, optional field group, and dropdown options. # List board labels Source: https://docs.automate.ax/reference/integrations/trello/actions/list-board-labels List reusable labels defined on a Trello board. `trello.listBoardLabels` returns label IDs for card actions. ```ts automations/list-trello-labels.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("List Trello labels", () => { onDashboardRun({ title: "List Trello labels" }) trello.listBoardLabels({ board: "board-id", limit: 200 }) }) ``` Provide `board` as an ID, short link, or URL. `limit` is an integer from 1 to 1,000 and defaults to `100`. Optional second argument `{ account }` defaults to the project binding. Returns `Signal` with `id`, `name`, nullable `color`, and optional `boardId`. # List board lists Source: https://docs.automate.ax/reference/integrations/trello/actions/list-board-lists List open, archived, or all lists on a Trello board. `trello.listBoardLists` returns lists in display order. Use their IDs to create or move cards. ```ts automations/list-trello-lists.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("List Trello lists", () => { onDashboardRun({ title: "List Trello lists" }) trello.listBoardLists({ board: "board-id", filter: "all" }) }) ``` Provide `board` as an ID, short link, or URL. `filter` is `"open"`, `"closed"`, or `"all"` and defaults to `"open"`. Optional second argument `{ account }` defaults to the project binding. Returns `Signal`. Each list has `id`, `boardId`, `name`, `closed`, numeric `position`, and `subscribed`. # List board members Source: https://docs.automate.ax/reference/integrations/trello/actions/list-board-members List members who belong to a Trello board. `trello.listBoardMembers` returns stable member IDs for [Add card member](/reference/integrations/trello/actions/add-card-member) and checklist assignments. ```ts automations/list-trello-members.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("List Trello board members", () => { onDashboardRun({ title: "List Trello board members" }) trello.listBoardMembers({ board: "board-id" }) }) ``` Provide `board` as an ID, short link, or URL. Optional second argument `{ account }` defaults to the project binding. Returns `Signal` with IDs, names, usernames, initials, profile URLs, and avatar URLs. The action returns only members visible to the connected account. # List board memberships Source: https://docs.automate.ax/reference/integrations/trello/actions/list-board-memberships List Trello board memberships and their members and roles. `trello.listBoardMemberships` lists the membership relationships used by board role-management actions. ```ts automations/list-trello-board-memberships.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("List Trello board memberships", () => { onDashboardRun({ title: "List Trello board memberships" }) trello.listBoardMemberships({ board: "board-id", filter: "all" }) }) ``` Provide `board` as an ID, short link, or standard board URL. `filter` accepts `"admins"`, `"all"`, `"none"`, or `"normal"` and defaults to `"all"`. Optional second argument `{ account }` selects a Trello binding. Returns `Signal`. Each membership contains its stable `id`, normalized `memberId`, `memberType` (`"admin"`, `"normal"`, or `"observer"`), and `unconfirmed` and `deactivated` flags. Pass the membership `id` to `trello.updateBoardMemberRole`; use `memberId` to identify the represented member. # List boards Source: https://docs.automate.ax/reference/integrations/trello/actions/list-boards List Trello boards visible to the connected member. `trello.listBoards` can restrict the connected member's boards to one Trello Workspace. ```ts automations/list-trello-boards.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("List open Trello boards", () => { onDashboardRun({ title: "List open Trello boards" }) trello.listBoards({ filter: "open", organizationId: "workspace-id" }) }) ``` ## Inputs | Property | Type | Required | Default | Description | | - | - | - | - | - | | `filter` | `"open" \| "closed" \| "all"` | No | `"open"` | Select active, archived, or all boards. | | `organizationId` | `string` | No | None | Restrict results to one Trello Workspace ID. | | Second argument: `{ account }` | `string \| IntegrationAccountReference<"trello">` | No | Project default | Account used to list boards. | ## Output Returns `Signal`. Each board includes its stable `id`, names and URLs, description, Workspace `organizationId`, `closed`, `starred`, `subscribed`, and nullable `lastActivityAt`. # List card Custom Field values Source: https://docs.automate.ax/reference/integrations/trello/actions/list-card-custom-field-values List typed Custom Field values stored on a Trello card. `trello.listCardCustomFieldValues` lists every populated Custom Field value on one card. ```ts automations/list-trello-card-custom-field-values.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("List Trello card Custom Field values", () => { onDashboardRun({ title: "List Trello card Custom Field values" }) trello.listCardCustomFieldValues({ card: "card-id" }) }) ``` Provide `card` as an ID, short link, or standard card URL. Optional second argument `{ account }` selects a Trello binding. Returns `Signal`. Each item includes `id`, `cardId`, `customFieldId`, and a `value` discriminated by `type`: checkbox `checked`, date `date`, list `optionId`, number `number`, or text `text`. # List cards Source: https://docs.automate.ax/reference/integrations/trello/actions/list-cards List cards in one Trello list with filters and cursors. `trello.listCards` returns one page of cards from a list. ```ts automations/list-trello-cards.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("List open Trello cards", () => { onDashboardRun({ title: "List open Trello cards" }) trello.listCards({ listId: "list-id", filter: "open", limit: 100 }) }) ``` | Property | Type | Required | Default | Description | | - | - | - | - | - | | `listId` | `string` | Yes | None | Stable list ID. | | `filter` | `"open" \| "closed" \| "all"` | No | `"open"` | Select active, archived, or all cards. | | `limit` | `number` | No | `100` | Integer from 1 to 1,000. | | `before` | `string` | No | None | Return cards before this card ID or timestamp. | | `since` | `string` | No | None | Return cards since this card ID or timestamp. | | Second argument: `{ account }` | Trello account reference | No | Project default | Account used to read cards. | Returns `Signal`. Trello applies `before` and `since`. The action doesn't fetch additional pages automatically. # List checklists Source: https://docs.automate.ax/reference/integrations/trello/actions/list-checklists List every checklist and item on a Trello card. `trello.listChecklists` returns every checklist with its items. ```ts automations/list-trello-checklists.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("List Trello checklists", () => { onDashboardRun({ title: "List Trello checklists" }) trello.listChecklists({ card: "card-id" }) }) ``` Required `card` accepts an ID, short link, or URL. Optional second argument `{ account }` defaults to the project binding. Returns `Signal`. A checklist has `id`, `boardId`, `cardId`, `name`, `position`, and `checkItems`. Each item has `id`, `name`, `state`, `position`, nullable `dueAt`, nullable `dueReminder`, and nullable `memberId`. # List comments Source: https://docs.automate.ax/reference/integrations/trello/actions/list-comments List recent comments on a Trello card, newest first. `trello.listComments` returns card comments in reverse chronological order. ```ts automations/list-trello-comments.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("List Trello comments", () => { onDashboardRun({ title: "List Trello comments" }) trello.listComments({ card: "card-id", limit: 50 }) }) ``` Provide `card` as an ID, short link, or URL. `limit` is 1–1,000 and defaults to `100`. `before` and `since` accept Trello comment action IDs as pagination cursors. Optional second argument `{ account }` defaults to the project binding. Returns one Trello page as `Signal`. Each result has `id`, `text`, `commentedAt`, and nullable creator profile. # List Custom Field options Source: https://docs.automate.ax/reference/integrations/trello/actions/list-custom-field-options List dropdown options on a Trello Custom Field. `trello.listCustomFieldOptions` lists the choices defined for a list-type Custom Field. ```ts automations/list-trello-custom-field-options.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("List Trello Custom Field options", () => { onDashboardRun({ title: "List Trello Custom Field options" }) trello.listCustomFieldOptions({ customFieldId: "custom-field-id" }) }) ``` Provide the list field's stable `customFieldId`. Optional second argument `{ account }` selects a Trello binding. Returns `Signal` with each option's `id`, `customFieldId`, `text`, `color`, and `position`. # List Workspaces Source: https://docs.automate.ax/reference/integrations/trello/actions/list-workspaces List Trello Workspaces visible to the connected member. `trello.listWorkspaces` lists Workspaces the connected member can access. ```ts automations/list-trello-workspaces.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("List Trello Workspaces", () => { onDashboardRun({ title: "List Trello Workspaces" }) trello.listWorkspaces({ filter: "members" }) }) ``` `filter` accepts `"all"`, `"members"`, `"none"`, or `"public"` and defaults to `"all"`. `"members"` selects private Workspaces where the connected user is a member, while `"public"` selects public Workspaces. Optional second argument `{ account }` selects a Trello binding. Returns `Signal`. Each Workspace has `id`, `name`, `displayName`, nullable `lastActivityAt`, `url`, and `website`. # Remove board member Source: https://docs.automate.ax/reference/integrations/trello/actions/remove-board-member Remove a Trello member from a board. `trello.removeBoardMember` removes an existing member from one board. ```ts automations/remove-trello-board-member.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Remove Trello board member", () => { onDashboardRun({ title: "Remove Trello board member" }) trello.removeBoardMember({ board: "board-id", memberId: "member-id" }) }) ``` Provide `board` as an ID, short link, or standard board URL and a stable `memberId`. Optional second argument `{ account }` selects a Trello binding. Returns `Signal<{ boardId: string; memberId: string; removed: true }>`. # Remove card label Source: https://docs.automate.ax/reference/integrations/trello/actions/remove-card-label Remove one Trello label from a card. `trello.removeCardLabel` removes an applied label and returns a mutation receipt. ```ts automations/unlabel-trello-card.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Remove Trello label", () => { onDashboardRun({ title: "Remove Trello label" }) trello.removeCardLabel({ card: "card-id", labelId: "label-id" }) }) ``` Provide `card` as an ID, short link, or URL and a stable `labelId`. Optional second argument `{ account }` defaults to the project binding. Returns `Signal<{ cardId: string; labelId: string; removed: true }>` after Trello confirms the mutation. Call [Get card](/reference/integrations/trello/actions/get-card) separately when the updated card is needed. # Remove card member Source: https://docs.automate.ax/reference/integrations/trello/actions/remove-card-member Remove one assigned Trello member from a card. `trello.removeCardMember` unassigns a member and returns a mutation receipt. ```ts automations/unassign-trello-card.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Unassign Trello card", () => { onDashboardRun({ title: "Unassign Trello card" }) trello.removeCardMember({ card: "card-id", memberId: "member-id" }) }) ``` Provide `card` as an ID, short link, or URL and a stable `memberId`. Optional second argument `{ account }` defaults to the project binding. Returns `Signal<{ cardId: string; memberId: string; removed: true }>` after Trello confirms the mutation. Call [Get card](/reference/integrations/trello/actions/get-card) separately when the updated card is needed. # Search cards Source: https://docs.automate.ax/reference/integrations/trello/actions/search-cards Search card names and descriptions across visible Trello boards. `trello.searchCards` uses Trello search syntax with an optional board filter. ```ts automations/search-trello-cards.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Find launch cards", () => { onDashboardRun({ title: "Find launch cards" }) trello.searchCards({ query: "launch due:week", boardIds: ["board-id"], partial: true, }) }) ``` | Property | Type | Required | Default | Description | | - | - | - | - | - | | `query` | `string` | Yes | None | Non-empty Trello query, including supported operators. | | `boardIds` | `string[]` | No | All visible boards | Restrict search to stable board IDs. | | `limit` | `number` | No | `50` | Cards per page, from 1 to 1,000. | | `page` | `number` | No | `0` | Zero-based page from 0 to 100. | | `partial` | `boolean` | No | `false` | Permit prefix matches rather than whole words. | | Second argument: `{ account }` | Trello account reference | No | Project default | Account used to search. | Returns `Signal` for that page. Increase `page` to retrieve later results. # Set card Custom Field value Source: https://docs.automate.ax/reference/integrations/trello/actions/set-card-custom-field-value Set one typed Custom Field value on a Trello card. `trello.setCardCustomFieldValue` sets one typed value on a card. ```ts automations/set-trello-card-custom-field-value.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Set Trello card estimate", () => { onDashboardRun({ title: "Set Trello card estimate" }) trello.setCardCustomFieldValue({ card: "card-id", customFieldId: "custom-field-id", value: { number: "8", type: "number" }, }) }) ``` Provide `card`, `customFieldId`, and a value matching the field definition: * `{ type: "checkbox", checked: boolean }` * `{ type: "date", date: Date | ISO 8601 timestamp with an offset }` * `{ type: "list", optionId: string }` * `{ type: "number", number: string }` * `{ type: "text", text: string }` Number values remain strings so Trello's decimal representation is preserved. Optional second argument `{ account }` selects a Trello binding. Returns `Signal<{ cardId: string; customFieldId: string; value: TrelloCustomFieldValue }>`. # Update board Source: https://docs.automate.ax/reference/integrations/trello/actions/update-board Update Trello board metadata, visibility, Workspace, or watch state. `trello.updateBoard` changes only the provided fields. Use `closed: true` to archive the board or `closed: false` to reopen it. ```ts automations/archive-trello-board.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Archive Trello board", () => { onDashboardRun({ title: "Archive Trello board" }) trello.updateBoard({ board: "board-id", closed: true }) }) ``` ## Inputs Required `board` accepts an ID, short link, or URL. Provide at least one of `closed: boolean`, `description: string`, `name: string`, `organizationId: string`, `permissionLevel: "org" | "private" | "public"`, `selfJoin: boolean`, or `subscribed: boolean`. Optional second argument `{ account }` defaults to the project binding. ## Output Returns the updated `TrelloBoard`. Moving a board or changing visibility can fail when the connected member lacks the required Workspace permissions. # Update board member role Source: https://docs.automate.ax/reference/integrations/trello/actions/update-board-member-role Update a Trello board membership role. `trello.updateBoardMemberRole` changes the role represented by one board membership. ```ts automations/update-trello-board-member-role.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Update Trello board member role", () => { onDashboardRun({ title: "Update Trello board member role" }) trello.updateBoardMemberRole({ board: "board-id", membershipId: "membership-id", role: "admin", }) }) ``` Provide `board` as an ID, short link, or standard board URL, a stable `membershipId`, and `role` as `"admin"`, `"normal"`, or `"observer"`. A membership ID is distinct from a member ID. Optional second argument `{ account }` selects a Trello binding. Returns `Signal<{ boardId: string; membershipId: string; role: "admin" | "normal" | "observer" }>`. # Update card Source: https://docs.automate.ax/reference/integrations/trello/actions/update-card Update, move, archive, schedule, or reassign a Trello card. `trello.updateCard` changes only the provided fields. It can replace all labels or members, move the card, and clear its dates. ```ts automations/move-trello-card.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Finish Trello card", () => { onDashboardRun({ title: "Finish Trello card" }) trello.updateCard({ card: "card-id", listId: "done-list-id", dueComplete: true, }) }) ``` ## Inputs Provide `card` as an ID, short link, or URL. Provide at least one of `address`, `boardId`, `closed`, `description`, `dueAt`, `clearDue`, `dueComplete`, `labelIds`, `listId`, `locationName`, `memberIds`, `name`, `position`, `startAt`, `clearStart`, or `subscribed`. Dates accept `Date` or an `ISO 8601` timestamp with offset. Position is `"top"`, `"bottom"`, or a nonnegative number. Optional second argument `{ account }` defaults to the project binding. `labelIds` and `memberIds` replace all current labels or members. Pass `[]` to remove all. `clearDue` can't accompany `dueAt`, and `clearStart` can't accompany `startAt`. ## Output Returns the updated `TrelloCard`. Moving a card between boards can require destination board access and compatible labels or members. # Update checklist item Source: https://docs.automate.ax/reference/integrations/trello/actions/update-check-item Update a Trello checklist item's text, state, order, date, reminder, or assignee. `trello.updateChecklistItem` changes one checklist item through its containing card. ```ts automations/complete-trello-check-item.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Complete Trello checklist item", () => { onDashboardRun({ title: "Complete Trello checklist item" }) trello.updateChecklistItem({ card: "card-id", itemId: "item-id", state: "complete", }) }) ``` Provide `card` and `itemId`. Provide at least one of `name`, `state: "complete" | "incomplete"`, `position`, `dueAt`, `clearDue`, `dueReminder`, or `memberId`. Dates accept `Date` or an `ISO 8601` timestamp with offset. Reminders are integers of at least `-1`. `clearDue` and `dueAt` are mutually exclusive. Optional second argument `{ account }` defaults to the project binding. Trello's [advanced checklists](https://support.atlassian.com/trello/docs/how-to-use-advanced-checklists-to-set-due-dates/) restrict checklist-item dates, reminders, and member assignments to boards in Standard, Premium, or Enterprise Workspaces. If Trello accepts a request but silently omits one of these fields, the action fails explicitly instead of reporting the requested advanced update as successful. Name, position, and completion changes remain available on Free Workspace boards. Returns the updated `TrelloCheckItem`. Trello requires the card because it addresses checklist-item updates through the card resource. # Update checklist Source: https://docs.automate.ax/reference/integrations/trello/actions/update-checklist Rename or reorder a Trello checklist. `trello.updateChecklist` changes a checklist's name, position, or both. ```ts automations/update-trello-checklist.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Rename Trello checklist", () => { onDashboardRun({ title: "Rename Trello checklist" }) trello.updateChecklist({ checklistId: "checklist-id", name: "Release checklist", }) }) ``` Provide `checklistId`. Provide `name`, `position: "top" | "bottom" | number`, or both. Numeric positions must be nonnegative. Optional second argument `{ account }` defaults to the project binding. Returns the updated `TrelloChecklist`. # Update comment Source: https://docs.automate.ax/reference/integrations/trello/actions/update-comment Replace the text of an existing Trello card comment. `trello.updateComment` edits a comment action on its card. ```ts automations/update-trello-comment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Update Trello comment", () => { onDashboardRun({ title: "Update Trello comment" }) trello.updateComment({ card: "card-id", commentId: "action-id", text: "Approved.", }) }) ``` Provide `card`, a stable `commentId`, and non-empty replacement `text`. `card` accepts an ID, short link, or URL. Optional second argument `{ account }` defaults to the project binding. Returns the updated `TrelloComment`. Trello may reject edits when the connected member didn't create the comment or lacks board access. # Update Custom Field Source: https://docs.automate.ax/reference/integrations/trello/actions/update-custom-field Update a Trello Custom Field definition. `trello.updateCustomField` changes a Custom Field's name, position, or card-front display setting. Its value type can't be changed. ```ts automations/update-trello-custom-field.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Update Trello Custom Field", () => { onDashboardRun({ title: "Update Trello Custom Field" }) trello.updateCustomField({ customFieldId: "custom-field-id", displayOnCardFront: false, name: "Story points", }) }) ``` Provide `customFieldId` and at least one of `displayOnCardFront`, non-empty `name`, or `position`. `position` accepts `"top"`, `"bottom"`, or a nonnegative number. Optional second argument `{ account }` selects a Trello binding. Returns the updated `TrelloCustomField`. # Update Custom Field option Source: https://docs.automate.ax/reference/integrations/trello/actions/update-custom-field-option Update a Trello Custom Field dropdown option. `trello.updateCustomFieldOption` changes one list-type Custom Field option. ```ts automations/update-trello-custom-field-option.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Update Trello Custom Field option", () => { onDashboardRun({ title: "Update Trello Custom Field option" }) trello.updateCustomFieldOption({ customFieldId: "custom-field-id", optionId: "option-id", text: "In review", color: "yellow", }) }) ``` Provide `customFieldId`, `optionId`, and at least one of non-empty `text`, `color`, or `position`. Colors use the same union as `trello.createCustomFieldOption`; `position` accepts `"top"`, `"bottom"`, or a nonnegative number. Optional second argument `{ account }` selects a Trello binding. Returns the updated `TrelloCustomFieldOption`. Trello exposes option updates through its singular `customField/{id}/options/{optionId}` provider route even though the read and delete routes use `customFields`. # Update label Source: https://docs.automate.ax/reference/integrations/trello/actions/update-label Update a Trello label's name or color. `trello.updateLabel` changes a reusable board label. ```ts automations/update-trello-label.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Update Trello label", () => { onDashboardRun({ title: "Update Trello label" }) trello.updateLabel({ labelId: "label-id", color: "green", name: "Ready" }) }) ``` Provide `labelId` and at least one field to change. `name` accepts any string; use `""` to clear it. `color` accepts `"black"`, `"blue"`, `"green"`, `"lime"`, `"orange"`, `"pink"`, `"purple"`, `"red"`, `"sky"`, `"yellow"`, or `null` for a colorless label. Optional second argument `{ account }` selects a Trello binding. Returns the updated `TrelloLabel`. # Update list Source: https://docs.automate.ax/reference/integrations/trello/actions/update-list Rename, archive, move, reorder, or watch a Trello list. `trello.updateList` changes selected list fields. Set `closed` to archive or reopen the list. Set `boardId` to move it to another board. ```ts automations/archive-trello-list.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Archive Trello list", () => { onDashboardRun({ title: "Archive Trello list" }) trello.updateList({ listId: "list-id", closed: true }) }) ``` Required `listId` is a stable ID. Provide at least one of `boardId: string`, `closed: boolean`, `name: string`, `position: "top" | "bottom" | number`, or `subscribed: boolean`. Position numbers must be nonnegative. Optional second argument `{ account }` defaults to the project binding. Returns the updated `TrelloList`. Moving a list requires access to both boards. # Upload attachment Source: https://docs.automate.ax/reference/integrations/trello/actions/upload-attachment Upload a file to a Trello card. `trello.uploadAttachment` sends file bytes to a card as `multipart/form-data` and can use the attachment as the card cover. ```ts automations/upload-trello-attachment.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Upload Trello attachment", () => { onDashboardRun({ title: "Upload Trello attachment" }) trello.uploadAttachment({ card: "card-id", file: new File(["Release notes"], "release-notes.txt", { type: "text/plain", }), name: "Release notes", setCover: false, }) }) ``` Provide `card` as an ID, short link, or URL and `file` as a `File`. Optional `name` sets a display name of at most 256 characters. `setCover` defaults to `false`. Optional second argument `{ account }` selects a Trello binding. Returns `Signal` with the uploaded attachment's metadata. Trello applies its provider upload-size and board limits. # Connect Trello and receive verified board events Source: https://docs.automate.ax/reference/integrations/trello/authorization-and-raw-api Connect Trello with non-expiring OAuth 1.0 tokens, call uncovered REST endpoints, and avoid mutating Automate.ax-managed board webhooks. Automate.ax connects Trello through OAuth 1.0 and manages the API key and user token for each integration account. ## Authorize Trello access The connection prompt requests Trello's `read` and `write` scopes with `expiration=never`. `read` covers boards, Workspaces, cards, and related resources. `write` permits mutations and managed webhook creation. Automate.ax doesn't request Trello's separate `account` scope, so a connected account can't expose member email or modify member-level account data through this integration. Trello doesn't issue a refresh token for this flow. Because Automate.ax requests `expiration=never`, the token has no scheduled expiration and remains valid until it is revoked or Trello otherwise rejects it. Members can revoke Automate.ax under **Applications** in their Trello account settings; Trello also supports deleting a token through its REST API. A revoked token returns `401 invalid token`, and the Trello account must be reconnected. Automate.ax resolves the account token only inside account-backed actions and never places it in action inputs or outputs. ## Use Custom Fields Trello's native Custom Fields require the board to belong to a Standard, Premium, or Enterprise Workspace. They aren't available in Free Workspaces, and Trello no longer offers the former Custom Fields Power-Up as a separate add-on. On a Free Workspace, listing a board's Custom Fields returns an empty array and creating one returns `403 Custom Fields Power-Up disabled for board`. This provider prerequisite applies to every Custom Field action and trigger. Move the board to an eligible Workspace or upgrade its current Workspace before using those actions and triggers. See Trello's [Custom Fields plan requirements](https://support.atlassian.com/trello/docs/using-custom-fields/) and [Custom Fields API guide](https://developer.atlassian.com/cloud/trello/guides/rest-api/getting-started-with-custom-fields/). ## Call an uncovered endpoint Use `getTrelloApi` inside a custom Trello-account-backed action when a provider endpoint doesn't have a packaged action. Supply a Zod schema for every successful response: ```ts automations/get-trello-board-actions.automation.ts theme={null} import { automation, defineAction, markSignificant, onDashboardRun, } from "automate.ax" import { getTrelloApi } from "automate.ax/trello" import { z } from "zod" const listBoardActions = defineAction("List Trello board actions") .account("trello", "read") .input(z.object({ boardId: z.string() })) .output(z.object({ id: z.string(), type: z.string() }).array()) .handler(async ({ account, input }) => getTrelloApi(account.secret).request(`boards/${input.boardId}/actions`, { query: { limit: 50 }, responseSchema: z.object({ id: z.string(), type: z.string() }).array(), }), ) export default automation("Inspect Trello activity", () => { const run = onDashboardRun({ title: "Inspect Trello activity", fields: [ { name: "boardId", type: "text", label: "Board ID", required: true, }, ], }) const actions = listBoardActions({ boardId: run.data.boardId }) markSignificant(actions) }) ``` Paths are relative to `https://api.trello.com/1/`; the helper rejects another origin and adds the connected API key and token. Query values may be strings, numbers, or booleans. Plain request bodies are encoded as JSON. Pass `FormData` for a multipart request; don't set its `Content-Type` boundary yourself. Successful responses are parsed as JSON and validated with `responseSchema`. Failures throw `TrelloApiError` with `status`, a provider or HTTP fallback `code`, an optional provider message, `Retry-After`, and available API-key and API-token rate-limit budgets. The helper doesn't turn provider failures into successful values. ## Receive verified board events Board triggers create and remove Trello webhooks automatically. Trello probes the callback with `HEAD` before creation. Automate.ax verifies each `X-Trello-Webhook` value as the Base64 HMAC-SHA1 digest of the exact request body followed by the exact callback URL, using the Trello application secret. It also requires the delivered webhook ID to match the active managed source. Trello retries a failed webhook delivery three times after 30, 60, and 120 seconds. It can disable a webhook after 30 consecutive days of failed delivery. Trello may also reject webhook creation on a model that has exceeded its provider limits and may delete an existing webhook after that model reaches `maxExceeded`. Automate.ax uses the Trello action ID as the idempotency key for each emitted event type, so provider retries don't create duplicate deliveries for the same subscription. One Trello action can intentionally emit several event types: for example, moving a card emits the broad board event, the card-moved event, and the card-updated event. Subscribing the same automation to overlapping trigger types therefore runs it once for each matching subscription. ## Confirm Trello behavior * [Authorization and token revocation](https://developer.atlassian.com/cloud/trello/guides/rest-api/authorization/) * [REST API introduction](https://developer.atlassian.com/cloud/trello/guides/rest-api/api-introduction/) * [Webhooks, signatures, and retries](https://developer.atlassian.com/cloud/trello/guides/rest-api/webhooks/) * [Rate limits and response headers](https://developer.atlassian.com/cloud/trello/guides/rest-api/rate-limits/) * [Object and webhook limits](https://developer.atlassian.com/cloud/trello/guides/rest-api/limits/) # Trello Source: https://docs.automate.ax/reference/integrations/trello/index Manage Trello boards, cards, lists, checklists, labels, attachments, and members, or react to verified board changes. ## Exports ```ts theme={null} import { trello, trelloAccount, getTrelloApi } from "automate.ax/trello" ``` * `trello` contains the packaged Trello actions and triggers. * `trelloAccount("name")` selects a named Trello connection. * `getTrelloApi` creates the authenticated Trello API helper for a custom account-backed action. Read [Connect Trello and receive verified board events](/reference/integrations/trello/authorization-and-raw-api) for OAuth token behavior, Custom Fields requirements, raw REST calls, and webhook verification. ## Triggers * [On attachment added](/reference/integrations/trello/triggers/on-attachment-added) * [On attachment deleted](/reference/integrations/trello/triggers/on-attachment-deleted) * [On board event](/reference/integrations/trello/triggers/on-board-event) * [On card archived](/reference/integrations/trello/triggers/on-card-archived) * [On card commented](/reference/integrations/trello/triggers/on-card-commented) * [On card created](/reference/integrations/trello/triggers/on-card-created) * [On card deleted](/reference/integrations/trello/triggers/on-card-deleted) * [On card label added](/reference/integrations/trello/triggers/on-card-label-added) * [On card label removed](/reference/integrations/trello/triggers/on-card-label-removed) * [On card member added](/reference/integrations/trello/triggers/on-card-member-added) * [On card member removed](/reference/integrations/trello/triggers/on-card-member-removed) * [On card moved](/reference/integrations/trello/triggers/on-card-moved) * [On card restored](/reference/integrations/trello/triggers/on-card-restored) * [On card updated](/reference/integrations/trello/triggers/on-card-updated) * [On checklist created](/reference/integrations/trello/triggers/on-checklist-created) * [On checklist deleted](/reference/integrations/trello/triggers/on-checklist-deleted) * [On checklist item completed](/reference/integrations/trello/triggers/on-checklist-item-completed) * [On checklist item created](/reference/integrations/trello/triggers/on-checklist-item-created) * [On checklist item deleted](/reference/integrations/trello/triggers/on-checklist-item-deleted) * [On checklist item updated](/reference/integrations/trello/triggers/on-checklist-item-updated) * [On checklist updated](/reference/integrations/trello/triggers/on-checklist-updated) * [On comment deleted](/reference/integrations/trello/triggers/on-comment-deleted) * [On comment updated](/reference/integrations/trello/triggers/on-comment-updated) * [On Custom Field created](/reference/integrations/trello/triggers/on-custom-field-created) * [On Custom Field deleted](/reference/integrations/trello/triggers/on-custom-field-deleted) * [On Custom Field updated](/reference/integrations/trello/triggers/on-custom-field-updated) * [On Custom Field value updated](/reference/integrations/trello/triggers/on-custom-field-value-updated) * [On list archived](/reference/integrations/trello/triggers/on-list-archived) * [On list created](/reference/integrations/trello/triggers/on-list-created) * [On list moved](/reference/integrations/trello/triggers/on-list-moved) * [On list restored](/reference/integrations/trello/triggers/on-list-restored) * [On list updated](/reference/integrations/trello/triggers/on-list-updated) ## Actions * [Add attachment](/reference/integrations/trello/actions/add-attachment) * [Add board member](/reference/integrations/trello/actions/add-board-member) * [Add card label](/reference/integrations/trello/actions/add-card-label) * [Add card member](/reference/integrations/trello/actions/add-card-member) * [Add comment](/reference/integrations/trello/actions/add-comment) * [Clear card Custom Field value](/reference/integrations/trello/actions/clear-card-custom-field-value) * [Create board](/reference/integrations/trello/actions/create-board) * [Create board label](/reference/integrations/trello/actions/create-board-label) * [Create card](/reference/integrations/trello/actions/create-card) * [Create checklist item](/reference/integrations/trello/actions/create-check-item) * [Create checklist](/reference/integrations/trello/actions/create-checklist) * [Create Custom Field](/reference/integrations/trello/actions/create-custom-field) * [Create Custom Field option](/reference/integrations/trello/actions/create-custom-field-option) * [Create list](/reference/integrations/trello/actions/create-list) * [Delete attachment](/reference/integrations/trello/actions/delete-attachment) * [Delete board](/reference/integrations/trello/actions/delete-board) * [Delete card](/reference/integrations/trello/actions/delete-card) * [Delete checklist item](/reference/integrations/trello/actions/delete-check-item) * [Delete checklist](/reference/integrations/trello/actions/delete-checklist) * [Delete comment](/reference/integrations/trello/actions/delete-comment) * [Delete Custom Field](/reference/integrations/trello/actions/delete-custom-field) * [Delete Custom Field option](/reference/integrations/trello/actions/delete-custom-field-option) * [Delete label](/reference/integrations/trello/actions/delete-label) * [Get board](/reference/integrations/trello/actions/get-board) * [Get card](/reference/integrations/trello/actions/get-card) * [Get current member](/reference/integrations/trello/actions/get-current-member) * [Get Custom Field](/reference/integrations/trello/actions/get-custom-field) * [Get Custom Field option](/reference/integrations/trello/actions/get-custom-field-option) * [Get label](/reference/integrations/trello/actions/get-label) * [Get list](/reference/integrations/trello/actions/get-list) * [Get Workspace](/reference/integrations/trello/actions/get-workspace) * [Invite board member](/reference/integrations/trello/actions/invite-board-member) * [List attachments](/reference/integrations/trello/actions/list-attachments) * [List board cards](/reference/integrations/trello/actions/list-board-cards) * [List board Custom Fields](/reference/integrations/trello/actions/list-board-custom-fields) * [List board labels](/reference/integrations/trello/actions/list-board-labels) * [List board lists](/reference/integrations/trello/actions/list-board-lists) * [List board members](/reference/integrations/trello/actions/list-board-members) * [List board memberships](/reference/integrations/trello/actions/list-board-memberships) * [List boards](/reference/integrations/trello/actions/list-boards) * [List card Custom Field values](/reference/integrations/trello/actions/list-card-custom-field-values) * [List cards](/reference/integrations/trello/actions/list-cards) * [List checklists](/reference/integrations/trello/actions/list-checklists) * [List comments](/reference/integrations/trello/actions/list-comments) * [List Custom Field options](/reference/integrations/trello/actions/list-custom-field-options) * [List Workspaces](/reference/integrations/trello/actions/list-workspaces) * [Remove board member](/reference/integrations/trello/actions/remove-board-member) * [Remove card label](/reference/integrations/trello/actions/remove-card-label) * [Remove card member](/reference/integrations/trello/actions/remove-card-member) * [Search cards](/reference/integrations/trello/actions/search-cards) * [Set card Custom Field value](/reference/integrations/trello/actions/set-card-custom-field-value) * [Update board](/reference/integrations/trello/actions/update-board) * [Update board member role](/reference/integrations/trello/actions/update-board-member-role) * [Update card](/reference/integrations/trello/actions/update-card) * [Update checklist item](/reference/integrations/trello/actions/update-check-item) * [Update checklist](/reference/integrations/trello/actions/update-checklist) * [Update comment](/reference/integrations/trello/actions/update-comment) * [Update Custom Field](/reference/integrations/trello/actions/update-custom-field) * [Update Custom Field option](/reference/integrations/trello/actions/update-custom-field-option) * [Update label](/reference/integrations/trello/actions/update-label) * [Update list](/reference/integrations/trello/actions/update-list) * [Upload attachment](/reference/integrations/trello/actions/upload-attachment) # On attachment added Source: https://docs.automate.ax/reference/integrations/trello/triggers/on-attachment-added Run an automation after an attachment is added to a Trello card. `trello.onAttachmentAdded` matches Trello's `addAttachmentToCard` action. ```ts automations/watch-trello-attachments.automation.ts theme={null} import { automation } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Watch Trello attachments", () => { const event = trello.onAttachmentAdded({ board: "board-id" }) trello.addComment({ card: event.card.id, text: "Attachment received." }) }) ``` Provide `board` as an ID, short link, or URL. Optional static `account` defaults to the project binding. Returns a resource event with `actionType: "addAttachmentToCard"`, required `attachment`, `card`, and `board`, plus `actionId`, `occurredAt`, optional `memberCreator`, and the complete provider `event`. # On attachment deleted Source: https://docs.automate.ax/reference/integrations/trello/triggers/on-attachment-deleted Run an automation after an attachment is deleted from a Trello card. `trello.onAttachmentDeleted` matches Trello's `deleteAttachmentFromCard` action. ```ts automations/watch-trello-attachment-deletions.automation.ts theme={null} import { automation } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Watch deleted Trello attachments", () => { trello.onAttachmentDeleted({ board: "board-id" }) }) ``` Provide `board` as an ID, short link, or URL. Optional static `account` defaults to the project binding. Returns a resource event with `actionType: "deleteAttachmentFromCard"`, required `attachment`, `card`, and `board`, plus `actionId`, `occurredAt`, optional `memberCreator`, and the complete provider `event`. # On board event Source: https://docs.automate.ax/reference/integrations/trello/triggers/on-board-event Run an automation when any action affects a Trello board. `trello.onBoardEvent` handles all board webhook actions. Use it when a specific card trigger is too narrow or you need raw Trello action data. ```ts automations/log-trello-board-events.automation.ts theme={null} import { automation } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Watch Trello board", () => { const change = trello.onBoardEvent({ board: "https://trello.com/b/abc123/projects", }) change.transform(({ actionType, card, list }) => ({ actionType, card, list, })) }) ``` ## Options Provide `board: string` as an ID, short link, or standard board URL. Optional `account` is a static Trello account binding and defaults to the project binding. A signal can't select it at runtime. ## Trigger data Returns `Signal` with `actionId`, Trello `actionType`, `occurredAt` in `ISO 8601` format, `webhookId`, `board`, optional `memberCreator`, and affected resources such as `card`, `list`, `listBefore`, `listAfter`, `checklist`, `checkItem`, `attachment`, `member`, and `organization`. Other `action.data` fields remain available by name as JSON values. `event` contains the complete Trello webhook, including the original `action.data`, `model`, and `webhook`. Prefer a specific card trigger when it covers the event. # On card archived Source: https://docs.automate.ax/reference/integrations/trello/triggers/on-card-archived Run an automation after someone archives a Trello card. `trello.onCardArchived` matches a card update whose `closed` state changes from `false` to `true`. Reopened cards don't match. ```ts automations/watch-trello-archives.automation.ts theme={null} import { automation } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Watch Trello archives", () => { trello.onCardArchived({ board: "board-id" }) }) ``` Provide `board` as an ID, short link, or URL. Optional static `account` defaults to the project binding. ## Trigger data Returns the [shared Trello card event shape](/reference/integrations/trello/triggers/on-card-created#trigger-data), with the archived state required: ```ts theme={null} type TrelloCardArchivedEvent = TrelloCardEventBase<"updateCard"> & { card: TrelloCard & { closed: true } } ``` `event` contains the complete Trello webhook. Archive activity also matches [On card updated](/reference/integrations/trello/triggers/on-card-updated). # On card commented Source: https://docs.automate.ax/reference/integrations/trello/triggers/on-card-commented Run an automation after someone comments on a Trello card. `trello.onCardCommented` matches Trello `commentCard` actions on one board. ```ts automations/watch-trello-comments.automation.ts theme={null} import { automation } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Watch Trello comments", () => { trello.onCardCommented({ board: "board-id" }) }) ``` Provide `board` as an ID, short link, or URL. Optional static `account` defaults to the project binding. ## Trigger data Returns the [shared Trello card event shape](/reference/integrations/trello/triggers/on-card-created#trigger-data), with comment data: ```ts theme={null} type TrelloCardCommentedEvent = TrelloCardEventBase<"commentCard"> & { commentText: string } ``` The signal also includes board and card references, an optional list and creator, and the complete Trello webhook under `event`. Use [List comments](/reference/integrations/trello/actions/list-comments) for the comment object and creation time. # On card created Source: https://docs.automate.ax/reference/integrations/trello/triggers/on-card-created Run an automation after someone creates a card on a Trello board. `trello.onCardCreated` matches newly created cards, copied cards, cards converted from checklist items, and cards created by email. ```ts automations/welcome-trello-cards.automation.ts theme={null} import { automation } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Welcome Trello cards", () => { const event = trello.onCardCreated({ board: "board-id" }) trello.addComment({ card: event.card.id, text: "Card received." }) }) ``` Provide `board` as an ID, short link, or URL. Optional static `account` defaults to the project binding. ## Trigger data Returns a `Signal`: ```ts theme={null} type TrelloCardCreatedEvent = TrelloCardEventBase< "copyCard" | "convertToCardFromCheckItem" | "createCard" | "emailCard" > interface TrelloCardEventBase { actionId: string actionType: TActionType board: TrelloBoard card: TrelloCard commentText?: string event: TrelloWebhook list?: TrelloResource memberCreator?: TrelloMember occurredAt: string previousList?: TrelloResource } interface TrelloResource { id: string name?: string } interface TrelloBoard extends TrelloResource { closed?: boolean url?: string } interface TrelloCard extends TrelloResource { closed?: boolean idShort?: number shortLink?: string } interface TrelloMember extends TrelloResource { fullName?: string username?: string } interface TrelloWebhook { action: { data: Record date: string id: string memberCreator?: TrelloMember type: TActionType } model: TrelloBoard webhook: { id: string } } ``` `occurredAt` is an `ISO 8601` timestamp. `list` is the current list, and `previousList` is its prior list when available. Nested board, card, and list objects always have `id`. Names and other Trello fields can be absent. `event` contains the complete Trello webhook. # On card deleted Source: https://docs.automate.ax/reference/integrations/trello/triggers/on-card-deleted Run an automation after a Trello card is deleted. `trello.onCardDeleted` matches Trello's `deleteCard` action. ```ts automations/watch-trello-card-deletions.automation.ts theme={null} import { automation } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Watch deleted Trello cards", () => { trello.onCardDeleted({ board: "board-id" }) }) ``` Provide `board` as an ID, short link, or URL. Optional static `account` defaults to the project binding. Returns the [shared Trello card event shape](/reference/integrations/trello/triggers/on-card-created#trigger-data) with `actionType: "deleteCard"`. The payload describes the deleted card from the webhook; don't assume it remains retrievable afterward. # On card label added Source: https://docs.automate.ax/reference/integrations/trello/triggers/on-card-label-added Run an automation after a label is added to a Trello card. `trello.onCardLabelAdded` matches Trello's `addLabelToCard` action. ```ts automations/watch-trello-card-labels.automation.ts theme={null} import { automation } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Watch Trello card labels", () => { trello.onCardLabelAdded({ board: "board-id" }) }) ``` Provide `board` as an ID, short link, or URL. Optional static `account` defaults to the project binding. Returns a resource event with `actionType: "addLabelToCard"`, required `card`, `label`, and `board`, plus `actionId`, `occurredAt`, optional `memberCreator`, and the complete provider `event`. # On card label removed Source: https://docs.automate.ax/reference/integrations/trello/triggers/on-card-label-removed Run an automation after a label is removed from a Trello card. `trello.onCardLabelRemoved` matches Trello's `removeLabelFromCard` action. ```ts automations/watch-trello-card-label-removals.automation.ts theme={null} import { automation } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Watch Trello card label removals", () => { trello.onCardLabelRemoved({ board: "board-id" }) }) ``` Provide `board` as an ID, short link, or URL. Optional static `account` defaults to the project binding. Returns a resource event with `actionType: "removeLabelFromCard"`, required `card`, `label`, and `board`, plus `actionId`, `occurredAt`, optional `memberCreator`, and the complete provider `event`. # On card member added Source: https://docs.automate.ax/reference/integrations/trello/triggers/on-card-member-added Run an automation after a member is added to a Trello card. `trello.onCardMemberAdded` matches Trello's `addMemberToCard` action. ```ts automations/watch-trello-card-members.automation.ts theme={null} import { automation } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Watch Trello card assignments", () => { trello.onCardMemberAdded({ board: "board-id" }) }) ``` Provide `board` as an ID, short link, or URL. Optional static `account` defaults to the project binding. Returns a resource event with `actionType: "addMemberToCard"`, required `card`, `member`, and `board`, plus `actionId`, `occurredAt`, optional `memberCreator`, and the complete provider `event`. # On card member removed Source: https://docs.automate.ax/reference/integrations/trello/triggers/on-card-member-removed Run an automation after a member is removed from a Trello card. `trello.onCardMemberRemoved` matches Trello's `removeMemberFromCard` action. ```ts automations/watch-trello-card-unassignments.automation.ts theme={null} import { automation } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Watch Trello card unassignments", () => { trello.onCardMemberRemoved({ board: "board-id" }) }) ``` Provide `board` as an ID, short link, or URL. Optional static `account` defaults to the project binding. Returns a resource event with `actionType: "removeMemberFromCard"`, required `card`, `member`, and `board`, plus `actionId`, `occurredAt`, optional `memberCreator`, and the complete provider `event`. # On card moved Source: https://docs.automate.ax/reference/integrations/trello/triggers/on-card-moved Run an automation when a Trello card moves between lists. `trello.onCardMoved` matches an `updateCard` action with source and destination lists. ```ts automations/watch-trello-moves.automation.ts theme={null} import { automation } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Acknowledge Trello moves", () => { const event = trello.onCardMoved({ board: "board-id" }) trello.addComment({ card: event.card.id, text: "Card moved." }) }) ``` Provide `board` as an ID, short link, or URL. Optional static `account` defaults to the project binding. ## Trigger data Returns the [shared Trello card event shape](/reference/integrations/trello/triggers/on-card-created#trigger-data), with both list references required: ```ts theme={null} type TrelloCardMovedEvent = TrelloCardEventBase<"updateCard"> & { list: TrelloResource previousList: TrelloResource } ``` `list` is the destination and `previousList` the source. `event` contains the complete Trello webhook. A move also matches [On card updated](/reference/integrations/trello/triggers/on-card-updated). Using both triggers runs the automation twice. # On card restored Source: https://docs.automate.ax/reference/integrations/trello/triggers/on-card-restored Run an automation after a Trello card is restored. `trello.onCardRestored` matches an `updateCard` action whose `closed` state changes from `true` to `false`. ```ts automations/watch-trello-restores.automation.ts theme={null} import { automation } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Watch restored Trello cards", () => { trello.onCardRestored({ board: "board-id" }) }) ``` Provide `board` as an ID, short link, or URL. Optional static `account` defaults to the project binding. Returns the [shared Trello card event shape](/reference/integrations/trello/triggers/on-card-created#trigger-data) with `actionType: "updateCard"` and `card.closed: false`. The action also matches `trello.onCardUpdated`. # On card updated Source: https://docs.automate.ax/reference/integrations/trello/triggers/on-card-updated Run an automation after someone updates a Trello card. `trello.onCardUpdated` matches every `updateCard` action on one board, including moves, archive changes, and other updates. ```ts automations/watch-trello-updates.automation.ts theme={null} import { automation } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Watch Trello card updates", () => { trello.onCardUpdated({ board: "board-id" }) }) ``` Provide `board` as an ID, short link, or URL. Optional static `account` defaults to the project binding. ## Trigger data Returns the [shared Trello card event shape](/reference/integrations/trello/triggers/on-card-created#trigger-data) for `updateCard` actions: ```ts theme={null} type TrelloCardUpdatedEvent = TrelloCardEventBase<"updateCard"> ``` The payload identifies the action but doesn't include before-and-after values for every field. `event` contains the complete Trello webhook. Call `trello.getCard({ card: event.card.id })` for the current card. # On checklist created Source: https://docs.automate.ax/reference/integrations/trello/triggers/on-checklist-created Run an automation after a checklist is added to a Trello card. `trello.onChecklistCreated` matches Trello's `addChecklistToCard` action. ```ts automations/watch-trello-checklists.automation.ts theme={null} import { automation } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Watch Trello checklists", () => { trello.onChecklistCreated({ board: "board-id" }) }) ``` Provide `board` as an ID, short link, or URL. Optional static `account` defaults to the project binding. Returns a resource event with `actionType: "addChecklistToCard"`, required `card`, `checklist`, and `board`, plus `actionId`, `occurredAt`, optional `memberCreator`, and the complete provider `event`. # On checklist deleted Source: https://docs.automate.ax/reference/integrations/trello/triggers/on-checklist-deleted Run an automation after a checklist is removed from a Trello card. `trello.onChecklistDeleted` matches Trello's `removeChecklistFromCard` action. ```ts automations/watch-trello-checklist-deletions.automation.ts theme={null} import { automation } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Watch deleted Trello checklists", () => { trello.onChecklistDeleted({ board: "board-id" }) }) ``` Provide `board` as an ID, short link, or URL. Optional static `account` defaults to the project binding. Returns a resource event with `actionType: "removeChecklistFromCard"`, required `card`, `checklist`, and `board`, plus `actionId`, `occurredAt`, optional `memberCreator`, and the complete provider `event`. # On checklist item completed Source: https://docs.automate.ax/reference/integrations/trello/triggers/on-checklist-item-completed Run an automation after a Trello checklist item is completed. `trello.onChecklistItemCompleted` matches an `updateCheckItemStateOnCard` action whose item state is `"complete"`. ```ts automations/watch-trello-checklist-completions.automation.ts theme={null} import { automation } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Watch Trello checklist completions", () => { trello.onChecklistItemCompleted({ board: "board-id" }) }) ``` Provide `board` as an ID, short link, or URL. Optional static `account` defaults to the project binding. Returns a resource event with `actionType: "updateCheckItemStateOnCard"`, required `checkItem.state: "complete"` and `board`, plus `actionId`, `occurredAt`, optional `checklist`, `card`, `memberCreator`, and the complete provider `event`. The action also matches `trello.onChecklistItemUpdated`. # On checklist item created Source: https://docs.automate.ax/reference/integrations/trello/triggers/on-checklist-item-created Run an automation after a Trello checklist item is created. `trello.onChecklistItemCreated` matches Trello's `createCheckItem` action. ```ts automations/watch-trello-checklist-items.automation.ts theme={null} import { automation } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Watch Trello checklist items", () => { trello.onChecklistItemCreated({ board: "board-id" }) }) ``` Provide `board` as an ID, short link, or URL. Optional static `account` defaults to the project binding. Returns a resource event with `actionType: "createCheckItem"`, required `checkItem`, `checklist`, and `board`, plus `actionId`, `occurredAt`, optional `card`, `memberCreator`, and the complete provider `event`. # On checklist item deleted Source: https://docs.automate.ax/reference/integrations/trello/triggers/on-checklist-item-deleted Run an automation after a Trello checklist item is deleted. `trello.onChecklistItemDeleted` matches Trello's `deleteCheckItem` action. ```ts automations/watch-trello-checklist-item-deletions.automation.ts theme={null} import { automation } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Watch deleted Trello checklist items", () => { trello.onChecklistItemDeleted({ board: "board-id" }) }) ``` Provide `board` as an ID, short link, or URL. Optional static `account` defaults to the project binding. Returns a resource event with `actionType: "deleteCheckItem"`, required `checkItem`, `checklist`, and `board`, plus `actionId`, `occurredAt`, optional `card`, `memberCreator`, and the complete provider `event`. # On checklist item updated Source: https://docs.automate.ax/reference/integrations/trello/triggers/on-checklist-item-updated Run an automation after a Trello checklist item is updated. `trello.onChecklistItemUpdated` matches `updateCheckItem` and `updateCheckItemStateOnCard` actions. ```ts automations/watch-trello-checklist-item-updates.automation.ts theme={null} import { automation } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Watch Trello checklist item updates", () => { trello.onChecklistItemUpdated({ board: "board-id" }) }) ``` Provide `board` as an ID, short link, or URL. Optional static `account` defaults to the project binding. Returns a resource event with required `checkItem` and `board`, `actionType: "updateCheckItem" | "updateCheckItemStateOnCard"`, `actionId`, `occurredAt`, optional `checklist`, `card`, `old`, and `memberCreator`, and the complete provider `event`. Completed items also match `trello.onChecklistItemCompleted`. # On checklist updated Source: https://docs.automate.ax/reference/integrations/trello/triggers/on-checklist-updated Run an automation after a Trello checklist is updated. `trello.onChecklistUpdated` matches Trello's `updateChecklist` action. ```ts automations/watch-trello-checklist-updates.automation.ts theme={null} import { automation } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Watch Trello checklist updates", () => { trello.onChecklistUpdated({ board: "board-id" }) }) ``` Provide `board` as an ID, short link, or URL. Optional static `account` defaults to the project binding. Returns a resource event with `actionType: "updateChecklist"`, required `checklist` and `board`, plus `actionId`, `occurredAt`, optional `card`, `old`, `memberCreator`, and the complete provider `event`. # On comment deleted Source: https://docs.automate.ax/reference/integrations/trello/triggers/on-comment-deleted Run an automation after a Trello card comment is deleted. `trello.onCommentDeleted` matches Trello's `deleteComment` action on one board. ```ts automations/watch-trello-comment-deletions.automation.ts theme={null} import { automation } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Watch Trello comment deletions", () => { trello.onCommentDeleted({ board: "board-id" }) }) ``` Provide `board` as an ID, short link, or URL. Optional static `account` defaults to the project binding. Returns a resource event with `actionType: "deleteComment"`, `actionId`, `board`, `occurredAt`, the complete provider `event`, and optional `comment`, `card`, and `memberCreator` data when Trello includes them. # On comment updated Source: https://docs.automate.ax/reference/integrations/trello/triggers/on-comment-updated Run an automation after a Trello card comment is updated. `trello.onCommentUpdated` matches Trello's `updateComment` action on one board. ```ts automations/watch-trello-comment-updates.automation.ts theme={null} import { automation } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Watch Trello comment updates", () => { trello.onCommentUpdated({ board: "board-id" }) }) ``` Provide `board` as an ID, short link, or URL. Optional static `account` defaults to the project binding. Returns a resource event with `actionType: "updateComment"`, `actionId`, `board`, `occurredAt`, the complete provider `event`, and optional `comment`, `card`, `memberCreator`, and `old` data when Trello includes them. # On Custom Field created Source: https://docs.automate.ax/reference/integrations/trello/triggers/on-custom-field-created Run an automation after a Trello Custom Field definition is created. `trello.onCustomFieldCreated` matches Trello's `addCustomField` board action. ```ts automations/watch-new-trello-custom-fields.automation.ts theme={null} import { automation } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Watch new Trello Custom Fields", () => { trello.onCustomFieldCreated({ board: "board-id" }) }) ``` Provide `board` as an ID, short link, or URL. Optional static `account` defaults to the project binding. Returns a resource event with `actionType: "addCustomField"`, required `customField` and `board`, plus `actionId`, `occurredAt`, optional `memberCreator`, and the complete provider `event`. # On Custom Field deleted Source: https://docs.automate.ax/reference/integrations/trello/triggers/on-custom-field-deleted Run an automation after a Trello Custom Field definition is deleted. `trello.onCustomFieldDeleted` matches Trello's `deleteCustomField` board action. ```ts automations/watch-deleted-trello-custom-fields.automation.ts theme={null} import { automation } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Watch deleted Trello Custom Fields", () => { trello.onCustomFieldDeleted({ board: "board-id" }) }) ``` Provide `board` as an ID, short link, or URL. Optional static `account` defaults to the project binding. Returns a resource event with `actionType: "deleteCustomField"`, required `customField` and `board`, plus `actionId`, `occurredAt`, optional `memberCreator`, and the complete provider `event`. # On Custom Field updated Source: https://docs.automate.ax/reference/integrations/trello/triggers/on-custom-field-updated Run an automation after a Trello Custom Field definition changes. `trello.onCustomFieldUpdated` matches Trello's `updateCustomField` action for definition edits, not card values. ```ts automations/watch-trello-custom-fields.automation.ts theme={null} import { automation } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Watch Trello Custom Fields", () => { trello.onCustomFieldUpdated({ board: "board-id" }) }) ``` Provide `board` as an ID, short link, or URL. Optional static `account` defaults to the project binding. Returns a resource event with `actionType: "updateCustomField"`, required `customField` and `board`, plus `actionId`, `occurredAt`, optional `old` and `memberCreator`, and the complete provider `event`. # On Custom Field value updated Source: https://docs.automate.ax/reference/integrations/trello/triggers/on-custom-field-value-updated Run an automation after a Trello card Custom Field value changes. `trello.onCustomFieldValueUpdated` matches Trello's `updateCustomFieldItem` action for card values. ```ts automations/watch-trello-custom-field-values.automation.ts theme={null} import { automation } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Watch Trello Custom Field values", () => { trello.onCustomFieldValueUpdated({ board: "board-id" }) }) ``` Provide `board` as an ID, short link, or URL. Optional static `account` defaults to the project binding. Returns a resource event with `actionType: "updateCustomFieldItem"`, required `card`, `customField`, `customFieldItem`, and `board`, plus `actionId`, `occurredAt`, optional `old` and `memberCreator`, and the complete provider `event`. # On list archived Source: https://docs.automate.ax/reference/integrations/trello/triggers/on-list-archived Run an automation after a Trello list is archived. `trello.onListArchived` matches an `updateList` action whose `closed` state changes from `false` to `true`. ```ts automations/watch-trello-list-archives.automation.ts theme={null} import { automation } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Watch archived Trello lists", () => { trello.onListArchived({ board: "board-id" }) }) ``` Provide `board` as an ID, short link, or URL. Optional static `account` defaults to the project binding. Returns a resource event with `actionType: "updateList"`, required `list.closed: true` and `board`, plus `actionId`, `occurredAt`, optional `old` and `memberCreator`, and the complete provider `event`. The action also matches `trello.onListUpdated`. # On list created Source: https://docs.automate.ax/reference/integrations/trello/triggers/on-list-created Run an automation after a list is created on a Trello board. `trello.onListCreated` matches Trello's `createList` action. ```ts automations/watch-trello-list-creation.automation.ts theme={null} import { automation } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Watch Trello list creation", () => { trello.onListCreated({ board: "board-id" }) }) ``` Provide `board` as an ID, short link, or URL. Optional static `account` defaults to the project binding. Returns a resource event with `actionType: "createList"`, required `list` and `board`, plus `actionId`, `occurredAt`, optional `memberCreator`, and the complete provider `event`. # On list moved Source: https://docs.automate.ax/reference/integrations/trello/triggers/on-list-moved Run an automation after a Trello list moves between boards. `trello.onListMoved` matches `moveListFromBoard` and `moveListToBoard` actions. ```ts automations/watch-trello-list-moves.automation.ts theme={null} import { automation } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Watch Trello list moves", () => { trello.onListMoved({ board: "board-id" }) }) ``` Provide `board` as an ID, short link, or URL. Optional static `account` defaults to the project binding. Returns a resource event with required `list` and `board`, `actionType: "moveListFromBoard" | "moveListToBoard"`, `actionId`, `occurredAt`, optional `listBefore`, `listAfter`, and `memberCreator`, and the complete provider `event`. # On list restored Source: https://docs.automate.ax/reference/integrations/trello/triggers/on-list-restored Run an automation after a Trello list is restored. `trello.onListRestored` matches an `updateList` action whose `closed` state changes from `true` to `false`. ```ts automations/watch-trello-list-restores.automation.ts theme={null} import { automation } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Watch restored Trello lists", () => { trello.onListRestored({ board: "board-id" }) }) ``` Provide `board` as an ID, short link, or URL. Optional static `account` defaults to the project binding. Returns a resource event with `actionType: "updateList"`, required `list.closed: false` and `board`, plus `actionId`, `occurredAt`, optional `old` and `memberCreator`, and the complete provider `event`. The action also matches `trello.onListUpdated`. # On list updated Source: https://docs.automate.ax/reference/integrations/trello/triggers/on-list-updated Run an automation after a list is updated on a Trello board. `trello.onListUpdated` matches every Trello `updateList` action, including archive and restore changes. ```ts automations/watch-trello-list-updates.automation.ts theme={null} import { automation } from "automate.ax" import { trello } from "automate.ax/trello" export default automation("Watch Trello list updates", () => { trello.onListUpdated({ board: "board-id" }) }) ``` Provide `board` as an ID, short link, or URL. Optional static `account` defaults to the project binding. Returns a resource event with `actionType: "updateList"`, required `list` and `board`, plus `actionId`, `occurredAt`, optional `old` and `memberCreator`, and the complete provider `event`. # Add project domain Source: https://docs.automate.ax/reference/integrations/vercel/actions/add-project-domain Add a domain, branch domain, or redirect to a Vercel project. `vercel.addProjectDomain` connects a domain to a project. ```ts automations/add-vercel-domain.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Add Vercel domain", () => { const domain = vercel.addProjectDomain({ domain: "docs.example.com", project: "docs-site", }) // Use domain.verification to surface the required Vercel DNS records. }) ``` The action requires `project` and `domain`. Optional `gitBranch` creates a preview branch domain. `customEnvironmentId` selects a custom environment. `redirect` and `redirectStatusCode` create a 301, 302, 307, or 308 redirect. The output reports verification status and includes any required `DNS` challenges. # Approve rolling release stage Source: https://docs.automate.ax/reference/integrations/vercel/actions/approve-rolling-release-stage Approves the next stage of a manual rollout. `vercel.approveRollingReleaseStage` approves the next stage of a manual rollout. ```ts automations/approve-rolling-release-stage.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Approve rolling release stage", () => { vercel.approveRollingReleaseStage({ canaryDeploymentId: "dpl_1", idOrName: "prj_1", nextStageIndex: 1, teamId: "team_1", }) }) ``` ## Input * `canaryDeploymentId`: the deployment being advanced. * `idOrName`: the Vercel project ID or name. * `nextStageIndex`: the zero-based rollout stage to activate. * `teamId`: the owning team ID when the project belongs to a team. ## Output Returns `{ rollingRelease }`. Read `result.rollingRelease` for Vercel's updated rolling-release document; it is `null` when no rolling release exists. ## Provider behavior This action requires a Vercel access-token connection. It changes production traffic and is not replay-safe. Vercel rejects a stage that does not follow the rollout's current stage. # Assign alias Source: https://docs.automate.ax/reference/integrations/vercel/actions/assign-alias Assigns an alias to a deployment or creates an alias redirect. `vercel.assignAlias` assigns an alias to a deployment or creates an alias redirect. ```ts automations/assign-alias.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Assign alias", () => { vercel.assignAlias({ alias: "app.example.com", deployment: "dpl_1", teamId: "team_1", }) }) ``` ## Input * `alias`: included in the runnable example and checked by the callable's TypeScript contract. * `deployment`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed Vercel resource created by the operation, including its provider ID when Vercel supplies one. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Batch delete project environment variables Source: https://docs.automate.ax/reference/integrations/vercel/actions/batch-delete-project-environment-variables Deletes several environment variables from one Vercel project. `vercel.batchDeleteProjectEnvironmentVariables` deletes several environment variables from one Vercel project. ```ts automations/batch-delete-project-environment-variables.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Batch delete project environment variables", () => { vercel.batchDeleteProjectEnvironmentVariables({ environmentVariableIds: ["env_1"], project: "prj_1", teamId: "team_1", }) }) ``` ## Input * `environmentVariableIds`: included in the runnable example and checked by the callable's TypeScript contract. * `project`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed response from the corresponding Vercel operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Cancel deployment Source: https://docs.automate.ax/reference/integrations/vercel/actions/cancel-deployment Stop a Vercel deployment before it finishes. `vercel.cancelDeployment` stops a deployment before it reaches a terminal state. ```ts automations/cancel-vercel-deployment.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Cancel Vercel deployment", () => { const deployment = vercel.cancelDeployment({ deploymentId: "dpl_123" }) // Use deployment.readyState to confirm Vercel recorded the cancellation. }) ``` The action requires `deploymentId`. Optional `teamId` overrides the OAuth installation team, and second argument `{ account }` selects the binding. Vercel rejects deployments that are already ready, errored, or canceled. Returns Vercel's full canceled-deployment response. # Complete rolling release Source: https://docs.automate.ax/reference/integrations/vercel/actions/complete-rolling-release Promotes the canary to serve all production traffic. `vercel.completeRollingRelease` promotes the canary to serve all production traffic. ```ts automations/complete-rolling-release.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Complete rolling release", () => { vercel.completeRollingRelease({ canaryDeploymentId: "dpl_1", idOrName: "prj_1", teamId: "team_1", }) }) ``` ## Input * `canaryDeploymentId`: the deployment to promote to all production traffic. * `idOrName`: the Vercel project ID or name. * `teamId`: the owning team ID when the project belongs to a team. ## Output Returns `{ rollingRelease }`. Read `result.rollingRelease` for Vercel's completed rolling-release document; it is `null` when no rolling release exists. ## Provider behavior This action requires a Vercel access-token connection. It changes production traffic and is not replay-safe. Vercel rejects deployments that do not match the project's active rolling release. # Create custom environment Source: https://docs.automate.ax/reference/integrations/vercel/actions/create-custom-environment Creates a custom deployment environment for one project. `vercel.createCustomEnvironment` creates a custom deployment environment for one project. ```ts automations/create-custom-environment.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Create custom environment", () => { vercel.createCustomEnvironment({ project: "prj_1", slug: "staging", teamId: "team_1", }) }) ``` ## Input * `project`: included in the runnable example and checked by the callable's TypeScript contract. * `slug`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed Vercel resource created by the operation, including its provider ID when Vercel supplies one. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Create deployment Source: https://docs.automate.ax/reference/integrations/vercel/actions/create-deployment Create a Git-backed Vercel deployment or redeploy a build. `vercel.createDeployment` starts a build from Git or an existing deployment. ```ts automations/create-vercel-deployment.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Deploy Vercel project", () => { const deployment = vercel.createDeployment({ gitSource: { ref: "main", repoId: 123456, type: "github" }, name: "docs-site", project: "prj_123", target: "production", }) // Use deployment.id in Vercel promotion or rollback actions. }) ``` The action requires `name` and either `gitSource` or `deploymentId`. Git sources support GitHub repository IDs, GitLab project IDs, and Bitbucket repository UUIDs with a ref and an optional exact commit `SHA`. `deploymentId` redeploys a build. `withLatestCommit` defaults to `false`. Other inputs are `project`, `target`, `customEnvironment`, `metadata`, `forceNew`, and `skipAutoDetectionConfirmation`. Returns Vercel's full created-deployment response. # Create deployment check Source: https://docs.automate.ax/reference/integrations/vercel/actions/create-deployment-check Creates a named check for one deployment. `vercel.createDeploymentCheck` creates a named check for one deployment. ```ts automations/create-deployment-check.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Create deployment check", () => { vercel.createDeploymentCheck({ deploymentId: "dpl_1", requestBody: { blocking: true, name: "Automate.ax", }, teamId: "team_1", }) }) ``` ## Input * `deploymentId`: included in the runnable example and checked by the callable's TypeScript contract. * `requestBody`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed Vercel resource created by the operation, including its provider ID when Vercel supplies one. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Create dns record Source: https://docs.automate.ax/reference/integrations/vercel/actions/create-dns-record Creates one DNS record for an account-level domain. `vercel.createDnsRecord` creates one DNS record for an account-level domain. ```ts automations/create-dns-record.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Create dns record", () => { vercel.createDnsRecord({ domain: "example.com", requestBody: { name: "www", type: "CNAME", value: "example.com", }, teamId: "team_1", }) }) ``` ## Input * `domain`: included in the runnable example and checked by the callable's TypeScript contract. * `requestBody`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed Vercel resource created by the operation, including its provider ID when Vercel supplies one. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Create drain Source: https://docs.automate.ax/reference/integrations/vercel/actions/create-drain Creates a drain with filters and a delivery destination. `vercel.createDrain` creates a drain with filters and a delivery destination. ```ts automations/create-drain.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Create drain", () => { vercel.createDrain({ name: "Automate.ax logs", projects: "all", schemas: { log: { version: "1" }, }, teamId: "team_1", }) }) ``` ## Input * `name`: the drain name shown in Vercel. * `projects`: `"all"` or `"some"`. When you choose `"some"`, pass the selected Vercel project IDs in `projectIds`. * `schemas`: schema versions keyed by event family, such as `log`, `trace`, or `analytics`. * `teamId`: the target team. OAuth connections default to the team where the integration is installed. You can also set Vercel's typed `delivery`, `filter`, `sampling`, `source`, and `transforms` options. ## Output Returns the created Vercel drain, including its ID, status, schemas, delivery configuration, and source. ## Provider behavior You can use an OAuth or access-token Vercel connection. This action creates provider state, so Automate.ax does not treat it as replay-safe. Vercel rejects unsupported schema, delivery, and project combinations. # Create feature flag Source: https://docs.automate.ax/reference/integrations/vercel/actions/create-feature-flag Creates a feature flag in one project. `vercel.createFeatureFlag` creates a feature flag in one project. ```ts automations/create-feature-flag.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Create feature flag", () => { vercel.createFeatureFlag({ projectIdOrName: "prj_1", teamId: "team_1", }) }) ``` ## Input * `projectIdOrName`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed Vercel resource created by the operation, including its provider ID when Vercel supplies one. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Create feature flag segment Source: https://docs.automate.ax/reference/integrations/vercel/actions/create-feature-flag-segment Creates a reusable feature flag segment. `vercel.createFeatureFlagSegment` creates a reusable feature flag segment. ```ts automations/create-feature-flag-segment.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Create feature flag segment", () => { vercel.createFeatureFlagSegment({ projectIdOrName: "prj_1", teamId: "team_1", }) }) ``` ## Input * `projectIdOrName`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed Vercel resource created by the operation, including its provider ID when Vercel supplies one. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Create global config Source: https://docs.automate.ax/reference/integrations/vercel/actions/create-global-config Creates a Global Config store with optional initial items. `vercel.createGlobalConfig` creates a Global Config store with optional initial items. ```ts automations/create-global-config.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Create global config", () => { vercel.createGlobalConfig({ requestBody: { slug: "runtime", }, teamId: "team_1", }) }) ``` ## Input * `requestBody`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed Vercel resource created by the operation, including its provider ID when Vercel supplies one. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Create global config token Source: https://docs.automate.ax/reference/integrations/vercel/actions/create-global-config-token Creates a token and returns its secret once. `vercel.createGlobalConfigToken` creates a token and returns its secret once. ```ts automations/create-global-config-token.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Create global config token", () => { vercel.createGlobalConfigToken({ edgeConfigId: "ecfg_1", teamId: "team_1", }) }) ``` ## Input * `edgeConfigId`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed Vercel resource created by the operation, including its provider ID when Vercel supplies one. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Create project Source: https://docs.automate.ax/reference/integrations/vercel/actions/create-project Create a Vercel project with common build settings. `vercel.createProject` creates a project with optional build settings. ```ts automations/create-vercel-project.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Create Vercel project", () => { vercel.createProject({ name: "docs-site", settings: { framework: "nextjs", rootDirectory: "apps/docs" }, }) }) ``` The action requires `name`. `settings` defaults to `{}` and supports Vercel's framework enum, build/dev/install commands, output and root directories, serverless region, preview-deployment behavior, affected-project detection, and preview/production toolbar settings. Optional `teamId` overrides the OAuth installation team. Returns Vercel's full created-project response. # Create project environment variable Source: https://docs.automate.ax/reference/integrations/vercel/actions/create-project-environment-variable Create or upsert a Vercel project environment variable. `vercel.createProjectEnvironmentVariable` creates one variable on a project. ```ts automations/create-vercel-env.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Configure Vercel project", () => { vercel.createProjectEnvironmentVariable({ key: "API_URL", project: "docs-site", targets: ["production", "preview"], upsert: true, value: "https://api.example.com", }) }) ``` The action requires `project`, `key`, and `value`. `type` defaults to Vercel's recommended `"encrypted"`. `targets` defaults to production, preview, and development. `upsert` defaults to `false`. Optional `gitBranch` and `customEnvironmentIds` narrow placement. `comment` adds context. The output contains Vercel's `created` variables. # Create shared environment variable Source: https://docs.automate.ax/reference/integrations/vercel/actions/create-shared-environment-variable Creates one environment variable shared by a Vercel team. `vercel.createSharedEnvironmentVariable` creates one environment variable shared by a Vercel team. ```ts automations/create-shared-environment-variable.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Create shared environment variable", () => { vercel.createSharedEnvironmentVariable({ key: "SHARED_KEY", teamId: "team_1", value: "secret", }) }) ``` ## Input * `key`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. * `value`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed Vercel resource created by the operation, including its provider ID when Vercel supplies one. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Delete alias Source: https://docs.automate.ax/reference/integrations/vercel/actions/delete-alias Deletes one deployment alias by hostname or ID. `vercel.deleteAlias` deletes one deployment alias by hostname or ID. ```ts automations/delete-alias.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Delete alias", () => { vercel.deleteAlias({ alias: "app.example.com", teamId: "team_1", }) }) ``` ## Input * `alias`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns Vercel's typed deletion result after the provider accepts the operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Delete custom environment Source: https://docs.automate.ax/reference/integrations/vercel/actions/delete-custom-environment Deletes one custom deployment environment. `vercel.deleteCustomEnvironment` deletes one custom deployment environment. ```ts automations/delete-custom-environment.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Delete custom environment", () => { vercel.deleteCustomEnvironment({ environment: "env_custom_1", project: "prj_1", teamId: "team_1", }) }) ``` ## Input * `environment`: included in the runnable example and checked by the callable's TypeScript contract. * `project`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns Vercel's typed deletion result after the provider accepts the operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Delete deployment Source: https://docs.automate.ax/reference/integrations/vercel/actions/delete-deployment Permanently deletes one deployment by ID. `vercel.deleteDeployment` permanently deletes one deployment by ID. ```ts automations/delete-deployment.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Delete deployment", () => { vercel.deleteDeployment({ deploymentId: "dpl_1", teamId: "team_1", }) }) ``` ## Input * `deploymentId`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns Vercel's typed deletion result after the provider accepts the operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Delete dns record Source: https://docs.automate.ax/reference/integrations/vercel/actions/delete-dns-record Deletes one DNS record by ID. `vercel.deleteDnsRecord` deletes one DNS record by ID. ```ts automations/delete-dns-record.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Delete dns record", () => { vercel.deleteDnsRecord({ domain: "example.com", recordId: "rec_1", teamId: "team_1", }) }) ``` ## Input * `domain`: included in the runnable example and checked by the callable's TypeScript contract. * `recordId`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns Vercel's typed deletion result after the provider accepts the operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Delete domain Source: https://docs.automate.ax/reference/integrations/vercel/actions/delete-domain Removes one domain from the selected account or team. `vercel.deleteDomain` removes one domain from the selected account or team. ```ts automations/delete-domain.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Delete domain", () => { vercel.deleteDomain({ domain: "example.com", teamId: "team_1", }) }) ``` ## Input * `domain`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns Vercel's typed deletion result after the provider accepts the operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Delete drain Source: https://docs.automate.ax/reference/integrations/vercel/actions/delete-drain Permanently deletes one drain. `vercel.deleteDrain` permanently deletes one drain. ```ts automations/delete-drain.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Delete drain", () => { vercel.deleteDrain({ id: "drain_1", teamId: "team_1", }) }) ``` ## Input * `id`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns Vercel's typed deletion result after the provider accepts the operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Delete feature flag Source: https://docs.automate.ax/reference/integrations/vercel/actions/delete-feature-flag Deletes one feature flag. `vercel.deleteFeatureFlag` deletes one feature flag. ```ts automations/delete-feature-flag.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Delete feature flag", () => { vercel.deleteFeatureFlag({ flagIdOrSlug: "flag_1", projectIdOrName: "prj_1", teamId: "team_1", }) }) ``` ## Input * `flagIdOrSlug`: included in the runnable example and checked by the callable's TypeScript contract. * `projectIdOrName`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns Vercel's typed deletion result after the provider accepts the operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Delete feature flag segment Source: https://docs.automate.ax/reference/integrations/vercel/actions/delete-feature-flag-segment Deletes one feature flag segment. `vercel.deleteFeatureFlagSegment` deletes one feature flag segment. ```ts automations/delete-feature-flag-segment.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Delete feature flag segment", () => { vercel.deleteFeatureFlagSegment({ projectIdOrName: "prj_1", segmentIdOrSlug: "segment_1", teamId: "team_1", }) }) ``` ## Input * `projectIdOrName`: included in the runnable example and checked by the callable's TypeScript contract. * `segmentIdOrSlug`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns Vercel's typed deletion result after the provider accepts the operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Delete global config Source: https://docs.automate.ax/reference/integrations/vercel/actions/delete-global-config Permanently deletes one Global Config store. `vercel.deleteGlobalConfig` permanently deletes one Global Config store. ```ts automations/delete-global-config.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Delete global config", () => { vercel.deleteGlobalConfig({ edgeConfigId: "ecfg_1", teamId: "team_1", }) }) ``` ## Input * `edgeConfigId`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns Vercel's typed deletion result after the provider accepts the operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Delete global config tokens Source: https://docs.automate.ax/reference/integrations/vercel/actions/delete-global-config-tokens Deletes selected tokens from one Global Config. `vercel.deleteGlobalConfigTokens` deletes selected tokens from one Global Config. ```ts automations/delete-global-config-tokens.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Delete global config tokens", () => { vercel.deleteGlobalConfigTokens({ edgeConfigId: "ecfg_1", teamId: "team_1", }) }) ``` ## Input * `edgeConfigId`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns Vercel's typed deletion result after the provider accepts the operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Delete project Source: https://docs.automate.ax/reference/integrations/vercel/actions/delete-project Permanently delete a Vercel project. `vercel.deleteProject` permanently deletes a project by ID or name. ```ts automations/delete-vercel-project.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Delete Vercel project", () => { vercel.deleteProject({ project: "temporary-preview" }) }) ``` The action requires `project`. Optional `teamId` overrides the OAuth installation team, and second argument `{ account }` selects the binding. Returns no value. Vercel deletes the project, its deployments, and its project-level configuration. The API can't undo this. # Delete project environment variable Source: https://docs.automate.ax/reference/integrations/vercel/actions/delete-project-environment-variable Delete one Vercel project environment variable. `vercel.deleteProjectEnvironmentVariable` removes a variable by its Vercel ID. ```ts automations/delete-vercel-env.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Remove Vercel environment variable", () => { vercel.deleteProjectEnvironmentVariable({ environmentVariableId: "env_123", project: "docs-site", }) }) ``` The action requires `project` and `environmentVariableId`. Optional `customEnvironmentId` restricts deletion to one custom environment. `teamId` overrides the OAuth installation team. Returns Vercel's removal response, whose shape varies when one variable belongs to several environments. # Delete rolling release configuration Source: https://docs.automate.ax/reference/integrations/vercel/actions/delete-rolling-release-configuration Disables rolling releases for future deployments. `vercel.deleteRollingReleaseConfiguration` disables rolling releases for future deployments. ```ts automations/delete-rolling-release-configuration.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Delete rolling release configuration", () => { vercel.deleteRollingReleaseConfiguration({ idOrName: "prj_1", teamId: "team_1", }) }) ``` ## Input * `idOrName`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns Vercel's typed deletion result after the provider accepts the operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Delete shared environment variables Source: https://docs.automate.ax/reference/integrations/vercel/actions/delete-shared-environment-variables Deletes one or more shared environment variables. `vercel.deleteSharedEnvironmentVariables` deletes one or more shared environment variables. ```ts automations/delete-shared-environment-variables.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Delete shared environment variables", () => { vercel.deleteSharedEnvironmentVariables({ environmentVariableIds: ["env_shared_1"], teamId: "team_1", }) }) ``` ## Input * `environmentVariableIds`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns Vercel's typed deletion result after the provider accepts the operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Disconnect shared environment variable Source: https://docs.automate.ax/reference/integrations/vercel/actions/disconnect-shared-environment-variable Disconnects one shared environment variable from one project. `vercel.disconnectSharedEnvironmentVariable` disconnects one shared environment variable from one project. ```ts automations/disconnect-shared-environment-variable.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Disconnect shared environment variable", () => { vercel.disconnectSharedEnvironmentVariable({ environmentVariableId: "env_shared_1", projectId: "prj_1", teamId: "team_1", }) }) ``` ## Input * `environmentVariableId`: included in the runnable example and checked by the callable's TypeScript contract. * `projectId`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns Vercel's typed deletion result after the provider accepts the operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Get alias Source: https://docs.automate.ax/reference/integrations/vercel/actions/get-alias Gets one deployment alias by hostname or ID. `vercel.getAlias` gets one deployment alias by hostname or ID. ```ts automations/get-alias.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Get alias", () => { vercel.getAlias({ alias: "app.example.com", teamId: "team_1", }) }) ``` ## Input * `alias`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed response from the corresponding Vercel operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Get current user Source: https://docs.automate.ax/reference/integrations/vercel/actions/get-current-user Get the user represented by a connected Vercel account. `vercel.getCurrentUser` returns the connected Vercel user. ```ts automations/get-vercel-user.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Get Vercel user", () => { const current = vercel.getCurrentUser() // Use current.user.id to match Vercel team memberships. }) ``` The action has no schema input fields. Optional second argument `{ account }` defaults to the project binding. Returns Vercel's full `user` object with the identity, profile, and account fields available to the token. # Get custom environment Source: https://docs.automate.ax/reference/integrations/vercel/actions/get-custom-environment Gets one custom deployment environment by ID or slug. `vercel.getCustomEnvironment` gets one custom deployment environment by ID or slug. ```ts automations/get-custom-environment.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Get custom environment", () => { vercel.getCustomEnvironment({ environment: "env_custom_1", project: "prj_1", teamId: "team_1", }) }) ``` ## Input * `environment`: included in the runnable example and checked by the callable's TypeScript contract. * `project`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed response from the corresponding Vercel operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Get deployment Source: https://docs.automate.ax/reference/integrations/vercel/actions/get-deployment Get one Vercel deployment by ID or hostname. `vercel.getDeployment` gets one deployment. ```ts automations/get-vercel-deployment.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Inspect Vercel deployment", () => { vercel.getDeployment({ deployment: "dpl_123", includeGitRepository: true, }) }) ``` `deployment` accepts an ID or hostname. `includeGitRepository` defaults to `false`. Enable it for connected repository, branch, and commit metadata. Optional `teamId` overrides the OAuth installation team. Returns Vercel's full deployment object. # Get deployment check Source: https://docs.automate.ax/reference/integrations/vercel/actions/get-deployment-check Gets complete information for one deployment check. `vercel.getDeploymentCheck` gets complete information for one deployment check. ```ts automations/get-deployment-check.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Get deployment check", () => { vercel.getDeploymentCheck({ checkId: "check_1", deploymentId: "dpl_1", teamId: "team_1", }) }) ``` ## Input * `checkId`: included in the runnable example and checked by the callable's TypeScript contract. * `deploymentId`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed response from the corresponding Vercel operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Get deployment events Source: https://docs.automate.ax/reference/integrations/vercel/actions/get-deployment-events Gets a bounded page of build events and logs for one deployment. `vercel.getDeploymentEvents` gets a bounded page of build events and logs for one deployment. ```ts automations/get-deployment-events.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Get deployment events", () => { vercel.getDeploymentEvents({ deployment: "dpl_1", teamId: "team_1", }) }) ``` ## Input * `deployment`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed response from the corresponding Vercel operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Get domain Source: https://docs.automate.ax/reference/integrations/vercel/actions/get-domain Gets ownership and renewal metadata for one domain. `vercel.getDomain` gets ownership and renewal metadata for one domain. ```ts automations/get-domain.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Get domain", () => { vercel.getDomain({ domain: "example.com", teamId: "team_1", }) }) ``` ## Input * `domain`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed response from the corresponding Vercel operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Get domain configuration Source: https://docs.automate.ax/reference/integrations/vercel/actions/get-domain-configuration Gets nameserver and DNS configuration status for one domain. `vercel.getDomainConfiguration` gets nameserver and DNS configuration status for one domain. ```ts automations/get-domain-configuration.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Get domain configuration", () => { vercel.getDomainConfiguration({ domain: "example.com", teamId: "team_1", }) }) ``` ## Input * `domain`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed response from the corresponding Vercel operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Get drain Source: https://docs.automate.ax/reference/integrations/vercel/actions/get-drain Gets the configuration and status of one drain. `vercel.getDrain` gets the configuration and status of one drain. ```ts automations/get-drain.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Get drain", () => { vercel.getDrain({ id: "drain_1", teamId: "team_1", }) }) ``` ## Input * `id`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed response from the corresponding Vercel operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Get feature flag Source: https://docs.automate.ax/reference/integrations/vercel/actions/get-feature-flag Gets one feature flag by ID or slug. `vercel.getFeatureFlag` gets one feature flag by ID or slug. ```ts automations/get-feature-flag.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Get feature flag", () => { vercel.getFeatureFlag({ flagIdOrSlug: "flag_1", projectIdOrName: "prj_1", teamId: "team_1", }) }) ``` ## Input * `flagIdOrSlug`: included in the runnable example and checked by the callable's TypeScript contract. * `projectIdOrName`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed response from the corresponding Vercel operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Get feature flag segment Source: https://docs.automate.ax/reference/integrations/vercel/actions/get-feature-flag-segment Gets one feature flag segment. `vercel.getFeatureFlagSegment` gets one feature flag segment. ```ts automations/get-feature-flag-segment.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Get feature flag segment", () => { vercel.getFeatureFlagSegment({ projectIdOrName: "prj_1", segmentIdOrSlug: "segment_1", teamId: "team_1", }) }) ``` ## Input * `projectIdOrName`: included in the runnable example and checked by the callable's TypeScript contract. * `segmentIdOrSlug`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed response from the corresponding Vercel operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Get feature flag settings Source: https://docs.automate.ax/reference/integrations/vercel/actions/get-feature-flag-settings Gets project settings for one feature flag. `vercel.getFeatureFlagSettings` gets project settings for one feature flag. ```ts automations/get-feature-flag-settings.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Get feature flag settings", () => { vercel.getFeatureFlagSettings({ projectIdOrName: "prj_1", teamId: "team_1", }) }) ``` ## Input * `projectIdOrName`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed response from the corresponding Vercel operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Get global config Source: https://docs.automate.ax/reference/integrations/vercel/actions/get-global-config Gets metadata for one Global Config store. `vercel.getGlobalConfig` gets metadata for one Global Config store. ```ts automations/get-global-config.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Get global config", () => { vercel.getGlobalConfig({ edgeConfigId: "ecfg_1", teamId: "team_1", }) }) ``` ## Input * `edgeConfigId`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed response from the corresponding Vercel operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Get global config item Source: https://docs.automate.ax/reference/integrations/vercel/actions/get-global-config-item Gets one Global Config item by key. `vercel.getGlobalConfigItem` gets one Global Config item by key. ```ts automations/get-global-config-item.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Get global config item", () => { vercel.getGlobalConfigItem({ edgeConfigId: "ecfg_1", edgeConfigItemKey: "apiUrl", teamId: "team_1", }) }) ``` ## Input * `edgeConfigId`: included in the runnable example and checked by the callable's TypeScript contract. * `edgeConfigItemKey`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed response from the corresponding Vercel operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Get integration configuration Source: https://docs.automate.ax/reference/integrations/vercel/actions/get-integration-configuration Gets one integration installation and its granted resources. `vercel.getIntegrationConfiguration` gets one integration installation and its granted resources. ```ts automations/get-integration-configuration.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Get integration configuration", () => { vercel.getIntegrationConfiguration({ configurationId: "icfg_1", teamId: "team_1", }) }) ``` ## Input * `configurationId`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed response from the corresponding Vercel operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Get project Source: https://docs.automate.ax/reference/integrations/vercel/actions/get-project Get a Vercel project's settings by ID or name. `vercel.getProject` gets one project using its stable ID or current name. ```ts automations/get-vercel-project.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Get Vercel project", () => { const project = vercel.getProject({ project: "automate-ax" }) // Use project.id in Vercel actions that require a project ID. }) ``` The action requires `project`. Optional `teamId` overrides the OAuth installation team, and second argument `{ account }` selects the binding. Returns Vercel's full project object, including build, deployment, domain, environment, Git, and security settings available to the token. # Get project domain Source: https://docs.automate.ax/reference/integrations/vercel/actions/get-project-domain Gets one project domain and its verification state. `vercel.getProjectDomain` gets one project domain and its verification state. ```ts automations/get-project-domain.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Get project domain", () => { vercel.getProjectDomain({ domain: "app.example.com", project: "prj_1", teamId: "team_1", }) }) ``` ## Input * `domain`: included in the runnable example and checked by the callable's TypeScript contract. * `project`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed response from the corresponding Vercel operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Get rolling release Source: https://docs.automate.ax/reference/integrations/vercel/actions/get-rolling-release Gets the active, completed, or aborted rollout for a project. `vercel.getRollingRelease` gets the active, completed, or aborted rollout for a project. ```ts automations/get-rolling-release.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Get rolling release", () => { vercel.getRollingRelease({ idOrName: "prj_1", teamId: "team_1", }) }) ``` ## Input * `idOrName`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed response from the corresponding Vercel operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Get rolling release configuration Source: https://docs.automate.ax/reference/integrations/vercel/actions/get-rolling-release-configuration Gets the template used by future production rollouts. `vercel.getRollingReleaseConfiguration` gets the template used by future production rollouts. ```ts automations/get-rolling-release-configuration.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Get rolling release configuration", () => { vercel.getRollingReleaseConfiguration({ idOrName: "prj_1", teamId: "team_1", }) }) ``` ## Input * `idOrName`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed response from the corresponding Vercel operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Get runtime logs Source: https://docs.automate.ax/reference/integrations/vercel/actions/get-runtime-logs Gets runtime log data for one deployment. `vercel.getRuntimeLogs` gets runtime log data for one deployment. ```ts automations/get-runtime-logs.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Get runtime logs", () => { vercel.getRuntimeLogs({ deploymentId: "dpl_1", projectId: "prj_1", teamId: "team_1", }) }) ``` ## Input * `deploymentId`: included in the runnable example and checked by the callable's TypeScript contract. * `projectId`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed response from the corresponding Vercel operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Get team Source: https://docs.automate.ax/reference/integrations/vercel/actions/get-team Get one Vercel team by ID. `vercel.getTeam` gets a team. OAuth accounts default to the team selected during installation. ```ts automations/get-vercel-team.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Get Vercel team", () => { const team = vercel.getTeam() // Use team.slug when displaying the Vercel team. }) ``` Pass `teamId` with an access token or to override the OAuth installation team. Personal-scope accounts without `teamId` fail because this endpoint is team-only. Returns Vercel's full team object. # Invalidate edge cache by source images Source: https://docs.automate.ax/reference/integrations/vercel/actions/invalidate-edge-cache-by-source-images Marks transformed images for the selected sources as stale. `vercel.invalidateEdgeCacheBySourceImages` marks transformed images for the selected sources as stale. ```ts automations/invalidate-edge-cache-by-source-images.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Invalidate edge cache by source images", () => { vercel.invalidateEdgeCacheBySourceImages({ project: "prj_1", sourceImages: ["https://example.com/image.png"], teamId: "team_1", }) }) ``` ## Input * `project`: included in the runnable example and checked by the callable's TypeScript contract. * `sourceImages`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed response from the corresponding Vercel operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Invalidate edge cache by tags Source: https://docs.automate.ax/reference/integrations/vercel/actions/invalidate-edge-cache-by-tags Marks cache entries with the selected tags as stale. `vercel.invalidateEdgeCacheByTags` marks cache entries with the selected tags as stale. ```ts automations/invalidate-edge-cache-by-tags.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Invalidate edge cache by tags", () => { vercel.invalidateEdgeCacheByTags({ project: "prj_1", tags: ["catalog"], teamId: "team_1", }) }) ``` ## Input * `project`: included in the runnable example and checked by the callable's TypeScript contract. * `tags`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed response from the corresponding Vercel operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # List aliases Source: https://docs.automate.ax/reference/integrations/vercel/actions/list-aliases Lists a filtered page of deployment aliases. `vercel.listAliases` lists a filtered page of deployment aliases. ```ts automations/list-aliases.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("List aliases", () => { vercel.listAliases({ projectId: "prj_1", teamId: "team_1", }) }) ``` ## Input * `projectId`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns Vercel's typed collection response. Pagination metadata is included when the endpoint paginates. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # List custom environments Source: https://docs.automate.ax/reference/integrations/vercel/actions/list-custom-environments Lists custom deployment environments for one project. `vercel.listCustomEnvironments` lists custom deployment environments for one project. ```ts automations/list-custom-environments.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("List custom environments", () => { vercel.listCustomEnvironments({ project: "prj_1", teamId: "team_1", }) }) ``` ## Input * `project`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns Vercel's typed collection response. Pagination metadata is included when the endpoint paginates. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # List deployment aliases Source: https://docs.automate.ax/reference/integrations/vercel/actions/list-deployment-aliases Lists aliases currently assigned to one deployment. `vercel.listDeploymentAliases` lists aliases currently assigned to one deployment. ```ts automations/list-deployment-aliases.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("List deployment aliases", () => { vercel.listDeploymentAliases({ deploymentId: "dpl_1", teamId: "team_1", }) }) ``` ## Input * `deploymentId`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns Vercel's typed collection response. Pagination metadata is included when the endpoint paginates. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # List deployment checks Source: https://docs.automate.ax/reference/integrations/vercel/actions/list-deployment-checks Lists every check attached to one deployment. `vercel.listDeploymentChecks` lists every check attached to one deployment. ```ts automations/list-deployment-checks.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("List deployment checks", () => { vercel.listDeploymentChecks({ deploymentId: "dpl_1", teamId: "team_1", }) }) ``` ## Input * `deploymentId`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns Vercel's typed collection response. Pagination metadata is included when the endpoint paginates. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # List deployment files Source: https://docs.automate.ax/reference/integrations/vercel/actions/list-deployment-files Lists file-tree metadata for one deployment. `vercel.listDeploymentFiles` lists file-tree metadata for one deployment. ```ts automations/list-deployment-files.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("List deployment files", () => { vercel.listDeploymentFiles({ deploymentId: "dpl_1", teamId: "team_1", }) }) ``` ## Input * `deploymentId`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns Vercel's typed collection response. Pagination metadata is included when the endpoint paginates. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # List deployments Source: https://docs.automate.ax/reference/integrations/vercel/actions/list-deployments List Vercel deployments with project, state, branch, and time filters. `vercel.listDeployments` returns deployments from a personal account or team. ```ts automations/list-vercel-deployments.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("List failed Vercel deployments", () => { const page = vercel.listDeployments({ limit: 50, projectId: "prj_123", state: "ERROR", }) // Pass page.deployments to each() to process the matching deployments. }) ``` `limit` defaults to `20` and accepts 1–100. Filter by `projectId`, `state`, `branch`, `sha`, `target`, or the `until` millisecond timestamp. Optional `teamId` overrides the OAuth installation team. The output contains `deployments` and `pagination`. # List dns records Source: https://docs.automate.ax/reference/integrations/vercel/actions/list-dns-records Lists DNS records for one account-level domain. `vercel.listDnsRecords` lists DNS records for one account-level domain. ```ts automations/list-dns-records.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("List dns records", () => { vercel.listDnsRecords({ domain: "example.com", teamId: "team_1", }) }) ``` ## Input * `domain`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns Vercel's typed collection response. Pagination metadata is included when the endpoint paginates. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # List domains Source: https://docs.automate.ax/reference/integrations/vercel/actions/list-domains Lists account-level domains with pagination and search. `vercel.listDomains` lists account-level domains with pagination and search. ```ts automations/list-domains.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("List domains", () => { vercel.listDomains({ teamId: "team_1", }) }) ``` ## Input * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns Vercel's typed collection response. Pagination metadata is included when the endpoint paginates. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # List drains Source: https://docs.automate.ax/reference/integrations/vercel/actions/list-drains Lists drains in the selected account or team. `vercel.listDrains` lists drains in the selected account or team. ```ts automations/list-drains.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("List drains", () => { vercel.listDrains({ teamId: "team_1", }) }) ``` ## Input * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns Vercel's typed collection response. Pagination metadata is included when the endpoint paginates. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # List feature flag segments Source: https://docs.automate.ax/reference/integrations/vercel/actions/list-feature-flag-segments Lists segments for one Vercel project. `vercel.listFeatureFlagSegments` lists segments for one Vercel project. ```ts automations/list-feature-flag-segments.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("List feature flag segments", () => { vercel.listFeatureFlagSegments({ projectIdOrName: "prj_1", teamId: "team_1", }) }) ``` ## Input * `projectIdOrName`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns Vercel's typed collection response. Pagination metadata is included when the endpoint paginates. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # List feature flag versions Source: https://docs.automate.ax/reference/integrations/vercel/actions/list-feature-flag-versions Lists the version history of one feature flag. `vercel.listFeatureFlagVersions` lists the version history of one feature flag. ```ts automations/list-feature-flag-versions.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("List feature flag versions", () => { vercel.listFeatureFlagVersions({ flagIdOrSlug: "flag_1", projectIdOrName: "prj_1", teamId: "team_1", }) }) ``` ## Input * `flagIdOrSlug`: included in the runnable example and checked by the callable's TypeScript contract. * `projectIdOrName`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns Vercel's typed collection response. Pagination metadata is included when the endpoint paginates. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # List feature flags Source: https://docs.automate.ax/reference/integrations/vercel/actions/list-feature-flags Lists feature flags for one Vercel project. `vercel.listFeatureFlags` lists feature flags for one Vercel project. ```ts automations/list-feature-flags.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("List feature flags", () => { vercel.listFeatureFlags({ projectIdOrName: "prj_1", teamId: "team_1", }) }) ``` ## Input * `projectIdOrName`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns Vercel's typed collection response. Pagination metadata is included when the endpoint paginates. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # List global config items Source: https://docs.automate.ax/reference/integrations/vercel/actions/list-global-config-items Lists the key-value items stored in one Global Config. `vercel.listGlobalConfigItems` lists the key-value items stored in one Global Config. ```ts automations/list-global-config-items.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("List global config items", () => { vercel.listGlobalConfigItems({ edgeConfigId: "ecfg_1", teamId: "team_1", }) }) ``` ## Input * `edgeConfigId`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns Vercel's typed collection response. Pagination metadata is included when the endpoint paginates. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # List global config tokens Source: https://docs.automate.ax/reference/integrations/vercel/actions/list-global-config-tokens Lists masked tokens for one Global Config. `vercel.listGlobalConfigTokens` lists masked tokens for one Global Config. ```ts automations/list-global-config-tokens.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("List global config tokens", () => { vercel.listGlobalConfigTokens({ edgeConfigId: "ecfg_1", teamId: "team_1", }) }) ``` ## Input * `edgeConfigId`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns Vercel's typed collection response. Pagination metadata is included when the endpoint paginates. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # List global configs Source: https://docs.automate.ax/reference/integrations/vercel/actions/list-global-configs Lists Global Config stores in the selected account or team. `vercel.listGlobalConfigs` lists Global Config stores in the selected account or team. ```ts automations/list-global-configs.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("List global configs", () => { vercel.listGlobalConfigs({ teamId: "team_1", }) }) ``` ## Input * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns Vercel's typed collection response. Pagination metadata is included when the endpoint paginates. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # List integration configurations Source: https://docs.automate.ax/reference/integrations/vercel/actions/list-integration-configurations Lists external or Marketplace integration installations. `vercel.listIntegrationConfigurations` lists external or Marketplace integration installations. ```ts automations/list-integration-configurations.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("List integration configurations", () => { vercel.listIntegrationConfigurations({ teamId: "team_1", }) }) ``` ## Input * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns Vercel's typed collection response. Pagination metadata is included when the endpoint paginates. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # List project domains Source: https://docs.automate.ax/reference/integrations/vercel/actions/list-project-domains List domains connected to one Vercel project. `vercel.listProjectDomains` filters project domains by deployment target. ```ts automations/list-vercel-domains.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("List Vercel production domains", () => { const page = vercel.listProjectDomains({ project: "docs-site", target: "production", verified: true, }) // Pass page.domains to each() to inspect every matching Vercel domain. }) ``` The action requires `project`. `limit` defaults to `20` and accepts 1–100. `order` defaults to newest first with `"DESC"`. Optional `target`, `verified`, `gitBranch`, and `customEnvironmentId` filter results. The output contains `domains` and `pagination`. # List project environment variables Source: https://docs.automate.ax/reference/integrations/vercel/actions/list-project-environment-variables List Vercel project environment variables visible to an integration. `vercel.listProjectEnvironmentVariables` lists variables for one project. ```ts automations/list-vercel-env.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("List Vercel environment variables", () => { const variables = vercel.listProjectEnvironmentVariables({ project: "docs-site", }) variables }) ``` `project` is the project ID or name. Optional `gitBranch` filters preview variables and `customEnvironmentId` filters a custom environment. `teamId` overrides the OAuth installation team. OAuth integrations normally see only their own variables unless granted global project-environment-variable access. Returns Vercel's response. # List projects Source: https://docs.automate.ax/reference/integrations/vercel/actions/list-projects List and search Vercel projects. `vercel.listProjects` returns projects from a personal account or team. ```ts automations/list-vercel-projects.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Find Vercel projects", () => { vercel.listProjects({ limit: 50, search: "docs" }) }) ``` `limit` defaults to `20` and accepts 1–100. `from` accepts Vercel's continuation token. `search` filters names, and `repository` filters a provider repository path or URL. `teamId` overrides the OAuth installation team. The output contains `projects` and `pagination`. # List shared environment variables Source: https://docs.automate.ax/reference/integrations/vercel/actions/list-shared-environment-variables Lists shared environment-variable metadata for a Vercel team. `vercel.listSharedEnvironmentVariables` lists shared environment-variable metadata for a Vercel team. ```ts automations/list-shared-environment-variables.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("List shared environment variables", () => { vercel.listSharedEnvironmentVariables({ teamId: "team_1", }) }) ``` ## Input * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns Vercel's typed collection response. Pagination metadata is included when the endpoint paginates. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # List team feature flags Source: https://docs.automate.ax/reference/integrations/vercel/actions/list-team-feature-flags Lists feature flags across a Vercel team. `vercel.listTeamFeatureFlags` lists feature flags across a Vercel team. ```ts automations/list-team-feature-flags.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("List team feature flags", () => { vercel.listTeamFeatureFlags({ teamId: "team_1", }) }) ``` ## Input * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns Vercel's typed collection response. Pagination metadata is included when the endpoint paginates. Public request and response fields use camelCase. ## Provider behavior This endpoint requires a Vercel access-token connection. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # List team members Source: https://docs.automate.ax/reference/integrations/vercel/actions/list-team-members Lists a filtered page of members in one Vercel team. `vercel.listTeamMembers` lists a filtered page of members in one Vercel team. ```ts automations/list-team-members.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("List team members", () => { vercel.listTeamMembers({ teamId: "team_1", }) }) ``` ## Input * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns Vercel's typed collection response. Pagination metadata is included when the endpoint paginates. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # List teams Source: https://docs.automate.ax/reference/integrations/vercel/actions/list-teams List the connected Vercel user's teams. `vercel.listTeams` returns the connected user's teams. ```ts automations/list-vercel-teams.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("List Vercel teams", () => { const page = vercel.listTeams({ limit: 50 }) // Pass page.teams to each() to process each Vercel team. }) ``` `limit` defaults to `20` and accepts 1–100. Optional millisecond timestamps `since` and `until` filter creation time. Second argument `{ account }` selects the binding. The output contains Vercel's `teams` and `pagination` fields. # Move project domain Source: https://docs.automate.ax/reference/integrations/vercel/actions/move-project-domain Moves one project domain and optionally changes its routing. `vercel.moveProjectDomain` moves one project domain and optionally changes its routing. ```ts automations/move-project-domain.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Move project domain", () => { vercel.moveProjectDomain({ domain: "app.example.com", project: "prj_1", targetProjectId: "prj_2", teamId: "team_1", }) }) ``` ## Input * `domain`: included in the runnable example and checked by the callable's TypeScript contract. * `project`: included in the runnable example and checked by the callable's TypeScript contract. * `targetProjectId`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed Vercel resource or mutation result after the update. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Pause project Source: https://docs.automate.ax/reference/integrations/vercel/actions/pause-project Pauses production and preview deployments for one project. `vercel.pauseProject` pauses production and preview deployments for one project. ```ts automations/pause-project.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Pause project", () => { vercel.pauseProject({ projectId: "prj_1", teamId: "team_1", }) }) ``` ## Input * `projectId`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed response from the corresponding Vercel operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Promote deployment Source: https://docs.automate.ax/reference/integrations/vercel/actions/promote-deployment Point Vercel production traffic to an existing deployment. `vercel.promoteDeployment` promotes an existing deployment without rebuilding it. ```ts automations/promote-vercel-deployment.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Promote Vercel deployment", () => { vercel.promoteDeployment({ deploymentId: "dpl_123", projectId: "prj_123", }) }) ``` The action requires `deploymentId` and its owning `projectId`. Optional `teamId` overrides the OAuth installation team. Returns no value once Vercel accepts the request. Vercel may continue reassigning aliases. # Remove project domain Source: https://docs.automate.ax/reference/integrations/vercel/actions/remove-project-domain Remove a domain from one Vercel project. `vercel.removeProjectDomain` disconnects a project domain. ```ts automations/remove-vercel-domain.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Remove Vercel domain", () => { vercel.removeProjectDomain({ domain: "old.example.com", project: "docs-site", removeRedirects: true, }) }) ``` The action requires `project` and `domain`. `removeRedirects` defaults to `false`. Enable it to remove same-project domains that redirect to this domain. Optional `teamId` overrides the OAuth installation team. Returns an empty object once Vercel accepts the removal. # Rerequest deployment check Source: https://docs.automate.ax/reference/integrations/vercel/actions/rerequest-deployment-check Requests another run of a rerequestable failed check. `vercel.rerequestDeploymentCheck` requests another run of a rerequestable failed check. ```ts automations/rerequest-deployment-check.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Rerequest deployment check", () => { vercel.rerequestDeploymentCheck({ checkId: "check_1", deploymentId: "dpl_1", teamId: "team_1", }) }) ``` ## Input * `checkId`: included in the runnable example and checked by the callable's TypeScript contract. * `deploymentId`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed response from the corresponding Vercel operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Rollback deployment Source: https://docs.automate.ax/reference/integrations/vercel/actions/rollback-deployment Rolls one project back to an earlier deployment. `vercel.rollbackDeployment` rolls one project back to an earlier deployment. ```ts automations/rollback-deployment.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Rollback deployment", () => { vercel.rollbackDeployment({ deploymentId: "dpl_1", projectId: "prj_1", teamId: "team_1", }) }) ``` ## Input * `deploymentId`: included in the runnable example and checked by the callable's TypeScript contract. * `projectId`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed response from the corresponding Vercel operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Start rolling release Source: https://docs.automate.ax/reference/integrations/vercel/actions/start-rolling-release Starts a staged production rollout for one deployment. `vercel.startRollingRelease` starts a staged production rollout for one deployment. ```ts automations/start-rolling-release.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Start rolling release", () => { vercel.startRollingRelease({ canaryDeploymentId: "dpl_1", idOrName: "prj_1", teamId: "team_1", }) }) ``` ## Input * `canaryDeploymentId`: the deployment entering the staged rollout. * `idOrName`: the Vercel project ID or name. * `teamId`: the owning team ID when the project belongs to a team. ## Output Returns `{ rollingRelease }`. Read `result.rollingRelease` for Vercel's current rolling-release document; it is `null` when no rolling release exists. ## Provider behavior This action requires a Vercel access-token connection. It changes production traffic and is not replay-safe. Vercel rejects deployments that cannot start a rolling release for the selected project. # Test drain Source: https://docs.automate.ax/reference/integrations/vercel/actions/test-drain Validates a drain delivery configuration with sample events. `vercel.testDrain` validates a drain delivery configuration with sample events. ```ts automations/test-drain.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Test drain", () => { vercel.testDrain({ teamId: "team_1", }) }) ``` ## Input * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed response from the corresponding Vercel operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax may retry this read safely. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Unpause project Source: https://docs.automate.ax/reference/integrations/vercel/actions/unpause-project Resumes production and preview deployments for one project. `vercel.unpauseProject` resumes production and preview deployments for one project. ```ts automations/unpause-project.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Unpause project", () => { vercel.unpauseProject({ projectId: "prj_1", teamId: "team_1", }) }) ``` ## Input * `projectId`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed response from the corresponding Vercel operation. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Update custom environment Source: https://docs.automate.ax/reference/integrations/vercel/actions/update-custom-environment Updates one custom deployment environment. `vercel.updateCustomEnvironment` updates one custom deployment environment. ```ts automations/update-custom-environment.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Update custom environment", () => { vercel.updateCustomEnvironment({ environment: "env_custom_1", project: "prj_1", slug: "qa", teamId: "team_1", }) }) ``` ## Input * `environment`: included in the runnable example and checked by the callable's TypeScript contract. * `project`: included in the runnable example and checked by the callable's TypeScript contract. * `slug`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed Vercel resource or mutation result after the update. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Update deployment check Source: https://docs.automate.ax/reference/integrations/vercel/actions/update-deployment-check Updates the status, conclusion, or metadata of one check. `vercel.updateDeploymentCheck` updates the status, conclusion, or metadata of one check. ```ts automations/update-deployment-check.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Update deployment check", () => { vercel.updateDeploymentCheck({ checkId: "check_1", deploymentId: "dpl_1", requestBody: { status: "running", }, teamId: "team_1", }) }) ``` ## Input * `checkId`: included in the runnable example and checked by the callable's TypeScript contract. * `deploymentId`: included in the runnable example and checked by the callable's TypeScript contract. * `requestBody`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed Vercel resource or mutation result after the update. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Update dns record Source: https://docs.automate.ax/reference/integrations/vercel/actions/update-dns-record Updates one DNS record by ID. `vercel.updateDnsRecord` updates one DNS record by ID. ```ts automations/update-dns-record.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Update dns record", () => { vercel.updateDnsRecord({ recordId: "rec_1", requestBody: { value: "api.example.com", }, teamId: "team_1", }) }) ``` ## Input * `recordId`: included in the runnable example and checked by the callable's TypeScript contract. * `requestBody`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed Vercel resource or mutation result after the update. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Update drain Source: https://docs.automate.ax/reference/integrations/vercel/actions/update-drain Updates the filters, delivery, or state of one drain. `vercel.updateDrain` updates the filters, delivery, or state of one drain. ```ts automations/update-drain.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Update drain", () => { vercel.updateDrain({ id: "drain_1", teamId: "team_1", }) }) ``` ## Input * `id`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed Vercel resource or mutation result after the update. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Update feature flag Source: https://docs.automate.ax/reference/integrations/vercel/actions/update-feature-flag Updates one feature flag. `vercel.updateFeatureFlag` updates one feature flag. ```ts automations/update-feature-flag.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Update feature flag", () => { vercel.updateFeatureFlag({ flagIdOrSlug: "flag_1", projectIdOrName: "prj_1", teamId: "team_1", }) }) ``` ## Input * `flagIdOrSlug`: included in the runnable example and checked by the callable's TypeScript contract. * `projectIdOrName`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed Vercel resource or mutation result after the update. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Update feature flag segment Source: https://docs.automate.ax/reference/integrations/vercel/actions/update-feature-flag-segment Updates one feature flag segment. `vercel.updateFeatureFlagSegment` updates one feature flag segment. ```ts automations/update-feature-flag-segment.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Update feature flag segment", () => { vercel.updateFeatureFlagSegment({ projectIdOrName: "prj_1", segmentIdOrSlug: "segment_1", teamId: "team_1", }) }) ``` ## Input * `projectIdOrName`: included in the runnable example and checked by the callable's TypeScript contract. * `segmentIdOrSlug`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed Vercel resource or mutation result after the update. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Update feature flag settings Source: https://docs.automate.ax/reference/integrations/vercel/actions/update-feature-flag-settings Updates project settings for one feature flag. `vercel.updateFeatureFlagSettings` updates project settings for one feature flag. ```ts automations/update-feature-flag-settings.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Update feature flag settings", () => { vercel.updateFeatureFlagSettings({ projectIdOrName: "prj_1", teamId: "team_1", }) }) ``` ## Input * `projectIdOrName`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed Vercel resource or mutation result after the update. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Update global config Source: https://docs.automate.ax/reference/integrations/vercel/actions/update-global-config Renames or transfers one Global Config store. `vercel.updateGlobalConfig` renames or transfers one Global Config store. ```ts automations/update-global-config.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Update global config", () => { vercel.updateGlobalConfig({ edgeConfigId: "ecfg_1", teamId: "team_1", }) }) ``` ## Input * `edgeConfigId`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed Vercel resource or mutation result after the update. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Update global config items Source: https://docs.automate.ax/reference/integrations/vercel/actions/update-global-config-items Creates, updates, or deletes items in one Global Config. `vercel.updateGlobalConfigItems` creates, updates, or deletes items in one Global Config. ```ts automations/update-global-config-items.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Update global config items", () => { vercel.updateGlobalConfigItems({ edgeConfigId: "ecfg_1", items: [ { key: "apiUrl", operation: "upsert", value: "https://api.example.com", }, ], teamId: "team_1", }) }) ``` ## Input * `edgeConfigId`: included in the runnable example and checked by the callable's TypeScript contract. * `items`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed Vercel resource or mutation result after the update. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Update project Source: https://docs.automate.ax/reference/integrations/vercel/actions/update-project Update Vercel project and build settings. `vercel.updateProject` changes selected project fields. ```ts automations/update-vercel-project.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Update Vercel project", () => { vercel.updateProject({ project: "docs-site", settings: { buildCommand: "bun run build", outputDirectory: "dist" }, }) }) ``` `project` is the ID or current name. Optional `name` renames it. `settings` has the same fields as project creation and defaults to `{}`. Omitted fields remain unchanged. Optional `teamId` overrides the OAuth installation team. Returns Vercel's full updated-project response. # Update project domain Source: https://docs.automate.ax/reference/integrations/vercel/actions/update-project-domain Updates the branch or redirect attached to one project domain. `vercel.updateProjectDomain` updates the branch or redirect attached to one project domain. ```ts automations/update-project-domain.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Update project domain", () => { vercel.updateProjectDomain({ domain: "app.example.com", project: "prj_1", redirect: null, teamId: "team_1", }) }) ``` ## Input * `domain`: included in the runnable example and checked by the callable's TypeScript contract. * `project`: included in the runnable example and checked by the callable's TypeScript contract. * `redirect`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed Vercel resource or mutation result after the update. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Update project environment variable Source: https://docs.automate.ax/reference/integrations/vercel/actions/update-project-environment-variable Update a Vercel project environment variable. `vercel.updateProjectEnvironmentVariable` edits a variable by its Vercel ID. ```ts automations/update-vercel-env.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Rotate Vercel environment variable", () => { vercel.updateProjectEnvironmentVariable({ environmentVariableId: "env_123", project: "docs-site", value: "rotated-secret", }) }) ``` The action requires `project` and `environmentVariableId`. Supply any of `key`, `value`, `type`, `targets`, `gitBranch`, `customEnvironmentIds`, or `comment`. Omitted fields remain unchanged. Pass `gitBranch: null` to clear branch scoping. Returns Vercel's full updated-variable response. # Update rolling release configuration Source: https://docs.automate.ax/reference/integrations/vercel/actions/update-rolling-release-configuration Enables or updates the template for future rollouts. `vercel.updateRollingReleaseConfiguration` enables or updates the template for future rollouts. ```ts automations/update-rolling-release-configuration.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Update rolling release configuration", () => { vercel.updateRollingReleaseConfiguration({ idOrName: "prj_1", teamId: "team_1", }) }) ``` ## Input * `idOrName`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed Vercel resource or mutation result after the update. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Update shared environment variable Source: https://docs.automate.ax/reference/integrations/vercel/actions/update-shared-environment-variable Updates one shared environment variable and its project links. `vercel.updateSharedEnvironmentVariable` updates one shared environment variable and its project links. ```ts automations/update-shared-environment-variable.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Update shared environment variable", () => { vercel.updateSharedEnvironmentVariable({ environmentVariableId: "env_shared_1", teamId: "team_1", value: "updated", }) }) ``` ## Input * `environmentVariableId`: included in the runnable example and checked by the callable's TypeScript contract. * `teamId`: included in the runnable example and checked by the callable's TypeScript contract. * `value`: included in the runnable example and checked by the callable's TypeScript contract. Optional filters, pagination controls, request bodies, and provider enums remain visible in editor autocomplete. Unknown keys are rejected by TypeScript instead of being silently discarded. ## Output Returns the typed Vercel resource or mutation result after the update. Public request and response fields use camelCase. ## Provider behavior OAuth installations default `teamId` to the installed team; access-token connections must identify the intended scope when Vercel requires it. Automate.ax does not treat this write as replay-safe. Vercel validates identifiers, permissions, and state transitions and returns its provider error when the request is not allowed. # Verify project domain Source: https://docs.automate.ax/reference/integrations/vercel/actions/verify-project-domain Recheck a Vercel project domain's verification after record changes. `vercel.verifyProjectDomain` rechecks a domain after you add its required `DNS` record. ```ts automations/verify-vercel-domain.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Verify Vercel domain", () => { const domain = vercel.verifyProjectDomain({ domain: "docs.example.com", project: "docs-site", }) // Use domain.verified to gate the production-domain rollout. }) ``` The action requires `project` and `domain`. Optional `teamId` overrides the OAuth installation team. Add the `DNS` records from `vercel.addProjectDomain`, wait for propagation, then call this action. Returns Vercel's full verified-domain response. # Vercel Source: https://docs.automate.ax/reference/integrations/vercel/index Manage Vercel projects, deployments, domains, environments, feature flags, and rolling releases, or react to account events. ## Exports ```ts theme={null} import { vercel, vercelAccount, getVercelApi } from "automate.ax/vercel" ``` * `vercel` contains the packaged Vercel actions and triggers. * `vercelAccount("name")` selects a named Vercel connection. * `getVercelApi` creates the authenticated Vercel API helper for a custom account-backed action. Trigger-only packages can import Vercel triggers without the action exports: ```ts theme={null} import { onVercelDeploymentSucceeded } from "automate.ax/vercel/triggers" ``` ## Triggers * [On Vercel integration resource event](/reference/integrations/vercel/triggers/on-integration-resource-event) * [On Vercel integration configuration event](/reference/integrations/vercel/triggers/on-integration-configuration-event) * [On Vercel deployment promoted](/reference/integrations/vercel/triggers/on-deployment-promoted) * [On Vercel integration configuration permission upgraded](/reference/integrations/vercel/triggers/on-integration-configuration-permission-upgraded) * [On Vercel project domain created](/reference/integrations/vercel/triggers/on-project-domain-created) * [On Vercel project domain verified](/reference/integrations/vercel/triggers/on-project-domain-verified) * [On Vercel domain event](/reference/integrations/vercel/triggers/on-domain-event) * [On Vercel feature flag updated](/reference/integrations/vercel/triggers/on-feature-flag-updated) * [On Vercel deployment integration action start](/reference/integrations/vercel/triggers/on-deployment-integration-action-start) * [On Vercel feature flag segment updated](/reference/integrations/vercel/triggers/on-feature-flag-segment-updated) * [On Vercel project renamed](/reference/integrations/vercel/triggers/on-project-renamed) * [On Vercel domain certificate renew failed](/reference/integrations/vercel/triggers/on-domain-certificate-renew-failed) * [On Vercel project domain event](/reference/integrations/vercel/triggers/on-project-domain-event) * [On Vercel integration configuration removed](/reference/integrations/vercel/triggers/on-integration-configuration-removed) * [On Vercel deployment integration action cancel](/reference/integrations/vercel/triggers/on-deployment-integration-action-cancel) * [On Vercel project removed](/reference/integrations/vercel/triggers/on-project-removed) * [On Vercel domain transfer in completed](/reference/integrations/vercel/triggers/on-domain-transfer-in-completed) * [On Vercel rolling release approved](/reference/integrations/vercel/triggers/on-rolling-release-approved) * [On Vercel deployment event](/reference/integrations/vercel/triggers/on-deployment-event) * [On Vercel project domain updated](/reference/integrations/vercel/triggers/on-project-domain-updated) * [On Vercel rolling release event](/reference/integrations/vercel/triggers/on-rolling-release-event) * [On Vercel deployment created](/reference/integrations/vercel/triggers/on-deployment-created) * [On Vercel domain certificate add failed](/reference/integrations/vercel/triggers/on-domain-certificate-add-failed) * [On Vercel project domain moved](/reference/integrations/vercel/triggers/on-project-domain-moved) * [On Vercel feature flag created](/reference/integrations/vercel/triggers/on-feature-flag-created) * [On Vercel domain auto renew changed](/reference/integrations/vercel/triggers/on-domain-auto-renew-changed) * [On Vercel project created](/reference/integrations/vercel/triggers/on-project-created) * [On Vercel feature flag segment created](/reference/integrations/vercel/triggers/on-feature-flag-segment-created) * [On Vercel project environment variable deleted](/reference/integrations/vercel/triggers/on-project-environment-variable-deleted) * [On Vercel integration configuration transferred](/reference/integrations/vercel/triggers/on-integration-configuration-transferred) * [On Vercel deployment ready](/reference/integrations/vercel/triggers/on-deployment-ready) * [On Vercel alert triggered](/reference/integrations/vercel/triggers/on-alert-triggered) * [On Vercel domain certificate add](/reference/integrations/vercel/triggers/on-domain-certificate-add) * [On Vercel feature flag event](/reference/integrations/vercel/triggers/on-feature-flag-event) * [On Vercel integration configuration scope change confirmed](/reference/integrations/vercel/triggers/on-integration-configuration-scope-change-confirmed) * [On Vercel deployment failed](/reference/integrations/vercel/triggers/on-deployment-failed) * [On Vercel project domain deleted](/reference/integrations/vercel/triggers/on-project-domain-deleted) * [On Vercel project domain unverified](/reference/integrations/vercel/triggers/on-project-domain-unverified) * [On Vercel rolling release aborted](/reference/integrations/vercel/triggers/on-rolling-release-aborted) * [On Vercel deployment canceled](/reference/integrations/vercel/triggers/on-deployment-canceled) * [On Vercel deployment cleanup](/reference/integrations/vercel/triggers/on-deployment-cleanup) * [On Vercel domain certificate deleted](/reference/integrations/vercel/triggers/on-domain-certificate-deleted) * [On Vercel project environment variable updated](/reference/integrations/vercel/triggers/on-project-environment-variable-updated) * [On Vercel domain renewal](/reference/integrations/vercel/triggers/on-domain-renewal) * [On Vercel domain dns records changed](/reference/integrations/vercel/triggers/on-domain-dns-records-changed) * [On Vercel integration resource project connected](/reference/integrations/vercel/triggers/on-integration-resource-project-connected) * [On Vercel deployment succeeded](/reference/integrations/vercel/triggers/on-deployment-succeeded) * [On Vercel domain certificate renew](/reference/integrations/vercel/triggers/on-domain-certificate-renew) * [On Vercel rolling release started](/reference/integrations/vercel/triggers/on-rolling-release-started) * [On Vercel domain transfer in started](/reference/integrations/vercel/triggers/on-domain-transfer-in-started) * [On Vercel feature flag deleted](/reference/integrations/vercel/triggers/on-feature-flag-deleted) * [On Vercel project environment variable event](/reference/integrations/vercel/triggers/on-project-environment-variable-event) * [On Vercel rolling release completed](/reference/integrations/vercel/triggers/on-rolling-release-completed) * [On Vercel domain renewal failed](/reference/integrations/vercel/triggers/on-domain-renewal-failed) * [On Vercel domain transfer in failed](/reference/integrations/vercel/triggers/on-domain-transfer-in-failed) * [On Vercel integration resource project disconnected](/reference/integrations/vercel/triggers/on-integration-resource-project-disconnected) * [On Vercel deployment rollback](/reference/integrations/vercel/triggers/on-deployment-rollback) * [On Vercel deployment integration action cleanup](/reference/integrations/vercel/triggers/on-deployment-integration-action-cleanup) * [On Vercel project event](/reference/integrations/vercel/triggers/on-project-event) * [On Vercel deployment check rerequested](/reference/integrations/vercel/triggers/on-deployment-check-rerequested) * [On Vercel feature flag segment deleted](/reference/integrations/vercel/triggers/on-feature-flag-segment-deleted) * [On Vercel project environment variable created](/reference/integrations/vercel/triggers/on-project-environment-variable-created) * [On Vercel domain created](/reference/integrations/vercel/triggers/on-domain-created) ## Actions * [Create shared environment variable](/reference/integrations/vercel/actions/create-shared-environment-variable) * [List drains](/reference/integrations/vercel/actions/list-drains) * [List project domains](/reference/integrations/vercel/actions/list-project-domains) * [List integration configurations](/reference/integrations/vercel/actions/list-integration-configurations) * [Create project environment variable](/reference/integrations/vercel/actions/create-project-environment-variable) * [Update drain](/reference/integrations/vercel/actions/update-drain) * [Invalidate edge cache by tags](/reference/integrations/vercel/actions/invalidate-edge-cache-by-tags) * [Get integration configuration](/reference/integrations/vercel/actions/get-integration-configuration) * [List team feature flags](/reference/integrations/vercel/actions/list-team-feature-flags) * [Update rolling release configuration](/reference/integrations/vercel/actions/update-rolling-release-configuration) * [Create feature flag segment](/reference/integrations/vercel/actions/create-feature-flag-segment) * [Pause project](/reference/integrations/vercel/actions/pause-project) * [List custom environments](/reference/integrations/vercel/actions/list-custom-environments) * [List teams](/reference/integrations/vercel/actions/list-teams) * [Update project](/reference/integrations/vercel/actions/update-project) * [Get current user](/reference/integrations/vercel/actions/get-current-user) * [Get custom environment](/reference/integrations/vercel/actions/get-custom-environment) * [Delete feature flag segment](/reference/integrations/vercel/actions/delete-feature-flag-segment) * [Get deployment](/reference/integrations/vercel/actions/get-deployment) * [Get global config item](/reference/integrations/vercel/actions/get-global-config-item) * [Create global config](/reference/integrations/vercel/actions/create-global-config) * [Update feature flag segment](/reference/integrations/vercel/actions/update-feature-flag-segment) * [Update feature flag](/reference/integrations/vercel/actions/update-feature-flag) * [Test drain](/reference/integrations/vercel/actions/test-drain) * [List deployments](/reference/integrations/vercel/actions/list-deployments) * [Get drain](/reference/integrations/vercel/actions/get-drain) * [List feature flag versions](/reference/integrations/vercel/actions/list-feature-flag-versions) * [Promote deployment](/reference/integrations/vercel/actions/promote-deployment) * [Batch delete project environment variables](/reference/integrations/vercel/actions/batch-delete-project-environment-variables) * [Create project](/reference/integrations/vercel/actions/create-project) * [Create dns record](/reference/integrations/vercel/actions/create-dns-record) * [Disconnect shared environment variable](/reference/integrations/vercel/actions/disconnect-shared-environment-variable) * [Cancel deployment](/reference/integrations/vercel/actions/cancel-deployment) * [Delete project](/reference/integrations/vercel/actions/delete-project) * [Delete domain](/reference/integrations/vercel/actions/delete-domain) * [Get feature flag settings](/reference/integrations/vercel/actions/get-feature-flag-settings) * [Get rolling release](/reference/integrations/vercel/actions/get-rolling-release) * [List team members](/reference/integrations/vercel/actions/list-team-members) * [Get feature flag](/reference/integrations/vercel/actions/get-feature-flag) * [Get alias](/reference/integrations/vercel/actions/get-alias) * [List aliases](/reference/integrations/vercel/actions/list-aliases) * [Verify project domain](/reference/integrations/vercel/actions/verify-project-domain) * [Create feature flag](/reference/integrations/vercel/actions/create-feature-flag) * [Create deployment](/reference/integrations/vercel/actions/create-deployment) * [List shared environment variables](/reference/integrations/vercel/actions/list-shared-environment-variables) * [Create drain](/reference/integrations/vercel/actions/create-drain) * [Get project](/reference/integrations/vercel/actions/get-project) * [Delete deployment](/reference/integrations/vercel/actions/delete-deployment) * [Get runtime logs](/reference/integrations/vercel/actions/get-runtime-logs) * [Update custom environment](/reference/integrations/vercel/actions/update-custom-environment) * [Delete global config](/reference/integrations/vercel/actions/delete-global-config) * [List project environment variables](/reference/integrations/vercel/actions/list-project-environment-variables) * [List feature flag segments](/reference/integrations/vercel/actions/list-feature-flag-segments) * [Rollback deployment](/reference/integrations/vercel/actions/rollback-deployment) * [Delete drain](/reference/integrations/vercel/actions/delete-drain) * [Get feature flag segment](/reference/integrations/vercel/actions/get-feature-flag-segment) * [Get deployment check](/reference/integrations/vercel/actions/get-deployment-check) * [Update dns record](/reference/integrations/vercel/actions/update-dns-record) * [Get project domain](/reference/integrations/vercel/actions/get-project-domain) * [Update global config](/reference/integrations/vercel/actions/update-global-config) * [Approve rolling release stage](/reference/integrations/vercel/actions/approve-rolling-release-stage) * [Delete alias](/reference/integrations/vercel/actions/delete-alias) * [Delete custom environment](/reference/integrations/vercel/actions/delete-custom-environment) * [List feature flags](/reference/integrations/vercel/actions/list-feature-flags) * [Delete dns record](/reference/integrations/vercel/actions/delete-dns-record) * [Get rolling release configuration](/reference/integrations/vercel/actions/get-rolling-release-configuration) * [List projects](/reference/integrations/vercel/actions/list-projects) * [Update global config items](/reference/integrations/vercel/actions/update-global-config-items) * [List global configs](/reference/integrations/vercel/actions/list-global-configs) * [List deployment files](/reference/integrations/vercel/actions/list-deployment-files) * [Remove project domain](/reference/integrations/vercel/actions/remove-project-domain) * [Rerequest deployment check](/reference/integrations/vercel/actions/rerequest-deployment-check) * [Delete feature flag](/reference/integrations/vercel/actions/delete-feature-flag) * [List deployment checks](/reference/integrations/vercel/actions/list-deployment-checks) * [List global config tokens](/reference/integrations/vercel/actions/list-global-config-tokens) * [List domains](/reference/integrations/vercel/actions/list-domains) * [Get global config](/reference/integrations/vercel/actions/get-global-config) * [List deployment aliases](/reference/integrations/vercel/actions/list-deployment-aliases) * [List dns records](/reference/integrations/vercel/actions/list-dns-records) * [Delete shared environment variables](/reference/integrations/vercel/actions/delete-shared-environment-variables) * [Move project domain](/reference/integrations/vercel/actions/move-project-domain) * [Invalidate edge cache by source images](/reference/integrations/vercel/actions/invalidate-edge-cache-by-source-images) * [Delete global config tokens](/reference/integrations/vercel/actions/delete-global-config-tokens) * [Get team](/reference/integrations/vercel/actions/get-team) * [Complete rolling release](/reference/integrations/vercel/actions/complete-rolling-release) * [List global config items](/reference/integrations/vercel/actions/list-global-config-items) * [Delete rolling release configuration](/reference/integrations/vercel/actions/delete-rolling-release-configuration) * [Get domain](/reference/integrations/vercel/actions/get-domain) * [Delete project environment variable](/reference/integrations/vercel/actions/delete-project-environment-variable) * [Get domain configuration](/reference/integrations/vercel/actions/get-domain-configuration) * [Create global config token](/reference/integrations/vercel/actions/create-global-config-token) * [Start rolling release](/reference/integrations/vercel/actions/start-rolling-release) * [Get deployment events](/reference/integrations/vercel/actions/get-deployment-events) * [Update shared environment variable](/reference/integrations/vercel/actions/update-shared-environment-variable) * [Create deployment check](/reference/integrations/vercel/actions/create-deployment-check) * [Unpause project](/reference/integrations/vercel/actions/unpause-project) * [Update deployment check](/reference/integrations/vercel/actions/update-deployment-check) * [Create custom environment](/reference/integrations/vercel/actions/create-custom-environment) * [Update project environment variable](/reference/integrations/vercel/actions/update-project-environment-variable) * [Update project domain](/reference/integrations/vercel/actions/update-project-domain) * [Assign alias](/reference/integrations/vercel/actions/assign-alias) * [Update feature flag settings](/reference/integrations/vercel/actions/update-feature-flag-settings) * [Add project domain](/reference/integrations/vercel/actions/add-project-domain) # On Vercel alert triggered Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-alert-triggered Run an automation when Vercel reports alert triggered. `vercel.onAlertTriggered` starts an automation for the corresponding Vercel webhook event. ```ts automations/on-alert-triggered.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("On Vercel alert triggered", () => { const event = vercel.onAlertTriggered() event.transform(({ payload }) => ({ alerts: payload.alerts, projectId: payload.projectId, })) }) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output The event includes `id`, `createdAt`, `region`, its exact `type` discriminator, and a typed `payload`. `payload.alerts` contains typed anomaly metrics and `payload.projectId` identifies the affected project. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates the delivery by event ID. Vercel Alerts are available for eligible Pro and Enterprise teams with Observability Plus. # On Vercel deployment canceled Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-deployment-canceled Run an automation when Vercel cancels a deployment. `vercel.onDeploymentCanceled` emits when Vercel cancels a deployment. ```ts automations/watch-canceled-vercel-deployments.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Watch canceled Vercel deployments", () => { const event = vercel.onDeploymentCanceled() event.transform(({ payload }) => ({ deploymentId: payload.deployment.id, projectId: payload.project.id, })) }) ``` Optional static `account` defaults to the project's Vercel OAuth binding. ## Trigger data Returns the [deployment event shape](/reference/integrations/vercel/triggers/on-deployment-event), narrowed to `type: "deployment.canceled"`. # On Vercel deployment check rerequested Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-deployment-check-rerequested Run an automation when Vercel reports deployment check rerequested. `vercel.onDeploymentCheckRerequested` starts an automation for the corresponding Vercel webhook event. ```ts automations/on-deployment-check-rerequested.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("On Vercel deployment check rerequested", () => { const event = vercel.onDeploymentCheckRerequested() event.transform(({ payload }) => ({ checkId: payload.check.id, deploymentId: payload.deployment.id, })) }) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output The event includes `id`, `createdAt`, `region`, its exact `type` discriminator, and a typed `payload`. `payload.check.id` identifies the check to rerun and `payload.deployment.id` identifies its deployment. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates the delivery by event ID. # On Vercel deployment cleanup Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-deployment-cleanup Run an automation when Vercel reports deployment cleanup. `vercel.onDeploymentCleanup` starts an automation for the corresponding Vercel webhook event. ```ts automations/on-deployment-cleanup.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("On Vercel deployment cleanup", () => { const event = vercel.onDeploymentCleanup() event.transform(({ payload }) => ({ deploymentId: payload.deployment.id, projectId: payload.project.id, })) }) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output The event includes `id`, `createdAt`, `region`, its exact `type` discriminator, and a typed `payload`. `payload.deployment` contains the permanently deleted deployment and `payload.project.id` identifies its project. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates the delivery by event ID. This event arrives only after Vercel's recovery period ends, not when deletion is first requested. # On Vercel deployment created Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-deployment-created Run an automation when Vercel creates a deployment. `vercel.onDeploymentCreated` emits when a new Vercel deployment starts. ```ts automations/watch-new-vercel-deployments.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Watch new Vercel deployments", () => { const event = vercel.onDeploymentCreated() event.transform(({ payload }) => ({ deploymentId: payload.deployment.id, projectId: payload.project.id, url: payload.deployment.url, })) }) ``` Optional static `account` defaults to the project's Vercel OAuth binding. ## Trigger data Returns the [deployment event shape](/reference/integrations/vercel/triggers/on-deployment-event), narrowed to `type: "deployment.created"`. # On Vercel deployment event Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-deployment-event Run an automation for Vercel deployment lifecycle events. `vercel.onDeploymentEvent` covers creation, readiness, success, error, cancellation, and promotion. Use a specific trigger for one lifecycle event. ```ts automations/watch-vercel-deployments.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Watch Vercel deployments", () => { const event = vercel.onDeploymentEvent() event.transform(({ payload, type }) => ({ deploymentId: payload.deployment.id, projectId: payload.project.id, type, url: payload.deployment.url, })) }) ``` Optional static `account` defaults to the project's Vercel binding and must use OAuth. Access-token connections can't receive installation webhooks. ## Trigger data The event `type` is `deployment.created`, `deployment.ready`, `deployment.succeeded`, `deployment.error`, `deployment.canceled`, or `deployment.promoted`. The payload includes the deployment, project, owning team or user, and other Vercel fields. The top level includes `id`, `createdAt`, and `region`. # On Vercel deployment failed Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-deployment-failed Run an automation when a Vercel deployment fails. `vercel.onDeploymentFailed` matches Vercel's `deployment.error` event. ```ts automations/watch-failed-vercel-deployments.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Watch failed Vercel deployments", () => { const event = vercel.onDeploymentFailed() event.transform(({ payload }) => ({ deploymentId: payload.deployment.id, projectId: payload.project.id, url: payload.deployment.url, })) }) ``` Optional static `account` defaults to the project's Vercel OAuth binding. ## Trigger data Returns the [deployment event shape](/reference/integrations/vercel/triggers/on-deployment-event) with `type: "deployment.error"`. Vercel calls failed deployment webhooks `deployment.error`. Automate.ax calls them “failed.” # On Vercel deployment integration action cancel Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-deployment-integration-action-cancel Run an automation when Vercel reports deployment integration action cancel. `vercel.onDeploymentIntegrationActionCancel` starts an automation for the corresponding Vercel webhook event. ```ts automations/on-deployment-integration-action-cancel.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation( "On Vercel deployment integration action cancel", () => { const event = vercel.onDeploymentIntegrationActionCancel() event.transform(({ payload }) => ({ action: payload.action, deploymentId: payload.deployment.id, resourceId: payload.resourceId, })) }, ) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output The event includes `id`, `createdAt`, `region`, its exact `type` discriminator, and a typed `payload`. The payload identifies the canceled integration action, deployment, installation, and integration resource. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates the delivery by event ID. # On Vercel deployment integration action cleanup Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-deployment-integration-action-cleanup Run an automation when Vercel reports deployment integration action cleanup. `vercel.onDeploymentIntegrationActionCleanup` starts an automation for the corresponding Vercel webhook event. ```ts automations/on-deployment-integration-action-cleanup.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation( "On Vercel deployment integration action cleanup", () => { const event = vercel.onDeploymentIntegrationActionCleanup() event.transform(({ payload }) => ({ action: payload.action, deploymentId: payload.deployment.id, resourceId: payload.resourceId, })) }, ) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output The event includes `id`, `createdAt`, `region`, its exact `type` discriminator, and a typed `payload`. The payload identifies the integration action whose permanently deleted deployment is being cleaned up. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates the delivery by event ID. This event arrives after Vercel permanently deletes the deployment, not when deletion is first requested. # On Vercel deployment integration action start Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-deployment-integration-action-start Run an automation when Vercel reports deployment integration action start. `vercel.onDeploymentIntegrationActionStart` starts an automation for the corresponding Vercel webhook event. ```ts automations/on-deployment-integration-action-start.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation( "On Vercel deployment integration action start", () => { const event = vercel.onDeploymentIntegrationActionStart() event.transform(({ payload }) => ({ action: payload.action, deploymentId: payload.deployment.id, resourceId: payload.resourceId, })) }, ) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output The event includes `id`, `createdAt`, `region`, its exact `type` discriminator, and a typed `payload`. The payload identifies the started integration action, deployment, installation, and integration resource. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates the delivery by event ID. # On Vercel deployment promoted Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-deployment-promoted Run an automation when Vercel promotes a deployment. `vercel.onDeploymentPromoted` emits when Vercel promotes a deployment to production, either manually or automatically. This trigger doesn't include rollbacks. ```ts automations/watch-promoted-vercel-deployments.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Watch promoted Vercel deployments", () => { const event = vercel.onDeploymentPromoted() event.transform(({ payload }) => ({ deploymentId: payload.deployment.id, projectId: payload.project.id, url: payload.deployment.url, })) }) ``` Optional static `account` defaults to the project's Vercel OAuth binding. ## Trigger data Returns the [deployment event shape](/reference/integrations/vercel/triggers/on-deployment-event), narrowed to `type: "deployment.promoted"`. # On Vercel deployment ready Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-deployment-ready Run an automation when a Vercel deployment becomes ready. `vercel.onDeploymentReady` emits when a Vercel deployment becomes ready to serve traffic. ```ts automations/watch-ready-vercel-deployments.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Watch ready Vercel deployments", () => { const event = vercel.onDeploymentReady() event.transform(({ payload }) => ({ deploymentId: payload.deployment.id, target: payload.target, url: payload.deployment.url, })) }) ``` Optional static `account` defaults to the project's Vercel OAuth binding. ## Trigger data Returns the [deployment event shape](/reference/integrations/vercel/triggers/on-deployment-event), narrowed to `type: "deployment.ready"`. # On Vercel deployment rollback Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-deployment-rollback Run an automation when Vercel reports deployment rollback. `vercel.onDeploymentRollback` starts an automation for the corresponding Vercel webhook event. ```ts automations/on-deployment-rollback.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("On Vercel deployment rollback", () => { const event = vercel.onDeploymentRollback() event.transform(({ payload }) => ({ from: payload.fromDeploymentId, to: payload.toDeploymentId, })) }) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output The event includes `id`, `createdAt`, `region`, its exact `type` discriminator, and a typed `payload`. `payload.fromDeploymentId` is replaced by `payload.toDeploymentId`; `payload.project.id` identifies the project. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates the delivery by event ID. The event confirms that Vercel accepted the rollback. Traffic may still be switching. # On Vercel deployment succeeded Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-deployment-succeeded Run an automation when a Vercel deployment succeeds. `vercel.onDeploymentSucceeded` emits after a Vercel deployment's build and checks succeed. ```ts automations/watch-successful-vercel-deployments.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Watch successful Vercel deployments", () => { const event = vercel.onDeploymentSucceeded() event.transform(({ payload }) => ({ deploymentId: payload.deployment.id, projectId: payload.project.id, target: payload.target, })) }) ``` Optional static `account` defaults to the project's Vercel OAuth binding. ## Trigger data Returns the [deployment event shape](/reference/integrations/vercel/triggers/on-deployment-event), narrowed to `type: "deployment.succeeded"`. # On Vercel domain auto renew changed Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-domain-auto-renew-changed Run an automation when Vercel reports domain auto renew changed. `vercel.onDomainAutoRenewChanged` starts an automation for the corresponding Vercel webhook event. ```ts automations/on-domain-auto-renew-changed.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("On Vercel domain auto renew changed", () => { const event = vercel.onDomainAutoRenewChanged() event.transform(({ payload }) => ({ domain: payload.domain.name, previous: payload.previous, next: payload.next, })) }) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output The event includes `id`, `createdAt`, `region`, its exact `type` discriminator, and a typed `payload`. The payload includes the domain name and the previous and next auto-renewal settings. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates the delivery by event ID. # On Vercel domain certificate add Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-domain-certificate-add Run an automation when Vercel reports domain certificate add. `vercel.onDomainCertificateAdd` starts an automation for the corresponding Vercel webhook event. ```ts automations/on-domain-certificate-add.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("On Vercel domain certificate add", () => { const event = vercel.onDomainCertificateAdd() event.transform(({ payload }) => payload.cert) }) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output The event includes `id`, `createdAt`, `region`, its exact `type` discriminator, and a typed `payload`. `payload.cert` contains Vercel's certificate details. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates the delivery by event ID. # On Vercel domain certificate add failed Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-domain-certificate-add-failed Run an automation when Vercel reports domain certificate add failed. `vercel.onDomainCertificateAddFailed` starts an automation for the corresponding Vercel webhook event. ```ts automations/on-domain-certificate-add-failed.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("On Vercel domain certificate add failed", () => { const event = vercel.onDomainCertificateAddFailed() event.transform(({ payload }) => payload.dnsNames) }) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output The event includes `id`, `createdAt`, `region`, its exact `type` discriminator, and a typed `payload`. `payload.dnsNames` lists the names for which certificate issuance failed. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates the delivery by event ID. # On Vercel domain certificate deleted Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-domain-certificate-deleted Run an automation when Vercel reports domain certificate deleted. `vercel.onDomainCertificateDeleted` starts an automation for the corresponding Vercel webhook event. ```ts automations/on-domain-certificate-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("On Vercel domain certificate deleted", () => { const event = vercel.onDomainCertificateDeleted() event.transform(({ payload }) => payload.cert) }) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output The event includes `id`, `createdAt`, `region`, its exact `type` discriminator, and a typed `payload`. `payload.cert` contains Vercel's deleted certificate details. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates the delivery by event ID. # On Vercel domain certificate renew Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-domain-certificate-renew Run an automation when Vercel reports domain certificate renew. `vercel.onDomainCertificateRenew` starts an automation for the corresponding Vercel webhook event. ```ts automations/on-domain-certificate-renew.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("On Vercel domain certificate renew", () => { const event = vercel.onDomainCertificateRenew() event.transform(({ payload }) => payload.cert) }) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output The event includes `id`, `createdAt`, `region`, its exact `type` discriminator, and a typed `payload`. `payload.cert` contains Vercel's renewed certificate details. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates the delivery by event ID. # On Vercel domain certificate renew failed Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-domain-certificate-renew-failed Run an automation when Vercel reports domain certificate renew failed. `vercel.onDomainCertificateRenewFailed` starts an automation for the corresponding Vercel webhook event. ```ts automations/on-domain-certificate-renew-failed.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("On Vercel domain certificate renew failed", () => { const event = vercel.onDomainCertificateRenewFailed() event.transform(({ payload }) => payload.dnsNames) }) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output The event includes `id`, `createdAt`, `region`, its exact `type` discriminator, and a typed `payload`. `payload.dnsNames` lists the names for which certificate renewal failed. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates the delivery by event ID. # On Vercel domain created Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-domain-created Run an automation when Vercel reports domain created. `vercel.onDomainCreated` starts an automation for the corresponding Vercel webhook event. ```ts automations/on-domain-created.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("On Vercel domain created", () => { const event = vercel.onDomainCreated() event.transform(({ payload }) => ({ domain: payload.domain.name, delegated: payload.domain.delegated, })) }) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output The event includes `id`, `createdAt`, `region`, its exact `type` discriminator, and a typed `payload`. `payload.domain` contains the created domain name and whether it is delegated. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates the delivery by event ID. # On Vercel domain dns records changed Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-domain-dns-records-changed Run an automation when Vercel reports domain dns records changed. `vercel.onDomainDnsRecordsChanged` starts an automation for the corresponding Vercel webhook event. ```ts automations/on-domain-dns-records-changed.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("On Vercel domain dns records changed", () => { const event = vercel.onDomainDnsRecordsChanged() event.transform(({ payload }) => ({ zone: payload.zone, changes: payload.changes, })) }) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output The event includes `id`, `createdAt`, `region`, its exact `type` discriminator, and a typed `payload`. `payload.zone` identifies the DNS zone and `payload.changes` contains Vercel's record changes. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates the delivery by event ID. # On Vercel domain event Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-domain-event Run an automation when Vercel reports domain event. `vercel.onDomainEvent` starts an automation for any event in this Vercel lifecycle family. ```ts automations/on-domain-event.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("On Vercel domain event", () => { const event = vercel.onDomainEvent() event.transform((value) => { if (value.type === "domain.created") return value.payload.domain.name return value.type }) }) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output Every event includes `id`, `createdAt`, `region`, `type`, and `payload`. The discriminated union covers all selected account-domain lifecycle events. Narrow `type` before reading event-specific fields such as `domain`, `cert`, `dnsNames`, or `changes`. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates each delivery by event ID. # On Vercel domain renewal Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-domain-renewal Run an automation when Vercel reports domain renewal. `vercel.onDomainRenewal` starts an automation for the corresponding Vercel webhook event. ```ts automations/on-domain-renewal.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("On Vercel domain renewal", () => { const event = vercel.onDomainRenewal() event.transform(({ payload }) => ({ domain: payload.domain.name, expirationDate: payload.expirationDate, })) }) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output The event includes `id`, `createdAt`, `region`, its exact `type` discriminator, and a typed `payload`. The payload includes the renewed domain, price, renewal time, and new expiration date. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates the delivery by event ID. # On Vercel domain renewal failed Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-domain-renewal-failed Run an automation when Vercel reports domain renewal failed. `vercel.onDomainRenewalFailed` starts an automation for the corresponding Vercel webhook event. ```ts automations/on-domain-renewal-failed.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("On Vercel domain renewal failed", () => { const event = vercel.onDomainRenewalFailed() event.transform(({ payload }) => ({ domain: payload.domain.name, reason: payload.errorReason, })) }) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output The event includes `id`, `createdAt`, `region`, its exact `type` discriminator, and a typed `payload`. The payload includes the domain, provider failure reason, and failure time. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates the delivery by event ID. # On Vercel domain transfer in completed Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-domain-transfer-in-completed Run an automation when Vercel reports domain transfer in completed. `vercel.onDomainTransferInCompleted` starts an automation for the corresponding Vercel webhook event. ```ts automations/on-domain-transfer-in-completed.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("On Vercel domain transfer in completed", () => { const event = vercel.onDomainTransferInCompleted() event.transform(({ payload }) => payload.domain.name) }) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output The event includes `id`, `createdAt`, `region`, its exact `type` discriminator, and a typed `payload`. `payload.domain.name` identifies the transferred domain. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates the delivery by event ID. # On Vercel domain transfer in failed Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-domain-transfer-in-failed Run an automation when Vercel reports domain transfer in failed. `vercel.onDomainTransferInFailed` starts an automation for the corresponding Vercel webhook event. ```ts automations/on-domain-transfer-in-failed.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("On Vercel domain transfer in failed", () => { const event = vercel.onDomainTransferInFailed() event.transform(({ payload }) => payload.domain.name) }) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output The event includes `id`, `createdAt`, `region`, its exact `type` discriminator, and a typed `payload`. `payload.domain.name` identifies the domain whose transfer failed. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates the delivery by event ID. # On Vercel domain transfer in started Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-domain-transfer-in-started Run an automation when Vercel reports domain transfer in started. `vercel.onDomainTransferInStarted` starts an automation for the corresponding Vercel webhook event. ```ts automations/on-domain-transfer-in-started.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("On Vercel domain transfer in started", () => { const event = vercel.onDomainTransferInStarted() event.transform(({ payload }) => payload.domain.name) }) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output The event includes `id`, `createdAt`, `region`, its exact `type` discriminator, and a typed `payload`. `payload.domain.name` identifies the domain entering transfer. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates the delivery by event ID. # On Vercel feature flag created Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-feature-flag-created Run an automation when Vercel reports feature flag created. `vercel.onFeatureFlagCreated` starts an automation for the corresponding Vercel webhook event. ```ts automations/on-feature-flag-created.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("On Vercel feature flag created", () => { const event = vercel.onFeatureFlagCreated() event.transform(({ payload }) => ({ id: payload.flag.id, slug: payload.flag.slug, projectId: payload.flag.projectId, })) }) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output The event includes `id`, `createdAt`, `region`, its exact `type` discriminator, and a typed `payload`. `payload.flag` contains the flag ID, slug, project ID, and creation and update timestamps. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates the delivery by event ID. # On Vercel feature flag deleted Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-feature-flag-deleted Run an automation when Vercel reports feature flag deleted. `vercel.onFeatureFlagDeleted` starts an automation for the corresponding Vercel webhook event. ```ts automations/on-feature-flag-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("On Vercel feature flag deleted", () => { const event = vercel.onFeatureFlagDeleted() event.transform(({ payload }) => ({ id: payload.flag.id, deletedAt: payload.deletedAt, })) }) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output The event includes `id`, `createdAt`, `region`, its exact `type` discriminator, and a typed `payload`. The payload contains the deleted flag and its deletion timestamp. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates the delivery by event ID. # On Vercel feature flag event Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-feature-flag-event Run an automation when Vercel reports feature flag event. `vercel.onFeatureFlagEvent` starts an automation for any event in this Vercel lifecycle family. ```ts automations/on-feature-flag-event.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("On Vercel feature flag event", () => { const event = vercel.onFeatureFlagEvent() event.transform((value) => { if (value.type === "flag.created") return value.payload.flag.slug return value.type }) }) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output Every event includes `id`, `createdAt`, `region`, `type`, and `payload`. The discriminated union covers flag and segment create, update, and delete events with typed current, previous, patch, and deletion fields. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates each delivery by event ID. # On Vercel feature flag segment created Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-feature-flag-segment-created Run an automation when Vercel reports feature flag segment created. `vercel.onFeatureFlagSegmentCreated` starts an automation for the corresponding Vercel webhook event. ```ts automations/on-feature-flag-segment-created.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("On Vercel feature flag segment created", () => { const event = vercel.onFeatureFlagSegmentCreated() event.transform(({ payload }) => payload.segment) }) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output The event includes `id`, `createdAt`, `region`, its exact `type` discriminator, and a typed `payload`. `payload.segment` contains the segment ID, slug, project ID, and timestamps. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates the delivery by event ID. # On Vercel feature flag segment deleted Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-feature-flag-segment-deleted Run an automation when Vercel reports feature flag segment deleted. `vercel.onFeatureFlagSegmentDeleted` starts an automation for the corresponding Vercel webhook event. ```ts automations/on-feature-flag-segment-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("On Vercel feature flag segment deleted", () => { const event = vercel.onFeatureFlagSegmentDeleted() event.transform(({ payload }) => ({ segment: payload.segment, deletedAt: payload.deletedAt, })) }) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output The event includes `id`, `createdAt`, `region`, its exact `type` discriminator, and a typed `payload`. The payload contains the deleted segment and its deletion timestamp. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates the delivery by event ID. # On Vercel feature flag segment updated Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-feature-flag-segment-updated Run an automation when Vercel reports feature flag segment updated. `vercel.onFeatureFlagSegmentUpdated` starts an automation for the corresponding Vercel webhook event. ```ts automations/on-feature-flag-segment-updated.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("On Vercel feature flag segment updated", () => { const event = vercel.onFeatureFlagSegmentUpdated() event.transform(({ payload }) => ({ segment: payload.segment, previous: payload.previousSegment, patch: payload.patch, })) }) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output The event includes `id`, `createdAt`, `region`, its exact `type` discriminator, and a typed `payload`. The payload contains the current segment, previous segment, and changed fields. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates the delivery by event ID. # On Vercel feature flag updated Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-feature-flag-updated Run an automation when Vercel reports feature flag updated. `vercel.onFeatureFlagUpdated` starts an automation for the corresponding Vercel webhook event. ```ts automations/on-feature-flag-updated.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("On Vercel feature flag updated", () => { const event = vercel.onFeatureFlagUpdated() event.transform(({ payload }) => ({ flag: payload.flag, previous: payload.previousFlag, patch: payload.patch, })) }) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output The event includes `id`, `createdAt`, `region`, its exact `type` discriminator, and a typed `payload`. The payload contains the current flag, previous flag, and changed fields. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates the delivery by event ID. # On Vercel integration configuration event Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-integration-configuration-event Run an automation when a Vercel integration installation changes. `vercel.onIntegrationConfigurationEvent` covers permission, scope, removal, and ownership-transfer changes. Use a specific trigger for one change. ```ts automations/watch-vercel-installation.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Watch Vercel installation", () => { const event = vercel.onIntegrationConfigurationEvent() event.transform(({ payload, type }) => ({ configurationId: payload.configuration.id, type, })) }) ``` Optional static `account` defaults to the project's Vercel binding and must use OAuth. ## Trigger data The event `type` is `integration-configuration.permission-upgraded`, `integration-configuration.removed`, `integration-configuration.scope-change-confirmed`, or `integration-configuration.transferred`. Transfer events include the previous and new team or personal-account IDs. Other events include the owner and current configuration. # On Vercel integration configuration permission upgraded Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-integration-configuration-permission-upgraded Run an automation when an installation's Vercel project access changes. `vercel.onIntegrationConfigurationPermissionUpgraded` emits when a user changes the installation's available projects. ```ts automations/watch-vercel-project-access.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Watch Vercel project access", () => { const event = vercel.onIntegrationConfigurationPermissionUpgraded() event.transform(({ payload }) => ({ addedProjectIds: payload.projects.added, configurationId: payload.configuration.id, removedProjectIds: payload.projects.removed, })) }) ``` Optional static `account` defaults to the project's Vercel OAuth binding. ## Trigger data Returns `type: "integration-configuration.permission-upgraded"`. `payload.configuration` contains the current selection. `payload.projects.added` and `payload.projects.removed` contain the changed project IDs. # On Vercel integration configuration removed Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-integration-configuration-removed Run an automation when Vercel removes an integration installation. `vercel.onIntegrationConfigurationRemoved` emits when Vercel removes the connected installation. ```ts automations/watch-removed-vercel-installations.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Watch removed Vercel installations", () => { const event = vercel.onIntegrationConfigurationRemoved() event.transform(({ payload }) => ({ configurationId: payload.configuration.id, projectIds: payload.configuration.projects, })) }) ``` Optional static `account` defaults to the project's Vercel OAuth binding. ## Trigger data Returns the [integration-configuration event shape](/reference/integrations/vercel/triggers/on-integration-configuration-event), narrowed to `type: "integration-configuration.removed"`. # On Vercel integration configuration scope change confirmed Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-integration-configuration-scope-change-confirmed Run an automation when Vercel confirms installation scope changes. `vercel.onIntegrationConfigurationScopeChangeConfirmed` emits when a user confirms pending OAuth scope changes. ```ts automations/watch-vercel-scope-changes.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Watch Vercel scope changes", () => { const event = vercel.onIntegrationConfigurationScopeChangeConfirmed() event.transform(({ payload }) => ({ configurationId: payload.configuration.id, scopes: payload.configuration.scopes, })) }) ``` Optional static `account` defaults to the project's Vercel OAuth binding. ## Trigger data Returns `type: "integration-configuration.scope-change-confirmed"`. `payload.configuration.scopes` contains all approved scopes after confirmation. # On Vercel integration configuration transferred Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-integration-configuration-transferred Run an automation when a Vercel integration installation changes owner. `vercel.onIntegrationConfigurationTransferred` emits when an installation moves between a personal account and a team, or between teams. ```ts automations/watch-transferred-vercel-installations.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Watch transferred Vercel installations", () => { const event = vercel.onIntegrationConfigurationTransferred() event.transform(({ payload }) => ({ configurationId: payload.configuration.id, newOwnerId: payload.newTeamId ?? payload.newAccountId, previousOwnerId: payload.previousTeamId ?? payload.previousAccountId, })) }) ``` Optional static `account` defaults to the project's Vercel OAuth binding. Automate.ax rebinds the installation to its new owner before delivery. ## Trigger data Returns `type: "integration-configuration.transferred"`. The payload includes `installationId` plus nullable previous and new team or personal-account IDs. # On Vercel integration resource event Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-integration-resource-event Run an automation when Vercel reports integration resource event. `vercel.onIntegrationResourceEvent` starts an automation for any event in this Vercel lifecycle family. ```ts automations/on-integration-resource-event.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("On Vercel integration resource event", () => { const event = vercel.onIntegrationResourceEvent() event.transform((value) => ({ connected: value.type === "integration-resource.project-connected", projectId: value.payload.projectId, resourceId: value.payload.resourceId, })) }) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output Every event includes `id`, `createdAt`, `region`, `type`, and `payload`. The union distinguishes project connection and disconnection while preserving the installation, resource, project, and target identifiers. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates each delivery by event ID. # On Vercel integration resource project connected Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-integration-resource-project-connected Run an automation when Vercel reports integration resource project connected. `vercel.onIntegrationResourceProjectConnected` starts an automation for the corresponding Vercel webhook event. ```ts automations/on-integration-resource-project-connected.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation( "On Vercel integration resource project connected", () => { const event = vercel.onIntegrationResourceProjectConnected() event.transform(({ payload }) => ({ projectId: payload.projectId, resourceId: payload.resourceId, targets: payload.targets, })) }, ) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output The event includes `id`, `createdAt`, `region`, its exact `type` discriminator, and a typed `payload`. The payload identifies the integration installation, resource, connected project, and deployment targets. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates the delivery by event ID. # On Vercel integration resource project disconnected Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-integration-resource-project-disconnected Run an automation when Vercel reports integration resource project disconnected. `vercel.onIntegrationResourceProjectDisconnected` starts an automation for the corresponding Vercel webhook event. ```ts automations/on-integration-resource-project-disconnected.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation( "On Vercel integration resource project disconnected", () => { const event = vercel.onIntegrationResourceProjectDisconnected() event.transform(({ payload }) => ({ projectId: payload.projectId, resourceId: payload.resourceId, targets: payload.targets, })) }, ) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output The event includes `id`, `createdAt`, `region`, its exact `type` discriminator, and a typed `payload`. The payload identifies the integration installation, resource, disconnected project, and previous deployment targets. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates the delivery by event ID. # On Vercel project created Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-project-created Run an automation when Vercel creates a project. `vercel.onProjectCreated` emits when Vercel creates a project in the connected scope. ```ts automations/watch-new-vercel-projects.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Watch new Vercel projects", () => { const event = vercel.onProjectCreated() event.transform(({ payload }) => ({ projectId: payload.project.id, projectName: payload.project.name, })) }) ``` Optional static `account` defaults to the project's Vercel OAuth binding. Vercel sends this event only when the integration has access to all projects in the scope. ## Trigger data Returns the [project event shape](/reference/integrations/vercel/triggers/on-project-event), narrowed to `type: "project.created"`. # On Vercel project domain created Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-project-domain-created Run an automation when Vercel adds a domain to a project. `vercel.onProjectDomainCreated` emits when Vercel adds a domain to a project. ```ts automations/watch-new-vercel-project-domains.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Watch new Vercel project domains", () => { const event = vercel.onProjectDomainCreated() event.transform(({ payload }) => ({ domain: payload.domain.name, projectId: payload.project.id, })) }) ``` Optional static `account` defaults to the project's Vercel OAuth binding. ## Trigger data Returns the [project-domain event shape](/reference/integrations/vercel/triggers/on-project-domain-event), narrowed to `type: "project.domain.created"`. # On Vercel project domain deleted Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-project-domain-deleted Run an automation when Vercel removes a domain from a project. `vercel.onProjectDomainDeleted` emits when Vercel removes a domain from a project. ```ts automations/watch-removed-vercel-project-domains.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Watch removed Vercel project domains", () => { const event = vercel.onProjectDomainDeleted() event.transform(({ payload }) => ({ domain: payload.domain.name, projectId: payload.project.id, })) }) ``` Optional static `account` defaults to the project's Vercel OAuth binding. ## Trigger data Returns the [project-domain event shape](/reference/integrations/vercel/triggers/on-project-domain-event), narrowed to `type: "project.domain.deleted"`. # On Vercel project domain event Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-project-domain-event Run an automation when a Vercel project domain changes. `vercel.onProjectDomainEvent` covers creation, update, deletion, verification, verification loss, and moves. Use a specific trigger for one operation. ```ts automations/watch-vercel-domains.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Watch Vercel domains", () => { const event = vercel.onProjectDomainEvent() event.transform(({ id, type }) => ({ deliveryId: id, type, })) }) ``` Optional static `account` defaults to the project's Vercel binding and must use OAuth. ## Trigger data The event `type` is `project.domain.created`, `project.domain.updated`, `project.domain.deleted`, `project.domain.verified`, `project.domain.unverified`, or `project.domain.moved`. Standard events include `domain` and `project`. Updates include `previous` and `next`. Moves include `from`, `to`, and `isRedirect`. # On Vercel project domain moved Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-project-domain-moved Run an automation when a domain moves between Vercel projects. `vercel.onProjectDomainMoved` emits when a domain moves between projects. ```ts automations/watch-moved-vercel-project-domains.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Watch moved Vercel project domains", () => { const event = vercel.onProjectDomainMoved() event.transform(({ payload }) => ({ domain: payload.domain.name, fromProjectId: payload.from.projectId, leftRedirect: payload.isRedirect, toProjectId: payload.to.projectId, })) }) ``` Optional static `account` defaults to the project's Vercel OAuth binding. ## Trigger data Returns `type: "project.domain.moved"`. `payload.from.projectId` and `payload.to.projectId` identify the projects. `payload.isRedirect` reports whether Vercel left a redirect on the previous project. # On Vercel project domain unverified Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-project-domain-unverified Run an automation when a Vercel project domain becomes unverified. `vercel.onProjectDomainUnverified` emits when a previously verified project domain loses verification. ```ts automations/watch-unverified-vercel-project-domains.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Watch unverified Vercel project domains", () => { const event = vercel.onProjectDomainUnverified() event.transform(({ payload }) => ({ domain: payload.domain.name, projectId: payload.project.id, })) }) ``` Optional static `account` defaults to the project's Vercel OAuth binding. ## Trigger data Returns the [project-domain event shape](/reference/integrations/vercel/triggers/on-project-domain-event), narrowed to `type: "project.domain.unverified"`. # On Vercel project domain updated Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-project-domain-updated Run an automation when Vercel updates project-domain settings. `vercel.onProjectDomainUpdated` emits when a domain's name, redirect, status code, or Git branch changes. ```ts automations/watch-updated-vercel-project-domains.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Watch updated Vercel project domains", () => { const event = vercel.onProjectDomainUpdated() event.transform(({ payload }) => ({ next: payload.next, previous: payload.previous, projectId: payload.project.id, })) }) ``` Optional static `account` defaults to the project's Vercel OAuth binding. ## Trigger data Returns `type: "project.domain.updated"`. `payload.previous` and `payload.next` each contain `domain`, nullable `gitBranch`, nullable `redirect`, and nullable `redirectStatusCode`. `payload.project` identifies the owning project. # On Vercel project domain verified Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-project-domain-verified Run an automation when Vercel verifies a project domain. `vercel.onProjectDomainVerified` emits when Vercel verifies a project domain. ```ts automations/watch-verified-vercel-project-domains.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Watch verified Vercel project domains", () => { const event = vercel.onProjectDomainVerified() event.transform(({ payload }) => ({ domain: payload.domain.name, projectId: payload.project.id, })) }) ``` Optional static `account` defaults to the project's Vercel OAuth binding. ## Trigger data Returns the [project-domain event shape](/reference/integrations/vercel/triggers/on-project-domain-event), narrowed to `type: "project.domain.verified"`. # On Vercel project environment variable created Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-project-environment-variable-created Run an automation when Vercel creates a project environment variable. `vercel.onProjectEnvironmentVariableCreated` matches `project.env-variable.created`. ```ts automations/audit-new-vercel-environment-variables.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Audit new Vercel environment variables", () => { const event = vercel.onProjectEnvironmentVariableCreated() event.transform(({ payload }) => ({ environmentVariableId: payload.envVarId, projectId: payload.projectId, })) }) ``` Optional static `account` defaults to the project's Vercel OAuth binding. ## Trigger data Returns the [environment-variable event shape](/reference/integrations/vercel/triggers/on-project-environment-variable-event), narrowed to `type: "project.env-variable.created"`. Vercel never includes the variable value. # On Vercel project environment variable deleted Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-project-environment-variable-deleted Run an automation when Vercel deletes a project environment variable. `vercel.onProjectEnvironmentVariableDeleted` matches `project.env-variable.deleted`. ```ts automations/audit-deleted-vercel-environment-variables.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Audit deleted Vercel environment variables", () => { const event = vercel.onProjectEnvironmentVariableDeleted() event.transform(({ payload }) => ({ environmentVariableId: payload.envVarId, projectId: payload.projectId, })) }) ``` Optional static `account` defaults to the project's Vercel OAuth binding. ## Trigger data Returns the [environment-variable event shape](/reference/integrations/vercel/triggers/on-project-environment-variable-event), narrowed to `type: "project.env-variable.deleted"`. `payload.envVarId` can be `null` after deletion, and Vercel never includes the variable value. # On Vercel project environment variable event Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-project-environment-variable-event Run an automation when a Vercel project environment variable changes. `vercel.onProjectEnvironmentVariableEvent` covers creation, update, and deletion. Use a specific trigger for one operation. ```ts automations/audit-vercel-environment-variables.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Audit Vercel environment variables", () => { const event = vercel.onProjectEnvironmentVariableEvent() event.transform(({ payload, type }) => ({ environmentVariableId: payload.envVarId, projectId: payload.projectId, type, })) }) ``` Optional static `account` defaults to the project's Vercel binding and must use OAuth. ## Trigger data The event `type` is `project.env-variable.created`, `project.env-variable.updated`, or `project.env-variable.deleted`. Vercel sends project and variable IDs, the owning team or user, and metadata, but never the variable value. # On Vercel project environment variable updated Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-project-environment-variable-updated Run an automation when Vercel updates a project environment variable. `vercel.onProjectEnvironmentVariableUpdated` matches `project.env-variable.updated`. ```ts automations/audit-updated-vercel-environment-variables.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Audit updated Vercel environment variables", () => { const event = vercel.onProjectEnvironmentVariableUpdated() event.transform(({ payload }) => ({ environmentVariableId: payload.envVarId, projectId: payload.projectId, })) }) ``` Optional static `account` defaults to the project's Vercel OAuth binding. ## Trigger data Returns the [environment-variable event shape](/reference/integrations/vercel/triggers/on-project-environment-variable-event), narrowed to `type: "project.env-variable.updated"`. Vercel never includes the variable value. # On Vercel project event Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-project-event Run an automation when Vercel creates, removes, or renames a project. `vercel.onProjectEvent` covers project creation, removal, and renaming. Use a specific trigger for one event. ```ts automations/watch-vercel-projects.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Watch Vercel projects", () => { const event = vercel.onProjectEvent() event.transform(({ payload, type }) => ({ projectId: payload.project.id, projectName: payload.project.name, type, })) }) ``` Optional static `account` defaults to the project's Vercel binding and must use OAuth. ## Trigger data The event `type` is `project.created`, `project.removed`, or `project.renamed`. The payload includes the project, owning team or user, and other Vercel fields. The top level includes `id`, `createdAt`, and `region`. # On Vercel project removed Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-project-removed Run an automation when Vercel removes a project. `vercel.onProjectRemoved` emits when Vercel removes a project from the connected scope. ```ts automations/watch-removed-vercel-projects.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Watch removed Vercel projects", () => { const event = vercel.onProjectRemoved() event.transform(({ payload }) => ({ projectId: payload.project.id, projectName: payload.project.name, })) }) ``` Optional static `account` defaults to the project's Vercel OAuth binding. Vercel sends this event only when the integration has access to all projects in the scope. ## Trigger data Returns the [project event shape](/reference/integrations/vercel/triggers/on-project-event), narrowed to `type: "project.removed"`. # On Vercel project renamed Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-project-renamed Run an automation when Vercel renames a project. `vercel.onProjectRenamed` emits when a project's name changes. ```ts automations/watch-renamed-vercel-projects.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("Watch renamed Vercel projects", () => { const event = vercel.onProjectRenamed() event.transform(({ payload }) => ({ newName: payload.project.name, previousName: payload.previousName, projectId: payload.project.id, })) }) ``` Optional static `account` defaults to the project's Vercel OAuth binding. Vercel sends this event only when the integration has access to all projects in the scope. ## Trigger data Returns the [project event shape](/reference/integrations/vercel/triggers/on-project-event), narrowed to: ```ts theme={null} type VercelProjectRenamedEvent = VercelProjectEvent & { type: "project.renamed" payload: { previousName: string } } ``` # On Vercel rolling release aborted Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-rolling-release-aborted Run an automation when Vercel reports rolling release aborted. `vercel.onRollingReleaseAborted` starts an automation for the corresponding Vercel webhook event. ```ts automations/on-rolling-release-aborted.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("On Vercel rolling release aborted", () => { const event = vercel.onRollingReleaseAborted() event.transform(({ payload }) => ({ projectId: payload.project.id, state: payload.rollingRelease.state, })) }) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output The event includes `id`, `createdAt`, `region`, its exact `type` discriminator, and a typed `payload`. `payload.rollingRelease` contains the aborted staged rollout and `payload.prevRollingRelease` contains its prior state. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates the delivery by event ID. # On Vercel rolling release approved Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-rolling-release-approved Run an automation when Vercel reports rolling release approved. `vercel.onRollingReleaseApproved` starts an automation for the corresponding Vercel webhook event. ```ts automations/on-rolling-release-approved.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("On Vercel rolling release approved", () => { const event = vercel.onRollingReleaseApproved() event.transform(({ payload }) => ({ stage: payload.rollingRelease.activeStageIndex, state: payload.rollingRelease.state, })) }) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output The event includes `id`, `createdAt`, `region`, its exact `type` discriminator, and a typed `payload`. The payload contains the newly approved stage, rollout configuration, and prior rollout state. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates the delivery by event ID. # On Vercel rolling release completed Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-rolling-release-completed Run an automation when Vercel reports rolling release completed. `vercel.onRollingReleaseCompleted` starts an automation for the corresponding Vercel webhook event. ```ts automations/on-rolling-release-completed.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("On Vercel rolling release completed", () => { const event = vercel.onRollingReleaseCompleted() event.transform(({ payload }) => ({ projectId: payload.project.id, state: payload.rollingRelease.state, })) }) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output The event includes `id`, `createdAt`, `region`, its exact `type` discriminator, and a typed `payload`. The payload contains the completed rollout, deployment IDs, stages, and prior state. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates the delivery by event ID. # On Vercel rolling release event Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-rolling-release-event Run an automation when Vercel reports rolling release event. `vercel.onRollingReleaseEvent` starts an automation for any event in this Vercel lifecycle family. ```ts automations/on-rolling-release-event.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("On Vercel rolling release event", () => { const event = vercel.onRollingReleaseEvent() event.transform((value) => ({ projectId: value.payload.project.id, state: value.payload.rollingRelease.state, type: value.type, })) }) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output Every event includes `id`, `createdAt`, `region`, `type`, and `payload`. The union covers started, approved, completed, and aborted rollouts. Each payload includes the current rollout, stage configuration, deployments, and previous state when available. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates each delivery by event ID. # On Vercel rolling release started Source: https://docs.automate.ax/reference/integrations/vercel/triggers/on-rolling-release-started Run an automation when Vercel reports rolling release started. `vercel.onRollingReleaseStarted` starts an automation for the corresponding Vercel webhook event. ```ts automations/on-rolling-release-started.automation.ts theme={null} import { automation } from "automate.ax" import { vercel } from "automate.ax/vercel" export default automation("On Vercel rolling release started", () => { const event = vercel.onRollingReleaseStarted() event.transform(({ payload }) => ({ projectId: payload.project.id, deployments: payload.rollingRelease.deploymentIds, })) }) ``` ## Input The trigger accepts optional static `account` selection. Without it, Automate.ax uses the project's Vercel OAuth binding. ## Output The event includes `id`, `createdAt`, `region`, its exact `type` discriminator, and a typed `payload`. The payload contains the active rollout, deployment IDs, traffic stages, and previous rollout when present. ## Provider behavior Automate.ax verifies Vercel's signature, routes the event to the matching installation, and deduplicates the delivery by event ID. # Create asset Source: https://docs.automate.ax/reference/integrations/webflow/actions/create-asset Creates a hosted upload target for a new asset file. `webflow.createAsset` creates a hosted upload target for a new asset file. ## Example ```ts automations/webflow-create-asset.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Create asset", () => { onDashboardRun({ title: "Create asset" }) webflow.createAsset({ siteId: "site-id", fileHash: "d41d8cd98f00b204e9800998ecf8427e", fileName: "hero.png", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `assets:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `fileName` | `string` | Yes | Filename, including its extension. | | `fileHash` | `string` | Yes | MD5 hash of the file. | | `parentFolder` | `string` | No | Webflow `parentFolder` value. | | `siteId` | `string` | Yes | Webflow site ID. | > [!NOTE] > > This action creates an upload target. Upload the file bytes to the returned > provider URL to finish the asset upload. ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `uploadDetails` | `Webflow.AssetUploadUploadDetails` | Webflow `uploadDetails` value. | | `contentType` | `string` | Webflow `contentType` value. | | `id` | `string` | Webflow `id` value. | | `parentFolder` | `string` | Webflow `parentFolder` value. | | `uploadUrl` | `string` | Webflow `uploadUrl` value. | | `assetUrl` | `string` | Webflow `assetUrl` value. | | `hostedUrl` | `string` | Webflow `hostedUrl` value. | | `originalFileName` | `string` | Webflow `originalFileName` value. | | `createdOn` | `string` | Webflow `createdOn` value. | | `lastUpdated` | `string` | Webflow `lastUpdated` value. | # Create asset folder Source: https://docs.automate.ax/reference/integrations/webflow/actions/create-asset-folder Creates an asset folder, optionally beneath a parent folder. `webflow.createAssetFolder` creates an asset folder, optionally beneath a parent folder. ## Example ```ts automations/webflow-create-asset-folder.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Create asset folder", () => { onDashboardRun({ title: "Create asset folder" }) webflow.createAssetFolder({ siteId: "site-id", displayName: "Campaign images", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `assets:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `displayName` | `string` | Yes | Webflow `displayName` value. | | `parentFolder` | `string` | No | Webflow `parentFolder` value. | | `siteId` | `string` | Yes | Webflow site ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `id` | `string` | Webflow `id` value. | | `displayName` | `string` | Webflow `displayName` value. | | `parentFolder` | `string` | Webflow `parentFolder` value. | | `assets` | `string[]` | Webflow `assets` value. | | `siteId` | `string` | Webflow site ID. | | `createdOn` | `string` | Webflow `createdOn` value. | | `lastUpdated` | `string` | Webflow `lastUpdated` value. | # Create collection Source: https://docs.automate.ax/reference/integrations/webflow/actions/create-collection Creates a CMS collection and its initial fields. `webflow.createCollection` creates a CMS collection and its initial fields. ## Example ```ts automations/webflow-create-collection.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Create collection", () => { onDashboardRun({ title: "Create collection" }) webflow.createCollection({ siteId: "site-id", displayName: "Articles", singularName: "Article", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `cms:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `displayName` | `string` | Yes | Webflow `displayName` value. | | `singularName` | `string` | Yes | Webflow `singularName` value. | | `slug` | `string` | No | Webflow `slug` value. | | `fields` | `object[]` | No | Webflow `fields` value. | | `siteId` | `string` | Yes | Webflow site ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `id` | `string` | Webflow `id` value. | | `displayName` | `string` | Webflow `displayName` value. | | `singularName` | `string` | Webflow `singularName` value. | | `slug` | `string` | Webflow `slug` value. | | `createdOn` | `string` | Webflow `createdOn` value. | | `lastUpdated` | `string` | Webflow `lastUpdated` value. | | `fields` | `Webflow.Field[]` | Webflow `fields` value. | # Create collection field Source: https://docs.automate.ax/reference/integrations/webflow/actions/create-collection-field Adds a typed field to an existing CMS collection. `webflow.createCollectionField` adds a typed field to an existing CMS collection. ## Example ```ts automations/webflow-create-collection-field.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Create collection field", () => { onDashboardRun({ title: "Create collection field" }) webflow.createCollectionField({ collectionId: "collection-id", displayName: "Related article", isRequired: false, metadata: { collectionId: "related-collection-id" }, type: "Reference", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `cms:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `id` | `string` | No | Webflow `id` value. | | `isEditable` | `boolean` | No | Webflow `isEditable` value. | | `isRequired` | `boolean` | No | Webflow `isRequired` value. | | `type` | `Webflow.StaticFieldType \| "Option" \| Webflow.ReferenceFieldType` | Yes | Webflow `type` value. | | `displayName` | `string` | Yes | Webflow `displayName` value. | | `helpText` | `string` | No | Webflow `helpText` value. | | `collectionId` | `string` | Yes | Webflow CMS collection ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `id` | `string` | Webflow `id` value. | | `isEditable` | `boolean` | Webflow `isEditable` value. | | `isRequired` | `boolean` | Webflow `isRequired` value. | | `type` | `Webflow.StaticFieldType \| "Option" \| Webflow.ReferenceFieldType` | Webflow `type` value. | | `displayName` | `string` | Webflow `displayName` value. | | `helpText` | `string` | Webflow `helpText` value. | # Create collection item Source: https://docs.automate.ax/reference/integrations/webflow/actions/create-collection-item Creates one or more staged CMS items in a collection. `webflow.createCollectionItem` creates one or more staged CMS items in a collection. ## Example ```ts automations/webflow-create-collection-item.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Create collection item", () => { onDashboardRun({ title: "Create collection item" }) webflow.createCollectionItem({ collectionId: "collection-id", fieldData: { name: "Launch notes", slug: "launch-notes" }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `cms:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `collectionId` | `string` | Yes | Webflow CMS collection ID. | | `fieldData` | `Webflow.CollectionItemPostSingleFieldData` | No | Fields for one item. `name` and `slug` are required. Use this or `items`. | | `isArchived` | `boolean` | No | Creates the single item as archived. | | `isDraft` | `boolean` | No | Creates the single item as a draft. | | `items` | `Webflow.CollectionItemPostSingle[]` | No | Items to create in one request. Use this or the single-item fields. | | `skipInvalidFiles` | `boolean` | No | Skips invalid file values instead of rejecting the request. | Provide either the single-item fields (`fieldData`, `isArchived`, and `isDraft`) or `items`, not both. ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `id` | `string` | Webflow `id` value. | | `cmsLocaleId` | `string` | Optional CMS locale ID. | | `lastPublished` | `string` | Webflow `lastPublished` value. | | `lastUpdated` | `string` | Webflow `lastUpdated` value. | | `createdOn` | `string` | Webflow `createdOn` value. | | `isArchived` | `boolean` | Webflow `isArchived` value. | | `isDraft` | `boolean` | Webflow `isDraft` value. | | `fieldData` | `Webflow.CollectionItemFieldData` | Webflow `fieldData` value. | # Create comment reply Source: https://docs.automate.ax/reference/integrations/webflow/actions/create-comment-reply Adds a reply to a Webflow design-review comment thread. `webflow.createCommentReply` adds a text reply to a design-review comment thread. ## Example ```ts automations/webflow-create-comment-reply.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Create comment reply", () => { onDashboardRun({ title: "Create comment reply" }) webflow.createCommentReply({ siteId: "site-id", commentThreadId: "comment-thread-id", content: "The requested change is ready for review.", }) }) ``` ## Inputs Every input accepts a compatible signal. This action requires the `comments:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | | `commentThreadId` | `string` | Yes | Comment-thread ID. | | `content` | `string` | Yes | Reply text from 1 through 2,040 characters. | Mention a Webflow user by including `[[userId]]` in `content`. Creating a reply fires Webflow's `comment_created` webhook. ## Output | Field | Type | Description | | - | - | - | | `id` | `string` | Reply ID. | | `commentId` | `string` | Parent comment ID. | | `siteId` | `string` | Site ID. | | `pageId` | `string` | Page ID. | | `breakpoint` | `string` | Design breakpoint. | | `content` | `string` | Reply content. | | `isResolved` | `boolean` | Whether the thread is resolved. | | `author` | `{ id: string; email: string; name: string }` | Reply author. | | `createdOn` | `string` | Creation timestamp. | | `lastUpdated` | `string` | Last-update timestamp. | | `localeId` | `string` | Locale ID, when present. | | `mentionedUsers` | `{ id: string; email: string; name: string }[]` | Mentioned users, when present. | # Create custom font Source: https://docs.automate.ax/reference/integrations/webflow/actions/create-custom-font Creates upload credentials for a custom Webflow font. `webflow.createCustomFont` registers custom-font metadata and creates a provider upload target. ## Example ```ts automations/webflow-create-custom-font.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Create custom font", () => { onDashboardRun({ title: "Create custom font" }) webflow.createCustomFont({ siteId: "site-id", fileName: "AcmeSans-Regular.woff2", fileHash: "d41d8cd98f00b204e9800998ecf8427e", fontFamily: "Acme Sans", weight: 400, italic: false, fontDisplay: "swap", }) }) ``` ## Inputs Every input accepts a compatible signal. This action requires the `sites:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | | `fileName` | `string` | Yes | Filename of at most 256 characters ending in `.woff2`, `.woff`, `.ttf`, `.otf`, or `.eot`. | | `fileHash` | `string` | Yes | Lowercase 32-character hexadecimal MD5 hash of the font bytes. | | `fontFamily` | `string` | Yes | CSS family name from 1 through 256 characters. | | `weight` | `number` | Yes | Integer CSS weight from 1 through 1,000. | | `italic` | `boolean` | Yes | Whether the font is italic. | | `fontDisplay` | `"auto" \| "block" \| "swap" \| "fallback" \| "optional"` | Yes | CSS `font-display` value. | | `axes` | `WebflowCustomFontAxis[]` | No | Up to 16 variable-font axes. Omit or pass `[]` for a static font. | Each axis contains numeric `min`, `max`, and `defaultValue` fields, an optional `name`, and a `tag` of exactly four printable ASCII characters. `defaultValue` must fall between `min` and `max`. > [!NOTE] > > Upload the font bytes to the returned provider URL to finish creating the > font. ## Output | Field | Type | Description | | - | - | - | | `customFont` | `WebflowCustomFont` | Registered font metadata. | | `upload` | `WebflowCustomFontUpload` | Signed upload URL, form fields, and expiry timestamp. | `customFont` includes `id`, `fontFamily`, `format`, `fileName`, `weight`, `italic`, `fontDisplay`, `axes`, and `hostedUrl`. Post the binary to `upload.url` as multipart form data. Include every value in `upload.fields`, then append the binary in a final field named `file`. # Create custom fonts Source: https://docs.automate.ax/reference/integrations/webflow/actions/create-custom-fonts Creates upload credentials for up to 25 custom fonts. `webflow.createCustomFonts` prepares a batch of custom fonts for upload. ## Example ```ts automations/webflow-create-custom-fonts.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Create custom fonts", () => { onDashboardRun({ title: "Create custom fonts" }) webflow.createCustomFonts({ siteId: "site-id", items: [ { fileName: "AcmeSans-Regular.woff2", fileHash: "d41d8cd98f00b204e9800998ecf8427e", fontFamily: "Acme Sans", weight: 400, italic: false, fontDisplay: "swap", }, ], }) }) ``` ## Inputs Every input accepts a compatible signal. This action requires the `sites:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | | `items` | `WebflowCustomFontCreateInput[]` | Yes | From 1 through 25 font definitions. | Each item requires `fileName`, `fileHash`, `fontFamily`, `weight`, `italic`, and `fontDisplay`; `axes` is optional. Filenames accept `.woff2`, `.woff`, `.ttf`, `.otf`, or `.eot` and have a 256-character limit. `fileHash` is a lowercase 32-character hexadecimal MD5. Family names have a 256-character limit, weights range from 1 through 1,000, and `fontDisplay` accepts `auto`, `block`, `swap`, `fallback`, or `optional`. Each font accepts up to 16 axes. ## Output | Field | Type | Description | | - | - | - | | `created` | `{ customFont: WebflowCustomFont; upload: WebflowCustomFontUpload }[]` | Registered fonts and their signed uploads. | | `failed` | `{ fileName: string; index: number; msg: string; name: string }[]` | Per-item registration failures. | # Create live collection item Source: https://docs.automate.ax/reference/integrations/webflow/actions/create-live-collection-item Creates and publishes one or more CMS items. `webflow.createLiveCollectionItem` creates and publishes one or more CMS items. ## Example ```ts automations/webflow-create-live-collection-item.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Create live collection item", () => { onDashboardRun({ title: "Create live collection item" }) webflow.createLiveCollectionItem({ collectionId: "collection-id", fieldData: { name: "Launch notes", slug: "launch-notes" }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `cms:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `collectionId` | `string` | Yes | Webflow CMS collection ID. | | `fieldData` | `Webflow.CollectionItemFieldData` | No | Fields for one item. `name` and `slug` are required. Use this or `items`. | | `isArchived` | `boolean` | No | Creates the single item as archived. | | `isDraft` | `boolean` | No | Creates the single item as a draft. | | `items` | `Webflow.CollectionItem[]` | No | Items to create and publish in one request. Use this or the single-item fields. | | `skipInvalidFiles` | `boolean` | No | Skips invalid file values instead of rejecting the request. | Provide either the single-item fields (`fieldData`, `isArchived`, and `isDraft`) or `items`, not both. ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `id` | `string` | Webflow `id` value. | | `cmsLocaleId` | `string` | Optional CMS locale ID. | | `lastPublished` | `string` | Webflow `lastPublished` value. | | `lastUpdated` | `string` | Webflow `lastUpdated` value. | | `createdOn` | `string` | Webflow `createdOn` value. | | `isArchived` | `boolean` | Webflow `isArchived` value. | | `isDraft` | `boolean` | Webflow `isDraft` value. | | `fieldData` | `Webflow.CollectionItemFieldData` | Webflow `fieldData` value. | # Create localized collection items Source: https://docs.automate.ax/reference/integrations/webflow/actions/create-localized-collection-items Creates CMS item variants across multiple locales in bulk. `webflow.createLocalizedCollectionItems` creates CMS item variants across multiple locales in bulk. ## Example ```ts automations/webflow-create-localized-collection-items.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Create localized collection items", () => { onDashboardRun({ title: "Create localized collection items" }) webflow.createLocalizedCollectionItems({ collectionId: "collection-id", cmsLocaleIds: ["locale-id"], fieldData: { name: "Launch notes", slug: "launch-notes" }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `cms:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `skipInvalidFiles` | `boolean` | No | Webflow `skipInvalidFiles` value. | | `cmsLocaleIds` | `string[]` | No | Webflow `cmsLocaleIds` value. | | `isArchived` | `boolean` | No | Webflow `isArchived` value. | | `isDraft` | `boolean` | No | Webflow `isDraft` value. | | `fieldData` | `{ [x: string]: any; name: string; slug: string; } \| { [x: string]: any; name: string; slug: string; }[]` | Yes | Webflow `fieldData` value. | | `collectionId` | `string` | Yes | Webflow CMS collection ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `id` | `string` | Webflow `id` value. | | `cmsLocaleIds` | `string[]` | Webflow `cmsLocaleIds` value. | | `lastPublished` | `string` | Webflow `lastPublished` value. | | `lastUpdated` | `string` | Webflow `lastUpdated` value. | | `createdOn` | `string` | Webflow `createdOn` value. | | `isArchived` | `boolean` | Webflow `isArchived` value. | | `isDraft` | `boolean` | Webflow `isDraft` value. | | `fieldData` | `Webflow.BulkCollectionItemFieldData` | Webflow `fieldData` value. | # Create product Source: https://docs.automate.ax/reference/integrations/webflow/actions/create-product Creates an ecommerce product and its initial SKU. `webflow.createProduct` creates an ecommerce product and its initial SKU. ## Example ```ts automations/webflow-create-product.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Create product", () => { onDashboardRun({ title: "Create product" }) webflow.createProduct({ siteId: "site-id", product: { fieldData: { name: "T-shirt", slug: "t-shirt" }, }, sku: { fieldData: { name: "T-shirt", price: { currency: "USD", unit: "USD", value: 2500 }, slug: "t-shirt-default", }, }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `ecommerce:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `publishStatus` | `Webflow.PublishStatus` | No | Webflow `publishStatus` value. | | `product` | `object` | Yes | Webflow `product` value. | | `sku` | `object` | Yes | Webflow `sku` value. | | `siteId` | `string` | Yes | Webflow site ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `product` | `Webflow.Product` | Webflow `product` value. | | `skus` | `Webflow.Sku[]` | A list of SKU Objects | # Create product SKUs Source: https://docs.automate.ax/reference/integrations/webflow/actions/create-product-skus Adds one or more variant SKUs to an ecommerce product. `webflow.createProductSkus` adds one or more variant SKUs to an ecommerce product. ## Example ```ts automations/webflow-create-product-skus.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Create product SKUs", () => { onDashboardRun({ title: "Create product SKUs" }) webflow.createProductSkus({ siteId: "site-id", productId: "product-id", skus: [ { fieldData: { name: "T-shirt, blue", price: { currency: "USD", unit: "USD", value: 2500 }, slug: "t-shirt-blue", }, }, ], }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `ecommerce:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `publishStatus` | `Webflow.PublishStatus` | No | Webflow `publishStatus` value. | | `skus` | `object[]` | Yes | Webflow `skus` value. | | `siteId` | `string` | Yes | Webflow site ID. | | `productId` | `string` | Yes | Webflow product ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `skus` | `Webflow.Sku[]` | Webflow `skus` value. | # Delete all Google tags Source: https://docs.automate.ax/reference/integrations/webflow/actions/delete-all-google-tags Removes every Google tag configured for one Webflow site. `webflow.deleteAllGoogleTags` removes every Google tag configured for a site. ## Example ```ts automations/webflow-delete-all-google-tags.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Delete all Google tags", () => { onDashboardRun({ title: "Delete all Google tags" }) webflow.deleteAllGoogleTags({ siteId: "site-id" }) }) ``` ## Inputs Every input accepts a compatible signal. This action requires the `sites:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | ## Output Returns no value after Webflow deletes the tags. # Delete asset Source: https://docs.automate.ax/reference/integrations/webflow/actions/delete-asset Permanently deletes an asset from its Webflow site. `webflow.deleteAsset` permanently deletes an asset from its Webflow site. ## Example ```ts automations/webflow-delete-asset.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Delete asset", () => { onDashboardRun({ title: "Delete asset" }) webflow.deleteAsset({ assetId: "asset-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `assets:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `assetId` | `string` | Yes | Webflow asset ID. | > [!WARNING] > > This operation changes or permanently removes provider data. Confirm the IDs > before you deploy it. ## Output Completes without an output value after Webflow accepts the operation. # Delete collection Source: https://docs.automate.ax/reference/integrations/webflow/actions/delete-collection Permanently deletes a CMS collection and its items. `webflow.deleteCollection` permanently deletes a CMS collection and its items. ## Example ```ts automations/webflow-delete-collection.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Delete collection", () => { onDashboardRun({ title: "Delete collection" }) webflow.deleteCollection({ collectionId: "collection-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `cms:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `collectionId` | `string` | Yes | Webflow CMS collection ID. | > [!WARNING] > > This operation changes or permanently removes provider data. Confirm the IDs > before you deploy it. ## Output Completes without an output value after Webflow accepts the operation. # Delete collection field Source: https://docs.automate.ax/reference/integrations/webflow/actions/delete-collection-field Permanently deletes a field from a CMS collection. `webflow.deleteCollectionField` permanently deletes a field from a CMS collection. ## Example ```ts automations/webflow-delete-collection-field.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Delete collection field", () => { onDashboardRun({ title: "Delete collection field" }) webflow.deleteCollectionField({ collectionId: "collection-id", fieldId: "field-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `cms:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `collectionId` | `string` | Yes | Webflow CMS collection ID. | | `fieldId` | `string` | Yes | Webflow field id. | > [!WARNING] > > This operation changes or permanently removes provider data. Confirm the IDs > before you deploy it. ## Output Completes without an output value after Webflow accepts the operation. # Delete collection item Source: https://docs.automate.ax/reference/integrations/webflow/actions/delete-collection-item Deletes one staged CMS item in a selected locale. `webflow.deleteCollectionItem` deletes one staged CMS item in a selected locale. ## Example ```ts automations/webflow-delete-collection-item.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Delete collection item", () => { onDashboardRun({ title: "Delete collection item" }) webflow.deleteCollectionItem({ collectionId: "collection-id", itemId: "item-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `cms:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `cmsLocaleId` | `string` | No | Optional CMS locale ID. | | `collectionId` | `string` | Yes | Webflow CMS collection ID. | | `itemId` | `string` | Yes | Webflow CMS item ID. | > [!WARNING] > > This operation changes or permanently removes provider data. Confirm the IDs > before you deploy it. ## Output Completes without an output value after Webflow accepts the operation. # Delete collection items Source: https://docs.automate.ax/reference/integrations/webflow/actions/delete-collection-items Deletes multiple staged CMS items from a collection. `webflow.deleteCollectionItems` deletes multiple staged CMS items from a collection. ## Example ```ts automations/webflow-delete-collection-items.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Delete collection items", () => { onDashboardRun({ title: "Delete collection items" }) webflow.deleteCollectionItems({ collectionId: "collection-id", items: [{ id: "item-id" }], }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `cms:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `items` | `{ id: string; cmsLocaleIds?: string[]; }[]` | Yes | Webflow `items` value. | | `collectionId` | `string` | Yes | Webflow CMS collection ID. | > [!WARNING] > > This operation changes or permanently removes provider data. Confirm the IDs > before you deploy it. ## Output Completes without an output value after Webflow accepts the operation. # Delete custom font Source: https://docs.automate.ax/reference/integrations/webflow/actions/delete-custom-font Deletes one custom font from a Webflow site. `webflow.deleteCustomFont` permanently deletes one custom font from a site. ## Example ```ts automations/webflow-delete-custom-font.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Delete custom font", () => { onDashboardRun({ title: "Delete custom font" }) webflow.deleteCustomFont({ siteId: "site-id", fontId: "font-id" }) }) ``` ## Inputs Every input accepts a compatible signal. This action requires the `sites:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | | `fontId` | `string` | Yes | Custom-font ID. | ## Output Returns no value after Webflow deletes the font. # Delete custom fonts Source: https://docs.automate.ax/reference/integrations/webflow/actions/delete-custom-fonts Deletes up to 100 custom fonts from a Webflow site. `webflow.deleteCustomFonts` deletes a batch of custom fonts from one site. ## Example ```ts automations/webflow-delete-custom-fonts.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Delete custom fonts", () => { onDashboardRun({ title: "Delete custom fonts" }) webflow.deleteCustomFonts({ siteId: "site-id", items: [{ id: "font-id" }], }) }) ``` ## Inputs Every input accepts a compatible signal. This action requires the `sites:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | | `items` | `{ id: string }[]` | Yes | From 1 through 100 custom-font IDs. | ## Output | Field | Type | Description | | - | - | - | | `deleted` | `{ id: string }[]` | Deleted font IDs. | | `failed` | `{ id: string; msg: string; name: string }[]` | Per-font failures. | # Delete form submission Source: https://docs.automate.ax/reference/integrations/webflow/actions/delete-form-submission Permanently deletes one form submission. `webflow.deleteFormSubmission` permanently deletes one form submission. ## Example ```ts automations/webflow-delete-form-submission.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Delete form submission", () => { onDashboardRun({ title: "Delete form submission" }) webflow.deleteFormSubmission({ formSubmissionId: "form-submission-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `forms:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `formSubmissionId` | `string` | Yes | Webflow form-submission ID. | > [!WARNING] > > This operation changes or permanently removes provider data. Confirm the IDs > before you deploy it. ## Output Completes without an output value after Webflow accepts the operation. # Delete Google tag Source: https://docs.automate.ax/reference/integrations/webflow/actions/delete-google-tag Removes one Google tag from a Webflow site. `webflow.deleteGoogleTag` removes one Google tag and lets Webflow renormalize the remaining display order. ## Example ```ts automations/webflow-delete-google-tag.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Delete Google tag", () => { onDashboardRun({ title: "Delete Google tag" }) webflow.deleteGoogleTag({ siteId: "site-id", tagId: "G-XXXXXXXXXX" }) }) ``` ## Inputs Every input accepts a compatible signal. This action requires the `sites:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | | `tagId` | `string` | Yes | Google tag ID beginning with `G-`, `GT-`, `AW-`, or `DC-`. | ## Output | Field | Type | Description | | - | - | - | | `googleTagIds` | `{ displayName: string; tagId: string; order?: number }[]` | Remaining tags with normalized order values. | # Delete live collection item Source: https://docs.automate.ax/reference/integrations/webflow/actions/delete-live-collection-item Deletes one published CMS item in a selected locale. `webflow.deleteLiveCollectionItem` deletes one published CMS item in a selected locale. ## Example ```ts automations/webflow-delete-live-collection-item.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Delete live collection item", () => { onDashboardRun({ title: "Delete live collection item" }) webflow.deleteLiveCollectionItem({ collectionId: "collection-id", itemId: "item-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `cms:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `cmsLocaleId` | `string` | No | Optional CMS locale ID. | | `collectionId` | `string` | Yes | Webflow CMS collection ID. | | `itemId` | `string` | Yes | Webflow CMS item ID. | > [!WARNING] > > This operation changes or permanently removes provider data. Confirm the IDs > before you deploy it. ## Output Completes without an output value after Webflow accepts the operation. # Delete live collection items Source: https://docs.automate.ax/reference/integrations/webflow/actions/delete-live-collection-items Deletes multiple published CMS items immediately. `webflow.deleteLiveCollectionItems` deletes multiple published CMS items immediately. ## Example ```ts automations/webflow-delete-live-collection-items.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Delete live collection items", () => { onDashboardRun({ title: "Delete live collection items" }) webflow.deleteLiveCollectionItems({ collectionId: "collection-id", items: [{ id: "item-id" }], }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `cms:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `items` | `{ id: string; cmsLocaleIds?: string[]; }[]` | Yes | Webflow `items` value. | | `collectionId` | `string` | Yes | Webflow CMS collection ID. | > [!WARNING] > > This operation changes or permanently removes provider data. Confirm the IDs > before you deploy it. ## Output Completes without an output value after Webflow accepts the operation. # Delete page custom code Source: https://docs.automate.ax/reference/integrations/webflow/actions/delete-page-custom-code Removes all registered scripts applied to one page. `webflow.deletePageCustomCode` removes all registered scripts applied to one page. ## Example ```ts automations/webflow-delete-page-custom-code.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Delete page custom code", () => { onDashboardRun({ title: "Delete page custom code" }) webflow.deletePageCustomCode({ pageId: "page-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `custom_code:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `pageId` | `string` | Yes | Webflow page ID. | > [!WARNING] > > This operation changes or permanently removes provider data. Confirm the IDs > before you deploy it. ## Output Completes without an output value after Webflow accepts the operation. # Delete site custom code Source: https://docs.automate.ax/reference/integrations/webflow/actions/delete-site-custom-code Removes all registered scripts applied site-wide. `webflow.deleteSiteCustomCode` removes all registered scripts applied site-wide. ## Example ```ts automations/webflow-delete-site-custom-code.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Delete site custom code", () => { onDashboardRun({ title: "Delete site custom code" }) webflow.deleteSiteCustomCode({ siteId: "site-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `custom_code:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | > [!WARNING] > > This operation changes or permanently removes provider data. Confirm the IDs > before you deploy it. ## Output Completes without an output value after Webflow accepts the operation. # Delete site form submission Source: https://docs.automate.ax/reference/integrations/webflow/actions/delete-site-form-submission Permanently deletes one submission through its site-scoped Webflow route. `webflow.deleteSiteFormSubmission` permanently deletes one submission through Webflow's site-scoped API. ## Example ```ts automations/webflow-delete-site-form-submission.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Delete site form submission", () => { onDashboardRun({ title: "Delete site form submission" }) webflow.deleteSiteFormSubmission({ formSubmissionId: "submission-id", siteId: "site-id", }) }) ``` ## Inputs Every input accepts a compatible signal. This action requires the `forms:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | | `formSubmissionId` | `string` | Yes | Form-submission ID. | ## Output Completes without an output value after Webflow deletes the submission. > [!WARNING] > > Deleting a form submission is permanent. # Fulfill order Source: https://docs.automate.ax/reference/integrations/webflow/actions/fulfill-order Marks an order fulfilled and records shipping details. `webflow.fulfillOrder` marks an order fulfilled and records shipping details. ## Example ```ts automations/webflow-fulfill-order.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Fulfill order", () => { onDashboardRun({ title: "Fulfill order" }) webflow.fulfillOrder({ siteId: "site-id", orderId: "order-id", sendOrderFulfilledEmail: true, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `ecommerce:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `sendOrderFulfilledEmail` | `boolean` | No | Webflow `sendOrderFulfilledEmail` value. | | `siteId` | `string` | Yes | Webflow site ID. | | `orderId` | `string` | Yes | Webflow order ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `orderId` | `string` | Webflow order ID. | | `status` | `Webflow.OrderStatus` | Webflow `status` value. | | `comment` | `string` | Webflow `comment` value. | | `orderComment` | `string` | Webflow `orderComment` value. | | `acceptedOn` | `string` | Webflow `acceptedOn` value. | | `fulfilledOn` | `string` | Webflow `fulfilledOn` value. | | `refundedOn` | `string` | Webflow `refundedOn` value. | | `disputedOn` | `string` | Webflow `disputedOn` value. | | `disputeUpdatedOn` | `string` | Webflow `disputeUpdatedOn` value. | | `disputeLastStatus` | `Webflow.OrderDisputeLastStatus` | Webflow `disputeLastStatus` value. | | `customerPaid` | `Webflow.OrderPrice` | Webflow `customerPaid` value. | | `netAmount` | `Webflow.OrderPrice` | Webflow `netAmount` value. | | `applicationFee` | `Webflow.OrderPrice` | Webflow `applicationFee` value. | | `allAddresses` | `Webflow.OrderAddress[]` | Webflow `allAddresses` value. | | `shippingAddress` | `Webflow.OrderShippingAddress` | Webflow `shippingAddress` value. | | `billingAddress` | `Webflow.OrderBillingAddress` | Webflow `billingAddress` value. | | `shippingProvider` | `string` | Webflow `shippingProvider` value. | | `shippingTracking` | `string` | Webflow `shippingTracking` value. | | `shippingTrackingUrl` | `string` | Webflow `shippingTrackingUrl` value. | | `customerInfo` | `Webflow.OrderCustomerInfo` | Webflow `customerInfo` value. | | `purchasedItems` | `Webflow.OrderPurchasedItem[]` | Webflow `purchasedItems` value. | | `purchasedItemsCount` | `number` | Webflow `purchasedItemsCount` value. | | `stripeDetails` | `Webflow.StripeDetails` | Webflow `stripeDetails` value. | | `stripeCard` | `Webflow.StripeCard` | Webflow `stripeCard` value. | | `paypalDetails` | `Webflow.PaypalDetails` | Webflow `paypalDetails` value. | | `customData` | `Record[]` | Webflow `customData` value. | | `metadata` | `Webflow.OrderMetadata` | Webflow `metadata` value. | | `isCustomerDeleted` | `boolean` | Webflow `isCustomerDeleted` value. | | `isShippingRequired` | `boolean` | Webflow `isShippingRequired` value. | | `hasDownloads` | `boolean` | Webflow `hasDownloads` value. | | `paymentProcessor` | `string` | Webflow `paymentProcessor` value. | | `totals` | `Webflow.OrderTotals` | Webflow `totals` value. | | `downloadFiles` | `Webflow.OrderDownloadFilesItem[]` | Webflow `downloadFiles` value. | # Get Analyze time on page report Source: https://docs.automate.ax/reference/integrations/webflow/actions/get-analyze-time-on-page-report Retrieves time-on-page metrics from Webflow Analyze. `webflow.getAnalyzeTimeOnPageReport` retrieves time-on-page metrics for a reporting window. ## Example ```ts automations/webflow-get-analyze-time-on-page-report.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Get Analyze time on page", () => { onDashboardRun({ title: "Get Analyze time on page" }) webflow.getAnalyzeTimeOnPageReport({ siteId: "site-id", startTime: "2026-08-01T00:00:00Z", endTime: "2026-08-08T00:00:00Z", metricScope: "session", }) }) ``` ## Inputs Every input accepts a compatible signal. This action requires the `sites:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | | `startTime` | `string` | Yes | Inclusive UTC timestamp ending in `Z`; no earlier than April 9, 2025. | | `endTime` | `string` | Yes | Exclusive UTC timestamp ending in `Z`; after `startTime` and no more than 100 days later. | | `metricScope` | `"session" \| "user" \| "pageview"` | Yes | Unit used to compute the average. | | `timeseries` | `{ bucketTimeZone: string; granularityPeriod: "day" \| "week" }` | No | Adds bucketed values in the supplied IANA time zone. | | `deviceType` | `"desktop" \| "mobile" \| "tablet"` | No | Restricts the report to one device type. | | `country` | `string` | No | Two-letter country code. | | `pagePath` | `string` | No | Restricts the report to one page path. | | `trafficSource` | `string` | No | Restricts the report to one traffic-source code. | | `referrer` | `string` | No | Restricts the report to one referrer domain. | | `browser` | `string` | No | Restricts the report to one browser. | | `utmCampaign` | `string` | No | Restricts the report to one UTM campaign. | | `utmMedium` | `string` | No | Restricts the report to one UTM medium. | | `utmSource` | `string` | No | Restricts the report to one UTM source. | | `filter` | `object` | No | Applies multi-value or negated dimension filters. | Each `filter` entry accepts at least one of `eq: string`, `ne: string`, `in: string[]`, or `nin: string[]`. Supported keys are `audienceIds`, `browser`, `collectionId`, `country`, `dayOfWeek`, `deviceBrand`, `deviceType`, `domain`, `itemSlug`, `language`, `locale`, `nextCollectionId`, `nextItemSlug`, `nextPageId`, `os`, `pageId`, `pagePath`, `previousCollectionId`, `previousItemSlug`, `previousPageId`, `referrer`, `region`, `timeOfDay`, `timezone`, `trafficSource`, `utmCampaign`, `utmContent`, `utmMedium`, `utmSource`, `utmTerm`, and `visitStatus`. > [!WARNING] > > Your workspace needs the Webflow Analyze add-on. Webflow permits one Analyze > request at a time per access token. ## Output | Field | Type | Description | | - | - | - | | `report` | `"time_on_page"` | Report discriminator. | | `window` | `{ startTime: string; endTime: string }` | Applied reporting window. | | `metricScope` | `"session" \| "user" \| "pageview"` | Unit used for each average. | | `data` | `{ averageSeconds: number; timestamp: string }[]` | One aggregate point or one point per requested bucket. | | `bucketing` | `{ bucketTimeZone: string; granularityPeriod: "day" \| "week" }` | Applied bucket settings, when requested. | | `filter` | `object` | Applied filters, when present. | # Get Analyze top dimensions report Source: https://docs.automate.ax/reference/integrations/webflow/actions/get-analyze-top-dimensions-report Retrieves ranked dimension values from Webflow Analyze. `webflow.getAnalyzeTopDimensionsReport` ranks values such as countries, traffic sources, campaigns, and audiences. ## Example ```ts automations/webflow-get-analyze-top-dimensions-report.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Get Analyze top countries", () => { onDashboardRun({ title: "Get Analyze top countries" }) webflow.getAnalyzeTopDimensionsReport({ siteId: "site-id", startTime: "2026-08-01T00:00:00Z", endTime: "2026-08-08T00:00:00Z", dimension: "country", metricScope: "session", limit: 20, }) }) ``` ## Inputs Every input accepts a compatible signal. This action requires the `sites:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | | `startTime` | `string` | Yes | Inclusive UTC timestamp ending in `Z`; no earlier than April 9, 2025. | | `endTime` | `string` | Yes | Exclusive UTC timestamp ending in `Z`; after `startTime` and no more than 100 days later. | | `dimension` | `string` | Yes | Dimension whose values Webflow ranks. See the supported values below. | | `metricScope` | `"session" \| "user"` | Yes | Unit counted for each dimension value. | | `limit` | `number` | No | Row limit from 1 through 100. Defaults to 25. | | `deviceType` | `"desktop" \| "mobile" \| "tablet"` | No | Restricts the report to one device type. | | `country` | `string` | No | Two-letter country code. | | `pagePath` | `string` | No | Restricts the report to one page path. | | `trafficSource` | `string` | No | Restricts the report to one traffic-source code. | | `referrer` | `string` | No | Restricts the report to one referrer domain. | | `browser` | `string` | No | Restricts the report to one browser. | | `utmCampaign` | `string` | No | Restricts the report to one UTM campaign. | | `utmMedium` | `string` | No | Restricts the report to one UTM medium. | | `utmSource` | `string` | No | Restricts the report to one UTM source. | | `filter` | `object` | No | Applies multi-value or negated dimension filters. | `dimension` accepts `audienceIds`, `browser`, `country`, `deviceType`, `language`, `locale`, `os`, `referrer`, `region`, `trafficSource`, `utmCampaign`, `utmContent`, `utmMedium`, `utmSource`, or `utmTerm`. Each `filter` entry accepts at least one of `eq: string`, `ne: string`, `in: string[]`, or `nin: string[]`. Supported keys are `audienceIds`, `browser`, `collectionId`, `country`, `dayOfWeek`, `deviceBrand`, `deviceType`, `domain`, `itemSlug`, `language`, `locale`, `nextCollectionId`, `nextItemSlug`, `nextPageId`, `os`, `pageId`, `pagePath`, `previousCollectionId`, `previousItemSlug`, `previousPageId`, `referrer`, `region`, `timeOfDay`, `timezone`, `trafficSource`, `utmCampaign`, `utmContent`, `utmMedium`, `utmSource`, `utmTerm`, and `visitStatus`. > [!WARNING] > > Your workspace needs the Webflow Analyze add-on. Webflow permits one Analyze > request at a time per access token. ## Output | Field | Type | Description | | - | - | - | | `report` | `"top_dimensions"` | Report discriminator. | | `window` | `{ startTime: string; endTime: string }` | Applied reporting window. | | `dimension` | `string` | Ranked dimension. | | `metricScope` | `"session" \| "user"` | Unit counted by each row. | | `limit` | `number` | Applied row limit. | | `data` | `{ attributeKey: string; name: string; count: number }[]` | Ranked dimension values. | | `filter` | `object` | Applied filters, when present. | # Get Analyze top events report Source: https://docs.automate.ax/reference/integrations/webflow/actions/get-analyze-top-events-report Retrieves the most frequent tracked events from Webflow Analyze. `webflow.getAnalyzeTopEventsReport` ranks the most frequent tracked events over a reporting window. ## Example ```ts automations/webflow-get-analyze-top-events-report.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Get Analyze top events", () => { onDashboardRun({ title: "Get Analyze top events" }) webflow.getAnalyzeTopEventsReport({ siteId: "site-id", startTime: "2026-08-01T00:00:00Z", endTime: "2026-08-08T00:00:00Z", limit: 20, }) }) ``` ## Inputs Every input accepts a compatible signal. This action requires the `sites:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | | `startTime` | `string` | Yes | Inclusive UTC timestamp ending in `Z`; no earlier than April 9, 2025. | | `endTime` | `string` | Yes | Exclusive UTC timestamp ending in `Z`; after `startTime` and no more than 100 days later. | | `limit` | `number` | No | Row limit from 1 through 250. Defaults to 25. | | `timeseries` | `{ bucketTimeZone: string }` | No | Adds daily event counts in the supplied IANA time zone. | | `deviceType` | `"desktop" \| "mobile" \| "tablet"` | No | Restricts the report to one device type. | | `country` | `string` | No | Two-letter country code. | | `pagePath` | `string` | No | Restricts the report to one page path. | | `trafficSource` | `string` | No | Restricts the report to one traffic-source code. | | `browser` | `string` | No | Restricts the report to one browser. | | `utmCampaign` | `string` | No | Restricts the report to one UTM campaign. | | `utmMedium` | `string` | No | Restricts the report to one UTM medium. | | `utmSource` | `string` | No | Restricts the report to one UTM source. | | `filter` | `object` | No | Applies multi-value or negated dimension filters. | Each `filter` entry accepts at least one of `eq: string`, `ne: string`, `in: string[]`, or `nin: string[]`. Supported keys are `audienceIds`, `browser`, `collectionId`, `country`, `dayOfWeek`, `deviceBrand`, `deviceType`, `domain`, `itemSlug`, `language`, `locale`, `os`, `pageId`, `pagePath`, `region`, `timeOfDay`, `timezone`, `trafficSource`, `utmCampaign`, `utmContent`, `utmMedium`, `utmSource`, `utmTerm`, and `visitStatus`. > [!WARNING] > > Your workspace needs the Webflow Analyze add-on. Webflow permits one Analyze > request at a time per access token. ## Output | Field | Type | Description | | - | - | - | | `report` | `"top_events"` | Report discriminator. | | `window` | `{ startTime: string; endTime: string }` | Applied reporting window. | | `limit` | `number` | Applied row limit. | | `data` | `object[]` | Events ranked by count. | | `bucketing` | `{ bucketTimeZone: string; granularityPeriod: "day" }` | Daily bucket settings, when requested. | | `filter` | `object` | Applied filters, when present. | Each `data` row includes `eventId` and `count`. It can include `name`, `pageId`, `pageName`, `collectionId`, `itemSlug`, component and CMS context arrays, and `{ timestamp, count }` time-series points. # Get Analyze top pages report Source: https://docs.automate.ax/reference/integrations/webflow/actions/get-analyze-top-pages-report Retrieves the most visited pages from Webflow Analyze. `webflow.getAnalyzeTopPagesReport` ranks a site's most visited pages over a reporting window. ## Example ```ts automations/webflow-get-analyze-top-pages-report.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Get Analyze top pages", () => { onDashboardRun({ title: "Get Analyze top pages" }) webflow.getAnalyzeTopPagesReport({ siteId: "site-id", startTime: "2026-08-01T00:00:00Z", endTime: "2026-08-08T00:00:00Z", sortBy: "session", limit: 20, }) }) ``` ## Inputs Every input accepts a compatible signal. This action requires the `sites:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | | `startTime` | `string` | Yes | Inclusive UTC timestamp ending in `Z`; no earlier than April 9, 2025. | | `endTime` | `string` | Yes | Exclusive UTC timestamp ending in `Z`; after `startTime` and no more than 100 days later. | | `sortBy` | `"session" \| "user" \| "pageview"` | No | Ranking metric. Defaults to `"session"`. | | `limit` | `number` | No | Row limit from 1 through 250. Defaults to 25. | | `timeseries` | `{ bucketTimeZone: string }` | No | Adds daily pageview points in the supplied IANA time zone. | | `deviceType` | `"desktop" \| "mobile" \| "tablet"` | No | Restricts the report to one device type. | | `country` | `string` | No | Two-letter country code. | | `pagePath` | `string` | No | Restricts the report to one page path. | | `trafficSource` | `string` | No | Restricts the report to one traffic-source code. | | `referrer` | `string` | No | Restricts the report to one referrer domain. | | `browser` | `string` | No | Restricts the report to one browser. | | `utmCampaign` | `string` | No | Restricts the report to one UTM campaign. | | `utmMedium` | `string` | No | Restricts the report to one UTM medium. | | `utmSource` | `string` | No | Restricts the report to one UTM source. | | `filter` | `object` | No | Applies multi-value or negated dimension filters. | Each `filter` entry accepts at least one of `eq: string`, `ne: string`, `in: string[]`, or `nin: string[]`. Supported keys are `audienceIds`, `browser`, `collectionId`, `country`, `dayOfWeek`, `deviceBrand`, `deviceType`, `domain`, `itemSlug`, `language`, `locale`, `nextCollectionId`, `nextItemSlug`, `nextPageId`, `os`, `pageId`, `pagePath`, `previousCollectionId`, `previousItemSlug`, `previousPageId`, `referrer`, `region`, `timeOfDay`, `timezone`, `trafficSource`, `utmCampaign`, `utmContent`, `utmMedium`, `utmSource`, `utmTerm`, and `visitStatus`. > [!WARNING] > > Your workspace needs the Webflow Analyze add-on. Webflow permits one Analyze > request at a time per access token. ## Output | Field | Type | Description | | - | - | - | | `report` | `"top_pages"` | Report discriminator. | | `window` | `{ startTime: string; endTime: string }` | Applied reporting window. | | `sortBy` | `"session" \| "user" \| "pageview"` | Applied ranking metric. | | `limit` | `number` | Applied row limit. | | `data` | `object[]` | Ranked page rows. | | `bucketing` | `{ bucketTimeZone: string; granularityPeriod: "day" }` | Daily bucket settings, when requested. | | `filter` | `object` | Applied filters, when present. | Each `data` row includes `pageId`, `title`, `sessionCount`, `userCount`, and `pageviewCount`; CMS pages can also include `collectionId` and `itemSlug`. When requested, `timeseries` contains `{ timestamp, pageviewCount }` points. The time series always counts pageviews, regardless of `sortBy`. # Get Analyze traffic report Source: https://docs.automate.ax/reference/integrations/webflow/actions/get-analyze-traffic-report Retrieves a daily Webflow Analyze traffic time series. `webflow.getAnalyzeTrafficReport` retrieves daily sessions, users, or pageviews for a reporting window. ## Example ```ts automations/webflow-get-analyze-traffic-report.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Get Analyze traffic", () => { onDashboardRun({ title: "Get Analyze traffic" }) webflow.getAnalyzeTrafficReport({ siteId: "site-id", startTime: "2026-08-01T00:00:00Z", endTime: "2026-08-08T00:00:00Z", metricScope: "session", bucketTimeZone: "America/Los_Angeles", }) }) ``` ## Inputs Every input accepts a compatible signal. This action requires the `sites:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | | `startTime` | `string` | Yes | Inclusive UTC timestamp ending in `Z`; no earlier than April 9, 2025. | | `endTime` | `string` | Yes | Exclusive UTC timestamp ending in `Z`; after `startTime` and no more than 100 days later. | | `metricScope` | `"session" \| "user" \| "pageview"` | Yes | Metric counted in each daily point. | | `bucketTimeZone` | `string` | Yes | IANA time zone for daily bucket boundaries. | | `deviceType` | `"desktop" \| "mobile" \| "tablet"` | No | Restricts the report to one device type. | | `country` | `string` | No | Two-letter country code. | | `pagePath` | `string` | No | Restricts the report to one page path. | | `trafficSource` | `string` | No | Restricts the report to one traffic-source code. | | `referrer` | `string` | No | Restricts the report to one referrer domain. | | `browser` | `string` | No | Restricts the report to one browser. | | `utmCampaign` | `string` | No | Restricts the report to one UTM campaign. | | `utmMedium` | `string` | No | Restricts the report to one UTM medium. | | `utmSource` | `string` | No | Restricts the report to one UTM source. | | `filter` | `object` | No | Applies multi-value or negated dimension filters. | Each `filter` entry accepts at least one of `eq: string`, `ne: string`, `in: string[]`, or `nin: string[]`. Supported keys are `audienceIds`, `browser`, `collectionId`, `country`, `dayOfWeek`, `deviceBrand`, `deviceType`, `domain`, `itemSlug`, `language`, `locale`, `nextCollectionId`, `nextItemSlug`, `nextPageId`, `os`, `pageId`, `pagePath`, `previousCollectionId`, `previousItemSlug`, `previousPageId`, `referrer`, `region`, `timeOfDay`, `timezone`, `trafficSource`, `utmCampaign`, `utmContent`, `utmMedium`, `utmSource`, `utmTerm`, and `visitStatus`. > [!WARNING] > > Your workspace needs the Webflow Analyze add-on. Webflow permits one Analyze > request at a time per access token and returns `429` for concurrent requests. ## Output | Field | Type | Description | | - | - | - | | `report` | `"traffic"` | Report discriminator. | | `window` | `{ startTime: string; endTime: string }` | Applied reporting window. | | `metricScope` | `"session" \| "user" \| "pageview"` | Unit counted by each point. | | `bucketing` | `{ bucketTimeZone: string; granularityPeriod: "day" }` | Daily bucket settings. | | `data` | `{ count: number; timestamp: string }[]` | Time-ordered daily counts. | | `filter` | `object` | Applied filters, when present. | # Get asset Source: https://docs.automate.ax/reference/integrations/webflow/actions/get-asset Retrieves metadata and variants for one asset. `webflow.getAsset` retrieves metadata and variants for one asset. ## Example ```ts automations/webflow-get-asset.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Get asset", () => { onDashboardRun({ title: "Get asset" }) webflow.getAsset({ assetId: "asset-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `assets:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `assetId` | `string` | Yes | Webflow asset ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `id` | `string` | Webflow `id` value. | | `contentType` | `string` | Webflow `contentType` value. | | `size` | `number` | Webflow `size` value. | | `siteId` | `string` | Webflow site ID. | | `hostedUrl` | `string` | Webflow `hostedUrl` value. | | `originalFileName` | `string` | Webflow `originalFileName` value. | | `displayName` | `string` | Webflow `displayName` value. | | `lastUpdated` | `string` | Webflow `lastUpdated` value. | | `createdOn` | `string` | Webflow `createdOn` value. | | `variants` | `Webflow.AssetVariant[]` | Webflow `variants` value. | | `altText` | `string` | Webflow `altText` value. | # Get asset folder Source: https://docs.automate.ax/reference/integrations/webflow/actions/get-asset-folder Retrieves one asset folder and its parent relationship. `webflow.getAssetFolder` retrieves one asset folder and its parent relationship. ## Example ```ts automations/webflow-get-asset-folder.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Get asset folder", () => { onDashboardRun({ title: "Get asset folder" }) webflow.getAssetFolder({ assetFolderId: "asset-folder-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `assets:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `assetFolderId` | `string` | Yes | Webflow asset-folder ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `id` | `string` | Webflow `id` value. | | `displayName` | `string` | Webflow `displayName` value. | | `parentFolder` | `string` | Webflow `parentFolder` value. | | `assets` | `string[]` | Webflow `assets` value. | | `siteId` | `string` | Webflow site ID. | | `createdOn` | `string` | Webflow `createdOn` value. | | `lastUpdated` | `string` | Webflow `lastUpdated` value. | # Get authorization Source: https://docs.automate.ax/reference/integrations/webflow/actions/get-authorization Retrieves metadata and scopes for the connected OAuth token. `webflow.getAuthorization` retrieves metadata, authorized resources, and scopes for the connected OAuth token. ## Example ```ts automations/webflow-get-authorization.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Get Webflow authorization", () => { onDashboardRun({ title: "Get Webflow authorization" }) webflow.getAuthorization({}) }) ``` ## Inputs This action has no provider inputs. ## Output | Field | Type | Description | | - | - | - | | `authorization` | `object` | OAuth authorization metadata, when available. | | `application` | `object` | Connected Webflow application metadata, when available. | `authorization` can include `id`, `createdOn`, `lastUsed`, `grantType`, `rateLimit`, `scope`, and `authorizedTo`. `authorizedTo` contains the permitted `siteIds`, `workspaceIds`, and `userIds`. `application` can include `id`, `displayName`, `description`, and `homepage`. Automate.ax converts provider dates to ISO 8601 strings. # Get collection Source: https://docs.automate.ax/reference/integrations/webflow/actions/get-collection Retrieves one CMS collection and its field schema. `webflow.getCollection` retrieves one CMS collection and its field schema. ## Example ```ts automations/webflow-get-collection.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Get collection", () => { onDashboardRun({ title: "Get collection" }) webflow.getCollection({ collectionId: "collection-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `cms:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `collectionId` | `string` | Yes | Webflow CMS collection ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `id` | `string` | Webflow `id` value. | | `displayName` | `string` | Webflow `displayName` value. | | `singularName` | `string` | Webflow `singularName` value. | | `slug` | `string` | Webflow `slug` value. | | `createdOn` | `string` | Webflow `createdOn` value. | | `lastUpdated` | `string` | Webflow `lastUpdated` value. | | `fields` | `Webflow.Field[]` | Webflow `fields` value. | # Get collection item Source: https://docs.automate.ax/reference/integrations/webflow/actions/get-collection-item Retrieves one staged CMS item in a selected locale. `webflow.getCollectionItem` retrieves one staged CMS item in a selected locale. ## Example ```ts automations/webflow-get-collection-item.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Get collection item", () => { onDashboardRun({ title: "Get collection item" }) webflow.getCollectionItem({ collectionId: "collection-id", itemId: "item-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `cms:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `cmsLocaleId` | `string` | No | Optional CMS locale ID. | | `collectionId` | `string` | Yes | Webflow CMS collection ID. | | `itemId` | `string` | Yes | Webflow CMS item ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `id` | `string` | Webflow `id` value. | | `cmsLocaleId` | `string` | Optional CMS locale ID. | | `lastPublished` | `string` | Webflow `lastPublished` value. | | `lastUpdated` | `string` | Webflow `lastUpdated` value. | | `createdOn` | `string` | Webflow `createdOn` value. | | `isArchived` | `boolean` | Webflow `isArchived` value. | | `isDraft` | `boolean` | Webflow `isDraft` value. | | `fieldData` | `Webflow.CollectionItemFieldData` | Webflow `fieldData` value. | # Get comment thread Source: https://docs.automate.ax/reference/integrations/webflow/actions/get-comment-thread Retrieves one design-review comment thread and its context. `webflow.getCommentThread` retrieves one design-review comment thread and its context. ## Example ```ts automations/webflow-get-comment-thread.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Get comment thread", () => { onDashboardRun({ title: "Get comment thread" }) webflow.getCommentThread({ siteId: "site-id", commentThreadId: "comment-thread-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `comments:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `localeId` | `string` | No | Optional site locale ID. | | `offset` | `number` | No | Number of records to skip. | | `limit` | `number` | No | Maximum number of records to return. | | `sortBy` | `Webflow.sites.CommentsGetCommentThreadRequestSortBy` | No | Webflow `sortBy` value. | | `sortOrder` | `Webflow.sites.CommentsGetCommentThreadRequestSortOrder` | No | Webflow `sortOrder` value. | | `siteId` | `string` | Yes | Webflow site ID. | | `commentThreadId` | `string` | Yes | Webflow comment-thread ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `id` | `string` | Webflow `id` value. | | `siteId` | `string` | Webflow site ID. | | `pageId` | `string` | Webflow page ID. | | `localeId` | `string` | Optional site locale ID. | | `itemId` | `string` | Webflow CMS item ID. | | `breakpoint` | `string` | Webflow `breakpoint` value. | | `url` | `string` | Webflow `url` value. | | `content` | `string` | Webflow `content` value. | | `isResolved` | `boolean` | Webflow `isResolved` value. | | `author` | `Webflow.CommentThreadAuthor` | Webflow `author` value. | | `mentionedUsers` | `Webflow.CommentThreadMentionedUsersItem[]` | Webflow `mentionedUsers` value. | | `createdOn` | `string` | Webflow `createdOn` value. | | `lastUpdated` | `string` | Webflow `lastUpdated` value. | # Get component content Source: https://docs.automate.ax/reference/integrations/webflow/actions/get-component-content Retrieves editable DOM content for one reusable component. `webflow.getComponentContent` retrieves editable DOM content for one reusable component. ## Example ```ts automations/webflow-get-component-content.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Get component content", () => { onDashboardRun({ title: "Get component content" }) webflow.getComponentContent({ siteId: "site-id", componentId: "component-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `components:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `localeId` | `string` | No | Optional site locale ID. | | `branchId` | `string` | No | Optional Webflow branch ID. | | `limit` | `number` | No | Maximum number of records to return. | | `offset` | `number` | No | Number of records to skip. | | `siteId` | `string` | Yes | Webflow site ID. | | `componentId` | `string` | Yes | Webflow component ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `componentId` | `string` | Component ID | | `nodes` | `Webflow.Node[]` | Webflow nodes. | | `pagination` | `Webflow.Pagination` | Webflow pagination. | # Get component properties Source: https://docs.automate.ax/reference/integrations/webflow/actions/get-component-properties Retrieves editable properties for one reusable component. `webflow.getComponentProperties` retrieves editable properties for one reusable component. ## Example ```ts automations/webflow-get-component-properties.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Get component properties", () => { onDashboardRun({ title: "Get component properties" }) webflow.getComponentProperties({ siteId: "site-id", componentId: "component-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `components:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `localeId` | `string` | No | Optional site locale ID. | | `branchId` | `string` | No | Optional Webflow branch ID. | | `limit` | `number` | No | Maximum number of records to return. | | `offset` | `number` | No | Number of records to skip. | | `siteId` | `string` | Yes | Webflow site ID. | | `componentId` | `string` | Yes | Webflow component ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `componentId` | `string` | Component ID | | `properties` | `Webflow.ComponentProperty[]` | Webflow properties. | | `pagination` | `Webflow.Pagination` | Webflow pagination. | # Get current user Source: https://docs.automate.ax/reference/integrations/webflow/actions/get-current-user Retrieves the user represented by the connected OAuth token. `webflow.getCurrentUser` retrieves the user represented by the connected OAuth token. ## Example ```ts automations/webflow-get-current-user.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Get current user", () => { onDashboardRun({ title: "Get current user" }) webflow.getCurrentUser({}) }) ``` ## Inputs This action has no inputs. It requires the `authorized_user:read` OAuth scope. ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `id` | `string` | The unique ID of the user | | `email` | `string` | The user's email address | | `firstName` | `string` | Webflow `firstName` value. | | `lastName` | `string` | The user's last name | # Get custom font Source: https://docs.automate.ax/reference/integrations/webflow/actions/get-custom-font Retrieves one custom font registered for a Webflow site. `webflow.getCustomFont` retrieves one custom font and its hosted file metadata. ## Example ```ts automations/webflow-get-custom-font.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Get custom font", () => { onDashboardRun({ title: "Get custom font" }) webflow.getCustomFont({ siteId: "site-id", fontId: "font-id" }) }) ``` ## Inputs Every input accepts a compatible signal. This action requires the `sites:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | | `fontId` | `string` | Yes | Custom-font ID. | ## Output | Field | Type | Description | | - | - | - | | `customFont` | `WebflowCustomFont` | Font metadata. | `customFont` includes `id`, `fontFamily`, `format`, `fileName`, `weight`, `italic`, `fontDisplay`, `axes`, and `hostedUrl`. # Get ecommerce settings Source: https://docs.automate.ax/reference/integrations/webflow/actions/get-ecommerce-settings Retrieves currency and ecommerce collection identifiers. `webflow.getEcommerceSettings` retrieves currency and ecommerce collection identifiers. ## Example ```ts automations/webflow-get-ecommerce-settings.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Get ecommerce settings", () => { onDashboardRun({ title: "Get ecommerce settings" }) webflow.getEcommerceSettings({ siteId: "site-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `ecommerce:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `siteId` | `string` | Webflow site ID. | | `createdOn` | `string` | Webflow `createdOn` value. | | `defaultCurrency` | `string` | Webflow `defaultCurrency` value. | # Get form Source: https://docs.automate.ax/reference/integrations/webflow/actions/get-form Retrieves one form and its current field schema. `webflow.getForm` retrieves one form and its current field schema. ## Example ```ts automations/webflow-get-form.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Get form", () => { onDashboardRun({ title: "Get form" }) webflow.getForm({ formId: "form-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `forms:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `formId` | `string` | Yes | Webflow form ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `displayName` | `string` | Webflow `displayName` value. | | `createdOn` | `string` | Webflow `createdOn` value. | | `lastUpdated` | `string` | Webflow `lastUpdated` value. | | `fields` | `Webflow.FormField` | Webflow `fields` value. | | `responseSettings` | `Webflow.FormResponseSettings` | Webflow `responseSettings` value. | | `id` | `string` | Webflow `id` value. | | `siteId` | `string` | Webflow site ID. | | `siteDomainId` | `string` | Webflow `siteDomainId` value. | | `pageId` | `string` | Webflow page ID. | | `pageName` | `string` | Webflow `pageName` value. | | `formElementId` | `string` | Webflow `formElementId` value. | | `workspaceId` | `string` | Webflow `workspaceId` value. | # Get form submission Source: https://docs.automate.ax/reference/integrations/webflow/actions/get-form-submission Retrieves one form submission and its submitted values. `webflow.getFormSubmission` retrieves one form submission and its submitted values. ## Example ```ts automations/webflow-get-form-submission.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Get form submission", () => { onDashboardRun({ title: "Get form submission" }) webflow.getFormSubmission({ formSubmissionId: "form-submission-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `forms:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `formSubmissionId` | `string` | Yes | Webflow form-submission ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `id` | `string` | Webflow `id` value. | | `displayName` | `string` | Webflow `displayName` value. | | `siteId` | `string` | Webflow site ID. | | `workspaceId` | `string` | Webflow `workspaceId` value. | | `dateSubmitted` | `string` | Webflow `dateSubmitted` value. | | `formResponse` | `Record` | Webflow `formResponse` value. | # Get inventory Source: https://docs.automate.ax/reference/integrations/webflow/actions/get-inventory Retrieves finite or infinite inventory state for one SKU. `webflow.getInventory` retrieves finite or infinite inventory state for one SKU. ## Example ```ts automations/webflow-get-inventory.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Get inventory", () => { onDashboardRun({ title: "Get inventory" }) webflow.getInventory({ skuCollectionId: "sku-collection-id", skuId: "sku-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `ecommerce:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `skuCollectionId` | `string` | Yes | Webflow SKU collection ID. | | `skuId` | `string` | Yes | Webflow SKU ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `id` | `string` | Webflow `id` value. | | `quantity` | `number` | Webflow `quantity` value. | | `inventoryType` | `Webflow.InventoryItemInventoryType` | Webflow `inventoryType` value. | # Get live collection item Source: https://docs.automate.ax/reference/integrations/webflow/actions/get-live-collection-item Retrieves one published CMS item in a selected locale. `webflow.getLiveCollectionItem` retrieves one published CMS item in a selected locale. ## Example ```ts automations/webflow-get-live-collection-item.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Get live collection item", () => { onDashboardRun({ title: "Get live collection item" }) webflow.getLiveCollectionItem({ collectionId: "collection-id", itemId: "item-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `cms:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `cmsLocaleId` | `string` | No | Optional CMS locale ID. | | `collectionId` | `string` | Yes | Webflow CMS collection ID. | | `itemId` | `string` | Yes | Webflow CMS item ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `id` | `string` | Webflow `id` value. | | `cmsLocaleId` | `string` | Optional CMS locale ID. | | `lastPublished` | `string` | Webflow `lastPublished` value. | | `lastUpdated` | `string` | Webflow `lastUpdated` value. | | `createdOn` | `string` | Webflow `createdOn` value. | | `isArchived` | `boolean` | Webflow `isArchived` value. | | `isDraft` | `boolean` | Webflow `isDraft` value. | | `fieldData` | `Webflow.CollectionItemFieldData` | Webflow `fieldData` value. | # Get order Source: https://docs.automate.ax/reference/integrations/webflow/actions/get-order Retrieves customer, payment, fulfillment, and line-item details. `webflow.getOrder` retrieves customer, payment, fulfillment, and line-item details. ## Example ```ts automations/webflow-get-order.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Get order", () => { onDashboardRun({ title: "Get order" }) webflow.getOrder({ siteId: "site-id", orderId: "order-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `ecommerce:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | | `orderId` | `string` | Yes | Webflow order ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `orderId` | `string` | Webflow order ID. | | `status` | `Webflow.OrderStatus` | Webflow `status` value. | | `comment` | `string` | Webflow `comment` value. | | `orderComment` | `string` | Webflow `orderComment` value. | | `acceptedOn` | `string` | Webflow `acceptedOn` value. | | `fulfilledOn` | `string` | Webflow `fulfilledOn` value. | | `refundedOn` | `string` | Webflow `refundedOn` value. | | `disputedOn` | `string` | Webflow `disputedOn` value. | | `disputeUpdatedOn` | `string` | Webflow `disputeUpdatedOn` value. | | `disputeLastStatus` | `Webflow.OrderDisputeLastStatus` | Webflow `disputeLastStatus` value. | | `customerPaid` | `Webflow.OrderPrice` | Webflow `customerPaid` value. | | `netAmount` | `Webflow.OrderPrice` | Webflow `netAmount` value. | | `applicationFee` | `Webflow.OrderPrice` | Webflow `applicationFee` value. | | `allAddresses` | `Webflow.OrderAddress[]` | Webflow `allAddresses` value. | | `shippingAddress` | `Webflow.OrderShippingAddress` | Webflow `shippingAddress` value. | | `billingAddress` | `Webflow.OrderBillingAddress` | Webflow `billingAddress` value. | | `shippingProvider` | `string` | Webflow `shippingProvider` value. | | `shippingTracking` | `string` | Webflow `shippingTracking` value. | | `shippingTrackingUrl` | `string` | Webflow `shippingTrackingUrl` value. | | `customerInfo` | `Webflow.OrderCustomerInfo` | Webflow `customerInfo` value. | | `purchasedItems` | `Webflow.OrderPurchasedItem[]` | Webflow `purchasedItems` value. | | `purchasedItemsCount` | `number` | Webflow `purchasedItemsCount` value. | | `stripeDetails` | `Webflow.StripeDetails` | Webflow `stripeDetails` value. | | `stripeCard` | `Webflow.StripeCard` | Webflow `stripeCard` value. | | `paypalDetails` | `Webflow.PaypalDetails` | Webflow `paypalDetails` value. | | `customData` | `Record[]` | Webflow `customData` value. | | `metadata` | `Webflow.OrderMetadata` | Webflow `metadata` value. | | `isCustomerDeleted` | `boolean` | Webflow `isCustomerDeleted` value. | | `isShippingRequired` | `boolean` | Webflow `isShippingRequired` value. | | `hasDownloads` | `boolean` | Webflow `hasDownloads` value. | | `paymentProcessor` | `string` | Webflow `paymentProcessor` value. | | `totals` | `Webflow.OrderTotals` | Webflow `totals` value. | | `downloadFiles` | `Webflow.OrderDownloadFilesItem[]` | Webflow `downloadFiles` value. | # Get page content Source: https://docs.automate.ax/reference/integrations/webflow/actions/get-page-content Retrieves editable DOM content from one static page. `webflow.getPageContent` retrieves editable DOM content from one static page. ## Example ```ts automations/webflow-get-page-content.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Get page content", () => { onDashboardRun({ title: "Get page content" }) webflow.getPageContent({ pageId: "page-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `pages:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `localeId` | `string` | No | Optional site locale ID. | | `limit` | `number` | No | Maximum number of records to return. | | `offset` | `number` | No | Number of records to skip. | | `pageId` | `string` | Yes | Webflow page ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `pageId` | `string` | Webflow page ID. | | `branchId` | `string` | Optional Webflow branch ID. | | `nodes` | `Webflow.Node[]` | Webflow `nodes` value. | | `pagination` | `Webflow.Pagination` | Webflow `pagination` value. | | `lastUpdated` | `string` | Webflow `lastUpdated` value. | # Get page custom code Source: https://docs.automate.ax/reference/integrations/webflow/actions/get-page-custom-code Retrieves registered scripts currently applied to one page. `webflow.getPageCustomCode` retrieves registered scripts currently applied to one page. ## Example ```ts automations/webflow-get-page-custom-code.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Get page custom code", () => { onDashboardRun({ title: "Get page custom code" }) webflow.getPageCustomCode({ pageId: "page-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `custom_code:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `pageId` | `string` | Yes | Webflow page ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `scripts` | `Webflow.ScriptApply[]` | Webflow `scripts` value. | | `lastUpdated` | `string` | Webflow `lastUpdated` value. | | `createdOn` | `string` | Webflow `createdOn` value. | # Get page metadata Source: https://docs.automate.ax/reference/integrations/webflow/actions/get-page-metadata Retrieves metadata and publishing state for one page. `webflow.getPageMetadata` retrieves metadata and publishing state for one page. ## Example ```ts automations/webflow-get-page-metadata.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Get page metadata", () => { onDashboardRun({ title: "Get page metadata" }) webflow.getPageMetadata({ pageId: "page-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `pages:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `localeId` | `string` | No | Optional site locale ID. | | `pageId` | `string` | Yes | Webflow page ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `id` | `string` | Webflow `id` value. | | `siteId` | `string` | Webflow site ID. | | `title` | `string` | Webflow `title` value. | | `slug` | `string` | Webflow `slug` value. | | `parentId` | `string` | Webflow `parentId` value. | | `collectionId` | `string` | Webflow CMS collection ID. | | `createdOn` | `string` | Webflow `createdOn` value. | | `lastUpdated` | `string` | Webflow `lastUpdated` value. | | `archived` | `boolean` | Webflow `archived` value. | | `draft` | `boolean` | Webflow `draft` value. | | `canBranch` | `boolean` | Webflow `canBranch` value. | | `isBranch` | `boolean` | Webflow `isBranch` value. | | `branchId` | `string` | Optional Webflow branch ID. | | `seo` | `Webflow.PageSeo` | Webflow `seo` value. | | `openGraph` | `Webflow.PageOpenGraph` | Webflow `openGraph` value. | | `localeId` | `string` | Optional site locale ID. | | `publishedPath` | `string` | Webflow `publishedPath` value. | # Get product Source: https://docs.automate.ax/reference/integrations/webflow/actions/get-product Retrieves one ecommerce product and all of its SKUs. `webflow.getProduct` retrieves one ecommerce product and all of its SKUs. ## Example ```ts automations/webflow-get-product.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Get product", () => { onDashboardRun({ title: "Get product" }) webflow.getProduct({ siteId: "site-id", productId: "product-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `ecommerce:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | | `productId` | `string` | Yes | Webflow product ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `product` | `Webflow.Product` | Webflow `product` value. | | `skus` | `Webflow.Sku[]` | A list of SKU Objects | # Get site Source: https://docs.automate.ax/reference/integrations/webflow/actions/get-site Retrieves metadata and publishing state for one Webflow site. `webflow.getSite` retrieves metadata and publishing state for one Webflow site. ## Example ```ts automations/webflow-get-site.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Get site", () => { onDashboardRun({ title: "Get site" }) webflow.getSite({ siteId: "site-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `sites:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `id` | `string` | Webflow `id` value. | | `workspaceId` | `string` | Webflow `workspaceId` value. | | `createdOn` | `string` | Webflow `createdOn` value. | | `displayName` | `string` | Webflow `displayName` value. | | `shortName` | `string` | Webflow `shortName` value. | | `lastPublished` | `string` | Webflow `lastPublished` value. | | `lastUpdated` | `string` | Webflow `lastUpdated` value. | | `previewUrl` | `string` | Webflow `previewUrl` value. | | `timeZone` | `string` | Webflow `timeZone` value. | | `parentFolderId` | `string` | Webflow `parentFolderId` value. | | `customDomains` | `Webflow.Domain[]` | Webflow `customDomains` value. | | `locales` | `Webflow.Locales` | Webflow `locales` value. | | `dataCollectionEnabled` | `boolean` | Webflow `dataCollectionEnabled` value. | | `dataCollectionType` | `Webflow.SiteDataCollectionType` | Webflow `dataCollectionType` value. | # Get site custom code Source: https://docs.automate.ax/reference/integrations/webflow/actions/get-site-custom-code Retrieves registered scripts currently applied site-wide. `webflow.getSiteCustomCode` retrieves registered scripts currently applied site-wide. ## Example ```ts automations/webflow-get-site-custom-code.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Get site custom code", () => { onDashboardRun({ title: "Get site custom code" }) webflow.getSiteCustomCode({ siteId: "site-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `custom_code:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `scripts` | `Webflow.ScriptApply[]` | Webflow `scripts` value. | | `lastUpdated` | `string` | Webflow `lastUpdated` value. | | `createdOn` | `string` | Webflow `createdOn` value. | # Get site form submission Source: https://docs.automate.ax/reference/integrations/webflow/actions/get-site-form-submission Retrieves one form submission through its site-scoped Webflow route. `webflow.getSiteFormSubmission` retrieves one submission through Webflow's site-scoped API. ## Example ```ts automations/webflow-get-site-form-submission.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Get site form submission", () => { onDashboardRun({ title: "Get site form submission" }) webflow.getSiteFormSubmission({ formSubmissionId: "submission-id", siteId: "site-id", }) }) ``` ## Inputs Every input accepts a compatible signal. This action requires the `forms:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | | `formSubmissionId` | `string` | Yes | Form-submission ID. | ## Output | Field | Type | Description | | - | - | - | | `id` | `string` | Submission ID. | | `displayName` | `string` | Form display name. | | `siteId` | `string` | Site ID. | | `workspaceId` | `string` | Workspace ID. | | `dateSubmitted` | `string` | Submission timestamp. | | `formResponse` | `Record` | Submitted field values. | # List asset folders Source: https://docs.automate.ax/reference/integrations/webflow/actions/list-asset-folders Lists the asset folder hierarchy for one site. `webflow.listAssetFolders` lists the asset folder hierarchy for one site. ## Example ```ts automations/webflow-list-asset-folders.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("List asset folders", () => { onDashboardRun({ title: "List asset folders" }) webflow.listAssetFolders({ siteId: "site-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `assets:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `assetFolders` | `Webflow.AssetFolder[]` | Webflow `assetFolders` value. | | `pagination` | `Webflow.Pagination` | Webflow pagination. | # List assets Source: https://docs.automate.ax/reference/integrations/webflow/actions/list-assets Lists assets and variants from one site with pagination. `webflow.listAssets` lists assets and variants from one site with pagination. ## Example ```ts automations/webflow-list-assets.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("List assets", () => { onDashboardRun({ title: "List assets" }) webflow.listAssets({ siteId: "site-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `assets:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `offset` | `number` | No | Number of records to skip. | | `limit` | `number` | No | Maximum number of records to return. | | `siteId` | `string` | Yes | Webflow site ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `assets` | `Webflow.Asset[]` | Webflow assets. | | `pagination` | `Webflow.Pagination` | Webflow `pagination` value. | # List collection items Source: https://docs.automate.ax/reference/integrations/webflow/actions/list-collection-items Lists staged CMS items with filtering and pagination. `webflow.listCollectionItems` lists staged CMS items with filtering and pagination. ## Example ```ts automations/webflow-list-collection-items.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("List collection items", () => { onDashboardRun({ title: "List collection items" }) webflow.listCollectionItems({ collectionId: "collection-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `cms:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `cmsLocaleId` | `string` | No | Optional CMS locale ID. | | `offset` | `number` | No | Number of records to skip. | | `limit` | `number` | No | Maximum number of records to return. | | `name` | `string` | No | Webflow `name` value. | | `slug` | `string` | No | Webflow `slug` value. | | `lastPublished` | `{ lte?: string; gte?: string; }` | No | Webflow `lastPublished` value. | | `sortBy` | `Webflow.collections.ItemsListItemsRequestSortBy` | No | Webflow `sortBy` value. | | `sortOrder` | `Webflow.collections.ItemsListItemsRequestSortOrder` | No | Webflow `sortOrder` value. | | `collectionId` | `string` | Yes | Webflow CMS collection ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `items` | `Webflow.CollectionItem[]` | Webflow `items` value. | | `pagination` | `Webflow.CollectionItemListPagination` | Webflow `pagination` value. | # List collections Source: https://docs.automate.ax/reference/integrations/webflow/actions/list-collections Lists CMS collections and their schemas for one site. `webflow.listCollections` lists CMS collections and their schemas for one site. ## Example ```ts automations/webflow-list-collections.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("List collections", () => { onDashboardRun({ title: "List collections" }) webflow.listCollections({ siteId: "site-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `cms:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `collections` | `Webflow.CollectionListArrayItem[]` | Webflow `collections` value. | # List comment replies Source: https://docs.automate.ax/reference/integrations/webflow/actions/list-comment-replies Lists replies in one design-review comment thread. `webflow.listCommentReplies` lists replies in one design-review comment thread. ## Example ```ts automations/webflow-list-comment-replies.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("List comment replies", () => { onDashboardRun({ title: "List comment replies" }) webflow.listCommentReplies({ siteId: "site-id", commentThreadId: "comment-thread-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `comments:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `localeId` | `string` | No | Optional site locale ID. | | `offset` | `number` | No | Number of records to skip. | | `limit` | `number` | No | Maximum number of records to return. | | `sortBy` | `Webflow.sites.CommentsListCommentRepliesRequestSortBy` | No | Webflow `sortBy` value. | | `sortOrder` | `Webflow.sites.CommentsListCommentRepliesRequestSortOrder` | No | Webflow `sortOrder` value. | | `siteId` | `string` | Yes | Webflow site ID. | | `commentThreadId` | `string` | Yes | Webflow comment-thread ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `comments` | `Webflow.CommentReply[]` | Webflow comments. | | `pagination` | `Webflow.CommentReplyListPagination` | Webflow `pagination` value. | # List comment threads Source: https://docs.automate.ax/reference/integrations/webflow/actions/list-comment-threads Lists design-review comment threads with filters and pagination. `webflow.listCommentThreads` lists design-review comment threads with filters and pagination. ## Example ```ts automations/webflow-list-comment-threads.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("List comment threads", () => { onDashboardRun({ title: "List comment threads" }) webflow.listCommentThreads({ siteId: "site-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `comments:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `localeId` | `string` | No | Optional site locale ID. | | `offset` | `number` | No | Number of records to skip. | | `limit` | `number` | No | Maximum number of records to return. | | `sortBy` | `Webflow.sites.CommentsListCommentThreadsRequestSortBy` | No | Webflow `sortBy` value. | | `sortOrder` | `Webflow.sites.CommentsListCommentThreadsRequestSortOrder` | No | Webflow `sortOrder` value. | | `siteId` | `string` | Yes | Webflow site ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `comments` | `Webflow.CommentThread[]` | Webflow comments. | | `pagination` | `Webflow.CommentThreadListPagination` | Webflow `pagination` value. | # List components Source: https://docs.automate.ax/reference/integrations/webflow/actions/list-components Lists reusable components defined in a Webflow site. `webflow.listComponents` lists reusable components defined in a Webflow site. ## Example ```ts automations/webflow-list-components.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("List components", () => { onDashboardRun({ title: "List components" }) webflow.listComponents({ siteId: "site-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `components:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `branchId` | `string` | No | Optional Webflow branch ID. | | `limit` | `number` | No | Maximum number of records to return. | | `offset` | `number` | No | Number of records to skip. | | `siteId` | `string` | Yes | Webflow site ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `components` | `Webflow.Component[]` | Webflow `components` value. | | `pagination` | `Webflow.Pagination` | Webflow pagination. | # List custom code blocks Source: https://docs.automate.ax/reference/integrations/webflow/actions/list-custom-code-blocks Lists reusable custom-code blocks defined for one site. `webflow.listCustomCodeBlocks` lists reusable custom-code blocks defined for one site. ## Example ```ts automations/webflow-list-custom-code-blocks.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("List custom code blocks", () => { onDashboardRun({ title: "List custom code blocks" }) webflow.listCustomCodeBlocks({ siteId: "site-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `custom_code:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `offset` | `number` | No | Number of records to skip. | | `limit` | `number` | No | Maximum number of records to return. | | `siteId` | `string` | Yes | Webflow site ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `blocks` | `Webflow.CustomCodeBlock[]` | Webflow blocks. | | `pagination` | `Webflow.Pagination` | Webflow pagination. | # List custom domains Source: https://docs.automate.ax/reference/integrations/webflow/actions/list-custom-domains Lists custom domains and their publishing state for a site. `webflow.listCustomDomains` lists custom domains and their publishing state for a site. ## Example ```ts automations/webflow-list-custom-domains.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("List custom domains", () => { onDashboardRun({ title: "List custom domains" }) webflow.listCustomDomains({ siteId: "site-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `sites:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `customDomains` | `Webflow.Domain[]` | Webflow `customDomains` value. | # List custom fonts Source: https://docs.automate.ax/reference/integrations/webflow/actions/list-custom-fonts Lists custom fonts registered for one Webflow site. `webflow.listCustomFonts` lists custom fonts registered for a site. ## Example ```ts automations/webflow-list-custom-fonts.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("List custom fonts", () => { onDashboardRun({ title: "List custom fonts" }) webflow.listCustomFonts({ siteId: "site-id", limit: 100 }) }) ``` ## Inputs Every input accepts a compatible signal. This action requires the `sites:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | | `limit` | `number` | No | Page size from 1 through 100. | | `offset` | `number` | No | Nonnegative number of records to skip. | ## Output | Field | Type | Description | | - | - | - | | `customFonts` | `WebflowCustomFont[]` | Font records, including metadata, axes, and hosted URLs. | | `pagination` | `{ limit: number; offset: number; total: number }` | Resolved pagination values. | # List form submissions Source: https://docs.automate.ax/reference/integrations/webflow/actions/list-form-submissions Lists submissions for one form with pagination and filters. `webflow.listFormSubmissions` lists submissions for one form with pagination and filters. ## Example ```ts automations/webflow-list-form-submissions.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("List form submissions", () => { onDashboardRun({ title: "List form submissions" }) webflow.listFormSubmissions({ formId: "form-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `forms:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `offset` | `number` | No | Number of records to skip. | | `limit` | `number` | No | Maximum number of records to return. | | `formId` | `string` | Yes | Webflow form ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `formSubmissions` | `Webflow.FormSubmission[]` | Webflow `formSubmissions` value. | | `pagination` | `Webflow.Pagination` | Webflow pagination. | # List forms Source: https://docs.automate.ax/reference/integrations/webflow/actions/list-forms Lists forms and their field schemas for one site. `webflow.listForms` lists forms and their field schemas for one site. ## Example ```ts automations/webflow-list-forms.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("List forms", () => { onDashboardRun({ title: "List forms" }) webflow.listForms({ siteId: "site-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `forms:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `limit` | `number` | No | Maximum number of records to return. | | `offset` | `number` | No | Number of records to skip. | | `siteId` | `string` | Yes | Webflow site ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `forms` | `Webflow.Form[]` | Webflow forms. | | `pagination` | `Webflow.Pagination` | Webflow `pagination` value. | # List Google tags Source: https://docs.automate.ax/reference/integrations/webflow/actions/list-google-tags Lists Google tags configured for one Webflow site. `webflow.listGoogleTags` lists the Google tags configured for a site in display order. ## Example ```ts automations/webflow-list-google-tags.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("List Google tags", () => { onDashboardRun({ title: "List Google tags" }) webflow.listGoogleTags({ siteId: "site-id" }) }) ``` ## Inputs Every input accepts a compatible signal. This action requires the `sites:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | ## Output | Field | Type | Description | | - | - | - | | `googleTagIds` | `{ displayName: string; tagId: string; order?: number }[]` | Tags sorted by display order. | # List live collection items Source: https://docs.automate.ax/reference/integrations/webflow/actions/list-live-collection-items Lists published CMS items with filtering and pagination. `webflow.listLiveCollectionItems` lists published CMS items with filtering and pagination. ## Example ```ts automations/webflow-list-live-collection-items.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("List live collection items", () => { onDashboardRun({ title: "List live collection items" }) webflow.listLiveCollectionItems({ collectionId: "collection-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `cms:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `cmsLocaleId` | `string` | No | Optional CMS locale ID. | | `offset` | `number` | No | Number of records to skip. | | `limit` | `number` | No | Maximum number of records to return. | | `name` | `string` | No | Webflow `name` value. | | `slug` | `string` | No | Webflow `slug` value. | | `lastPublished` | `{ lte?: string; gte?: string; }` | No | Webflow `lastPublished` value. | | `sortBy` | `Webflow.collections.ItemsListItemsLiveRequestSortBy` | No | Webflow `sortBy` value. | | `sortOrder` | `Webflow.collections.ItemsListItemsLiveRequestSortOrder` | No | Webflow `sortOrder` value. | | `collectionId` | `string` | Yes | Webflow CMS collection ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `items` | `Webflow.CollectionItem[]` | Webflow `items` value. | | `pagination` | `Webflow.CollectionItemListPagination` | Webflow `pagination` value. | # List orders Source: https://docs.automate.ax/reference/integrations/webflow/actions/list-orders Lists ecommerce orders with status and pagination filters. `webflow.listOrders` lists ecommerce orders with status and pagination filters. ## Example ```ts automations/webflow-list-orders.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("List orders", () => { onDashboardRun({ title: "List orders" }) webflow.listOrders({ siteId: "site-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `ecommerce:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `status` | `Webflow.OrdersListRequestStatus` | No | Webflow `status` value. | | `offset` | `number` | No | Number of records to skip. | | `limit` | `number` | No | Maximum number of records to return. | | `siteId` | `string` | Yes | Webflow site ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `orders` | `Webflow.Order[]` | List of orders | | `pagination` | `Webflow.Pagination` | Webflow `pagination` value. | # List pages Source: https://docs.automate.ax/reference/integrations/webflow/actions/list-pages Lists pages for a site with locale and pagination controls. `webflow.listPages` lists pages for a site with locale and pagination controls. ## Example ```ts automations/webflow-list-pages.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("List pages", () => { onDashboardRun({ title: "List pages" }) webflow.listPages({ siteId: "site-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `pages:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `localeId` | `string` | No | Optional site locale ID. | | `limit` | `number` | No | Maximum number of records to return. | | `offset` | `number` | No | Number of records to skip. | | `siteId` | `string` | Yes | Webflow site ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `pages` | `Webflow.Page[]` | Webflow pages. | | `pagination` | `Webflow.Pagination` | Webflow `pagination` value. | # List products Source: https://docs.automate.ax/reference/integrations/webflow/actions/list-products Lists ecommerce products and all of their SKUs. `webflow.listProducts` lists ecommerce products and all of their SKUs. ## Example ```ts automations/webflow-list-products.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("List products", () => { onDashboardRun({ title: "List products" }) webflow.listProducts({ siteId: "site-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `ecommerce:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `offset` | `number` | No | Number of records to skip. | | `limit` | `number` | No | Maximum number of records to return. | | `siteId` | `string` | Yes | Webflow site ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `items` | `Webflow.ProductAndSkUs[]` | Webflow `items` value. | | `pagination` | `Webflow.Pagination` | Webflow `pagination` value. | # List registered scripts Source: https://docs.automate.ax/reference/integrations/webflow/actions/list-registered-scripts Lists hosted and inline scripts registered for one site. `webflow.listRegisteredScripts` lists hosted and inline scripts registered for one site. ## Example ```ts automations/webflow-list-registered-scripts.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("List registered scripts", () => { onDashboardRun({ title: "List registered scripts" }) webflow.listRegisteredScripts({ siteId: "site-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `custom_code:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `registeredScripts` | `Webflow.CustomCodeHostedResponse[]` | Webflow `registeredScripts` value. | | `pagination` | `Webflow.Pagination` | Webflow `pagination` value. | # List site form submissions Source: https://docs.automate.ax/reference/integrations/webflow/actions/list-site-form-submissions Lists submissions across every form in one Webflow site. `webflow.listSiteFormSubmissions` lists submissions across every form in a site. ## Example ```ts automations/webflow-list-site-form-submissions.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("List site form submissions", () => { onDashboardRun({ title: "List site form submissions" }) webflow.listSiteFormSubmissions({ siteId: "site-id", limit: 100 }) }) ``` ## Inputs Every input accepts a compatible signal. This action requires the `forms:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | | `elementId` | `string` | No | Restricts results to one form element. | | `limit` | `number` | No | Page size from 1 through 100. | | `offset` | `number` | No | Nonnegative number of records to skip. | Use `listWebflowSiteFormSubmissionsForForm` when you already know the form ID. ## Output | Field | Type | Description | | - | - | - | | `formSubmissions` | `Webflow.FormSubmission[]` | Submitted form records. | | `pagination` | `Webflow.Pagination` | Resolved limit, offset, and total. | # List site form submissions for form Source: https://docs.automate.ax/reference/integrations/webflow/actions/list-site-form-submissions-for-form Lists one form's submissions through its site-scoped Webflow route. `webflow.listSiteFormSubmissionsForForm` lists submissions for one form through Webflow's site-scoped API. ## Example ```ts automations/webflow-list-site-form-submissions-for-form.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("List site form submissions", () => { onDashboardRun({ title: "List site form submissions" }) webflow.listSiteFormSubmissionsForForm({ formId: "form-id", limit: 100, siteId: "site-id", }) }) ``` ## Inputs Every input accepts a compatible signal. This action requires the `forms:read` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | | `formId` | `string` | Yes | Webflow form ID. | | `limit` | `number` | No | Page size from 1 through 100. | | `offset` | `number` | No | Nonnegative number of records to skip. | ## Output | Field | Type | Description | | - | - | - | | `formSubmissions` | `Webflow.FormSubmission[]` | Submitted form records. | | `pagination` | `Webflow.Pagination` | Resolved limit, offset, and total. | # List sites Source: https://docs.automate.ax/reference/integrations/webflow/actions/list-sites Lists every site accessible to the connected Webflow account. `webflow.listSites` lists every site accessible to the connected Webflow account. ## Example ```ts automations/webflow-list-sites.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("List sites", () => { onDashboardRun({ title: "List sites" }) webflow.listSites({}) }) ``` ## Inputs This action has no inputs. It requires the `sites:read` OAuth scope. ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `sites` | `Webflow.Site[]` | Webflow `sites` value. | # Publish collection items Source: https://docs.automate.ax/reference/integrations/webflow/actions/publish-collection-items Publishes or unpublishes selected staged CMS items. `webflow.publishCollectionItems` publishes or unpublishes selected staged CMS items. ## Example ```ts automations/webflow-publish-collection-items.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Publish collection items", () => { onDashboardRun({ title: "Publish collection items" }) webflow.publishCollectionItems({ collectionId: "collection-id", itemIds: ["item-id"], }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `cms:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `itemIds` | `string[]` | No | Webflow `itemIds` value. | | `items` | `{ cmsLocaleIds?: string[]; id: string; }[]` | No | Webflow `items` value. | | `collectionId` | `string` | Yes | Webflow CMS collection ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `publishedItemIds` | `string[]` | Webflow `publishedItemIds` value. | | `errors` | `string[]` | Webflow errors. | # Publish site Source: https://docs.automate.ax/reference/integrations/webflow/actions/publish-site Publishes a site or page to its Webflow and custom domains. `webflow.publishSite` publishes a site or page to its Webflow and custom domains. ## Example ```ts automations/webflow-publish-site.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Publish site", () => { onDashboardRun({ title: "Publish site" }) webflow.publishSite({ siteId: "site-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `sites:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `customDomains` | `string[]` | No | Webflow `customDomains` value. | | `publishToWebflowSubdomain` | `boolean` | No | Webflow `publishToWebflowSubdomain` value. | | `siteId` | `string` | Yes | Webflow site ID. | > [!NOTE] > > Webflow limits site publishing to one successful publish per minute. Batch > related changes before this action. ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `customDomains` | `Webflow.Domain[]` | Webflow `customDomains` value. | | `publishToWebflowSubdomain` | `boolean` | Webflow `publishToWebflowSubdomain` value. | # Refund order Source: https://docs.automate.ax/reference/integrations/webflow/actions/refund-order Refunds an ecommerce order with an optional reason. `webflow.refundOrder` refunds an ecommerce order with an optional reason. ## Example ```ts automations/webflow-refund-order.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Refund order", () => { onDashboardRun({ title: "Refund order" }) webflow.refundOrder({ siteId: "site-id", orderId: "order-id", reason: "requested", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `ecommerce:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `reason` | `Webflow.OrdersRefundRequestReason` | No | Webflow `reason` value. | | `siteId` | `string` | Yes | Webflow site ID. | | `orderId` | `string` | Yes | Webflow order ID. | > [!WARNING] > > This operation changes or permanently removes provider data. Confirm the IDs > before you deploy it. ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `orderId` | `string` | Webflow order ID. | | `status` | `Webflow.OrderStatus` | Webflow `status` value. | | `comment` | `string` | Webflow `comment` value. | | `orderComment` | `string` | Webflow `orderComment` value. | | `acceptedOn` | `string` | Webflow `acceptedOn` value. | | `fulfilledOn` | `string` | Webflow `fulfilledOn` value. | | `refundedOn` | `string` | Webflow `refundedOn` value. | | `disputedOn` | `string` | Webflow `disputedOn` value. | | `disputeUpdatedOn` | `string` | Webflow `disputeUpdatedOn` value. | | `disputeLastStatus` | `Webflow.OrderDisputeLastStatus` | Webflow `disputeLastStatus` value. | | `customerPaid` | `Webflow.OrderPrice` | Webflow `customerPaid` value. | | `netAmount` | `Webflow.OrderPrice` | Webflow `netAmount` value. | | `applicationFee` | `Webflow.OrderPrice` | Webflow `applicationFee` value. | | `allAddresses` | `Webflow.OrderAddress[]` | Webflow `allAddresses` value. | | `shippingAddress` | `Webflow.OrderShippingAddress` | Webflow `shippingAddress` value. | | `billingAddress` | `Webflow.OrderBillingAddress` | Webflow `billingAddress` value. | | `shippingProvider` | `string` | Webflow `shippingProvider` value. | | `shippingTracking` | `string` | Webflow `shippingTracking` value. | | `shippingTrackingUrl` | `string` | Webflow `shippingTrackingUrl` value. | | `customerInfo` | `Webflow.OrderCustomerInfo` | Webflow `customerInfo` value. | | `purchasedItems` | `Webflow.OrderPurchasedItem[]` | Webflow `purchasedItems` value. | | `purchasedItemsCount` | `number` | Webflow `purchasedItemsCount` value. | | `stripeDetails` | `Webflow.StripeDetails` | Webflow `stripeDetails` value. | | `stripeCard` | `Webflow.StripeCard` | Webflow `stripeCard` value. | | `paypalDetails` | `Webflow.PaypalDetails` | Webflow `paypalDetails` value. | | `customData` | `Record[]` | Webflow `customData` value. | | `metadata` | `Webflow.OrderMetadata` | Webflow `metadata` value. | | `isCustomerDeleted` | `boolean` | Webflow `isCustomerDeleted` value. | | `isShippingRequired` | `boolean` | Webflow `isShippingRequired` value. | | `hasDownloads` | `boolean` | Webflow `hasDownloads` value. | | `paymentProcessor` | `string` | Webflow `paymentProcessor` value. | | `totals` | `Webflow.OrderTotals` | Webflow `totals` value. | | `downloadFiles` | `Webflow.OrderDownloadFilesItem[]` | Webflow `downloadFiles` value. | # Register hosted script Source: https://docs.automate.ax/reference/integrations/webflow/actions/register-hosted-script Registers a hosted script URL, version, attributes, and integrity. `webflow.registerHostedScript` registers a hosted script URL, version, attributes, and integrity. ## Example ```ts automations/webflow-register-hosted-script.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Register hosted script", () => { onDashboardRun({ title: "Register hosted script" }) webflow.registerHostedScript({ siteId: "site-id", displayName: "Analytics", hostedLocation: "https://cdn.example.com/analytics.js", integrityHash: "sha384-J+YlJ8v0gpaRoKH7SbFbEmxOZlAxLiwNjfSsBhDooGa5roXlPPpXbEevck4J7YZ+", version: "1.0.0", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `custom_code:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `hostedLocation` | `string` | Yes | URL of the externally hosted JavaScript. | | `integrityHash` | `string` | Yes | SHA-256, SHA-384, or SHA-512 SRI hash for the hosted bytes. | | `canCopy` | `boolean` | No | Webflow `canCopy` value. | | `version` | `string` | Yes | Semantic version such as `"1.0.0"`. | | `displayName` | `string` | Yes | From 1 through 50 letters, numbers, or spaces. | | `siteId` | `string` | Yes | Webflow site ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `id` | `string` | Webflow `id` value. | | `canCopy` | `boolean` | Webflow `canCopy` value. | | `displayName` | `string` | Webflow `displayName` value. | | `hostedLocation` | `string` | Webflow `hostedLocation` value. | | `integrityHash` | `string` | Webflow `integrityHash` value. | | `createdOn` | `string` | Webflow `createdOn` value. | | `lastUpdated` | `string` | Webflow `lastUpdated` value. | | `version` | `string` | Webflow `version` value. | # Register inline script Source: https://docs.automate.ax/reference/integrations/webflow/actions/register-inline-script Registers inline JavaScript with a version and placement. `webflow.registerInlineScript` registers inline JavaScript with a version and placement. ## Example ```ts automations/webflow-register-inline-script.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Register inline script", () => { onDashboardRun({ title: "Register inline script" }) webflow.registerInlineScript({ siteId: "site-id", displayName: "Analytics", sourceCode: 'console.log("loaded")', version: "1.0.0", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `custom_code:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `sourceCode` | `string` | Yes | Inline JavaScript, up to 2,000 characters. | | `integrityHash` | `string` | No | Optional SHA-256, SHA-384, or SHA-512 SRI hash. | | `canCopy` | `boolean` | No | Webflow `canCopy` value. | | `version` | `string` | Yes | Semantic version such as `"1.0.0"`. | | `displayName` | `string` | Yes | From 1 through 50 letters, numbers, or spaces. | | `siteId` | `string` | Yes | Webflow site ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `id` | `string` | Webflow `id` value. | | `canCopy` | `boolean` | Webflow `canCopy` value. | | `displayName` | `string` | Webflow `displayName` value. | | `hostedLocation` | `string` | Webflow `hostedLocation` value. | | `integrityHash` | `string` | Webflow `integrityHash` value. | | `createdOn` | `string` | Webflow `createdOn` value. | | `lastUpdated` | `string` | Webflow `lastUpdated` value. | | `version` | `string` | Webflow `version` value. | # Replace custom font file Source: https://docs.automate.ax/reference/integrations/webflow/actions/replace-custom-font-file Creates upload credentials for a replacement font file. `webflow.replaceCustomFontFile` prepares a replacement binary for an existing custom font. ## Example ```ts automations/webflow-replace-custom-font-file.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Replace custom font file", () => { onDashboardRun({ title: "Replace custom font file" }) webflow.replaceCustomFontFile({ siteId: "site-id", fontId: "font-id", fileName: "AcmeSans-Regular-v2.woff2", fileHash: "d41d8cd98f00b204e9800998ecf8427e", }) }) ``` ## Inputs Every input accepts a compatible signal. This action requires the `sites:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | | `fontId` | `string` | Yes | Custom-font ID. | | `fileName` | `string` | Yes | Filename of at most 256 characters ending in `.woff2`, `.woff`, `.ttf`, `.otf`, or `.eot`. | | `fileHash` | `string` | Yes | Lowercase 32-character hexadecimal MD5 hash of the new bytes. | | `axes` | `WebflowCustomFontAxis[]` | No | Up to 16 axes. Required when the existing font has axes; pass `[]` when replacing it with a static font. | Each axis contains numeric `min`, `max`, and `defaultValue` fields, an optional `name`, and a `tag` of exactly four printable ASCII characters. > [!NOTE] > > Upload the replacement bytes to the returned provider URL to finish the > replacement. ## Output | Field | Type | Description | | - | - | - | | `customFont` | `WebflowCustomFont` | Updated font metadata. | | `upload` | `WebflowCustomFontUpload` | Signed upload URL, form fields, and expiry timestamp. | Post the binary to `upload.url` as multipart form data. Include every value in `upload.fields`, then append the binary in a final field named `file`. # Resolve comment thread Source: https://docs.automate.ax/reference/integrations/webflow/actions/resolve-comment-thread Resolves or reopens a Webflow design-review comment thread. `webflow.resolveCommentThread` changes the resolved state of a design-review comment thread. ## Example ```ts automations/webflow-resolve-comment-thread.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Resolve comment thread", () => { onDashboardRun({ title: "Resolve comment thread" }) webflow.resolveCommentThread({ siteId: "site-id", commentThreadId: "comment-thread-id", resolved: true, }) }) ``` ## Inputs Every input accepts a compatible signal. This action requires the `comments:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | | `commentThreadId` | `string` | Yes | Comment-thread ID. | | `resolved` | `boolean` | Yes | `true` resolves the thread; `false` reopens it. | ## Output Returns the updated `Webflow.CommentThread`, including its IDs, content, author, mentions, locale, breakpoint, timestamps, and `isResolved` state. # Set page custom code Source: https://docs.automate.ax/reference/integrations/webflow/actions/set-page-custom-code Replaces the registered scripts applied to one page. `webflow.setPageCustomCode` replaces the registered scripts applied to one page. ## Example ```ts automations/webflow-set-page-custom-code.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Set page custom code", () => { onDashboardRun({ title: "Set page custom code" }) webflow.setPageCustomCode({ pageId: "page-id", scripts: [{ id: "analytics", location: "footer", version: "1.0.0" }], }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `custom_code:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `scripts` | `{ id: string; location: Webflow.ScriptApplyLocation; version: string; attributes?: Record; }[]` | No | Complete list of registered scripts to apply. Omit it to remove every applied script. | | `pageId` | `string` | Yes | Webflow page ID. | > [!WARNING] > > This action replaces the complete applied-script list for the target. Include > every script that should remain active. ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `scripts` | `Webflow.ScriptApply[]` | Webflow `scripts` value. | | `lastUpdated` | `string` | Webflow `lastUpdated` value. | | `createdOn` | `string` | Webflow `createdOn` value. | # Set site custom code Source: https://docs.automate.ax/reference/integrations/webflow/actions/set-site-custom-code Replaces the registered scripts applied site-wide. `webflow.setSiteCustomCode` replaces the registered scripts applied site-wide. ## Example ```ts automations/webflow-set-site-custom-code.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Set site custom code", () => { onDashboardRun({ title: "Set site custom code" }) webflow.setSiteCustomCode({ siteId: "site-id", scripts: [{ id: "analytics", location: "footer", version: "1.0.0" }], }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `custom_code:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `scripts` | `{ id: string; location: Webflow.ScriptApplyLocation; version: string; attributes?: Record; }[]` | No | Complete list of registered scripts to apply. Omit it to remove every applied script. | | `siteId` | `string` | Yes | Webflow site ID. | > [!WARNING] > > This action replaces the complete applied-script list for the target. Include > every script that should remain active. ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `scripts` | `Webflow.ScriptApply[]` | Webflow `scripts` value. | | `lastUpdated` | `string` | Webflow `lastUpdated` value. | | `createdOn` | `string` | Webflow `createdOn` value. | # Unfulfill order Source: https://docs.automate.ax/reference/integrations/webflow/actions/unfulfill-order Returns a fulfilled ecommerce order to unfulfilled state. `webflow.unfulfillOrder` returns a fulfilled ecommerce order to unfulfilled state. ## Example ```ts automations/webflow-unfulfill-order.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Unfulfill order", () => { onDashboardRun({ title: "Unfulfill order" }) webflow.unfulfillOrder({ siteId: "site-id", orderId: "order-id", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `ecommerce:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | | `orderId` | `string` | Yes | Webflow order ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `orderId` | `string` | Webflow order ID. | | `status` | `Webflow.OrderStatus` | Webflow `status` value. | | `comment` | `string` | Webflow `comment` value. | | `orderComment` | `string` | Webflow `orderComment` value. | | `acceptedOn` | `string` | Webflow `acceptedOn` value. | | `fulfilledOn` | `string` | Webflow `fulfilledOn` value. | | `refundedOn` | `string` | Webflow `refundedOn` value. | | `disputedOn` | `string` | Webflow `disputedOn` value. | | `disputeUpdatedOn` | `string` | Webflow `disputeUpdatedOn` value. | | `disputeLastStatus` | `Webflow.OrderDisputeLastStatus` | Webflow `disputeLastStatus` value. | | `customerPaid` | `Webflow.OrderPrice` | Webflow `customerPaid` value. | | `netAmount` | `Webflow.OrderPrice` | Webflow `netAmount` value. | | `applicationFee` | `Webflow.OrderPrice` | Webflow `applicationFee` value. | | `allAddresses` | `Webflow.OrderAddress[]` | Webflow `allAddresses` value. | | `shippingAddress` | `Webflow.OrderShippingAddress` | Webflow `shippingAddress` value. | | `billingAddress` | `Webflow.OrderBillingAddress` | Webflow `billingAddress` value. | | `shippingProvider` | `string` | Webflow `shippingProvider` value. | | `shippingTracking` | `string` | Webflow `shippingTracking` value. | | `shippingTrackingUrl` | `string` | Webflow `shippingTrackingUrl` value. | | `customerInfo` | `Webflow.OrderCustomerInfo` | Webflow `customerInfo` value. | | `purchasedItems` | `Webflow.OrderPurchasedItem[]` | Webflow `purchasedItems` value. | | `purchasedItemsCount` | `number` | Webflow `purchasedItemsCount` value. | | `stripeDetails` | `Webflow.StripeDetails` | Webflow `stripeDetails` value. | | `stripeCard` | `Webflow.StripeCard` | Webflow `stripeCard` value. | | `paypalDetails` | `Webflow.PaypalDetails` | Webflow `paypalDetails` value. | | `customData` | `Record[]` | Webflow `customData` value. | | `metadata` | `Webflow.OrderMetadata` | Webflow `metadata` value. | | `isCustomerDeleted` | `boolean` | Webflow `isCustomerDeleted` value. | | `isShippingRequired` | `boolean` | Webflow `isShippingRequired` value. | | `hasDownloads` | `boolean` | Webflow `hasDownloads` value. | | `paymentProcessor` | `string` | Webflow `paymentProcessor` value. | | `totals` | `Webflow.OrderTotals` | Webflow `totals` value. | | `downloadFiles` | `Webflow.OrderDownloadFilesItem[]` | Webflow `downloadFiles` value. | # Update asset Source: https://docs.automate.ax/reference/integrations/webflow/actions/update-asset Updates asset metadata or moves it between folders. `webflow.updateAsset` updates asset metadata or moves it between folders. ## Example ```ts automations/webflow-update-asset.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Update asset", () => { onDashboardRun({ title: "Update asset" }) webflow.updateAsset({ assetId: "asset-id", displayName: "Homepage hero", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `assets:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `localeId` | `string` | No | Optional site locale ID. | | `displayName` | `string` | No | Webflow `displayName` value. | | `assetId` | `string` | Yes | Webflow asset ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `id` | `string` | Webflow `id` value. | | `contentType` | `string` | Webflow `contentType` value. | | `size` | `number` | Webflow `size` value. | | `siteId` | `string` | Webflow site ID. | | `hostedUrl` | `string` | Webflow `hostedUrl` value. | | `originalFileName` | `string` | Webflow `originalFileName` value. | | `displayName` | `string` | Webflow `displayName` value. | | `lastUpdated` | `string` | Webflow `lastUpdated` value. | | `createdOn` | `string` | Webflow `createdOn` value. | | `variants` | `Webflow.AssetVariant[]` | Webflow `variants` value. | | `altText` | `string` | Webflow `altText` value. | # Update collection Source: https://docs.automate.ax/reference/integrations/webflow/actions/update-collection Updates Webflow collection metadata and field groups. `webflow.updateCollection` changes a collection's display name, singular name, slug, or field groups. ## Example ```ts automations/webflow-update-collection.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Update collection", () => { onDashboardRun({ title: "Update collection" }) webflow.updateCollection({ collectionId: "collection-id", displayName: "Articles", singularName: "Article", }) }) ``` ## Inputs Every input accepts a compatible signal. This action requires the `cms:write` OAuth scope. Provide at least one optional property. | Field | Type | Required | Description | | - | - | - | - | | `collectionId` | `string` | Yes | Webflow collection ID. | | `displayName` | `string` | No | New collection display name. | | `singularName` | `string` | No | New singular item name. | | `slug` | `string` | No | New collection URL slug. | | `fieldGroups` | `WebflowCollectionFieldGroup[]` | No | Complete replacement field-group list. | Each field group requires `displayName` and `fieldIds`; `description` is optional. ## Output | Field | Type | Description | | - | - | - | | `id` | `string` | Collection ID. | | `displayName` | `string` | Collection display name. | | `singularName` | `string` | Singular item name. | | `slug` | `string` | Collection slug, when present. | | `fields` | `WebflowCollectionField[]` | Collection fields. | | `fieldGroups` | `WebflowCollectionFieldGroup[]` | Field groups, when present. | | `createdOn` | `string` | Creation timestamp, when present. | | `lastUpdated` | `string` | Last-update timestamp, when present. | # Update collection field Source: https://docs.automate.ax/reference/integrations/webflow/actions/update-collection-field Updates the label or help text for a CMS collection field. `webflow.updateCollectionField` updates the label or help text for a CMS collection field. ## Example ```ts automations/webflow-update-collection-field.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Update collection field", () => { onDashboardRun({ title: "Update collection field" }) webflow.updateCollectionField({ collectionId: "collection-id", fieldId: "field-id", displayName: "Article summary", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `cms:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `isRequired` | `boolean` | No | Webflow `isRequired` value. | | `displayName` | `string` | No | Webflow `displayName` value. | | `helpText` | `string` | No | Webflow `helpText` value. | | `collectionId` | `string` | Yes | Webflow CMS collection ID. | | `fieldId` | `string` | Yes | Webflow `fieldId` value. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `id` | `string` | Webflow `id` value. | | `isRequired` | `boolean` | Webflow `isRequired` value. | | `isEditable` | `boolean` | Webflow `isEditable` value. | | `type` | `Webflow.FieldType` | Webflow `type` value. | | `slug` | `string` | Webflow `slug` value. | | `displayName` | `string` | Webflow `displayName` value. | | `helpText` | `string` | Webflow `helpText` value. | | `validations` | `Webflow.FieldValidations` | Webflow `validations` value. | # Update collection item Source: https://docs.automate.ax/reference/integrations/webflow/actions/update-collection-item Updates fields, draft state, or archive state for one CMS item. `webflow.updateCollectionItem` updates fields, draft state, or archive state for one CMS item. ## Example ```ts automations/webflow-update-collection-item.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Update collection item", () => { onDashboardRun({ title: "Update collection item" }) webflow.updateCollectionItem({ collectionId: "collection-id", itemId: "item-id", fieldData: { name: "Updated launch notes" }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `cms:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `collectionId` | `string` | Yes | Webflow CMS collection ID. | | `itemId` | `string` | Yes | Webflow CMS item ID. | | `cmsLocaleId` | `string` | No | Locale of the item variant to update. | | `fieldData` | `Webflow.CollectionItemPatchSingleFieldData` | No | Collection fields to update, including `name` or `slug`. | | `isArchived` | `boolean` | No | Changes the item's archived state. | | `isDraft` | `boolean` | No | Changes the item's draft state. | | `skipInvalidFiles` | `boolean` | No | Skips invalid file values instead of rejecting the request. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `id` | `string` | Webflow `id` value. | | `cmsLocaleId` | `string` | Optional CMS locale ID. | | `lastPublished` | `string` | Webflow `lastPublished` value. | | `lastUpdated` | `string` | Webflow `lastUpdated` value. | | `createdOn` | `string` | Webflow `createdOn` value. | | `isArchived` | `boolean` | Webflow `isArchived` value. | | `isDraft` | `boolean` | Webflow `isDraft` value. | | `fieldData` | `Webflow.CollectionItemFieldData` | Webflow `fieldData` value. | # Update collection items Source: https://docs.automate.ax/reference/integrations/webflow/actions/update-collection-items Updates up to 100 staged CMS items across selected locales. `webflow.updateCollectionItems` updates up to 100 staged CMS items across selected locales. ## Example ```ts automations/webflow-update-collection-items.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Update collection items", () => { onDashboardRun({ title: "Update collection items" }) webflow.updateCollectionItems({ collectionId: "collection-id", items: [{ id: "item-id", fieldData: { name: "Updated launch notes" } }], }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `cms:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `skipInvalidFiles` | `boolean` | No | Webflow `skipInvalidFiles` value. | | `items` | `object[]` | No | Webflow `items` value. | | `collectionId` | `string` | Yes | Webflow CMS collection ID. | ## Output Returns no response body after Webflow accepts the operation. # Update component content Source: https://docs.automate.ax/reference/integrations/webflow/actions/update-component-content Updates editable DOM nodes in one reusable component. `webflow.updateComponentContent` updates editable DOM nodes in one reusable component. ## Example ```ts automations/webflow-update-component-content.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Update component content", () => { onDashboardRun({ title: "Update component content" }) webflow.updateComponentContent({ siteId: "site-id", componentId: "component-id", localeId: "locale-id", nodes: [{ nodeId: "node-id", text: "Updated text" }], }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `components:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `localeId` | `string` | No | Optional site locale ID. | | `branchId` | `string` | No | Optional Webflow branch ID. | | `nodes` | `object[]` | Yes | Webflow `nodes` value. | | `siteId` | `string` | Yes | Webflow site ID. | | `componentId` | `string` | Yes | Webflow component ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `errors` | `string[]` | Webflow `errors` value. | # Update component properties Source: https://docs.automate.ax/reference/integrations/webflow/actions/update-component-properties Updates property values on one reusable component. `webflow.updateComponentProperties` updates property values on one reusable component. ## Example ```ts automations/webflow-update-component-properties.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Update component properties", () => { onDashboardRun({ title: "Update component properties" }) webflow.updateComponentProperties({ siteId: "site-id", componentId: "component-id", properties: [{ propertyId: "property-id", text: "Updated text" }], }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `components:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `localeId` | `string` | No | Optional site locale ID. | | `branchId` | `string` | No | Optional Webflow branch ID. | | `properties` | `{ propertyId: string; text: string; }[]` | Yes | Webflow `properties` value. | | `siteId` | `string` | Yes | Webflow site ID. | | `componentId` | `string` | Yes | Webflow component ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `errors` | `string[]` | Webflow `errors` value. | # Update custom font Source: https://docs.automate.ax/reference/integrations/webflow/actions/update-custom-font Updates custom-font metadata for a Webflow site. `webflow.updateCustomFont` changes a custom font's family, weight, italic state, or font-display mode. ## Example ```ts automations/webflow-update-custom-font.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Update custom font", () => { onDashboardRun({ title: "Update custom font" }) webflow.updateCustomFont({ siteId: "site-id", fontId: "font-id", fontDisplay: "swap", weight: 500, }) }) ``` ## Inputs Every input accepts a compatible signal. This action requires the `sites:write` OAuth scope. Provide at least one optional property. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | | `fontId` | `string` | Yes | Custom-font ID. | | `fontFamily` | `string` | No | CSS family name from 1 through 256 characters. | | `weight` | `number` | No | Integer CSS weight from 1 through 1,000. | | `italic` | `boolean` | No | Whether the font is italic. | | `fontDisplay` | `"auto" \| "block" \| "swap" \| "fallback" \| "optional"` | No | CSS `font-display` value. | ## Output | Field | Type | Description | | - | - | - | | `customFont` | `WebflowCustomFont` | Updated font metadata. | `customFont` includes `id`, `fontFamily`, `format`, `fileName`, `weight`, `italic`, `fontDisplay`, `axes`, and `hostedUrl`. # Update form submission Source: https://docs.automate.ax/reference/integrations/webflow/actions/update-form-submission Updates editable form-submission metadata such as spam state. `webflow.updateFormSubmission` updates editable form-submission metadata such as spam state. ## Example ```ts automations/webflow-update-form-submission.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Update form submission", () => { onDashboardRun({ title: "Update form submission" }) webflow.updateFormSubmission({ formSubmissionId: "form-submission-id", formSubmissionData: { status: "reviewed" }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `forms:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `formSubmissionData` | `Record` | No | Webflow `formSubmissionData` value. | | `formSubmissionId` | `string` | Yes | Webflow form-submission ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `id` | `string` | Webflow `id` value. | | `displayName` | `string` | Webflow `displayName` value. | | `siteId` | `string` | Webflow site ID. | | `workspaceId` | `string` | Webflow `workspaceId` value. | | `dateSubmitted` | `string` | Webflow `dateSubmitted` value. | | `formResponse` | `Record` | Webflow `formResponse` value. | # Update inventory Source: https://docs.automate.ax/reference/integrations/webflow/actions/update-inventory Updates quantity or finite/infinite inventory mode for one SKU. `webflow.updateInventory` updates quantity or finite/infinite inventory mode for one SKU. ## Example ```ts automations/webflow-update-inventory.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Update inventory", () => { onDashboardRun({ title: "Update inventory" }) webflow.updateInventory({ skuCollectionId: "sku-collection-id", skuId: "sku-id", inventoryType: "finite", quantity: 12, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `ecommerce:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `inventoryType` | `Webflow.InventoryUpdateRequestInventoryType` | Yes | Webflow `inventoryType` value. | | `updateQuantity` | `number` | No | Webflow `updateQuantity` value. | | `quantity` | `number` | No | Webflow `quantity` value. | | `skuCollectionId` | `string` | Yes | Webflow SKU collection ID. | | `skuId` | `string` | Yes | Webflow SKU ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `id` | `string` | Webflow `id` value. | | `quantity` | `number` | Webflow `quantity` value. | | `inventoryType` | `Webflow.InventoryItemInventoryType` | Webflow `inventoryType` value. | # Update live collection item Source: https://docs.automate.ax/reference/integrations/webflow/actions/update-live-collection-item Updates and publishes one CMS item immediately. `webflow.updateLiveCollectionItem` updates and publishes one CMS item immediately. ## Example ```ts automations/webflow-update-live-collection-item.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Update live collection item", () => { onDashboardRun({ title: "Update live collection item" }) webflow.updateLiveCollectionItem({ collectionId: "collection-id", itemId: "item-id", fieldData: { name: "Updated launch notes" }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `cms:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `collectionId` | `string` | Yes | Webflow CMS collection ID. | | `itemId` | `string` | Yes | Webflow CMS item ID. | | `cmsLocaleId` | `string` | No | Locale of the item variant to update. | | `fieldData` | `Webflow.CollectionItemPatchSingleFieldData` | No | Collection fields to update, including `name` or `slug`. | | `isArchived` | `boolean` | No | Changes the item's archived state. | | `isDraft` | `boolean` | No | Changes the item's draft state. | | `skipInvalidFiles` | `boolean` | No | Skips invalid file values instead of rejecting the request. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `id` | `string` | Webflow `id` value. | | `cmsLocaleId` | `string` | Optional CMS locale ID. | | `lastPublished` | `string` | Webflow `lastPublished` value. | | `lastUpdated` | `string` | Webflow `lastUpdated` value. | | `createdOn` | `string` | Webflow `createdOn` value. | | `isArchived` | `boolean` | Webflow `isArchived` value. | | `isDraft` | `boolean` | Webflow `isDraft` value. | | `fieldData` | `Webflow.CollectionItemFieldData` | Webflow `fieldData` value. | # Update live collection items Source: https://docs.automate.ax/reference/integrations/webflow/actions/update-live-collection-items Updates and publishes multiple CMS items immediately. `webflow.updateLiveCollectionItems` updates and publishes multiple CMS items immediately. ## Example ```ts automations/webflow-update-live-collection-items.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Update live collection items", () => { onDashboardRun({ title: "Update live collection items" }) webflow.updateLiveCollectionItems({ collectionId: "collection-id", items: [{ id: "item-id", fieldData: { name: "Updated launch notes" } }], }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `cms:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `skipInvalidFiles` | `boolean` | No | Webflow `skipInvalidFiles` value. | | `items` | `object[]` | No | Webflow `items` value. | | `collectionId` | `string` | Yes | Webflow CMS collection ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `items` | `Webflow.CollectionItem[]` | Webflow `items` value. | # Update order Source: https://docs.automate.ax/reference/integrations/webflow/actions/update-order Updates editable comments on an ecommerce order. `webflow.updateOrder` updates editable comments on an ecommerce order. ## Example ```ts automations/webflow-update-order.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Update order", () => { onDashboardRun({ title: "Update order" }) webflow.updateOrder({ siteId: "site-id", orderId: "order-id", comment: "Customer requested gift wrapping.", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `ecommerce:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `comment` | `string` | No | Webflow `comment` value. | | `shippingProvider` | `string` | No | Webflow `shippingProvider` value. | | `shippingTracking` | `string` | No | Webflow `shippingTracking` value. | | `shippingTrackingUrl` | `string` | No | Webflow `shippingTrackingUrl` value. | | `siteId` | `string` | Yes | Webflow site ID. | | `orderId` | `string` | Yes | Webflow order ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `orderId` | `string` | Webflow order ID. | | `status` | `Webflow.OrderStatus` | Webflow `status` value. | | `comment` | `string` | Webflow `comment` value. | | `orderComment` | `string` | Webflow `orderComment` value. | | `acceptedOn` | `string` | Webflow `acceptedOn` value. | | `fulfilledOn` | `string` | Webflow `fulfilledOn` value. | | `refundedOn` | `string` | Webflow `refundedOn` value. | | `disputedOn` | `string` | Webflow `disputedOn` value. | | `disputeUpdatedOn` | `string` | Webflow `disputeUpdatedOn` value. | | `disputeLastStatus` | `Webflow.OrderDisputeLastStatus` | Webflow `disputeLastStatus` value. | | `customerPaid` | `Webflow.OrderPrice` | Webflow `customerPaid` value. | | `netAmount` | `Webflow.OrderPrice` | Webflow `netAmount` value. | | `applicationFee` | `Webflow.OrderPrice` | Webflow `applicationFee` value. | | `allAddresses` | `Webflow.OrderAddress[]` | Webflow `allAddresses` value. | | `shippingAddress` | `Webflow.OrderShippingAddress` | Webflow `shippingAddress` value. | | `billingAddress` | `Webflow.OrderBillingAddress` | Webflow `billingAddress` value. | | `shippingProvider` | `string` | Webflow `shippingProvider` value. | | `shippingTracking` | `string` | Webflow `shippingTracking` value. | | `shippingTrackingUrl` | `string` | Webflow `shippingTrackingUrl` value. | | `customerInfo` | `Webflow.OrderCustomerInfo` | Webflow `customerInfo` value. | | `purchasedItems` | `Webflow.OrderPurchasedItem[]` | Webflow `purchasedItems` value. | | `purchasedItemsCount` | `number` | Webflow `purchasedItemsCount` value. | | `stripeDetails` | `Webflow.StripeDetails` | Webflow `stripeDetails` value. | | `stripeCard` | `Webflow.StripeCard` | Webflow `stripeCard` value. | | `paypalDetails` | `Webflow.PaypalDetails` | Webflow `paypalDetails` value. | | `customData` | `Record[]` | Webflow `customData` value. | | `metadata` | `Webflow.OrderMetadata` | Webflow `metadata` value. | | `isCustomerDeleted` | `boolean` | Webflow `isCustomerDeleted` value. | | `isShippingRequired` | `boolean` | Webflow `isShippingRequired` value. | | `hasDownloads` | `boolean` | Webflow `hasDownloads` value. | | `paymentProcessor` | `string` | Webflow `paymentProcessor` value. | | `totals` | `Webflow.OrderTotals` | Webflow `totals` value. | | `downloadFiles` | `Webflow.OrderDownloadFilesItem[]` | Webflow `downloadFiles` value. | # Update page content Source: https://docs.automate.ax/reference/integrations/webflow/actions/update-page-content Updates editable DOM nodes on one static page and locale. `webflow.updatePageContent` updates editable DOM nodes on one static page and locale. ## Example ```ts automations/webflow-update-page-content.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Update page content", () => { onDashboardRun({ title: "Update page content" }) webflow.updatePageContent({ pageId: "page-id", localeId: "locale-id", nodes: [{ nodeId: "node-id", text: "Updated text" }], }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `pages:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `localeId` | `string` | Yes | Optional site locale ID. | | `nodes` | `object[]` | Yes | Webflow `nodes` value. | | `pageId` | `string` | Yes | Webflow page ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `errors` | `string[]` | Webflow `errors` value. | # Update page settings Source: https://docs.automate.ax/reference/integrations/webflow/actions/update-page-settings Updates page title, slug, SEO, Open Graph, and draft settings. `webflow.updatePageSettings` updates page title, slug, SEO, Open Graph, and draft settings. ## Example ```ts automations/webflow-update-page-settings.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Update page settings", () => { onDashboardRun({ title: "Update page settings" }) webflow.updatePageSettings({ pageId: "page-id", title: "Updated page title", }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `pages:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `localeId` | `string` | No | Optional site locale ID. | | `title` | `string` | No | Webflow `title` value. | | `slug` | `string` | No | Webflow `slug` value. | | `seo` | `{ title?: string; description?: string; }` | No | Webflow `seo` value. | | `openGraph` | `{ title?: string; titleCopied?: boolean; description?: string; descriptionCopied?: boolean; }` | No | Webflow `openGraph` value. | | `pageId` | `string` | Yes | Webflow page ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `id` | `string` | Webflow `id` value. | | `siteId` | `string` | Webflow site ID. | | `title` | `string` | Webflow `title` value. | | `slug` | `string` | Webflow `slug` value. | | `parentId` | `string` | Webflow `parentId` value. | | `collectionId` | `string` | Webflow CMS collection ID. | | `createdOn` | `string` | Webflow `createdOn` value. | | `lastUpdated` | `string` | Webflow `lastUpdated` value. | | `archived` | `boolean` | Webflow `archived` value. | | `draft` | `boolean` | Webflow `draft` value. | | `canBranch` | `boolean` | Webflow `canBranch` value. | | `isBranch` | `boolean` | Webflow `isBranch` value. | | `branchId` | `string` | Optional Webflow branch ID. | | `seo` | `Webflow.PageSeo` | Webflow `seo` value. | | `openGraph` | `Webflow.PageOpenGraph` | Webflow `openGraph` value. | | `localeId` | `string` | Optional site locale ID. | | `publishedPath` | `string` | Webflow `publishedPath` value. | # Update product Source: https://docs.automate.ax/reference/integrations/webflow/actions/update-product Updates product content, settings, variants, or draft state. `webflow.updateProduct` updates product content, settings, variants, or draft state. ## Example ```ts automations/webflow-update-product.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Update product", () => { onDashboardRun({ title: "Update product" }) webflow.updateProduct({ siteId: "site-id", productId: "product-id", product: { fieldData: { name: "Updated T-shirt", slug: "updated-t-shirt" }, }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `ecommerce:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `publishStatus` | `Webflow.PublishStatus` | No | Webflow `publishStatus` value. | | `product` | `object` | No | Webflow `product` value. | | `sku` | `object` | No | Webflow `sku` value. | | `siteId` | `string` | Yes | Webflow site ID. | | `productId` | `string` | Yes | Webflow product ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `id` | `string` | Webflow `id` value. | | `cmsLocaleId` | `string` | Optional CMS locale ID. | | `lastPublished` | `string` | Webflow `lastPublished` value. | | `lastUpdated` | `string` | Webflow `lastUpdated` value. | | `createdOn` | `string` | Webflow `createdOn` value. | | `isArchived` | `boolean` | Webflow `isArchived` value. | | `isDraft` | `boolean` | Webflow `isDraft` value. | | `fieldData` | `Webflow.ProductFieldData` | Webflow `fieldData` value. | # Update product sku Source: https://docs.automate.ax/reference/integrations/webflow/actions/update-product-sku Updates pricing, variants, media, or shipping data for one SKU. `webflow.updateProductSku` updates pricing, variants, media, or shipping data for one SKU. ## Example ```ts automations/webflow-update-product-sku.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Update product sku", () => { onDashboardRun({ title: "Update product sku" }) webflow.updateProductSku({ siteId: "site-id", productId: "product-id", skuId: "sku-id", sku: { fieldData: { name: "T-shirt, blue", price: { currency: "USD", unit: "USD", value: 2700 }, slug: "t-shirt-blue", }, }, }) }) ``` ## Inputs Every input accepts a compatible signal. It requires the `ecommerce:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `publishStatus` | `Webflow.PublishStatus` | No | Webflow `publishStatus` value. | | `sku` | `object` | Yes | Webflow `sku` value. | | `siteId` | `string` | Yes | Webflow site ID. | | `productId` | `string` | Yes | Webflow product ID. | | `skuId` | `string` | Yes | Webflow SKU ID. | ## Output Returns an object with the fields below. Automate.ax converts provider `Date` values to ISO 8601 strings. | Field | Type | Description | | - | - | - | | `id` | `string` | Webflow `id` value. | | `cmsLocaleId` | `string` | Optional CMS locale ID. | | `lastPublished` | `string` | Webflow `lastPublished` value. | | `lastUpdated` | `string` | Webflow `lastUpdated` value. | | `createdOn` | `string` | Webflow `createdOn` value. | | `fieldData` | `Webflow.SkuFieldData` | Webflow `fieldData` value. | # Update site form submission Source: https://docs.automate.ax/reference/integrations/webflow/actions/update-site-form-submission Updates hidden submission data through its site-scoped Webflow route. `webflow.updateSiteFormSubmission` updates hidden fields on one submission through Webflow's site-scoped API. ## Example ```ts automations/webflow-update-site-form-submission.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Update site form submission", () => { onDashboardRun({ title: "Update site form submission" }) webflow.updateSiteFormSubmission({ formSubmissionData: { status: "reviewed" }, formSubmissionId: "submission-id", siteId: "site-id", }) }) ``` ## Inputs Every input accepts a compatible signal. This action requires the `forms:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | | `formSubmissionId` | `string` | Yes | Form-submission ID. | | `formSubmissionData` | `Record` | No | Existing hidden field names mapped to replacement values. | ## Output | Field | Type | Description | | - | - | - | | `id` | `string` | Submission ID. | | `displayName` | `string` | Form display name. | | `siteId` | `string` | Site ID. | | `workspaceId` | `string` | Workspace ID. | | `dateSubmitted` | `string` | Submission timestamp. | | `formResponse` | `Record` | Submitted field values. | # Upsert Google tags Source: https://docs.automate.ax/reference/integrations/webflow/actions/upsert-google-tags Adds or updates Google tags without removing other site tags. `webflow.upsertGoogleTags` adds or updates Google tags on a site while preserving tags omitted from the request. ## Example ```ts automations/webflow-upsert-google-tags.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Upsert Google tags", () => { onDashboardRun({ title: "Upsert Google tags" }) webflow.upsertGoogleTags({ siteId: "site-id", googleTagIds: [{ displayName: "Main analytics", tagId: "G-XXXXXXXXXX" }], }) }) ``` ## Inputs Every input accepts a compatible signal. This action requires the `sites:write` OAuth scope. | Field | Type | Required | Description | | - | - | - | - | | `siteId` | `string` | Yes | Webflow site ID. | | `googleTagIds` | `WebflowGoogleTag[]` | Yes | Up to 25 tags to add or update. | Each tag requires `displayName` and `tagId`; `order` is an optional nonnegative integer. `tagId` must start with `G-`, `GT-`, `AW-`, or `DC-` and continue with letters or digits. Webflow rejects legacy `UA-` IDs. Existing tags omitted from the request remain configured, and Webflow assigns an order to new tags when you omit it. ## Output | Field | Type | Description | | - | - | - | | `googleTagIds` | `{ displayName: string; tagId: string; order?: number }[]` | Complete tag list after the update. | # Webflow Source: https://docs.automate.ax/reference/integrations/webflow/index Manage Webflow sites, CMS content, pages, forms, assets, ecommerce, and analytics, or react to site events. ## Exports ```ts theme={null} import { webflow, webflowAccount, WebflowClient, getWebflowApi, } from "automate.ax/webflow" ``` * `webflow` contains the packaged Webflow actions and triggers. * `webflowAccount("name")` selects a named Webflow connection. * `WebflowClient` is the official Webflow client class returned by `getWebflowApi`. * `getWebflowApi` creates the authenticated Webflow API helper for a custom account-backed action. ## Triggers * [Every Webflow event](/reference/integrations/webflow/triggers/on-event) * [Form submitted](/reference/integrations/webflow/triggers/on-form-submitted) * [Site published](/reference/integrations/webflow/triggers/on-site-published) * [Page created](/reference/integrations/webflow/triggers/on-page-created) * [Page metadata updated](/reference/integrations/webflow/triggers/on-page-metadata-updated) * [Page deleted](/reference/integrations/webflow/triggers/on-page-deleted) * [Order created](/reference/integrations/webflow/triggers/on-order-created) * [Order changed](/reference/integrations/webflow/triggers/on-order-changed) * [Inventory changed](/reference/integrations/webflow/triggers/on-inventory-changed) * [Collection item created](/reference/integrations/webflow/triggers/on-collection-item-created) * [Collection item changed](/reference/integrations/webflow/triggers/on-collection-item-changed) * [Collection item deleted](/reference/integrations/webflow/triggers/on-collection-item-deleted) * [Collection item published](/reference/integrations/webflow/triggers/on-collection-item-published) * [Collection item unpublished](/reference/integrations/webflow/triggers/on-collection-item-unpublished) * [Comment created](/reference/integrations/webflow/triggers/on-comment-created) ## Actions * [Create asset](/reference/integrations/webflow/actions/create-asset) * [Create asset folder](/reference/integrations/webflow/actions/create-asset-folder) * [Create collection](/reference/integrations/webflow/actions/create-collection) * [Create collection field](/reference/integrations/webflow/actions/create-collection-field) * [Create collection item](/reference/integrations/webflow/actions/create-collection-item) * [Create comment reply](/reference/integrations/webflow/actions/create-comment-reply) * [Create custom font](/reference/integrations/webflow/actions/create-custom-font) * [Create custom fonts](/reference/integrations/webflow/actions/create-custom-fonts) * [Create live collection item](/reference/integrations/webflow/actions/create-live-collection-item) * [Create localized collection items](/reference/integrations/webflow/actions/create-localized-collection-items) * [Create product](/reference/integrations/webflow/actions/create-product) * [Create product SKUs](/reference/integrations/webflow/actions/create-product-skus) * [Delete asset](/reference/integrations/webflow/actions/delete-asset) * [Delete all Google tags](/reference/integrations/webflow/actions/delete-all-google-tags) * [Delete collection](/reference/integrations/webflow/actions/delete-collection) * [Delete collection field](/reference/integrations/webflow/actions/delete-collection-field) * [Delete collection item](/reference/integrations/webflow/actions/delete-collection-item) * [Delete collection items](/reference/integrations/webflow/actions/delete-collection-items) * [Delete custom font](/reference/integrations/webflow/actions/delete-custom-font) * [Delete custom fonts](/reference/integrations/webflow/actions/delete-custom-fonts) * [Delete form submission](/reference/integrations/webflow/actions/delete-form-submission) * [Delete site form submission](/reference/integrations/webflow/actions/delete-site-form-submission) * [Delete Google tag](/reference/integrations/webflow/actions/delete-google-tag) * [Delete live collection item](/reference/integrations/webflow/actions/delete-live-collection-item) * [Delete live collection items](/reference/integrations/webflow/actions/delete-live-collection-items) * [Delete page custom code](/reference/integrations/webflow/actions/delete-page-custom-code) * [Delete site custom code](/reference/integrations/webflow/actions/delete-site-custom-code) * [Fulfill order](/reference/integrations/webflow/actions/fulfill-order) * [Get asset](/reference/integrations/webflow/actions/get-asset) * [Get asset folder](/reference/integrations/webflow/actions/get-asset-folder) * [Get Analyze time on page report](/reference/integrations/webflow/actions/get-analyze-time-on-page-report) * [Get Analyze top dimensions report](/reference/integrations/webflow/actions/get-analyze-top-dimensions-report) * [Get Analyze top events report](/reference/integrations/webflow/actions/get-analyze-top-events-report) * [Get Analyze top pages report](/reference/integrations/webflow/actions/get-analyze-top-pages-report) * [Get Analyze traffic report](/reference/integrations/webflow/actions/get-analyze-traffic-report) * [Get authorization](/reference/integrations/webflow/actions/get-authorization) * [Get collection](/reference/integrations/webflow/actions/get-collection) * [Get collection item](/reference/integrations/webflow/actions/get-collection-item) * [Get comment thread](/reference/integrations/webflow/actions/get-comment-thread) * [Get component content](/reference/integrations/webflow/actions/get-component-content) * [Get component properties](/reference/integrations/webflow/actions/get-component-properties) * [Get current user](/reference/integrations/webflow/actions/get-current-user) * [Get custom font](/reference/integrations/webflow/actions/get-custom-font) * [Get ecommerce settings](/reference/integrations/webflow/actions/get-ecommerce-settings) * [Get form](/reference/integrations/webflow/actions/get-form) * [Get form submission](/reference/integrations/webflow/actions/get-form-submission) * [Get site form submission](/reference/integrations/webflow/actions/get-site-form-submission) * [Get inventory](/reference/integrations/webflow/actions/get-inventory) * [Get live collection item](/reference/integrations/webflow/actions/get-live-collection-item) * [Get order](/reference/integrations/webflow/actions/get-order) * [Get page content](/reference/integrations/webflow/actions/get-page-content) * [Get page custom code](/reference/integrations/webflow/actions/get-page-custom-code) * [Get page metadata](/reference/integrations/webflow/actions/get-page-metadata) * [Get product](/reference/integrations/webflow/actions/get-product) * [Get site](/reference/integrations/webflow/actions/get-site) * [Get site custom code](/reference/integrations/webflow/actions/get-site-custom-code) * [List asset folders](/reference/integrations/webflow/actions/list-asset-folders) * [List assets](/reference/integrations/webflow/actions/list-assets) * [List collection items](/reference/integrations/webflow/actions/list-collection-items) * [List collections](/reference/integrations/webflow/actions/list-collections) * [List comment replies](/reference/integrations/webflow/actions/list-comment-replies) * [List comment threads](/reference/integrations/webflow/actions/list-comment-threads) * [List components](/reference/integrations/webflow/actions/list-components) * [List custom code blocks](/reference/integrations/webflow/actions/list-custom-code-blocks) * [List custom domains](/reference/integrations/webflow/actions/list-custom-domains) * [List custom fonts](/reference/integrations/webflow/actions/list-custom-fonts) * [List forms](/reference/integrations/webflow/actions/list-forms) * [List form submissions](/reference/integrations/webflow/actions/list-form-submissions) * [List Google tags](/reference/integrations/webflow/actions/list-google-tags) * [List live collection items](/reference/integrations/webflow/actions/list-live-collection-items) * [List orders](/reference/integrations/webflow/actions/list-orders) * [List pages](/reference/integrations/webflow/actions/list-pages) * [List products](/reference/integrations/webflow/actions/list-products) * [List registered scripts](/reference/integrations/webflow/actions/list-registered-scripts) * [List sites](/reference/integrations/webflow/actions/list-sites) * [List site form submissions](/reference/integrations/webflow/actions/list-site-form-submissions) * [List site form submissions for form](/reference/integrations/webflow/actions/list-site-form-submissions-for-form) * [Publish collection items](/reference/integrations/webflow/actions/publish-collection-items) * [Publish site](/reference/integrations/webflow/actions/publish-site) * [Refund order](/reference/integrations/webflow/actions/refund-order) * [Register hosted script](/reference/integrations/webflow/actions/register-hosted-script) * [Register inline script](/reference/integrations/webflow/actions/register-inline-script) * [Replace custom font file](/reference/integrations/webflow/actions/replace-custom-font-file) * [Resolve comment thread](/reference/integrations/webflow/actions/resolve-comment-thread) * [Set page custom code](/reference/integrations/webflow/actions/set-page-custom-code) * [Set site custom code](/reference/integrations/webflow/actions/set-site-custom-code) * [Unfulfill order](/reference/integrations/webflow/actions/unfulfill-order) * [Update asset](/reference/integrations/webflow/actions/update-asset) * [Update collection](/reference/integrations/webflow/actions/update-collection) * [Update collection field](/reference/integrations/webflow/actions/update-collection-field) * [Update collection item](/reference/integrations/webflow/actions/update-collection-item) * [Update collection items](/reference/integrations/webflow/actions/update-collection-items) * [Update component content](/reference/integrations/webflow/actions/update-component-content) * [Update component properties](/reference/integrations/webflow/actions/update-component-properties) * [Update custom font](/reference/integrations/webflow/actions/update-custom-font) * [Update form submission](/reference/integrations/webflow/actions/update-form-submission) * [Update site form submission](/reference/integrations/webflow/actions/update-site-form-submission) * [Update inventory](/reference/integrations/webflow/actions/update-inventory) * [Update live collection item](/reference/integrations/webflow/actions/update-live-collection-item) * [Update live collection items](/reference/integrations/webflow/actions/update-live-collection-items) * [Update order](/reference/integrations/webflow/actions/update-order) * [Update page content](/reference/integrations/webflow/actions/update-page-content) * [Update page settings](/reference/integrations/webflow/actions/update-page-settings) * [Update product](/reference/integrations/webflow/actions/update-product) * [Update product sku](/reference/integrations/webflow/actions/update-product-sku) * [Upsert Google tags](/reference/integrations/webflow/actions/upsert-google-tags) # Collection item changed Source: https://docs.automate.ax/reference/integrations/webflow/triggers/on-collection-item-changed Starts when a CMS item's staged fields or state changes. `webflow.onCollectionItemChanged` starts when a CMS item's staged fields or state changes. ## Example ```ts automations/webflow-on-collection-item-changed.automation.ts theme={null} import { automation } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Collection item changed", () => { webflow.onCollectionItemChanged({ siteId: "site-id" }) }) ``` ## Inputs `siteId` is the Webflow site to watch. You can pass `account` to select a named Webflow account. The connection needs `sites:write` to manage the provider webhook and the read scope for this event. ## Output Returns the updated CMS item, including field data and locale. Each authenticated delivery starts an ordinary root context. # Collection item created Source: https://docs.automate.ax/reference/integrations/webflow/triggers/on-collection-item-created Starts when a CMS item is created. `webflow.onCollectionItemCreated` starts when a CMS item is created. ## Example ```ts automations/webflow-on-collection-item-created.automation.ts theme={null} import { automation } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Collection item created", () => { webflow.onCollectionItemCreated({ siteId: "site-id" }) }) ``` ## Inputs `siteId` is the Webflow site to watch. You can pass `account` to select a named Webflow account. The connection needs `sites:write` to manage the provider webhook and the read scope for this event. ## Output Returns collection, item, locale, field data, draft state, archive state, site, and workspace identifiers. Each authenticated delivery starts an ordinary root context. # Collection item deleted Source: https://docs.automate.ax/reference/integrations/webflow/triggers/on-collection-item-deleted Starts when a CMS item is deleted. `webflow.onCollectionItemDeleted` starts when a CMS item is deleted. ## Example ```ts automations/webflow-on-collection-item-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Collection item deleted", () => { webflow.onCollectionItemDeleted({ siteId: "site-id" }) }) ``` ## Inputs `siteId` is the Webflow site to watch. You can pass `account` to select a named Webflow account. The connection needs `sites:write` to manage the provider webhook and the read scope for this event. ## Output Returns the deleted item, collection, locale, site, and workspace identifiers. Each authenticated delivery starts an ordinary root context. # Collection item published Source: https://docs.automate.ax/reference/integrations/webflow/triggers/on-collection-item-published Starts when a CMS item is published. `webflow.onCollectionItemPublished` starts when a CMS item is published. ## Example ```ts automations/webflow-on-collection-item-published.automation.ts theme={null} import { automation } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Collection item published", () => { webflow.onCollectionItemPublished({ siteId: "site-id" }) }) ``` ## Inputs `siteId` is the Webflow site to watch. You can pass `account` to select a named Webflow account. The connection needs `sites:write` to manage the provider webhook and the read scope for this event. ## Output Returns the published CMS item, including field data and locale. Each authenticated delivery starts an ordinary root context. # Collection item unpublished Source: https://docs.automate.ax/reference/integrations/webflow/triggers/on-collection-item-unpublished Starts when a CMS item is unpublished. `webflow.onCollectionItemUnpublished` starts when a CMS item is unpublished. ## Example ```ts automations/webflow-on-collection-item-unpublished.automation.ts theme={null} import { automation } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Collection item unpublished", () => { webflow.onCollectionItemUnpublished({ siteId: "site-id" }) }) ``` ## Inputs `siteId` is the Webflow site to watch. You can pass `account` to select a named Webflow account. The connection needs `sites:write` to manage the provider webhook and the read scope for this event. ## Output Returns the item, collection, locale, site, and workspace identifiers. Each authenticated delivery starts an ordinary root context. # Comment created Source: https://docs.automate.ax/reference/integrations/webflow/triggers/on-comment-created Starts when a design-review comment thread or reply is created. `webflow.onCommentCreated` starts when a design-review comment thread or reply is created. ## Example ```ts automations/webflow-on-comment-created.automation.ts theme={null} import { automation } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Comment created", () => { webflow.onCommentCreated({ siteId: "site-id" }) }) ``` ## Inputs `siteId` is the Webflow site to watch. You can pass `account` to select a named Webflow account. The connection needs `sites:write` to manage the provider webhook and the read scope for this event. ## Output Returns the comment, author, mentioned users, page, thread, breakpoint, URL, and resolution state. Each authenticated delivery starts an ordinary root context. # Every Webflow event Source: https://docs.automate.ax/reference/integrations/webflow/triggers/on-event Subscribes to every supported webhook event for one site. `webflow.onEvent` subscribes to every supported webhook event for one site. ## Example ```ts automations/webflow-on-event.automation.ts theme={null} import { automation } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Every Webflow event", () => { webflow.onEvent({ siteId: "site-id" }) }) ``` ## Inputs `siteId` is the Webflow site to watch. You can pass `account` to select a named Webflow account. The connection needs `sites:write` to manage the provider webhook and the read scope for this event. > [!NOTE] > > This broad trigger registers all 14 Webflow webhook event types for the site. > Use a semantic trigger when the automation needs only one event type. ## Output Returns the verified Webflow envelope with `triggerType` and its typed `payload`. Each authenticated delivery starts an ordinary root context. # Form submitted Source: https://docs.automate.ax/reference/integrations/webflow/triggers/on-form-submitted Starts when a visitor submits a form on the site. `webflow.onFormSubmitted` starts when a visitor submits a form on the site. ## Example ```ts automations/webflow-on-form-submitted.automation.ts theme={null} import { automation } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Form submitted", () => { webflow.onFormSubmitted({ siteId: "site-id" }) }) ``` ## Inputs `siteId` is the Webflow site to watch. You can pass `account` to select a named Webflow account. The connection needs `sites:write` to manage the provider webhook and the read scope for this event. ## Output Returns the form ID, submission ID, submitted values, field schema, site ID, and submission timestamp. Each authenticated delivery starts an ordinary root context. # Inventory changed Source: https://docs.automate.ax/reference/integrations/webflow/triggers/on-inventory-changed Starts when inventory changes for a Webflow Ecommerce SKU. `webflow.onInventoryChanged` starts when inventory changes for a Webflow Ecommerce SKU. ## Example ```ts automations/webflow-on-inventory-changed.automation.ts theme={null} import { automation } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Inventory changed", () => { webflow.onInventoryChanged({ siteId: "site-id" }) }) ``` ## Inputs `siteId` is the Webflow site to watch. You can pass `account` to select a named Webflow account. The connection needs `sites:write` to manage the provider webhook and the read scope for this event. ## Output Returns the SKU ID, inventory mode, and quantity when inventory is finite. Each authenticated delivery starts an ordinary root context. # Order changed Source: https://docs.automate.ax/reference/integrations/webflow/triggers/on-order-changed Starts when an existing Webflow Ecommerce order changes. `webflow.onOrderChanged` starts when an existing Webflow Ecommerce order changes. ## Example ```ts automations/webflow-on-order-changed.automation.ts theme={null} import { automation } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Order changed", () => { webflow.onOrderChanged({ siteId: "site-id" }) }) ``` ## Inputs `siteId` is the Webflow site to watch. You can pass `account` to select a named Webflow account. The connection needs `sites:write` to manage the provider webhook and the read scope for this event. ## Output Returns the complete updated order payload. Each authenticated delivery starts an ordinary root context. # Order created Source: https://docs.automate.ax/reference/integrations/webflow/triggers/on-order-created Starts when Webflow Ecommerce creates an order. `webflow.onOrderCreated` starts when Webflow Ecommerce creates an order. ## Example ```ts automations/webflow-on-order-created.automation.ts theme={null} import { automation } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Order created", () => { webflow.onOrderCreated({ siteId: "site-id" }) }) ``` ## Inputs `siteId` is the Webflow site to watch. You can pass `account` to select a named Webflow account. The connection needs `sites:write` to manage the provider webhook and the read scope for this event. ## Output Returns the complete order payload, including customer, totals, payment, fulfillment, and purchased items. Each authenticated delivery starts an ordinary root context. # Page created Source: https://docs.automate.ax/reference/integrations/webflow/triggers/on-page-created Starts when a page is created on the site. `webflow.onPageCreated` starts when a page is created on the site. ## Example ```ts automations/webflow-on-page-created.automation.ts theme={null} import { automation } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Page created", () => { webflow.onPageCreated({ siteId: "site-id" }) }) ``` ## Inputs `siteId` is the Webflow site to watch. You can pass `account` to select a named Webflow account. The connection needs `sites:write` to manage the provider webhook and the read scope for this event. ## Output Returns page identity, title, path, branch state, draft state, and site ID. Each authenticated delivery starts an ordinary root context. # Page deleted Source: https://docs.automate.ax/reference/integrations/webflow/triggers/on-page-deleted Starts when a page is deleted from the site. `webflow.onPageDeleted` starts when a page is deleted from the site. ## Example ```ts automations/webflow-on-page-deleted.automation.ts theme={null} import { automation } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Page deleted", () => { webflow.onPageDeleted({ siteId: "site-id" }) }) ``` ## Inputs `siteId` is the Webflow site to watch. You can pass `account` to select a named Webflow account. The connection needs `sites:write` to manage the provider webhook and the read scope for this event. ## Output Returns the deleted page identity, title, path, deletion timestamp, and site ID. Each authenticated delivery starts an ordinary root context. # Page metadata updated Source: https://docs.automate.ax/reference/integrations/webflow/triggers/on-page-metadata-updated Starts when published metadata changes on a page. `webflow.onPageMetadataUpdated` starts when published metadata changes on a page. ## Example ```ts automations/webflow-on-page-metadata-updated.automation.ts theme={null} import { automation } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Page metadata updated", () => { webflow.onPageMetadataUpdated({ siteId: "site-id" }) }) ``` ## Inputs `siteId` is the Webflow site to watch. You can pass `account` to select a named Webflow account. The connection needs `sites:write` to manage the provider webhook and the read scope for this event. ## Output Returns page identity, title, path, branch state, draft state, and site ID. Each authenticated delivery starts an ordinary root context. # Site published Source: https://docs.automate.ax/reference/integrations/webflow/triggers/on-site-published Starts when the site or one of its pages is published. `webflow.onSitePublished` starts when the site or one of its pages is published. ## Example ```ts automations/webflow-on-site-published.automation.ts theme={null} import { automation } from "automate.ax" import { webflow } from "automate.ax/webflow" export default automation("Site published", () => { webflow.onSitePublished({ siteId: "site-id" }) }) ``` ## Inputs `siteId` is the Webflow site to watch. You can pass `account` to select a named Webflow account. The connection needs `sites:write` to manage the provider webhook and the read scope for this event. ## Output Returns the published domains, publisher identity, timestamp, site ID, and publish scope when Webflow supplies it. Each authenticated delivery starts an ordinary root context. # Create message template Source: https://docs.automate.ax/reference/integrations/whatsapp/actions/create-message-template Submit a WhatsApp utility or marketing template for Meta review. `whatsapp.createMessageTemplate` submits a template for the connected WhatsApp Business Account. Meta must approve it before `whatsapp.sendTemplateMessage` can use it. ```ts automations/create-whatsapp-template.automation.ts theme={null} import { automation, onDashboardRun } from "automate.ax" import { whatsapp } from "automate.ax/whatsapp" export default automation("Create pickup template", () => { onDashboardRun({ title: "Create pickup template" }) whatsapp.createMessageTemplate({ templateName: "order_ready", languageCode: "en_US", category: "utility", header: { format: "text", text: "Order {{1}}", variableExamples: ["A-123"], }, body: "Your order {{1}} is ready for pickup.", bodyVariableExamples: ["A-123"], footer: "Reply for support.", buttons: [ { type: "url", text: "Track order", url: "https://example.com/orders/{{1}}", variableExample: "https://example.com/orders/A-123", }, ], }) }) ``` `whatsapp.createMessageTemplate` requires `templateName`, `languageCode`, `category`, and `body`. The name must contain only lowercase letters, numbers, and underscores. `category` is `"utility"` or `"marketing"`. Body variable examples correspond to `{{1}}`, `{{2}}`, and later variables in order. Provide exactly one example per distinct body variable, or omit `bodyVariableExamples` when the body has no variables. A header can contain text, a Meta media example handle for an image, video, or document, or a location. Buttons support quick replies, phone numbers, and URLs. `allowCategoryChange` defaults to `true`, allowing Meta to recategorize the template instead of rejecting an otherwise valid submission. Second argument `{ account }` selects the WhatsApp binding. Returns `{ templateId, category, status }`. Status is usually `pending`, but Meta can approve or reject a template immediately. This action doesn't send a message. # Send message Source: https://docs.automate.ax/reference/integrations/whatsapp/actions/send-message Send WhatsApp text within an open customer-service window. `whatsapp.sendMessage` sends text from the connected WhatsApp Business phone number to an opted-in recipient. ```ts automations/reply-on-whatsapp.automation.ts theme={null} import { automation } from "automate.ax" import { whatsapp } from "automate.ax/whatsapp" export default automation("Reply on WhatsApp", () => { const received = whatsapp.onMessageReceived() whatsapp.sendMessage({ to: received.sender.id, body: "Thanks, we received your message.", replyToMessageId: received.message.id, }) }) ``` `whatsapp.sendMessage` requires `to` and a non-empty `body` of at most 4,096 characters. Optional inputs are `previewUrl`, `replyToMessageId`, and `callbackData`. Optional second argument `{ account }` selects the WhatsApp binding. Returns `{ messageId, recipientId, status? }`. The optional immediate status is `accepted`, `held_for_quality_assessment`, or `paused`. Use `whatsapp.onMessageStatusEvent` or a specific status trigger for delivery outcomes. WhatsApp allows freeform messages only within 24 hours of the recipient's most recent message. Use an approved template outside that window. The customer must have opted in before any business-initiated message. The integration doesn't support WhatsApp groups. # Send template message Source: https://docs.automate.ax/reference/integrations/whatsapp/actions/send-template-message Send an approved WhatsApp template to an opted-in recipient. `whatsapp.sendTemplateMessage` sends a template approved for the connected WhatsApp Business Account. Templates can start conversations outside the 24-hour customer-service window. ```ts automations/send-whatsapp-reminder.automation.ts theme={null} import { automation, onSchedule } from "automate.ax" import { whatsapp } from "automate.ax/whatsapp" export default automation("Send WhatsApp reminder", () => { onSchedule({ schedule: "0 16 * * 1-5" }) whatsapp.sendTemplateMessage({ to: "15551234567", templateName: "appointment_reminder", languageCode: "en_US", components: [ { type: "body", parameters: [{ type: "text", text: "Tuesday at 10:00 AM" }], }, ], }) }) ``` Required inputs are `to`, `templateName`, and `languageCode`. Optional `components` supports header, body, quick-reply, and URL-button parameters. Values can be text, currency, date/time fallbacks, images, videos, or documents. `callbackData` is optional. Optional second argument `{ account }` selects the WhatsApp binding. Returns `{ messageId, recipientId, status? }`. Meta can reject a request when the template, language, components, recipient opt-in, quality status, or account eligibility doesn't match. # WhatsApp Business Source: https://docs.automate.ax/reference/integrations/whatsapp/index Send WhatsApp Business messages and templates, or react to message delivery and reply status changes. ## Exports ```ts theme={null} import { whatsapp, whatsappAccount, getWhatsAppApi } from "automate.ax/whatsapp" ``` * `whatsapp` contains the packaged WhatsApp Business actions and triggers. * `whatsappAccount("name")` selects a named WhatsApp connection. * `getWhatsAppApi` creates the authenticated WhatsApp Business API helper for a custom account-backed action. ## Triggers * [On message received](/reference/integrations/whatsapp/triggers/on-message-received) * [On WhatsApp message status event](/reference/integrations/whatsapp/triggers/on-message-status-event) * [On WhatsApp message sent](/reference/integrations/whatsapp/triggers/on-message-sent) * [On WhatsApp message delivered](/reference/integrations/whatsapp/triggers/on-message-delivered) * [On WhatsApp message read](/reference/integrations/whatsapp/triggers/on-message-read) * [On WhatsApp message failed](/reference/integrations/whatsapp/triggers/on-message-failed) * [On WhatsApp message played](/reference/integrations/whatsapp/triggers/on-message-played) ## Actions * [Create message template](/reference/integrations/whatsapp/actions/create-message-template) * [Send message](/reference/integrations/whatsapp/actions/send-message) * [Send template message](/reference/integrations/whatsapp/actions/send-template-message) # On WhatsApp message delivered Source: https://docs.automate.ax/reference/integrations/whatsapp/triggers/on-message-delivered Run an automation when a WhatsApp message reaches a recipient's device. `whatsapp.onMessageDelivered` handles WhatsApp's `delivered` status. ```ts automations/track-whatsapp-delivery.automation.ts theme={null} import { automation } from "automate.ax" import { whatsapp } from "automate.ax/whatsapp" export default automation("Track WhatsApp delivery", () => { const event = whatsapp.onMessageDelivered() // Record the delivery receipt for event.messageId. }) ``` Optional static `account` defaults to the project's WhatsApp binding. Trigger data has `status: "delivered"` and includes message and recipient IDs, timestamp, callback data, conversation, pricing, structured errors, and the `providerEvent` described by [the broad status trigger](/reference/integrations/whatsapp/triggers/on-message-status-event). Delivery doesn't mean the recipient opened the message. Use `whatsapp.onMessageRead` when you need a read receipt. # On WhatsApp message failed Source: https://docs.automate.ax/reference/integrations/whatsapp/triggers/on-message-failed Run an automation when WhatsApp can't deliver a message. `whatsapp.onMessageFailed` handles WhatsApp's `failed` status. ```ts automations/handle-whatsapp-failures.automation.ts theme={null} import { automation } from "automate.ax" import { whatsapp } from "automate.ax/whatsapp" export default automation("Handle WhatsApp failures", () => { const event = whatsapp.onMessageFailed() // Notify operations with the delivery failure in event.errors. }) ``` Optional static `account` defaults to the project's WhatsApp binding. Trigger data has `status: "failed"` and includes message and recipient IDs, timestamp, callback data, conversation, pricing, structured Meta errors, and the `providerEvent` described by [the broad status trigger](/reference/integrations/whatsapp/triggers/on-message-status-event). Inspect `errors` for the provider code, message, details, subcode, and trace ID before deciding whether to retry or correct the recipient or template. # On WhatsApp message played Source: https://docs.automate.ax/reference/integrations/whatsapp/triggers/on-message-played Run an automation when a recipient plays a WhatsApp audio message. `whatsapp.onMessagePlayed` handles WhatsApp's `played` status for audio messages. ```ts automations/track-whatsapp-audio.automation.ts theme={null} import { automation } from "automate.ax" import { whatsapp } from "automate.ax/whatsapp" export default automation("Track WhatsApp audio", () => { const event = whatsapp.onMessagePlayed() // Record the playback receipt for event.messageId. }) ``` Optional static `account` defaults to the project's WhatsApp binding. Trigger data has `status: "played"` and includes message and recipient IDs, timestamp, callback data, conversation, pricing, structured errors, and the `providerEvent` described by [the broad status trigger](/reference/integrations/whatsapp/triggers/on-message-status-event). WhatsApp emits this status for supported audio messages. Other message types don't produce a played event. # On WhatsApp message read Source: https://docs.automate.ax/reference/integrations/whatsapp/triggers/on-message-read Run an automation when a recipient reads a WhatsApp message. `whatsapp.onMessageRead` handles WhatsApp's `read` status. ```ts automations/track-whatsapp-reads.automation.ts theme={null} import { automation } from "automate.ax" import { whatsapp } from "automate.ax/whatsapp" export default automation("Track WhatsApp reads", () => { const event = whatsapp.onMessageRead() // Record the read receipt for event.messageId. }) ``` Optional static `account` defaults to the project's WhatsApp binding. Trigger data has `status: "read"` and includes message and recipient IDs, timestamp, callback data, conversation, pricing, structured errors, and the `providerEvent` described by [the broad status trigger](/reference/integrations/whatsapp/triggers/on-message-status-event). Read receipts depend on the recipient's privacy settings, and WhatsApp might not emit one for every delivered message. # On message received Source: https://docs.automate.ax/reference/integrations/whatsapp/triggers/on-message-received Run an automation when a WhatsApp Business number receives a message. `whatsapp.onMessageReceived` receives messages for the connected WhatsApp Business Account's selected phone number. ```ts automations/watch-whatsapp.automation.ts theme={null} import { automation } from "automate.ax" import { whatsapp } from "automate.ax/whatsapp" export default automation("Watch WhatsApp", () => { const received = whatsapp.onMessageReceived() whatsapp.sendMessage({ to: received.sender.id, body: "Thanks, we received your message.", replyToMessageId: received.message.id, }) }) ``` Optional static `account` defaults to the project binding. The phone number can't change at runtime. Trigger data includes `businessAccountId`, `phoneNumberId`, `displayPhoneNumber`, sender ID and profile name, message ID, timestamp, type, content, reply context, and `providerEvent`. Supported message types include text, media, location, contacts, buttons, interactive replies, reactions, orders, system events, and unsupported payloads. Meta retries failed deliveries. Automate.ax verifies the `X-Hub-Signature-256` signature and deduplicates messages by provider message ID before orchestration. # On WhatsApp message sent Source: https://docs.automate.ax/reference/integrations/whatsapp/triggers/on-message-sent Run an automation when WhatsApp accepts a message for delivery. `whatsapp.onMessageSent` handles WhatsApp's `sent` status. ```ts automations/track-whatsapp-sends.automation.ts theme={null} import { automation } from "automate.ax" import { whatsapp } from "automate.ax/whatsapp" export default automation("Track WhatsApp sends", () => { const event = whatsapp.onMessageSent() // Record WhatsApp's acceptance of event.messageId. }) ``` Optional static `account` defaults to the project's WhatsApp binding. Trigger data has `status: "sent"` and includes message and recipient IDs, timestamp, callback data, conversation, pricing, structured errors, and the `providerEvent` described by [the broad status trigger](/reference/integrations/whatsapp/triggers/on-message-status-event). A `sent` event confirms provider acceptance, not delivery to the recipient's device. Use `whatsapp.onMessageDelivered` for that outcome. # On WhatsApp message status event Source: https://docs.automate.ax/reference/integrations/whatsapp/triggers/on-message-status-event Run an automation for any WhatsApp message status. `whatsapp.onMessageStatusEvent` receives `sent`, `delivered`, `read`, `failed`, and `played` updates for the connected WhatsApp Business phone number. Use a specific status trigger when you need only one outcome. ```ts automations/watch-whatsapp-delivery.automation.ts theme={null} import { automation } from "automate.ax" import { whatsapp } from "automate.ax/whatsapp" export default automation("Watch WhatsApp delivery", () => { const status = whatsapp.onMessageStatusEvent() // Update delivery history with status.messageId, status.status, and status.errors. }) ``` It accepts optional static `account`. Trigger data includes message and recipient IDs, status, timestamp, callback data, conversation origin and expiry, pricing classification, structured Meta errors, and `providerEvent`. Automate.ax deduplicates status updates by message ID, status, and provider timestamp. A `sent` response isn't proof of delivery. Use `delivered`, `read`, or `failed` for downstream handling. # Low-level utilities Source: https://docs.automate.ax/reference/runtime/low-level-utilities Inspect durable hook placement and the active execution identity from low-level wrappers. These utilities expose runtime composition state for framework and wrapper authors. They aren't business correlation keys. Prefer ordinary signal dependencies and [`correlationId`](/reference/runtime/signal-operators#correlationid) when they express the relationship. ## `getNextHookLocation` Returns the next durable hook location without reserving it: ```ts theme={null} function getNextHookLocation(): HookLocation | undefined interface HookLocation { readonly scopePath: readonly number[] readonly slot: number } ``` Call it immediately before the durable declaration a low-level wrapper associates with that location: ```ts automations/report-hook-location.automation.ts theme={null} import { automation, getNextHookLocation, onHttpRequest, respondToHttpRequest, } from "automate.ax" export default automation("Report response hook", () => { const request = onHttpRequest() const location = getNextHookLocation() respondToHttpRequest({ body: location ? { scopePath: [...location.scopePath], slot: location.slot } : null, requestId: request.requestId, }) }) ``` The function returns `undefined` outside an active automation traversal. Inspection doesn't consume the slot. Hook locations identify replay structure, not business entities or occurrences. ## `getAutomationExecutionIdentity` Returns the active automation and context IDs during execution: ```ts theme={null} function getAutomationExecutionIdentity(): | AutomationExecutionIdentity | undefined interface AutomationExecutionIdentity { readonly automationId: string readonly contextId: string } ``` Planning has no execution context. Call the function from runtime code such as a custom action handler: ```ts automations/report-execution-identity.automation.ts theme={null} import { automation, defineAction, getAutomationExecutionIdentity, onHttpRequest, respondToHttpRequest, } from "automate.ax" import { z } from "zod" const readIdentity = defineAction("Read execution identity") .input(z.object({})) .output(z.object({ automationId: z.string(), contextId: z.string() })) .handler(() => { const identity = getAutomationExecutionIdentity() if (!identity) throw new Error("Execution identity is unavailable.") return identity }) export default automation("Report execution identity", () => { const request = onHttpRequest() respondToHttpRequest({ body: readIdentity({}), requestId: request.requestId, }) }) ``` Coordination operators create child contexts, so `contextId` can change as work progresses. Don't use it as a correlation key; use `correlationId` or a provider ID. # Signal operators Source: https://docs.automate.ax/reference/runtime/signal-operators Technical reference for deriving, routing, coordinating, timing, and inspecting signals. Import top-level functions and public types from `automate.ax`. Most operators also have a fluent form on `Signal`, `KeyedSignal`, or `GlobalSignal`. Signals compose synchronously during planning and materialize during durable execution. Transformer, predicate, key, and section callbacks must be synchronous. Put external work in actions. ## Choose an operator family | Need | Family | Operators | | - | - | - | | Derive a value in the current context | Value composition | Property access, `transform`, `t` | | Route a value or handle its terminal state | Routing and lifecycle | `gate`, `filter`, `partition`, `branch`, `outcome`, `onSuccess`, `onFailure`, `onClose` | | Combine or admit repeated and independent occurrences | Stream coordination | `merge`, `correlate`, `collect`, `once`, `take`, `rateLimit`, `each`, `funnel`, `window` | | Select or resume within one causal occurrence | Causal scheduling | `race`, `delay`, `timeout` | | Limit overlapping occurrence-scoped work | Execution coordination | `serialize`, `concurrent` | `merge` and `race` answer different questions. `merge` forms one stream from independent roots and emits every occurrence. `race` selects one alternative within a shared activation boundary. Dependency and structure operators—`dependentOn`, `withPrerequisites`, `scope`, and `group`—compose with every family. ## Property access Reading a non-function property returns another signal. Chained access works across objects, arrays, and primitives: ```ts theme={null} const path = request.path // Signal const length = request.path.length // Signal ``` The derived signal closes or fails with its source. Accessing a property after the source resolves to `null` or `undefined` fails with `TypeError`. Signal methods reserve their names, and function-valued payload properties aren't projected as callable values. Use `transform` to call a value method such as `names.join(", ")`. ## `transform` Creates a derived signal from one or more inputs. ```ts theme={null} // Top-level forms const normalized = transform(request.path, (path) => path.toLowerCase()) const requestLine = transform( [request.method, request.path], (method, path) => `${method} ${path}`, ) // Fluent forms const fluentNormalized = request.path.transform((path) => path.toLowerCase()) const fluentLine = request.method.transform( request.path, (method, path) => `${method} ${path}`, ) const summary = request.method.transform( [request.path, request.headers], (method, path, headers) => ({ headers, method, path }), ) ``` The transformer runs after every input emits and must be pure. An input failure fails the result; an input closure closes it. A thrown transformer error fails with code `expression_failed` and doesn't consume an action retry. Arbitrary transforms don't preserve `keyBy` or `globally` annotations. ## `t` Builds a `Signal` from a tagged template containing at least one signal: ```ts theme={null} const summary = t`${request.method} request to ${request.path}` ``` Static interpolations add no dependency. Automate.ax converts interpolated values to text after every signal emits. Calling `t` without a signal interpolation throws `TypeError` during planning. Use `transform` for conditional logic, value methods, or non-string output. ## `isSignal` Narrows an unknown value to `Signal`: ```ts theme={null} function trim(value: string | Signal) { return isSignal(value) ? value.transform((text) => text.trim()) : value.trim() } ``` It returns `true` only for objects implementing the Automate.ax signal protocol. Action inputs already accept compatible signals; use this guard in helpers that accept both in-memory values and signals. ## `keyBy` Returns an immutable `KeyedSignal` whose cross-context operations use the encoded key as their partition: ```ts theme={null} const byCustomer = event.keyBy((value) => value.customerId) ``` The key function must be pure and return an encoded Automate.ax value. Calling `keyBy` replaces an existing keyed or global annotation. ## `globally` Returns a `GlobalSignal` whose cross-context operations share one partition: ```ts theme={null} const batch = feedback.globally().collect(10) ``` Calling `globally` replaces an existing keyed or global annotation. Use `keyBy` when one entity's occurrences must not reset another entity's timer or enter the same batch. ## `timestamp` Returns the stable platform time at which an occurrence emitted: ```ts theme={null} const receivedAt = timestamp(request) const fluentReceivedAt = request.timestamp() ``` Both forms return `Signal`. Trigger timestamps use ingestion time, action timestamps use completion time, and coordinated signals use their persisted decision time. A pure derivation uses the most recent contributing durable boundary. Use a provider timestamp when its domain time is the required value. ## `correlationId` Returns a stable keyed `Signal` derived from an occurrence's durable boundary: ```ts theme={null} const interactionId = correlationId(request) const sharedBoundaryId = correlationId(request, false) const fluentInteractionId = request.correlationId() const fluentSharedBoundaryId = request.correlationId(false) ``` `perDeclaration` defaults to `true`, so separate declarations anchored to one occurrence receive independent IDs. Pass `false` to derive the ID only from the durable dependency boundary. Prefer a provider's domain ID when it already identifies the entity or conversation. ## `correlate` Matches one occurrence from every keyed stream by exact encoded key: ```ts theme={null} const match = correlate([requestById, decisionById]) const orderedMatch = correlate([requestById, decisionById], { ordered: true }) const expiringMatch = correlate([requestById, decisionById], { occurrenceTtl: "30d", }) const invoiceWithCurrentPlan = correlate([ invoiceByCustomer, { signal: planByCustomer, selection: "latest", consumption: "retain", }, ]) const fluentMatch = requestById.correlate(decisionById) const fluentMany = requestById.correlate([decisionById, auditById], { ordered: true, }) ``` | Option | Default | Description | | - | - | - | | `ordered` | `false` | Require stream occurrences to arrive in declaration order. | | `occurrenceTtl` | No expiry | Milliseconds or a compact duration string. After expiry, an unmatched occurrence can't participate in a new match. | Each input defaults to `{ selection: "oldest", consumption: "consume" }`. Set `selection: "latest"` to discard older eligible occurrences for that input. Set `consumption: "retain"` to reuse the selected occurrence in later matches: oldest retention behaves like a latch, while latest retention behaves like an updating register. Retained occurrences remain operational state until superseded, expired by `occurrenceTtl`, or the automation is removed. The child context contains every selected parent history, so downstream work can consume the original keyed signals. The returned `Signal` exposes the match boundary. Reusing one durable signal origin in several positions throws `TypeError`; collect distinct occurrences first when one stream must fill several roles. ## `merge` Combines independent occurrence streams without matching or consuming them together: ```ts theme={null} const contactEvent = merge([contactCreated, contactUpdated]) const fluentEvent = contactCreated.merge(contactUpdated) const fluentMany = contactCreated.merge([contactUpdated, contactDeleted]) ``` Every successful input occurrence emits once in its own child context. Inputs don't wait for or consume one another, and arrival order doesn't suppress any occurrence. The result is the union of the input value types. Use `correlate` when related streams must meet by key, or `race` when alternatives within one causal occurrence compete to finish first. ## `collect` Consumes a fixed number of keyed or global occurrences in arrival order: ```ts theme={null} const ten = collect(feedback.globally(), 10) const daily = collect(feedbackByCustomer, 10, { occurrenceTtl: "1d" }) const dynamic = collect(feedbackByCustomer, requestedCount, { inheritConflictingValuesFrom: "first", }) const fluentTen = feedback.globally().collect(10) const fluentDynamic = feedbackByCustomer.collect(requestedCount, { inheritConflictingValuesFrom: "first", }) ``` | Option | Default | Description | | - | - | - | | `inheritConflictingValuesFrom` | `"last"` | Choose the first or last selected parent when another value is ambiguous in the merged child context. Array order doesn't change. | | `occurrenceTtl` | No expiry | Milliseconds or a compact duration string. After expiry, an unmatched occurrence no longer counts toward a collection. | `count` accepts a positive integer or `Signal`. Invalid literal counts throw during planning. Signal-derived counts match only occurrences whose resolved counts are equal. The result is a partition-preserving `NonEmptyArray`. ## `once` and `take` Admit a bounded number of occurrences from each keyed or global partition: ```ts theme={null} const firstSignup = signupsByContact.once() const firstThreeAttempts = take(attemptsByAccount, 3) const oncePerMonth = signupsByContact.once({ ttl: "30d" }) ``` `once(signal, options?)` is `take(signal, 1, options?)`. Without `ttl`, the count remains claimed permanently. With `ttl`, the claim starts when the first occurrence is admitted and the complete count resets when it expires. The result preserves the source partition. ## `rateLimit` Admit at most a fixed number of occurrences in each rolling interval: ```ts theme={null} const queued = requestsByProvider.rateLimit({ limit: 100, interval: "1m" }) const sampled = rateLimit(telemetry.globally(), { limit: 1_000, interval: "1m", overflow: "drop", }) ``` `overflow` defaults to `"wait"`, which queues excess occurrences FIFO until rolling capacity returns. `"drop"` closes excess occurrences without emitting. Every key has independent capacity; `globally()` creates one shared limit. ## `each` Creates one durable child context per array item: ```ts theme={null} // Gather one returned signal per item. const sent = each(recipients, (recipient) => sendEmail({ to: recipient, subject: "Welcome", text: "Thanks for joining." }), ) const fluentSent = recipients.each((recipient) => sendEmail({ to: recipient, subject: "Welcome", text: "Thanks for joining." }), ) // Return nothing when only the per-item effects matter. each(recipients, (recipient) => { sendEmail({ to: recipient, subject: "Welcome", text: "Thanks for joining." }) }) ``` Returning a signal produces `Signal` in source-array order. A failed item fails the gathered result, a closed item closes it, and an empty source gathers to `[]`. Returning nothing produces `void` and doesn't join the item contexts. ## `gate` Preserves a value only when a separate boolean signal emits `true`: ```ts theme={null} const selected = gate(request, isApiRequest) const fluentSelected = request.gate(isApiRequest) ``` `false` or a closed condition closes the result without materializing the value. A failed condition fails it. The result preserves a keyed or global annotation carried by the value. ## `filter` Preserves a value only when a synchronous predicate returns `true`: ```ts theme={null} const urgent = filter(request, (value) => value.priority === "urgent") const fluentUrgent = request.filter((value) => value.priority === "urgent") const paid = filter( status, (value): value is PaidStatus => value.type === "paid", ) const fluentPaid = status.filter( (value): value is PaidStatus => value.type === "paid", ) ``` The boolean-predicate overload preserves the input type. The type-guard overload narrows it. A value that fails the predicate closes the result; a thrown predicate fails with code `expression_failed`. The result preserves a keyed or global source annotation. ## `partition` Splits one signal into complementary matching and remaining paths: ```ts theme={null} const [urgent, routine] = partition( request, (value) => value.priority === "urgent", ) const [fluentUrgent, fluentRoutine] = request.partition( (value) => value.priority === "urgent", ) const [paid, unpaid] = partition( status, (value): value is PaidStatus => value.type === "paid", ) ``` Exactly one output emits the original value; the other closes. A type-guard predicate narrows the matching output and excludes that type from the other output. Both outputs preserve a keyed or global source annotation. ## `dependentOn` Preserves one signal value while adding prerequisites to its downstream dependency chain: ```ts theme={null} const ready = dependentOn(request, indexed) const readyAfterBoth = dependentOn(request, [indexed, audited]) const fluentReady = request.dependentOn(indexed) const fluentReadyAfterBoth = request.dependentOn([indexed, audited]) ``` The result closes or fails when a prerequisite does. It preserves a keyed or global annotation carried by the primary signal. The operator doesn't delay the declaration that produced the primary signal; it changes only the returned signal's dependencies. ## `withPrerequisites` Applies one signal or a nonempty tuple to every durable declaration in a synchronous section: ```ts theme={null} withPrerequisites(request, () => { sendEmail({ subject: "Request received", text: "Processing started." }) }) const result = withPrerequisites([request, approved], () => sendEmail({ subject: "Approved", text: "Processing started." }), ) ``` Nested sections combine their prerequisites. A directly returned signal also inherits them; other return values pass through unchanged. Don't declare triggers inside `withPrerequisites` or `branch`. A trigger starts an independent root context. ## `branch` Declares complementary synchronous sections selected by boolean signals: ```ts theme={null} // if / else branch( urgent, () => sendEmail({ subject: "Urgent", text: "Escalate it." }), () => sendEmail({ subject: "Routine", text: "Queue it." }), ) // if / else if / else branch( urgent, () => urgentResult, needsReview, () => reviewResult, () => routineResult, ) // Fluent receiver form urgent.branch( () => urgentResult, () => routineResult, ) ``` Later conditions materialize only after every earlier condition is false. When every selected section returns a signal, `branch` returns the selected result. With only a true section, its result closes when the condition is false. Sections must be synchronous and can't declare triggers. ## `race` Selects the first causally related signal to emit or fail: ```ts theme={null} const winner = race([fast, slow]) const fluentWinner = fast.race(slow) const fluentMany = fast.race([medium, slow]) ``` Inputs must descend from the same activation-boundary occurrence. Failure wins like emission. Closed inputs leave the race, which closes only when every input closes. The selected result creates the closest child boundary for downstream actions. Independent roots can't race; use `merge` when either of several triggers should start the same flow. ## `serialize` Runs one structured work region at a time in each keyed or global partition: ```ts theme={null} const contactByUser = contactEvent.keyBy((event) => event.user) const updated = serialize(contactByUser, () => { sendAudit({ event: contactEvent }) return updateContact({ event: contactEvent }) }) const fluentUpdated = contactByUser.serialize(() => updateContact({ event: contactEvent }), ) ``` The source signal has three roles: each emission enters the queue, its key selects the queue, and its value and provenance remain available inside the section. Use `globally()` for one queue across all occurrences. The section creates an isolated structured-concurrency region. Independent declarations inside it can run concurrently; declaration order doesn't serialize them. The next occurrence in the same partition starts only after every context and unmatched coordination offer created by the current region becomes terminal. Other partitions continue independently. The callback doesn't return a completion signal. If it returns a signal, that value remains unavailable downstream until the whole region closes. Returning nothing is valid when only the enclosed effects matter. Sections must be synchronous and can't declare triggers. ## `concurrent` Runs up to a fixed number of structured work regions in each partition: ```ts theme={null} const result = concurrent(jobsByAccount, { limit: 5 }, () => processJob({ job: jobsByAccount }), ) const fluentResult = jobsByAccount.concurrent({ limit: 5 }, () => processJob({ job: jobsByAccount }), ) ``` `concurrent` has the same section and completion semantics as `serialize`, but admits up to `limit` active regions per key. Additional occurrences wait FIFO. `serialize(stream, section)` is the capacity-one form. ## `delay` Resumes a value or synchronous section after a durable relative delay: ```ts theme={null} const elapsed = delay("5m") // Signal const delayedRequest = delay("5m", request) const fluentDelayedRequest = request.delay("5m") const delayedResult = delay("5m", () => sendEmail({ subject: "Reminder", text: "Five minutes passed." }), ) ``` `Duration` accepts nonnegative milliseconds, a compact duration string, or a compatible signal. A value-carrying delay preserves the source's keyed or global annotation. The timer-only form declares a hidden delivery trigger; scope it to its initiating occurrence with `withPrerequisites` when the automation has another possible root. ## `timeout` Mirrors a signal unless a durable relative deadline wins: ```ts theme={null} const result = timeout(request, "30s") const fluentResult = request.timeout("30s") ``` The deadline accepts `Duration`. If it wins, the result fails with `name: "TimeoutError"` and message `"Signal timed out."`. Source closure leaves the deadline active. A timeout can span execution jobs but doesn't interrupt an action handler already running. The result preserves the source's keyed or global annotation. ## `funnel` Applies one timing and output policy to each keyed or global partition: ```ts theme={null} const firstPerMinute = funnel(statusByAccount, { minGap: "1m", triggerAt: "start", }) const buffered = statusByAccount.funnel({ buffer: true, maxBurstDuration: "10m", minQuietPeriod: "30s", }) ``` | Option | Default | Description | | - | - | - | | `minQuietPeriod` | None | Wait this long after the most recent admitted occurrence before an end emission. | | `maxBurstDuration` | None | End a burst this long after its first occurrence. Can't be combined with `until`. | | `until` | None | End at an absolute `Date` or `Signal`. Can't be combined with `maxBurstDuration`. | | `minGap` | None | Require this interval between emissions. | | `triggerAt` | `"end"` | Emit at `"start"`, `"end"`, or `"both"`. | | `select` | `"latest"` | Select `"first"` or `"latest"` for an end emission. Can't be combined with `buffer: true`. | | `buffer` | `false` | Emit every trailing occurrence in arrival order as `NonEmptyArray`. | | `inheritConflictingValuesFrom` | `"last"` | With `buffer: true`, choose the first or last parent when another value is ambiguous in the merged child context. | Durations accept `Duration`. An end emission requires `minQuietPeriod`, `maxBurstDuration`, or `until`. Start-only mode emits immediately and ignores the rest of the burst, so it doesn't accept `select` or `buffer`. The result preserves the source partition; locally closed paths contribute no occurrence. Minimum-gap memory belongs to the durable partition and remains effective after older execution values leave retention. ## `debounce` Emits the latest keyed or global occurrence after its partition remains quiet: ```ts theme={null} const settled = debounce(updateByCustomer, "5m") const fluentSettled = updateByCustomer.debounce("5m") ``` `duration` accepts `Duration`. Each occurrence resets only its partition's timer. This is the selecting funnel preset `{ minQuietPeriod: duration }`, and the result preserves the source partition. ## `window` Buffers keyed or global occurrences until a relative or absolute deadline: ```ts theme={null} const relative = window(eventsByCustomer, "5m") const relativeFirst = window(eventsByCustomer, "5m", { inheritConflictingValuesFrom: "first", }) const absolute = window(eventsByCustomer, { until: endOfDay }) const fluentRelative = eventsByCustomer.window("5m") const fluentAbsolute = eventsByCustomer.window({ until: endOfDay }) ``` | Option | Default | Description | | - | - | - | | `until` | Required in the absolute form | A `Date` or `Signal`. An already-past deadline becomes ready immediately. | | `inheritConflictingValuesFrom` | `"last"` | Choose the first or last selected parent when another value is ambiguous in the merged child context. Array order doesn't change. | The relative form accepts `Duration`. The first occurrence opens the window. The partition-preserving result is a `NonEmptyArray` in arrival order. ## `outcome` Converts every terminal state into a tagged value and always succeeds after the source terminates: ```ts theme={null} const result = outcome(request) const fluentResult = request.outcome() ``` The result is `Signal>`. Unlike value-preserving operators, `outcome` doesn't retain a keyed or global annotation. ## `succeeded` Emits whether a signal terminated successfully with a value: ```ts theme={null} const didSucceed = succeeded(result) const fluentDidSucceed = result.succeeded() ``` The result is `true` for success and `false` for failure or closure. The predicate itself succeeds after any terminal state. ## `failed` Emits whether a signal terminated with an automation error: ```ts theme={null} const didFail = failed(result) const fluentDidFail = result.failed() ``` The result is `true` for failure and `false` for success or closure. The predicate itself succeeds after any terminal state. ## `closed` Emits whether a signal closed without a value: ```ts theme={null} const didClose = closed(result) const fluentDidClose = result.closed() ``` The result is `true` for closure and `false` for success or failure. Failure isn't closure. The predicate itself succeeds after any terminal state. ## `onSuccess` Selects a signal's successful value and closes for failure or closure: ```ts theme={null} const value = onSuccess(result) const fluentValue = result.onSuccess() const notice = onSuccess(result, (selected, source) => sendEmail({ subject: "Completed", text: selected.summary }), ) const fluentNotice = result.onSuccess((selected, source) => sendEmail({ subject: "Completed", text: selected.summary }), ) ``` The section overload applies the selected value as a prerequisite and returns the section result. The value form preserves a keyed or global source annotation. ## `onFailure` Selects a signal's normalized `AutomationError` and closes for success or closure: ```ts theme={null} const failure = onFailure(result) const fluentFailure = result.onFailure() const notice = onFailure(result, (selected, source) => sendEmail({ subject: selected.code, text: selected.message }), ) const fluentNotice = result.onFailure((selected, source) => sendEmail({ subject: selected.code, text: selected.message }), ) ``` The section overload applies the failure as a prerequisite and returns the section result. `AutomationError` contains author-safe details, not raw errors or stacks. ## `onClose` Selects closure as `Signal` and closes for success or failure: ```ts theme={null} const closure = onClose(result) const fluentClosure = result.onClose() const notice = onClose(result, (selected, source) => sendEmail({ subject: "Skipped", text: "The route produced no value." }), ) const fluentNotice = result.onClose((selected, source) => sendEmail({ subject: "Skipped", text: "The route produced no value." }), ) ``` The section overload applies the closure as a prerequisite and returns the section result. ## `markSignificant` Marks the connected run significant only when the selected signal emits, then returns the original signal: ```ts theme={null} const marked = markSignificant(notice) const fluentMarked = notice.markSignificant() ``` Recent runs hides runs without an emitted marked signal by default. **Show insignificant runs** reveals them as dimmed rows. Closure or failure doesn't mark the run significant. ## `scope` Gives a synchronous section its own durable hook namespace: ```ts theme={null} const result = scope(() => sendEmail({ subject: "Scoped work", text: "Done." })) ``` Adding or removing declarations inside the scope doesn't renumber hooks after it. `scope` adds no prerequisite or presentation metadata. `branch`, `each`, and `delay` create internal scopes for the same isolation. ## `group` Names a synchronous declaration group and gives it an isolated hook namespace: ```ts theme={null} const result = group({ name: "Notify members", presentation: "expanded" }, () => sendEmail({ subject: "Grouped work", text: "Done." }), ) ``` | Option | Default | Description | | - | - | - | | `name` | Required | Author-facing name shown in run details. | | `presentation` | `"collapsed"` | Initial treatment: `"collapsed"`, `"expanded"`, or `"hidden"`. | Like `scope`, `group` doesn't add a prerequisite. It returns the section result. ## Types and errors \| Type | Contract | \| --- | --- | --- | \| `Signal` | Symbolic value that materializes during execution. | \| `KeyedSignal` | `Signal` with an encoded partition key from `keyBy`. | \| `GlobalSignal` | `Signal` with one shared cross-context partition from `globally`. | \| `NonEmptyArray` | `[T, ...T[]]`. Complete collections and windows return this type. | \| `Duration` | Milliseconds, a compact `DurationString`, or a compatible signal carrying either. | \| `Deadline` | `Date | Signal`. | \| `CorrelationOptions` | Options accepted by `correlate`. | \| `CorrelationInput` | A keyed signal or `{ signal, selection?, consumption? }`. | \| `AdmissionOptions` | Optional claim `ttl` accepted by `once` and `take`. | \| `RateLimitOptions` | Rolling `limit`, `interval`, and overflow behavior. | \| `ConcurrencyOptions` | Positive active-region `limit` accepted by `concurrent`. | \| `ValueInheritanceOptions` | Parent-value selection accepted by `collect` and `window`. | \| `WindowUntilOptions` | `ValueInheritanceOptions & { until: Deadline }`. | \| `GroupOptions` | Options accepted by `group`. | \| `FunnelOptions` | Type-checked timing, edge, selection, and buffering combinations accepted by `funnel`. | `SignalOutcome` is mutually exclusive: ```ts theme={null} type SignalOutcome = | { status: "closed" } | { failure: AutomationError; status: "failed" } | { status: "succeeded"; value: T } ``` `AutomationError` contains author-safe failure data: ```ts theme={null} interface AutomationError { cause?: AutomationError code: string details?: JSONValue message: string name?: string } ``` `code` is the stable machine-readable classification. `message`, optional `name`, JSON `details`, and a depth-limited `cause` are safe to expose to automation authors. Raw errors and stacks don't enter signal values. # On dashboard run Source: https://docs.automate.ax/reference/triggers/on-dashboard-run Use onDashboardRun for immediate or form-backed dashboard runs. `onDashboardRun` lets organization members start an automation from the dashboard, either immediately or with configured form inputs. ## Example ```ts automations/approval-request.automation.ts theme={null} import { automation, onDashboardRun, sendEmail, t } from "automate.ax" export default automation("Request approval", () => { const dashboardRun = onDashboardRun({ title: "Request approval", description: "Describe the purchase you want approved.", submitLabel: "Run approval request", fields: [ { name: "amount", type: "number", defaultValue: 100, min: 0, step: 0.01, }, { name: "priority", type: "select", defaultValue: "normal", options: [ { label: "Normal", value: "normal" }, { label: "Urgent", value: "urgent" }, ], }, { name: "reason", type: "textarea", minLength: 10, }, { name: "confirmed", type: "checkbox", label: "I confirmed these details are correct", required: true, }, ], }) sendEmail({ to: "*", subject: t`${dashboardRun.data.priority} approval request`, text: t`${dashboardRun.triggeredBy.name} requested approval for $${dashboardRun.data.amount}: ${dashboardRun.data.reason}`, }) }) ``` Each active `onDashboardRun` trigger appears on the Automations page and the automation's detail page as a button named with its `title`. Selecting it opens configured fields in a dialog. `description` appears below the title when configured. If you omit `fields` or pass an empty array, selecting the button starts the automation immediately. Only members of the project's organization can start the run. ## Run without fields ```ts automations/record-dashboard-run.automation.ts theme={null} import { automation, markSignificant, onDashboardRun } from "automate.ax" export default automation("Record dashboard run", () => { const run = onDashboardRun({ title: "Record test run" }) markSignificant(run) }) ``` `markSignificant` keeps each dashboard test in the default Recent runs view without sending email or changing another service. ## Form options | Property | Type | Required | Default | Description | | - | - | - | - | - | | `title` | `string` | Yes | — | Form heading. | | `description` | `string` | No | — | Supporting text below the heading. | | `fields` | `FormField[]` | No | `[]` | Ordered fields. Each field's `name` becomes a property under `dashboardRun.data`. Omit fields to run immediately without a dialog. | | `submitLabel` | `string` | No | `"Run"` | Run button text. | `onDashboardRun` configuration is static and can't use signals. ## Field types Each field requires `name` and accepts optional `label`, `description`, and `required`. When you omit `label`, `onDashboardRun` sentence-cases `name`: `contactEmail` becomes `Contact email`. Inferred checkbox labels also end in a question mark. Array order controls form order. Fields are required by default except checkboxes, which are optional unless you set `required: true`. | `type` | Submitted value | Options | | - | - | - | | `text` | `string` | `defaultValue`, `placeholder`, `minLength`, `maxLength` | | `textarea` | `string` | `defaultValue`, `placeholder`, `minLength`, `maxLength` | | `email` | `string` | `defaultValue`, `placeholder`, `minLength`, `maxLength` | | `url` | `string` | `defaultValue`, `placeholder`, `minLength`, `maxLength` | | `phone` | `string` | `defaultValue`, `placeholder`, `minLength`, `maxLength` | | `number` | `number` | `defaultValue`, `placeholder`, `min`, `max`, `step`. `step` defaults to `1`. | | `date` | `string` | `defaultValue`, `min`, `max`, `step` in days. `step` defaults to `1`. | | `datetime` | `string` | `defaultValue`, `min`, `max`, `step` in seconds. `step` defaults to `60`. | | `select` | The configured option value | `defaultValue`, `placeholder`, `options: { label, value }[]` | | `radio` | The configured option value | `defaultValue`, `options: { label, value }[]` | | `multi-select` | An array of configured option values | `defaultValue`, `placeholder`, `options: { label, value }[]` | | `file` | `File` | No `defaultValue`; set `required: false` to allow no file. | | `checkbox` | `boolean` | `defaultValue`. Defaults to `false`. | Use `YYYY-MM-DD` date values and local `YYYY-MM-DDTHH:mm` date-time values. An optional empty number or file is `null`. An optional multi-select is `[]`. Other optional empty text, date, and single-choice fields are `""`. TypeScript infers choice values as string-literal unions from the configured options. Every `defaultValue` must satisfy the field's format, length, option, and `min`, `max`, or `step` constraints. ## Trigger data `onDashboardRun` emits: ```ts theme={null} interface DashboardRunEvent { data: DashboardRunValues triggeredAt: Date triggeredBy: { id: string email: string name: string } } ``` `onDashboardRun` validates required values, email and URL formats, string lengths, configured options, and numeric and temporal `min`, `max`, and `step` constraints on the server before starting the automation. When you omit `fields`, `data` is an empty object. ## Files Add `{ name: "document", type: "file" }` to let members select a file. The automation receives a `File` with its contents, filename, and media type. Files are stored directly in the run data. Each file field accepts one file; declare separate fields for separate uploads. ```ts automations/review-document.automation.ts theme={null} import { automation, markSignificant, onDashboardRun } from "automate.ax" export default automation("Review an uploaded document", () => { const run = onDashboardRun({ title: "Upload document", fields: [{ name: "document", type: "file" }], }) markSignificant(run) }) ``` # On HTTP request Source: https://docs.automate.ax/reference/triggers/on-http-request Use onHttpRequest to receive and decode HTTP requests. `onHttpRequest` creates an HTTP endpoint. Each declaration gets a unique route by default; `scope: "automation"` or `scope: "project"` shares a route at that scope. The endpoint accepts cross-origin browser requests from any origin and answers cross-origin resource sharing (CORS) preflight requests. Browser credentials aren't supported. ## Example ```ts automations/http-webhook.automation.ts theme={null} import { automation, onHttpRequest, respondToHttpRequest, t } from "automate.ax" import { z } from "zod" export default automation("Receive a webhook", () => { const request = onHttpRequest({ body: z.object({ message: z.string() }), }) respondToHttpRequest({ body: t`Received: ${request.body.message}`, requestId: request.requestId, }) }) ``` The `body` option accepts any [Standard Schema](https://standardschema.dev/) implementation, not only Zod. The schema output becomes the type of `request.body`, so nested properties are signals you can pass directly to actions. The schema must run synchronously. A schema that returns a promise fails the run. `request.endpoint` is the deployed trigger URL as a static string. Use it as another service's callback or webhook URL. For a callback URL that only a provider should invoke, enable callback protection and sign the endpoint from the action that registers it. ## Options | Option | Type | Required | Default | Description | | - | - | - | - | - | | `body` | Standard Schema | No | None | Validate the decoded body and expose its inferred output type. | | `scope` | `"trigger" \| "automation" \| "project"` | No | `"trigger"` | Scope where the trigger receives HTTP requests. | | `protection` | `"callback"` | No | None | Require a signed callback capability generated by an action in this automation. Callback protection only supports trigger scope. | | `waitForResponse` | `boolean` | No | Inferred | Override whether to wait for `respondToHttpRequest`. Omission waits when a response action targets this trigger and otherwise acknowledges immediately. | `onHttpRequest` configuration is static and can't use signals. When the trigger doesn't wait for a response, the endpoint accepts the event with `202` and returns: | Property | Type | Description | | - | - | - | | `eventId` | `string` | Stable event ID. Use it to find the resulting contexts in synchronized execution data. | | `ingestSeq` | `number` | Monotonic event ingestion sequence. | | `inserted` | `boolean` | Whether this request inserted the event instead of matching an idempotent event. | ## Trigger data `onHttpRequest` returns an HTTP request signal with static `endpoint: string` and this request data: | Property | Type | Description | | - | - | - | | `method` | `"GET" \| "POST" \| "PUT" \| "PATCH" \| "DELETE"` | Request method. | | `requestId` | `string` | Stable ID for this request occurrence. Pass it to `respondToHttpRequest`. | | `url` | `string` | Complete request URL. | | `path` | `string` | Request path. | | `query` | `Record` | Parsed query parameters. | | `headers` | `Record` | Normalized request headers. | | `body` | `JSON value \| string \| Uint8Array \| form record` or schema output | Body decoded from `content-type`, then validated when you supply a `body` schema. Multipart form records contain strings, `File` values, or arrays for repeated names. | | `bodyType` | `"json" \| "text" \| "form" \| "bytes" \| "empty"` | How `onHttpRequest` decoded `body`. | | `rawBody` | `Uint8Array` | Exact request bytes. Use this value for signature verification. | `onHttpRequest` decodes `application/json` and `*+json` as JSON. It decodes `text/*`, JavaScript, XML, YAML, TOML, NDJSON, JSON text sequences, and SQL media types as strings without parsing their contents. Text uses the character encoding declared in `content-type`. XML selects its encoding from the byte order mark first, then the media type's character encoding, then the XML encoding declaration. URL-encoded and multipart forms become objects. Repeated field names become arrays, and multipart uploads become `File` values with their filenames and media types. Multipart forms accept up to 1,000 parts and 8 KiB of headers per part. An empty body becomes `null`. Unknown or binary media types stay as `Uint8Array`. The endpoint returns `400` for malformed JSON or multipart bodies and for text or XML with invalid byte sequences before creating a run. It returns `413` when a multipart body exceeds the header or part-count limits and `415` for an unsupported character encoding. A supplied Standard Schema validates after the run starts, so a schema mismatch fails that execution. `onHttpRequest` omits `cookie`, `cf-*`, `sec-*`, and `x-forwarded-for` headers from durable request data. You can't authenticate a custom webhook that requires one of those headers. Passing `request.requestId` to `respondToHttpRequest` makes `onHttpRequest` wait unless you explicitly set `waitForResponse: false`. You can explicitly set `true` when waiting is required but planning can't infer the target. Responses are matched by request ID, including across correlated contexts. The endpoint waits up to 55 seconds. If execution finishes without its addressed response, it returns `500`. If execution is still active after 55 seconds, it returns `504`, and execution can continue after the caller times out. ## Protect a provider callback Generate a signed URL inside an action anchored to the occurrence that registers the provider callback: ```ts automations/prepare-provider-callback.automation.ts theme={null} import { automation, defineAction, markSignificant, onHttpRequest, onInvocation, withPrerequisites, } from "automate.ax" import { z } from "zod" const prepareCallback = defineAction("Prepare callback") .input(z.object({ endpoint: z.url() })) .output(z.object({ url: z.url() }), { sensitive: { url: true }, }) .retry({ replaySafety: "safe" }) .handler(async ({ input, runtime }) => ({ url: await runtime.createCallbackUrl(input.endpoint), })) export default automation("Prepare a provider callback", () => { const requested = onInvocation("prepare") const callback = onHttpRequest({ protection: "callback" }) const prepared = withPrerequisites(requested, () => prepareCallback({ endpoint: callback.endpoint }), ) markSignificant(prepared) }) ``` The example marks the initiating run significant after generating the protected URL without changing the provider. In production, pass `prepared.url` to the provider registration action instead. `runtime.createCallbackUrl()` returns a signed, expiring bearer URL bound to this automation and exact trigger endpoint. The runtime rejects missing, altered, expired, or incorrectly targeted capabilities before creating a context. Keep the URL secret. It remains reusable so providers can retry delivery. A valid request still starts an independent root context. Protection authorizes access to the endpoint. It doesn't connect the callback to the action that created the URL. Include a provider job ID in both streams and [`correlate`](/reference/runtime/signal-operators#correlate) them. Callback protection strips its query parameter before exposing the request's `url` and `query` values. # On invocation Source: https://docs.automate.ax/reference/triggers/on-invocation Receive payloads from another automation. `onInvocation()` receives a payload from another automation. Name the entrypoint when the automation accepts different invocation types. `T` is compile-time only; `onInvocation` doesn't validate the payload at runtime. ```ts automations/receive-order.automation.ts theme={null} import { automation, markSignificant, onInvocation } from "automate.ax" interface OrderInvocation { orderId: string } export default automation("Receive order", () => { const invocation = onInvocation("receive-order") markSignificant(invocation.orderId) }) ``` `markSignificant(invocation.orderId)` keeps each run whose invocation emits an `orderId` in the default Recent runs view without an external write. Invoke it from another automation with `invokeAutomation`: ```ts theme={null} invokeAutomation({ automation: "Receive order", entrypoint: "receive-order", payload: { orderId: "order_123" }, runIn: "3d", }) ``` Pass the target automation or its unique name in the current project. Omit the entrypoint from both calls to use `"default"`. An automation can define each entrypoint once. Entrypoint names beginning with `__$` are reserved. `runAt` accepts a `Date`, absolute date string, or epoch-millisecond number. `runIn` accepts a compact duration such as `"24h"` or a millisecond number. They're mutually exclusive. Omitting both invokes immediately. # On mailhook Source: https://docs.automate.ax/reference/triggers/on-mailhook Receive email at a managed @automations.automate.ax address. `onMailhook` creates a managed `@automations.automate.ax` address. Each declaration gets a unique address by default; `scope: "automation"` or `scope: "project"` shares an address at that scope. ## Example ```ts automations/reply-inbox.automation.ts theme={null} import { automation, correlate, correlationId, filter, markSignificant, onDashboardRun, onMailhook, sendEmail, t, transform, } from "automate.ax" export default automation("Reply inbox", () => { const run = onDashboardRun({ title: "Request a reply" }) const inbox = onMailhook({ scope: "automation" }) const requestId = correlationId(run) sendEmail({ replyTo: { plusPath: requestId, scope: "automation" }, subject: "Reply to this automation", text: t`This message was requested by ${run.triggeredBy.name}.`, }) const reply = filter( inbox, ({ isReply, plusPath }) => isReply && plusPath !== null, ) const matched = correlate( [requestId.keyBy((id) => id), reply.keyBy(({ plusPath }) => plusPath)], { occurrenceTtl: "30d", ordered: true }, ) const correlatedReply = transform( [matched, reply], (_matched, replyEvent) => replyEvent, ) markSignificant(correlatedReply) }) ``` Selecting **Request a reply** in the dashboard sends one email to every current organization member and uses the Platform email allowance. The matching reply starts a separate root run, `correlate` joins it to the dashboard run through `plusPath`, and `markSignificant` keeps the correlated run visible without sending another email. `inbox.address` is the deployed inbound address as a static string. Use it as `sendEmail`'s `replyTo` for an exact trigger address. For automation- or project-scoped mailhooks, you can instead pass `{ scope }` and an optional static or signal-valued `plusPath`. ## Options | Option | Type | Required | Default | Description | | - | - | - | - | - | | `scope` | `"trigger" \| "automation" \| "project"` | No | `"trigger"` | Scope where the trigger receives email. | `onMailhook` configuration is static and can't use signals. Trigger scope gives each declaration a unique address. Automation scope shares an address across the automation. Project scope shares an address across the project. Every active subscription at that scope receives matching email. ## Plus routing Append `+suffix` before the `@` to route related addresses through the same mailhook. For example, if `inbox.address` is `abc@automations.automate.ax`, email sent to `abc+invoices@automations.automate.ax` sets `plusPath` to `"invoices"`. Use [`correlationId`](/reference/runtime/signal-operators#correlationid) when the originating signal has no natural correlation key. Use valid email local-part characters and keep the complete local part before `@` within the 64-byte email limit. ## Trigger data `onMailhook` returns an email signal with static `address: string` and this message data: | Property | Type | Description | | - | - | - | | `senderAddress` | `string \| null` | Parsed sender address. | | `senderName` | `string \| null` | Parsed sender display name. | | `additionalRecipients` | `string[]` | Other To, Cc, and Bcc recipients. | | `subject` | `string` | Message subject. | | `text` | `string \| null` | Plain-text body. | | `html` | `string \| null` | HTML body. Treat it as untrusted content. | | `attachments` | `File[]` | Attached files, including inline Multipurpose Internet Mail Extensions (MIME) parts. | | `headers` | `Record` | Original headers with lowercase names. | | `messageId` | `string` | On-the-wire RFC 5322 Message-ID. Use it as `In-Reply-To` when replying to this message. | | `inReplyTo` | `string \| null` | On-the-wire RFC 5322 Message-ID of this message's parent. | | `references` | `string[]` | On-the-wire RFC 5322 Message-IDs in the conversation ancestry. Append `messageId` when building a reply's `References` header. When empty, start with `inReplyTo` if present. | | `isReply` | `boolean` | Whether an `In-Reply-To` header is present. | | `plusPath` | `string \| null` | Suffix after `+` in the receiving address. | | `receivedAt` | `Date` | Time Resend received the message. | Replies use the same trigger as other inbound email. Filter on `isReply` when an automation should only continue for replies. # On schedule Source: https://docs.automate.ax/reference/triggers/on-schedule Start runs from five-field cron schedules in a chosen time zone. `onSchedule` starts independent runs from a five-field cron expression evaluated in `UTC` or a configured IANA time zone. ## Example ```ts automations/weekday-report.automation.ts theme={null} import { automation, onSchedule, sendEmail, t } from "automate.ax" export default automation("Weekday report", () => { const tick = onSchedule({ schedule: "30 9 * * 1-5", timeZone: "America/Los_Angeles", }) sendEmail({ to: "*", subject: "Weekday report", text: t`Scheduled for ${tick.scheduledAt}`, }) }) ``` This automation runs at 9:30 AM every Monday through Friday in Los Angeles local time. ## Options | Property | Type | Required | Description | | - | - | - | - | | `schedule` | `string` | Yes | Five-field cron expression: minute, hour, day of month, month, and day of week. | | `timeZone` | `string` | No | Internet Assigned Numbers Authority (IANA) time zone used to evaluate the schedule. Defaults to `UTC`. | `onSchedule` has one-minute precision and rejects six-field expressions with seconds. ## Trigger data `onSchedule` returns a `Signal` for each matching occurrence: ```ts theme={null} interface ScheduleEvent { scheduledAt: Date } ``` `scheduledAt` is the event's scheduled minute. Use it instead of the automation's wall-clock start time to identify delayed occurrences. ## Delivery behavior * `onSchedule` validates its configuration during deployment. * IANA time zones follow local daylight-saving-time transitions. * After a restart, the scheduler delivers every matching occurrence from the previous 60 minutes and skips older occurrences. * The deployment active during catch-up receives those occurrences, including an occurrence whose `scheduledAt` predates that deployment. * Each occurrence starts an independent run. A later or recovered occurrence can run while an earlier one is still active. `onSchedule` doesn't prevent overlaps or enforce execution order. * Recovered occurrences count as ordinary runs. * Retries for the same schedule and timestamp are deduplicated. # Start manually Source: https://docs.automate.ax/start/manually Create, deploy, and run your first Automate.ax automation. This first automation uses an HTTP trigger so you can deploy and test it without connecting an external account. ## Create the project Start in an empty directory and sign in to Automate.ax: ```bash theme={null} mkdir hello-automate cd hello-automate bunx automate.ax login ``` Initialize the Automate.ax project: ```bash theme={null} bunx automate.ax init ``` Follow the prompts to choose an organization and name the project. Automate.ax adds the package, configuration, and an example automation. ## Write the automation Open `automations/example.automation.ts` and replace it with: ```ts automations/example.automation.ts theme={null} import { automation, onHttpRequest, respondToHttpRequest, t } from "automate.ax" export default automation("Confirm an HTTP request", () => { const request = onHttpRequest() respondToHttpRequest({ body: t`Automate.ax received ${request.method} ${request.path}.`, requestId: request.requestId, }) }) ``` * [`automation`](/concepts/automations) gives the automation a name. * [`onHttpRequest`](/reference/triggers/on-http-request) creates the web endpoint that starts it. * [`respondToHttpRequest`](/reference/actions/respond-to-http-request) sends a response back to the caller. * [`t`](/reference/runtime/signal-operators#t) builds a string from values that arrive when the automation runs. The request arrives as a [signal](/concepts/signals). Passing `request.requestId` addresses the response to that exact request and makes Automate.ax wait for it automatically. ## Deploy it Typecheck the project: ```bash theme={null} bunx tsc --noEmit ``` Deploy the project: ```bash theme={null} bunx automate.ax deploy ``` Automate.ax publishes the automation and prints its HTTP trigger URL. It also saves the deployment details in `.automate/deployment.md`. ## Run it Read the HTTP trigger URL from the deployment manifest and call it: ```bash theme={null} curl "$(grep -m1 '^https://automate.ax/x/' .automate/deployment.md)" ``` You receive a response like: ```text wrap theme={null} Automate.ax received GET /. ``` ## Connect integrations * Browse the **Integrations** section in Reference, or open [Slack](/reference/integrations/slack/index), [Google Sheets](/reference/integrations/google-sheets/index), or [Linear](/reference/integrations/linear/index) directly. * [Use multiple accounts from the same service](/guides/use-multiple-accounts) when a project needs separate identities. * [Call an external API](/guides/call-an-external-api) when packaged actions don't cover the operation. # Start with a coding agent Source: https://docs.automate.ax/start/with-agent Build, deploy, authorize, and test an Automate.ax automation with a coding agent. Describe the automation you want in one prompt. Your coding agent uses the Automate.ax API reference and command-line tool to build it. Start with this prompt: ```text wrap theme={null} Using https://docs.automate.ax/llms.txt, build, deploy, and test an automation that . ``` For example, notify Slack from Linear, Asana, and Trello: ```text wrap theme={null} Using https://docs.automate.ax/llms.txt, build, deploy, and test an automation that posts in Slack #chat whenever a Linear issue, Asana task, or Trello card is completed. ``` ## What happens next 1. **Connect your agent to Automate.ax.** The agent starts the Automate.ax login flow and opens your browser. You sign in to Automate.ax and authorize the agent's command-line session. 2. **The agent writes the automation.** It creates an Automate.ax project and writes the automation from your prompt. You don't need to edit files or run commands. 3. **The agent deploys it.** Automate.ax checks the code and starts the deployment. 4. **Set parameters and accounts.** The agent opens **Parameters & Accounts** when the automation declares project-specific values or uses Slack, Google, Linear, or another service. Set the requested values, assign an account you already connected, or connect a new one. Automate.ax resumes after every requirement is ready. 5. **The agent completes one-time setup.** If the automation needs a new resource, such as a spreadsheet, the agent creates it, removes any temporary setup code, and deploys the finished automation. 6. **The agent tests it.** It starts a safe run, checks the execution and result, then reports what's live and how to run it again.