Wazuh and Shuffle SOAR integration

Connect Wazuh alert forwarding to Shuffle playbooks, with enrichment, ticketing and active response on agents, built and tested in infrastructure you control.

On this page

How a Wazuh and Shuffle SOAR integration automates alert response

The integration forwards Wazuh alerts, filtered by rule level, to a Shuffle workflow webhook, and Shuffle playbooks can trigger Wazuh active response on agents. Security teams often receive more alerts than analysts can triage by hand, so the goal is to have a workflow handle the first pass: enrich the alert, open or update a ticket, and act on the endpoint only when the rule and its context justify it. This section covers three areas: the webhook path from the Wazuh server into Shuffle, the playbook steps that run after an alert arrives, and the testing needed before any playbook can change a live system. The exact forwarding mechanism must be confirmed against the current Wazuh and Shuffle documentation for the versions you run, because both platforms change between releases.

The webhook path starts on the Wazuh server, where decoders and rules turn agent data into alerts that are stored in the Wazuh indexer. The forwarding configuration selects which rule levels leave Wazuh, and that threshold is the first design decision. A threshold set too low sends routine events into every playbook and fills the queue with noise, while one set too high hides events that analysts need. On the Shuffle side, the workflow's webhook trigger receives the payload through the Shuffle backend API, which listens on port 5001 in a standard deployment. Orborus, the runtime component, polls the backend for jobs and starts a worker for each execution. Confirm where the webhook endpoint is exposed, which network path connects the Wazuh server to it, and whether Orborus runs locally or in a hybrid setup, since each choice changes the firewall and failover plan.

The playbook steps determine what the workflow does with each alert. A typical sequence parses the alert fields, looks up the agent and its owner, queries threat intelligence or asset context through apps, and creates or updates a ticket in the case system your team already uses. Branches should follow the rule level and rule group, so that only high-confidence cases reach an action step. Active response on agents is the step that changes systems, so most teams require an approval step or a narrow allow-list of commands for it. Shuffle apps are built from OpenAPI specifications or written with the Shuffle app SDK and run as versioned containers, so each external system needs an app or a custom action that your team owns and maintains. The Wazuh API and ticketing credentials are stored in Shuffle and encrypted with the SHUFFLE_ENCRYPTION_MODIFIER secret, and losing that value breaks every saved authentication, so back it up before the first production run.

Testing comes before production, and it should cover the failure paths as well as the success path. Replay recorded alerts from a lab agent at each rule level threshold, confirm that duplicate alerts do not open duplicate tickets, and test active response only on an isolated test agent. Simulate an unreachable webhook, a stopped Shuffle worker, and a slow or failing ticketing API, then confirm that the workflow logs the failure, retries where intended, and does not take an action it cannot verify. Run staging on the same Shuffle and Wazuh versions as production. Shuffle's documentation recommends the latest Docker tag for stable releases, so pin the tag you test and deploy rather than letting it float. Record the expected outcome of every playbook so that a later upgrade can be checked against it.

When you request a quote, ask for the scope in terms that drive effort: the number of Wazuh servers and agent groups in scope, the rule levels and rule groups that forward, the number of playbooks and external systems each one touches, and whether active response is in scope and under what approval model. The build is largely one-time work, but recurring effort follows the platforms. The Wazuh 4.14 line has shipped patch releases roughly every one to two months, and each Shuffle release can change app behavior, so ask who retests the playbooks after upgrades, how regression tests are kept, and who owns the credentials and encryption secret after handover.

What you need before connecting Wazuh to Shuffle

These are the versions, accounts, network paths and owners to settle before you connect Wazuh alerts to a Shuffle workflow. Each one affects the rest, from the versions you test against to where playbooks run and who can change stored credentials. Agree them in writing with your security operations and platform teams so the build starts from a known baseline.

Wazuh 4.14 line deployment

Run a Wazuh deployment on the 4.14 line, which is the current line in the Wazuh release notes, with the Wazuh server, indexer and dashboard working together. Wazuh 4.14.9 was released on 14 October 2026, but confirm the latest 4.14 patch on the release notes page on the day you build. Patch releases arrive roughly every one to two months, so record the exact version you tested the alert fields and playbook steps against.

Shuffle v2.1.1 or later

Deploy Shuffle v2.1.1 or later, because Shuffle stopped supporting versions older than v2.1.1 after January 31, 2026. Decide the Docker tag policy before you pull images: use the latest tag for stable production and the nightly tag only for experimental changes in a non-production instance. Pin the version you tested and record it in the change record, so a later pull cannot change the running backend without review.

Network path to port 5001

Open a path from the Wazuh server to the Shuffle backend API on port 5001, or to the ingress in front of it if a load balancer or reverse proxy handles traffic. Confirm the exact address the Wazuh integration will call and that the name resolves from the Wazuh server. Test the connection from the Wazuh server host itself, since firewall rules often differ between that host and an administrator workstation. Document the return path for any response traffic your workflows need.

Admin accounts on both sides

Name administrator accounts on the Wazuh dashboard and on the Shuffle frontend, and keep them separate from day-to-day analyst logins. The Wazuh side needs rights to manage the integration settings and view alerts, while the Shuffle side needs rights to create workflows, apps and authentications. Confirm how these roles are granted through your identity provider if you use single sign-on, and how access is removed when someone changes roles or leaves.

Orborus runtime decision

Choose where playbooks execute before you build them. Orborus polls the Shuffle backend for jobs, starts a worker for each workflow execution, and the worker starts the app containers. Shuffle's hybrid option pairs Shuffle Cloud with a local Orborus that needs no inbound firewall ports, while a self-hosted deployment runs Orborus alongside your backend. If playbooks must trigger Wazuh active response on agents, confirm the Orborus host can reach the Wazuh API, and plan more than one Orborus node so workflows keep running if one fails.

Named owner for credentials

Assign one named person or team to own the ticketing and enrichment credentials that Shuffle apps use, such as the ticketing system API key and threat intelligence keys. Shuffle encrypts saved app credentials in OpenSearch with AES-256 using the SHUFFLE_ENCRYPTION_MODIFIER secret, and losing or changing that secret breaks every saved app authentication. Name who stores that secret, who rotates each service credential, and who approves a new app connection before it reaches production.

How alerts move from Wazuh into Shuffle and back to agents

The integration works as a chain of five handoffs, and each one is a place where volume, delay or failure can enter. An alert is first written to the Wazuh indexer, which stores alerts as a searchable record. Before that happens, the Wazuh server analyzes data from agents with its decoders and rules, so the server decides what an alert is and how severe it is. The forwarding integration then posts matching alerts to a Shuffle webhook. Shuffle's backend queues each incoming request as an execution, and Orborus, the runtime component, polls the backend for jobs and starts a worker for each execution. The worker launches the app containers that do the enrichment, ticketing and active response steps. Before go-live, confirm with your own configuration which component the forwarder reads from and which backend address and port the webhook uses, and confirm that the network path from the Wazuh server to that port is open.

The level filter should sit at the source, in the forwarder's configuration, so that low-severity alerts never leave Wazuh. Filtering later, inside a Shuffle workflow, still pays for the webhook call, the queue entry and the worker startup for every alert that arrives. Shuffle's pricing counts app runs, meaning actions that actually execute in a workflow, while triggers and skipped actions are not counted. Filtering at the source therefore reduces the number of executions that carry enrichment and ticketing actions, which matters for both queue depth and any licensing that depends on run volume. Set the threshold with the security team, record it in change control, and review it after the first weeks of live alerts, because a level that looks reasonable on paper can still flood a queue once a noisy rule is enabled.

The payload shape must be confirmed against a real test alert before any workflow is built. Generate a test alert from a known agent or a controlled rule, capture the full JSON that arrives at the webhook, and map each field the playbook needs, such as the rule identifier, rule level, agent name and agent identifier, into named workflow variables. Do not build branches from the field names in documentation alone, because a version change or a custom decoder can alter the structure. Keep the test alert and its captured payload as a fixture, so that a change in the Wazuh or Shuffle version can be checked against the same input. Plan for more than one Orborus node if you need workflows to keep running when a single runtime fails, since queued executions depend on a worker being started somewhere.

The return path to agents is the active response step, and it depends on two conditions. The target agent must be online when the action is sent, and the agent must be configured to accept the active response command that the playbook invokes. A playbook that does not check agent status will report success for a request that never reached the endpoint, so add a status check and define what happens when an agent is offline, such as opening a ticket for manual follow-up or retrying on a schedule you set. The credentials that the Shuffle app uses to call the Wazuh API are saved in Shuffle and encrypted in OpenSearch with the SHUFFLE_ENCRYPTION_MODIFIER secret, so record that secret in your key management process, because changing or losing it breaks every saved app authentication. Test each active response action on a non-production agent first and confirm both the result in Wazuh and the audit entry in Shuffle.

Configuration sequence for the Wazuh to Shuffle path

This sequence connects a Wazuh deployment and a Shuffle instance into one tested path, where alerts at chosen levels start a dedicated workflow and each action leaves a record. Every step closes with a check in the Shuffle execution view or the Wazuh alert log, so a fault is found at the step that caused it.

  1. Confirm both platforms are healthy

    The platform owner checks the Wazuh and Shuffle versions against the Wazuh release notes and the Shuffle configuration docs before building anything. Confirm that the Wazuh indexer, server and dashboard report healthy, and that the Shuffle frontend, backend and Orborus are running the Docker tag you intend to keep. The Shuffle docs recommend the latest tag for stable releases and the nightly tag only for experimental changes. This step closes when both version strings are recorded in the change record and a test workflow can start in Shuffle.

  2. Create a dedicated workflow with a webhook trigger

    The Shuffle administrator creates a new workflow used only for Wazuh alerts, so its execution history, credentials and permissions stay separate from other playbooks. Add a webhook trigger, start it, and copy the generated URL into the change record as the single destination for forwarding. Treat this URL as a secret, because anyone who holds it can post data to the workflow. The step closes when a manual test request from an administrator host reaches the trigger and the workflow editor shows the trigger as receiving data.

  3. Configure forwarding for the chosen rule levels

    The Wazuh administrator sets the forwarding integration to send only alerts at the rule levels the playbook handles, pointing it at the webhook URL from the previous step. Use the forwarding method and level filter syntax that the Wazuh documentation describes for your release, and confirm both there before you change the configuration. Start with a narrow level set so the workflow does not receive alerts it has no action for. The step closes when the Wazuh alert log shows matching alerts and the Shuffle execution view shows no executions for lower-level alerts.

  4. Send a test alert of a known level

    The Wazuh administrator triggers a test alert at a level already chosen for forwarding, using a controlled event on a test agent that Wazuh rules will match. Before opening Shuffle, record the alert ID and rule level from the Wazuh alert log so the two records can be compared. The step closes when a new execution appears in the Shuffle execution view, the payload fields match the alert, and the execution status matches what the workflow currently does.

  5. Add enrichment and ticketing actions

    The Shuffle administrator adds the enrichment lookups and the ticket creation action, using credentials saved in Shuffle's credential store so secrets are not typed into action fields. Before saving the first credential, confirm that the SHUFFLE_ENCRYPTION_MODIFIER value is backed up, because losing or changing it breaks every saved app authentication. Confirm in your Shuffle version which apps are available for the enrichment and ticketing systems you use. The step closes when each action shows a successful status in the execution view and the ticket appears in the ticketing system with the Wazuh alert ID in its fields.

  6. Add the Wazuh active response action

    The Shuffle administrator adds the Wazuh active response action only after the enrichment path works, and limits it to the agent group and command the playbook needs. Never set the action to all agents by default. Check the Wazuh documentation to see which active response commands are built in and which require custom scripts on the agent. Add a branch that records the intended response without running it, so the logic can be tested first. The step closes when a test execution shows the action step in the Shuffle execution view and the Wazuh alert log shows the response for the intended agent only.

  7. Confirm one execution end to end

    The team runs one complete path on a test agent in a non-production group. An alert is generated on the agent, forwarded by level, processed by the workflow, enriched, ticketed and answered by active response. Check each hop in order: the Wazuh alert log shows the alert with its ID, the Shuffle execution view shows each action with its output, the ticketing system shows the record, and the agent logs show the response command ran once. Record the execution ID, alert ID and ticket reference in the change record, and note any step that needed a retry before the path moves toward production.

Mapping Wazuh alert fields to Shuffle workflow variables

This table maps the Wazuh alert fields the playbook reads to the Shuffle workflow variables and actions that consume them. Read each row as one field, where it comes from in the alert or webhook payload, and how to check it before the playbook depends on it. Field names shown are typical examples, so confirm each one against a sample alert from your deployed Wazuh version before you build branches on it.

Wazuh alert fieldShuffle variable and consuming actionSource of the fieldValidation step
rule.levelCondition on the trigger step that routes alerts by severity to the matching workflow branchAlert JSON in the indexer; included in the webhook payload when the integration forwards the full alertCompare values from test alerts at each level threshold you configure
rule.id and rule.descriptionVariables for the rule identifier and title, used in ticket summaries and branch selectionAlert JSON, rule blockConfirm key names and nesting in a sample alert from the deployed Wazuh version
agent.id and agent.nameInputs to the action that targets the endpoint, including any Wazuh active response callAlert JSON, agent blockConfirm the agent identifier resolves to a live agent through the Wazuh API before any action runs
data.srcip and data.dstipInputs to enrichment actions such as reputation lookups, and to the IP fields of the ticketDecoded fields in alert JSON, present only when a decoder extracts themTest with logs from each decoder in scope and confirm missing fields do not stop the workflow
full_logAttached to the ticket as raw evidence, and parsed by a regex or JSON step when a specific value is neededAlert JSON; webhook payload when the integration includes itCheck the field is present and that the parser handles the log sizes your sources produce
timestamp and locationUsed for case timing and to label the source collector in the ticketTop-level alert JSON fieldsCheck the time format matches what the ticketing app expects before writing ticket dates
Ticketing app inputs (for example, title, priority, description)Each ticketing action input is mapped separately from Wazuh fields through a transform stepCalculated by the playbook from Wazuh fields and enrichment outputsDocument each input and test it against the ticketing app's own API definition
Enrichment app inputsEach enrichment action needs its own input mapping, including the indicator type and the value format it expectsCalculated by the playbook from Wazuh fields and earlier action outputsConfirm required inputs in the app's API definition and test one indicator of each type

Sizing the chain for high alert volume

The topic brief sets a throughput target above 10 alerts per second, but none of the supplied facts show how a given Shuffle and Wazuh deployment performs at that rate. Treat the figure as a planning target to test, and do not accept it as a capacity guarantee. Before choosing server counts or an edition, replay alerts that match your production mix of levels, decoders and rule groups at the target rate. Record the Wazuh indexer ingest lag, the time from alert to workflow start, the depth of pending executions and the rate of failed runs. Repeat the test with the workflow you plan to run in production, because a playbook with several enrichment lookups costs far more per alert than a single forwarding step. Keep the results with the configuration that produced them so the sizing can be reproduced after upgrades.

Shuffle's configuration docs describe the high availability pattern that the throughput test must cover. They recommend an OpenSearch cluster for the document store, optional Memcached for a shared cache, NFS for shared files when you run several backends, the backend and frontend scaled across all servers, and more than one Orborus node so workflows keep running if one fails. Each element adds components to measure. Slow NFS can become the bottleneck for shared files, and every Orborus node needs network reach to the backend it polls. Decide early whether the test environment matches this topology, since a single-node result says little about a clustered production setup. Confirm with the vendor and your platform team which pieces must be sized together, and write down the failover behavior you expect when one Orborus node is stopped during a test run.

Alert supply is the other lever, and it sits on the Wazuh side. Wazuh server clustering spreads analysis load across nodes, which changes how quickly alerts reach the forwarding step, so the cluster layout belongs in the same test plan as the Shuffle environment. Filtering by alert level before the webhook reduces the number of workflow executions. Agree the threshold with your SOC, based on which levels already trigger a human response, and leave out low-value alerts that no playbook acts on. Review this list after each Wazuh update, since rule sets change over time. Keep a record of what was filtered out so that suppressed alerts remain searchable in the Wazuh indexer when an investigation needs them. Filtering shifts the sizing question from how much the platform can handle to which alerts deserve automated action.

High volume also changes the cost model. Shuffle's pricing article says licensing is based on one metric, app runs, meaning actions that actually execute in a workflow. Triggers and skipped actions are not counted, and users, apps and workflows are unlimited. A playbook that calls an enrichment app several times per alert multiplies the metric, so the run count depends on how many app calls each alert triggers, and alert volume is only one input. Shuffle also states that all features are available in the open-source edition, while paid tiers differ in feature limits, scaling and support, and that limits between editions have been enforced since version 2.1.1. Ask for the current edition terms in writing, convert the run count from your measured test into an expected monthly figure, and use that figure in any quote for the scaled design.

Securing the integration and its credentials

The Wazuh to Shuffle path carries alert data, API credentials and the ability to run commands on endpoints, so each link needs its own control. The cards below cover the secrets, accounts, transport, response scope, network placement and playbook governance that together limit what a compromise of either platform could reach.

Protect the encryption modifier secret

Shuffle encrypts saved app credentials and API keys in OpenSearch with AES-256 using the SHUFFLE_ENCRYPTION_MODIFIER secret. Changing or losing it breaks every saved app authentication, so store it in a secrets manager with a documented backup, restrict who can read it, and record it in your change process before the first Wazuh app is authenticated.

Scope the Wazuh API account

Create a dedicated Wazuh API user for Shuffle rather than reusing an administrator account. Grant only the read and alert-access permissions the workflows use, and confirm with your Wazuh deployment which API actions are allowed for that role. Review the account when playbooks change and rotate its password on a schedule your team sets.

Restrict the Shuffle webhook

The inbound webhook that receives Wazuh alerts should accept traffic only from the Wazuh server addresses that send them. Limit which workflow each webhook can start, avoid publishing its URL beyond the integration owners, and regenerate it if it is exposed. Confirm how your Shuffle version authenticates webhook requests before relying on any shared token.

Encrypt webhook and API traffic

Use TLS on every path that carries alerts or API calls between Wazuh, Shuffle and the agents' management channel. Plan certificate issuance, renewal and trust store updates for each component, including any internal certificate authority. Verify that clients reject invalid certificates instead of skipping verification to get the integration working.

Limit active response by command and group

Playbooks that trigger Wazuh active response on agents should name the specific commands allowed and the agent groups they can reach. Require a human approval step in the workflow for containment actions that stop services, block network access or change accounts, and log each approval. Test each action against a non-production group before enabling it on production endpoints.

Keep Orborus hybrid placement in view

In the hybrid architecture, a local Orborus runtime polls Shuffle Cloud for jobs and needs no inbound firewall ports, which reduces exposure of your network. Confirm that the data your playbooks send to the cloud control plane is acceptable under your data handling rules, and compare this with a fully self-hosted deployment before choosing.

Separate operator login from data paths

Shuffle SSO using OpenID Connect or SAML governs how operators sign in to Shuffle. It does not secure the Wazuh-to-Shuffle data path, which depends on the webhook, API account and TLS controls. Enforce SSO for operators, and review the webhook and API settings separately so that a login policy is not mistaken for data path protection.

Document who edits trigger playbooks

Any playbook that a Wazuh rule or alert level can start may run containment actions on endpoints, so its edit rights carry real operational risk. Record who can create, edit and publish these workflows, require peer review for changes that alter triggers or actions, and keep an export of each approved version. Review the list whenever staff roles change.

How to test the chain before alerts go live

Test the Wazuh to Shuffle chain in five separate checks, and agree the plan with the people who will sign off the playbooks before any playbook is approved. Each check isolates one link in the chain, so a failure points to a specific component. Testing only the final playbook end to end makes it hard to tell whether a missing ticket came from forwarding, branching, the enrichment call or the ticketing API. Write the expected result for every check before the test runs, and record who approved those expectations.

Start with the forwarding test. Send a known sample alert at each rule level you have configured for the webhook, and confirm that only the levels you intended start an execution in Shuffle. Include one alert just below each threshold, because off-by-one filter errors are common. Then test the playbook with the enrichment and ticketing endpoints replaced by mocks that log every request and return fixed success, timeout and error responses. This shows whether branches for failed enrichment and failed ticket creation behave as designed, without touching live systems or credentials.

The active response test runs on a non-production Wazuh agent. Use a harmless command, such as one that writes a marker file with a timestamp, and confirm that the agent receives it, runs it and reports the result back to the Wazuh server. Then run the rollback step and confirm it restores the agent to its prior state. Do not run this test against production endpoints. The failure test stops one Orborus node during active executions and confirms that in-flight and queued workflows finish on the remaining node or are retried according to your design. The load test runs at the target alert rate against an OpenSearch layout that matches production in node count, shard and replica settings, and storage. Ask your team to confirm which Shuffle release tag each environment uses, because the test results only apply to the version that was tested.

Keep three kinds of evidence. Export Shuffle execution logs for every test run, including skipped and failed executions. Keep sample alerts from the Wazuh indexer with their document IDs, so each execution can be traced to its source. Keep test records that state the date, the Shuffle and Wazuh 4.14 patch versions, the configuration used, the operator, the expected result, the actual result and any deviation. Store these in the same system as your change records, and set retention to match your audit and incident response requirements. Make passing these records a condition for playbook sign-off, and do not treat a clean demonstration as a substitute.

Common failures in the Wazuh to Shuffle integration

This table lists six symptoms seen when Wazuh alerts feed Shuffle workflows, with the likely cause, the check to run, the fix and when to confirm behavior with vendor documentation or support. Start with the webhook path if no executions appear at all. Most failures trace to configuration drift, a changed encryption modifier or mismatched versions, so record component versions and secret settings before you change anything.

SymptomLikely causeCheck and fixConfirm with vendor docs when
Alerts not reaching the webhookWrong webhook URL, alert level filter set too high, or TLS trust or proxy altering the requestCompare the forwarder target with the workflow webhook URL and send a test alert. Correct the URL, lower the level for testing, and trust the issuing CA or bypass the proxy for that host.Before changing forwarder or webhook configuration keys in production
Executions queued but not runningOrborus not polling the backend, unhealthy backend or OpenSearch, or no free runtime capacityCheck Orborus logs and status, backend health on port 5001, and whether the queue keeps growing. Restore health, fix the backend address, or add an Orborus node.When confirming polling behavior and capacity limits for your Shuffle version
Enrichment or ticketing fails after a secret changeSHUFFLE_ENCRYPTION_MODIFIER changed or lost, or a third-party key was rotated without updating the appTest a saved app authentication and compare the modifier with the value the stack was first deployed with. Restore the original value, or re-enter saved authentications and rotated keys.Before editing the modifier, since the docs warn that changing it breaks saved authentications
Active response not firingAgent offline, command not permitted in active response configuration, or scope targeting the wrong agents or groupsCheck agent status in Wazuh and the agent active response log. Reconnect the agent, allow the approved command, and correct the agent or group selector before rerunning.When confirming active response syntax and command allow-lists for your Wazuh 4.14 build
Duplicate executionsTwo forwarders sending the same alerts, or retries re-posting events without an idempotency keySearch executions for repeated alert IDs and list every component forwarding to the webhook. Keep one forwarder per source, deduplicate on alert ID, and check for an existing case before creating a ticket.When confirming retry and timeout behavior of each forwarder and the webhook
Version mismatch after an upgradeWazuh server, Shuffle backend, Orborus or app images on different versions, or Shuffle older than v2.1.1Record versions of each component and app image and compare them with the release notes. Upgrade Shuffle components together to a supported release, then pin app image versions after testing.Before upgrading, to confirm compatibility between your Wazuh 4.14 release and your Shuffle release

Questions buyers ask before connecting Wazuh to Shuffle

How much effort does a Wazuh to Shuffle integration take?

Effort depends mostly on how many playbooks you need, how many ticketing and enrichment systems each playbook calls, and how far active response reaches into your fleet. A single forwarding path from Wazuh alerts, filtered by level, to one Shuffle workflow is the smallest case. Each added playbook adds mapping, error handling and tests. Each ticketing or enrichment system adds an app, credentials and a test account. Active response usually adds the most risk, because a playbook that restarts a service or blocks an address on an endpoint needs approval logic and a rollback path. A high availability layout with several Orborus nodes and an OpenSearch cluster adds infrastructure work. Testing depth, from replaying sample alerts to load testing against the throughput target in your scope, is the last driver. Your written scope should list each factor so the estimate can be checked line by line.

Which parts of the integration are one-time work and which recur?

Build work is one-time: forwarding configuration, playbook design, app setup, testing and the runbook. Recurring work follows the platforms. Wazuh has shipped 4.14 patch releases roughly every one to two months, and each release needs a check of the forwarding path. Shuffle releases, such as v2.3.0, need the same check against your apps and workflows. Credentials for ticketing and enrichment systems rotate on your schedule, and each rotation means updating the Shuffle app configuration. Someone also has to maintain playbooks as ticket fields or detection rules change. If you choose a retainer, it covers upgrades, credential rotation and playbook changes on terms you should confirm in writing. Ask for each recurring task to be listed as its own line so you can see what you pay for after go-live.

Can our in-house team connect Wazuh to Shuffle on its own?

Yes, if the team already has the skills to run both platforms. For Wazuh, someone must manage the indexer, server, dashboard and agent configuration, and understand decoders, rules and how alerts are stored. For Shuffle, someone must design workflows, build or configure apps, manage secrets and operate the Orborus runtime and the OpenSearch backend. The build also needs API and webhook troubleshooting skills and working knowledge of each ticketing and enrichment system being called. Analysts who approve active response need a clear decision process inside the playbook flow. A team missing one of these areas should train first or bring in outside help for the build, then take over with a runbook. Before deciding, ask whether your team can run a test window and replay sample alerts without outside help.

What does the integration need from our environment and staff?

The build needs access, representative alert samples and named owners. Provide read access to the Wazuh indexer or dashboard so sample alerts can be exported, plus the account and API access the forwarding path requires. Provide access to the environment where Shuffle runs, including its backend and Orborus nodes. Supply sample alerts for each rule group you want to route, including noisy and high-severity cases. Supply test accounts or sandbox instances for every ticketing and enrichment system, with API credentials scoped to the actions the playbooks need. Name an approval owner for each active response action who can approve or stop it during the workflow. Agree a test window for agents and the production path, because active response changes endpoint state. Finally, name a technical contact who can explain your alert taxonomy during the build.

How is the alert throughput target checked before go-live?

The throughput target in your written scope is checked with a load test that replays alerts through the full path: Wazuh forwarding, Shuffle workflow execution and each downstream system. The test records whether alerts are processed without queue buildup or lost events. Use alert volumes and shapes taken from your environment, including bursts, so the result reflects your traffic. Include failure cases such as a ticketing system timing out, because slow downstream calls change throughput. Watch Shuffle's execution history and runtime health during each run, and confirm any rate limits imposed by enrichment vendors. For a high availability layout, repeat the test after stopping one Orborus node to confirm workflows keep running. Record results against the agreed target so acceptance is decided on evidence.

What should a fixed-scope quote for this integration include?

A fixed-scope quote should tie each cost line to a written deliverable. Ask for the list of playbooks, the trigger for each one and the alert levels or rule groups it covers. Ask which ticketing and enrichment systems are in scope and which accounts you must provide. Ask whether active response actions are included, and which agents and actions they cover. Ask what test cycles and throughput verification are included, and what acceptance means in writing. Ask how the high availability layout is priced, whether it is a separate line, and what is excluded, such as systems added later. Request one-time build work and recurring support as separate items, with retainer terms stated. DeployOpen agrees scope, deliverables and timelines in writing before work starts, so the quote should follow from that document.

Does Shuffle licensing cost change with the number of playbook runs?

Yes, the paid licensing metric is app runs, meaning actions that actually execute in a workflow. According to Shuffle's pricing article, triggers and skipped actions are not counted, and users, apps and workflows are unlimited. Volume of executed actions therefore drives licensing, so a playbook that calls enrichment on every alert runs more actions than one triggered only by high-severity alerts. Filtering alerts by level or rule group on the Wazuh side can reduce how many workflows start at all. Confirm with Shuffle which edition fits your needs, because the open-source edition and paid tiers differ in limits and scaling, and since v2.1.1 those limits are actively enforced. Before deciding, model expected daily alert volume against the playbook design.

What breaks when Wazuh or Shuffle is upgraded?

The usual breakage points are the seams between the two platforms. A Wazuh upgrade can change alert fields, decoder output or the API endpoints the forwarding path uses, which can quietly stop a playbook from matching. A Shuffle upgrade can change app behavior, workflow execution or credential handling. Shuffle encrypts saved app credentials with the SHUFFLE_ENCRYPTION_MODIFIER secret, and losing or changing that secret breaks every saved app authentication, so confirm it is backed up before any upgrade. Shuffle also stopped supporting versions older than v2.1.1 after January 31, 2026, so older deployments need a planned path. Before upgrading either platform, run your sample alert set through a staging copy and confirm each playbook reaches its expected end state. Keep the runbook and test set in version control so every upgrade check can be repeated.

How DeployOpen works on this

DeployOpen plans, implements, tests, documents and supports Wazuh and Shuffle SOAR integrations inside infrastructure you control, including your cloud accounts, data centers or air-gapped networks. Engagements are fixed-scope, with scope, deliverables and timelines agreed in writing before work starts.

How we scope

  • The written scope names which Wazuh alert levels, rule groups and agents feed each Shuffle workflow.
  • It records the Shuffle deployment architecture and the Wazuh server and indexer topology the integration will run against.
  • It lists the ticketing, enrichment and active response actions, with the approval points each one needs.

How we build

  • Workflows are built and tested against sample Wazuh alerts before any production webhook is connected.
  • Load testing checks the alert forwarding path at the event rate your Wazuh environment is expected to produce.
  • Credentials for Wazuh API access and third-party apps are stored and referenced according to your agreed secrets approach.

How we hand over

  • You receive the workflow exports, app configuration and a record of each Wazuh and Shuffle setting that was changed.
  • Runbooks describe how to test a workflow, rotate credentials, and disable active response during an incident.
  • A knowledge transfer session walks your operators through the alert path, failure handling and how to add a new workflow.

How we support

  • Ongoing support, Wazuh and Shuffle upgrades, and continuous testing are available as retainers.
  • Upgrade planning checks Wazuh 4.14 patch releases and Shuffle release tags against your workflows before you apply them.
  • Support scope, response expectations and any SLA are defined in the retainer agreement, which you should review before signing.

Sources and further reading

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.