Triggers
Every way to start an automation run - schedules, webhooks, manual runs, hosted forms, failures and app events - and the settings for each.
A trigger decides when an automation runs and what data the run starts with. There are two ways to set one up: the trigger node every new automation starts with, and the Triggers group of the node palette.
Two ways to add triggers
- Standard trigger node: the node a new automation starts with. One per workflow, with Schedule, External (manual or webhook) and Form tiles you can combine.
- Triggers group: at the top of the node palette, one node per trigger type, including Error and app triggers. A workflow can have several.
Standard trigger node
A new automation opens with a trigger node already on the canvas. Open it and, on Trigger Settings, choose one or more trigger types. Each selected type gets its own section you can expand or collapse.


| Tile | Description in the app |
|---|---|
| Schedule | Run this automation using a time-based schedule. |
| External | Manual API runs and webhook-triggered execution. |
| Form | Collect submissions from a public hosted web form. |
Schedule
| Field | What it does |
|---|---|
| Timezone | The timezone the schedule is read in. |
| Trigger Event | How often to run: Every Hour, Every Day, Every Week, Every Month or Custom Cron. |
| Time | The time of day, for daily, weekly and monthly runs. |
| Days | Which weekdays, for weekly runs. |
| Day of Month | Which day(s) of the month, for monthly runs. |
| Preview | The upcoming run times, so you can check the schedule before saving. |
Custom Cron opens a Custom Cron Builder with presets (for example Weekdays at 8 AM, Every 30 minutes, Weekday business hours) and a Raw Scheduler Expression field. The raw field accepts a five-field cron (0 8,20 * * *), the AWS form (cron(0 8 * * ? *)) or a rate (rate(1 hour)). A cron expression cannot restrict both day-of-month and day-of-week; use ? in one of them.
External
External Mode is either Manual or Webhook.
| Field | What it does |
|---|---|
| Trigger Source | The system that will call the workflow, such as Custom, Stripe or GitHub. |
| Trigger Key | The event name recorded on each run, for example automation.started. The Activity tab uses it to name runs. |
| Callback Override | Send the result of asynchronous runs to your own Callback URL, optionally signed with a Callback Secret. |
| Schema Config | The payload you expect callers to send. Edit it in Builder, Plain or JSON Editor mode. The Run panel turns it into a form. |
| External API Token (test only) and Run Dry Test | Paste an API token with the automation trigger scope and send a dry-run request to check the configuration. |
External calls use the Buni.ai public API and an API token. See Authentication and Async runs and callbacks.
Form
The Form tile publishes a hosted web form; each submission starts a run. See Hosted forms.
Triggers group
Triggers from the palette are nodes you drag from its Triggers group. Each palette item is named after its trigger, for example Webhook Trigger or Stripe Trigger, and each has its own page in the node reference.
- A workflow can have several triggers. Each trigger node starts the workflow from its own output.
- Each trigger can be paused. Use the Enabled / Paused switch in the node's header. A paused trigger shows a Paused badge on the canvas.
- Recent deliveries lists the latest runs the trigger started, newest first.
- Send test event shows what the trigger would pass to the workflow for a sample payload, without running the workflow's nodes.
Core triggers
| Trigger | Starts the workflow when |
|---|---|
| Schedule | A timetable fires: every hour, day, week or month, or a custom cron. |
| Webhook | An HTTP request reaches the trigger's unique URL. |
| Manual | You run it from the editor, with optional JSON input. |
| Form | Someone submits the trigger's hosted form. |
| Error | Another run of this project's workflows fails. See Error workflows. |
| Called by another flow | Another project in your organisation runs it with a Run workflow step. See Shared workflows. |
Webhook trigger


The Endpoint section shows two URLs: Test runs the draft workflow immediately, and Prod runs the published workflow (it answers 409 until you publish). Requests can be signed with a secret, and the trigger can answer at once (Async (202)) or wait for the run's result (Sync (wait for result)). See Webhook Trigger for signing, responses and status codes.
App triggers
App triggers start the workflow from an event in another product. Pick the trigger, choose a Connection, then pick the Events you care about. The Setup checklist in the node lists anything still missing. Add connections in the project's Integrations tab.
| Trigger | Starts the workflow on | Setup |
|---|---|---|
| Stripe | Payments, checkouts, customers, subscriptions and invoices | A Stripe connection (secret key). Buni.ai registers the webhook in Stripe for you. |
| GitHub | Pushes, pull requests, issues, issue comments, releases, workflow runs | A GitHub connection and a Repository (owner/name). Buni.ai registers the webhook for you. |
| Shopify | Orders created, updated, paid, cancelled or fulfilled; customers and products created or updated | A Shopify connection (your app's Admin API access token), your store's myshopify.com domain, and your app's API secret key saved in the trigger's Endpoint section, since Shopify signs every webhook with it. Buni.ai registers the webhook for you. |
| Telegram | Messages, bot commands, button presses, edits and channel posts | A Telegram connection (bot token). A bot can feed only one place at a time. |
| Slack | Channel messages, mentions of your bot, reactions, new channels and people joining channels | Your own Slack app: save its Signing Secret on the trigger, then paste the trigger's URL into the app's Event Subscriptions. |
| Google Sheets | New rows and changed rows in a range you choose, checked every few minutes | A Google Sheets connection (sign in with Google), a Spreadsheet id and a Range. |
| Airtable | New records and changed records in a table, checked every few minutes | An Airtable connection (personal access token), a Base id and a Table. |
| HubSpot | Contacts and deals created or changed, checked every few minutes | A HubSpot connection (sign in with HubSpot). |
| Data Store | Records created, updated or deleted in one of your data stores | No connection: pick the Data store to watch. |
| Sessions | A session starting or ending on one of your USSD projects, checked every few minutes | No connection: pick the USSD project to watch. A caller who walks away leaves no end event, so only sessions that reach an end fire Session ended. |
Provider signatures are checked on every delivery, and a repeated delivery of the same provider event runs only once. When a trigger that checks on a schedule (Data Store, Google Sheets, Airtable, HubSpot, Sessions) first starts, it records what is already there and does not fire for existing records.