--- title: Webhooks Triggers deprecated: false hidden: false metadata: robots: index --- **Limited Preview: Webhook Triggers & Listener** Webhook Triggers and the Webhook Listener are currently in Limited Preview and may change without notice. Access is invite-only. Self-nomination form is [here](https://community.moveworks.com/p/webhook-triggers-limited-preview). Production use is approved but may be subject to interruptions or breaking changes. Webhook triggers enable ambient agents to respond to events from applications in real time. External systems (the **provider**) send an HTTP request to the Listener (the **receiver**). The Listener validates and parses the request into an event, which activates one or more **plugins** to execute processes. _"**Who is this for?**_ _Builders creating always-active automations triggered by system events, such as "New GitHub issue opened," "Offer letter signed," or "Gong call ended." For the full landscape, see [System Triggers Overview.](docs/system-triggers-overview)"_ ## How it works 1. **Provider → Listener.** An external application sends a webhook to the **Webhook URL**, generated when creating a Listener. The Listener captures incoming requests. 2. **Listener → Event.** Moveworks authenticates and validates the request, optionally verifies a signature, parses the body and query parameters, and generates an **event**. 3. **Event → Plugin(s).** Matching plugins are evaluated and activated, executing configured processes (actions, approvals, etc.). ### Event Flow Diagram ```mermaid flowchart LR A[Provider sends HTTP request] --> B[Listener receives request] B --> C[Authenticate & Validate
Signature, Headers] C --> D[Parse Payload
JSON Schema, Fields] D --> E[Apply Filters
Event Type, Dedupe] E --> F[Generate Event] F --> G[Evaluate Plugins
Conditions Match] G --> H[Activate Plugins
Execute Actions] H --> I[Log Outcomes] ``` ### How events become plugin runs 1. **Raw request received** at your Listener → `listener.webhook.trigger`. 2. **Processed & published** (or rejected/debounced) → `listener.webhook.processor.update`. 3. **Plugins evaluated & triggered** → `listener.webhook.plugin.trigger`. 4. **Process executes** → `compound_action.*` and action logs. ## Key concepts * **Listener.** Moveworks' receiver for webhook requests. Create one per source or reuse across sources. * **Webhook URL.** Unique HTTP endpoint for providers to send requests, enabling event creation in Moveworks. * **Provider vs. Receiver.** The provider (e.g., GitHub, Workday, DocuSign) **sends** webhooks, while Moveworks (your Listener) **receives** them. ## Listener Capabilities **Authentication & security** * **Signature (HMAC) verification** - configure a shared secret to allow Moveworks to confirm the request originates from your provider. * **Auth header** - require bearer token or API key. * **Currently unsupported** - mTLS, asymmetric keys, JWKs, or JWTs. > Why secure? Without auth/signature, anyone who knows your URL can attempt to trigger your workflow. Unsecured listeners are heavily rate-limited (e.g., 1 req / 10s) vs. significantly higher limits for secured listeners. **Event filtering** * **Listener-Level Filters**: Drop irrelevant events at the entry point (e.g., accept only `issues.opened`, ignore `issues.edited`). * Supported at listener and plugin levels for reuse. **Deduplication & replay protection** * Prevent duplicate requests from triggering the same plugin twice; logs will show debounced/skipped events. **One-time verification challenges** * Handle challenge/CRC requests during provider registration. ## Platform rules and limitations * **One trigger paradigm per plugin.** A plugin can be triggered by _system triggers_ (one or many), **or** by _conversational triggers_ (one or many)—but not both. Duplicate the plugin if you need both paradigms. * **Multiple plugins per event.** A single event can fan-out to multiple plugins if their conditions match. ## Logs & observability Trace any event end-to-end with three new log types: * `listener.webhook.trigger`: Confirms the raw request reached your Listener, including headers, method, parsed body, and timestamps. * `listener.webhook.processor.update`: Displays the processing outcome (published, failed with reason, or debounced) and the normalized payload. * `listener.webhook.plugin.trigger`: Indicates which plugins were evaluated, activated, skipped, failed, or expired (TTL). See the **[Webhook Logs & Troubleshooting](https://help.moveworks.com/update/docs/webhook-logs-troubleshooting-guide)** guide for playbooks on diagnosing issues such as "Why didn't my plugin run?" ## Next Steps * [Create a Listener.](/docs/webhooks-listener) * [Learn to Debug](/docs/webhook-logs-troubleshooting-guide) * [Webhook Quickstart Guide](/docs/webhook-triggers-quickstart-guide) ### Appendix (glossary) * **Webhook:** Automated notification sent by a provider on an event. * **Webhook Event (Payload):** Data package in the request, typically JSON. * **Headers:** Metadata such as event type, request IDs, or signatures. * **System Trigger:** Non-conversational trigger (e.g., webhook) initiating a plugin.