- A connection at agent scope (see Connect a Unified.to integration); personal connections have no integration webhooks.
- Its connection ID from
lua integrations list. - For
--hook-url, a deployed webhook or trigger URL.
1
List the events a type offers
Each event is
<object>.<event>; [virtual] events are polled by Unified.to at an interval you choose, [native] ones are pushed by the provider.Output
--connection <id> lists the events of an existing connection instead; --json prints { source, events, defaults }.2
Create the subscription
Name the connection, the event, and the destination; for a virtual event add The same subscriptions can be made at connect time with
--interval in minutes (minimum 1; the interactive menu offers 1 to 2880). Without --hook-url the CLI asks where to send events, so a headless run passes the agent’s own address explicitly.lua integrations connect … --triggers task_task.created,task_task.updated (add --hook-url <url> for your URL); a virtual event subscribed this way polls every minute.3
Decide what receives the event
With the agent’s address as the destination, each delivery starts a background turn on the channel The block is cut at 50,000 characters; what happens next is up to the persona and the agent’s tools. Delivery is at most once: the platform acknowledges every event on receipt and never retries or deduplicates, so a redelivered event wakes the agent again. With
integration:<type> (integration:linear), as the user who connected the integration. The model receives the message [Webhook Trigger] <event description> and a context block holding the event as JSON; data holds the changed objects in Unified.to’s model for that object type, each with its id.--hook-url, Unified.to posts directly to your webhook or trigger URL, with the changed objects in data and the subscription’s integration_type, object_type, event, and connection_id under webhook.4
Pause, resume, or delete
Pause one subscription by ID or every subscription of a connection; resume the same way. Delete is by ID only.
5
Verify
List the subscriptions: each prints as Then make the change in the provider (create an issue) and, for a virtual event, wait one interval.
<object>.<event> (poll|push, agent trigger|custom URL) with its ID, and a paused one carries (paused by you).lua logs --type user_message --limit 20 lists the wake-up turn as [Webhook Trigger] <event description> with Channel: integration:<type>; a custom URL delivery shows in your webhook’s logs (see Logs and debugging).Options you may need
The two triggers commands
lua integrations triggers <action> is an alias of lua integrations webhooks <action>, and the CLI calls a subscription a trigger elsewhere too: the --triggers flag on connect, the Available Trigger Events heading of events, the agent trigger destination in list, and the [Webhook Trigger] prefix on the message the agent receives. The top-level lua triggers command manages platform triggers, which are unrelated: pasteable URLs that invoke the agent on demand (see Create a trigger). The comparison table sets the three side by side.
Start a workflow once per event
For a durable record, point--hook-url at a trigger whose transform returns { startWorkflow, idempotencyKey }: the run is created in the delivery request, and a repeated post with the same object IDs returns the same run instead of starting another.
src/triggers/linear-issue.trigger.ts
sig256 over a secret only the platform holds, so your destination can’t verify it, and the post carries no x-lua-signature: a LuaWebhook with secret set answers it 401. Prefer a trigger URL, whose token is the credential (lua triggers rotate-token replaces it), to an unsigned webhook URL, which anyone knowing the agent ID and webhook name can call.
Filters
--json on events lists each event’s availableFilters, but the CLI has no flag to set them: a subscription made with the CLI receives every occurrence of the event.
If it isn’t working
Event 'task_task.deleted' is not supported.
Event 'task_task.deleted' is not supported.
The object and event pair isn’t offered for that connection. Run
lua integrations webhooks events --connection <id> and use one of the listed pairs.✖ error: Interactive prompt required but --ci flag is set.
✖ error: Interactive prompt required but --ci flag is set.
create needed a prompt: --connection, --object, --event, or --hook-url is missing, or the event is virtual and --interval is missing. Pass them all.The agent doesn't react
The agent doesn't react
lua integrations webhooks list shows the subscription as (paused by you) or (credit-suspended), or the polling interval hasn’t elapsed. Resume it with lua integrations webhooks resume --webhook-id <id>; a credit-suspended subscription resumes only after credits are added. If it is active, lua logs --type agent_error --limit 20 shows a delivered turn that failed, Channel: integration:<type> under the entry; --type agent_response shows one that ran. No --type filters by channel.Next steps
Handle a webhook
Receive a
--hook-url delivery in your own code.About triggers
Platform triggers, and how they differ from integration webhooks.
Manage integration MCP tools
The tools a woken agent can call.
lua integrations reference
Every
webhooks option.
