*** title: Webhooks Triggers position: 1 deprecated: false hidden: false metadata: robots: index ------------- 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)"* # Quickstart Dive into example webhook configurations for [Github](/agent-studio/system-triggers/webhook-triggers/webhook-example-github) & [Zoom](/agent-studio/system-triggers/webhook-triggers/webhook-example-zoom). # 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](/agent-studio/system-triggers/webhook-logs-troubleshooting-guide#/)** guide for playbooks on diagnosing issues such as "Why didn't my plugin run?" # Next Steps * [Create a Listener.](/agent-studio/system-triggers/webhook-triggers/webhooks-listener) * [Learn to Debug](/agent-studio/system-triggers/webhook-logs-troubleshooting-guide) * [Webhook Quickstart Guide](/agent-studio/system-triggers/webhook-triggers) # Appendix * **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.