# Automate warehouse work in WMS
URL: https://support.starshipit.com/articles/14700000000039-automate-warehouse-work-in-wms
Canonical: https://support.starshipit.com/articles/14700000000039-automate-warehouse-work-in-wms
Markdown: https://support.starshipit.com/articles/14700000000039-automate-warehouse-work-in-wms.md
Updated: 2026-09-17

> For the complete documentation index, see [llms.txt](https://support.starshipit.com/llms.txt).

> Create WMS automations to manage order holds, release new orders, assign jobs, and build scheduled pick batches with safe filters, timing, and monitoring.

Use Starshipit WMS automations to apply order holds, release eligible orders, assign ready jobs, or create pick batches without repeating the same warehouse task manually.

:::important
WMS automations are warehouse workflows inside Starshipit WMS. They are separate from shipping automations configured in Starshipit.
:::

## Before you begin

- Make sure orders are importing from Starshipit into WMS.
- Open **System > Roles & Permissions** to confirm your access.
- For order holds, add or activate a hold reason under **System > Settings > Orders > Order Hold Reasons** before creating the automation.
- For automatic batches, make sure your Starshipit account has a recognised timezone. WMS uses this timezone for the operating window.

| Task | Required WMS permissions |
|---|---|
| View **System > Automations** | **Settings view** |
| Create, edit, enable, or pause an order hold | **Settings management** |
| Create, edit, or enable automatic release or hold release | **Settings management** and **Fulfillment management** |
| Pause automatic release or hold release | **Settings management** |
| Create, edit, enable, or pause automatic batches | **Settings view** and **Fulfillment management** |
| Create, edit, enable, or pause automatic job assignment | **Settings management** and permission to assign jobs |

## Understand when automations run

WMS supports six automation recipes. Only active recipes can start new runs.

| Recipe | When WMS evaluates it | Result |
|---|---|---|
| **Hold orders by tag or SKU** | At import and on early order updates received within five minutes of import | Places a matching pending order on hold once per recipe |
| **Release hold when tag is removed** | When an upstream order update confirms the configured tag is absent | Removes a hold placed by the matching tag automation; the order stays pending |
| **Release stocked order holds** | When the scheduled automation checks stock availability | Removes an eligible system-created hold when the full order is allocatable; the order stays pending |
| **Auto-release new orders** | Once, after a new order notification imports the order into WMS | Fully allocates and releases an eligible pending order to picking |
| **Create automatic batches** | Repeatedly during the daily operating window | Groups eligible pending orders into pick batches |
| **Assign ready jobs** | When the scheduled automation checks for eligible work | Assigns an eligible ready, unassigned job to the least-loaded selected person |

Order hold recipes run first. If a hold recipe matches, it takes precedence over automatic order routing and automatic release. If no hold recipe matches, automatic order routing takes precedence over automatic release.

Enabling a hold recipe does not scan existing orders. It can match a pending order on an early update received within five minutes of its WMS import, including a tag that arrives after import. Later updates do not start a new hold run. Automatic release remains a one-shot new-order recipe. Automatic batches and stock-based hold release can consider existing eligible pending orders during their scheduled checks.

## Create an automation

1. Go to **System > Automations**.
2. Select **New automation**.
3. Select a **Recipe**.
4. Enter a clear **Name** that identifies the workflow.
5. Configure the recipe settings.
6. Leave **Enable after saving** off if you want to review or test the configuration first.
7. Select **Save automation**.

The automation appears as **Active** or **Paused** on the Automations dashboard.

![The WMS Automations dashboard showing active and paused warehouse recipes with latest-run status](/uploads/articles/starshipit-wms/web/outbound-fulfilment/automations.png)

## Configure each recipe

### Hold orders by tag or SKU

Use this recipe for orders that should not enter fulfilment immediately, such as pre-orders or orders that require review.

1. Select **Tag** or **SKU** under **Condition**.
2. Enter the exact **Order tag** or **Order SKU** to match. A SKU condition holds the whole order when any line item has that SKU.
3. Select an active **Hold reason**.
4. Choose whether to enable the automation after saving.

Tag and SKU matching is exact and case-insensitive. Choose one condition per recipe. For example, `Pre-Order` matches `pre-order`, but it does not match `pre-order-july`.

WMS can apply the hold at import or on an early order update received within five minutes of import, while the order is still pending. The window uses the time WMS received the update, so queue delays do not extend it. Releasing a hold later does not cause the same recipe to apply it again. If the configured hold reason becomes inactive, the automation needs attention and cannot be enabled again until you select an active reason.

### Release hold when tag is removed

Use this recipe when removing an upstream order tag should clear the hold that the matching tag automation placed.

1. Select **Release hold when tag is removed** as the recipe.
2. Enter the exact **Order tag** used by the hold automation.
3. Choose whether to enable the automation after saving.

When WMS receives an upstream order update confirming that the tag is absent, it removes the matching automation-created hold from the pending order. Matching is exact and case-insensitive. Manual holds, SKU-based holds, and holds from another tag are not released by this recipe.

The order stays **Pending**. Removing the hold does not allocate stock or send the order to picking. To verify the recipe, remove the tag from a test order held by the matching automation, wait for the update to reach WMS, then check the hold and **Latest run**.

### Release stocked order holds

Use this recipe to remove a stock-related hold when the full order can be fulfilled from allocatable pick-face stock.

1. Select **Release stocked order holds** as the recipe.
2. Select the active **Hold reason** used for the system-created holds you want to release.
3. Choose whether to enable the automation after saving.

WMS checks pending orders with system-created holds using that reason. Manual holds are not eligible. The full order must be allocatable; insufficient stock or required kitting keeps the hold in place.

After the hold is removed, the order stays **Pending**. This check does not reserve stock or release the order to picking. Verify the recipe with a test order by making enough pick-face stock available, then check the hold and **Latest run** after the scheduled check.

### Auto-release new orders

Use this recipe when eligible new orders should move directly from **Pending** to picking.

1. Enter an **Order tag** to limit the recipe, or leave it blank to match every new order notification.
2. Choose whether to enable the automation after saving.

An order is released only when WMS can allocate the full order. The order stays **Pending** when it:

- Has an active hold.
- Does not have enough pick-face inventory.
- Can only be partially allocated.
- Requires kitting.
- Is no longer pending when the automation runs.

Automatic release is a one-shot recipe. WMS does not check the order again after stock or order conditions change. Resolve the issue, then release the order manually if it is ready.

:::important
You cannot enable automatic release while automatic order routing is enabled for the account. If routing is enabled after an automatic-release recipe is active, the recipe shows **Waiting for routing** and does not run.
:::

### Assign ready jobs

Use this recipe to distribute ready, unassigned work across a selected group without assigning each job manually.

1. Select the **Job types** that the automation can assign.
2. Select the eligible **Roles**.
3. Under **Available for assignment**, select the active users who can receive work.
4. Optionally set **Maximum unfinished jobs per user** to stop the automation assigning more work to someone who has reached their capacity.
5. Choose whether to enable the automation after saving.

When the automation runs, WMS checks the selected user's client access and job permissions, then assigns work to the least-loaded eligible person. If no selected person is available, or everyone has reached the maximum unfinished-job limit, the job stays unassigned.

### Create automatic batches

Use this recipe to build pick batches from fully allocatable pending orders during a defined daily window.

| Setting | How it works |
|---|---|
| **Batch name prefix** | Optional text added to generated batch names so teams can recognise the workflow that created them |
| **Carrier** | Optional exact match against the carrier code or display name |
| **Service code** | Optional exact match against the carrier service code |
| **Order tag** | Optional exact tag match |
| **Order number condition** and **Order number prefix** | Choose **Starts with** or **Does not start with** to filter by the entered prefix. Matching ignores letter case and treats the prefix as literal text; orders without an order number are excluded when this filter is set |
| **Minimum total quantity (optional)** and **Maximum total quantity (optional)** | Inclusive limits on the sum of item quantities per order; enter whole numbers from 1 to 1,000,000, or leave either limit blank |
| **Target batch size** | Creates full batches when this many eligible orders are ready; enter 2 to 100 |
| **Maximum wait (minutes)** | Creates a smaller batch after the collection window has run for this long; enter 1 to 1,440 |
| **Window starts** and **Window ends** | Defines the daily period when WMS can create batches; both times must be on the same day |
| **Timezone** | Uses the timezone from your Starshipit account when you create the recipe |

Filled filters are combined, so an order must match every filter you enter. Carrier, service code and order tag filters use exact, case-insensitive matching. Quantity limits apply to each order, not to the total batch. For example, set both limits to `1` to batch single-unit orders.

During the operating window, WMS checks the recipe about once a minute. It creates full batches as soon as the target size is available. If fewer orders are ready, the collection window starts when the automation first finds eligible orders. It creates a smaller batch when that window reaches the maximum wait. An older order does not skip the collection window simply because it was imported earlier.

Only pending orders without an active hold are considered. Each order must have enough stock for full allocation. Held, unallocatable, and non-matching orders remain pending for a later check.

## Review run history and outcomes

The **Latest run** column shows the most recent recorded run for each automation. Select the linked order, batch, or job to investigate the outcome. You need fulfilment view access to see these links.

| Latest run | What it means |
|---|---|
| **Never run** | No matching new-order recipe has acted yet, an automatic batch has not had a group ready to create, or no ready job has been assigned |
| **Run queued** | WMS has queued the run, including a retry when a temporary error occurred |
| **Running** | The action is in progress |
| **Last run succeeded** | WMS placed the hold, released the order, created the batch, or assigned the job |
| **Last run skipped** | The recipe matched, but the order or job could not be acted on, such as when it was already held, lacked stock, was no longer pending, or no eligible person was available |
| **Last run failed** | WMS could not complete the action |

The outcome below the status explains common results, such as insufficient pick-face stock, partial allocation, an existing hold, or a created batch. A scheduled batch check that is still waiting for enough eligible orders does not create a run, so **Latest run** may remain unchanged.

Use the **Needs attention** filter to find automations with a skipped or failed latest run, an inactive hold reason, or an automatic-release conflict with routing.

## Test and roll out safely

1. Save the automation with **Enable after saving** off.
2. Review the recipe name, filters, permissions, hold reason, and timing.
3. For automatic release or automatic batches, add a unique test tag so the first run affects only test orders. For automatic job assignment, select a small test group and one job type.
4. Create a test order that will not be shipped to a customer. Make sure it has the expected tag or SKU for the hold condition, or the tag and pick-face stock needed for automatic release or batching.
5. Enable the automation, then import the test order. For an automatic batch, run the test during its operating window and use a small target size. For automatic job assignment, create or release a test job and confirm it is assigned to the expected person.
6. Check **Latest run**, its outcome, and the linked order or batch.
7. Pause the automation before widening its filters or removing the test tag.
8. Re-enable it when the production configuration has been reviewed.

Avoid overlapping recipes that can match the same order. If multiple hold recipes match, the first can place the hold while later recipes are skipped. If multiple automatic-release recipes match, one can release the order while later recipes find that it is no longer pending.

## Pause or change an automation

Use the switch in the **Actions** column to move an automation between **Active** and **Paused**. Select **Edit** to change its name or configuration.

Pausing prevents new matches or scheduled checks from starting. It does not undo holds, releases, allocations, or batches already created. A run that is already queued or in progress may still finish.

When you re-enable an order hold recipe, it can match later imports or eligible early updates. Re-enabling automatic release applies only to later new-order notifications. Tag-based hold release waits for an upstream order update, while stock-based hold release checks eligible existing holds on its next scheduled run. When you re-enable an automatic batch, WMS can consider existing eligible pending orders during the next operating-window check. When you re-enable automatic job assignment, WMS can consider eligible ready, unassigned jobs during its next scheduled check.

## Troubleshooting

| Problem | What to check |
|---|---|
| You cannot open **Automations** | Confirm your role has settings view access. |
| **New automation** or a recipe is unavailable | Check the required permissions. For holds, add an active hold reason. For batches, confirm the Starshipit account timezone is available. |
| A hold was not applied | Confirm the recipe was active, the order was pending, and the tag or SKU matched at import or on an update received within five minutes of import. Matching is exact and case-insensitive. |
| A tag-based hold was not released | Confirm an upstream update reached WMS without the configured tag, the order is pending, and the active hold came from the matching tag automation. Manual and SKU-based holds are excluded. |
| A stock-based hold was not released | Confirm the hold is system-created with the selected active reason, and the full pending order has enough allocatable pick-face stock without requiring kitting. |
| Automatic release did not run | Check for a matching hold recipe, automatic order routing, the optional tag filter, and whether the order came from a new-order notification. |
| Automatic release was skipped | Review the outcome for a hold, insufficient pick-face stock, partial allocation, kitting, or a changed order status. Fix the condition and release the order manually. |
| An automatic batch was not created | Confirm the current time is inside the operating window. Check that enough pending orders match every filter, have no hold, and can be fully allocated. If the target size is not ready, WMS waits for the maximum wait. |
| An automation shows **Needs attention** | Review **Latest run** and its outcome. Also check for an inactive hold reason or an automatic-release conflict with routing. |
| A tag or carrier filter matched no orders | Remove extra spaces and compare the complete value. Matching ignores case but does not match partial text. |
| A ready job was not assigned | Confirm the recipe is active, the job type is selected, the job is unassigned and ready, and at least one selected user has the required role, permissions, client access, and remaining capacity. |

## Related articles

- [Starshipit WMS orders and allocation](/articles/14700000000010-starshipit-wms-orders-and-allocation)
- [Picking orders](/articles/14700000000011-picking-orders)
- [WMS settings reference](/articles/14700000000031-wms-settings-reference)
