Ops · n8n

Automatically Hold High-Risk Shopify Orders in Zendrop and Alert Your Team on Slack

When Shopify flags an order as high risk, this workflow instantly cancels or pauses fulfillment in Zendrop and sends a Slack alert so your team can review before shipping. Stop fraudulent orders from ever leaving your warehouse.

difficulty Intermediatesetup 45 minresult Every high-risk Shopify order is automatically held in Zendrop and your operations team receives an immediate Slack notification with order details for manual review.
  1. 1

    Step 1 — Trigger on New Shopify Order

    Add a Shopify Trigger node and set the Topic field to orders/create. Connect your Shopify credentials (API key and password for your store). Every new order will fire this trigger and pass the full order payload downstream, including the risk_level field.

  2. 2

    Step 2 — Check if Order Risk Level is High

    Add an IF node connected to the Shopify Trigger. In the condition, set Value 1 to the expression {{$json["risk_level"]}} and Value 2 to the string high. Use Equal as the operator. Orders flagged as high risk proceed to the TRUE branch; all others are ignored.

  3. 3

    Step 3 — Cancel or Hold the Order in Zendrop via HTTP Request

    Add an HTTP Request node on the TRUE branch. Set Method to POST and URL to https://app.zendrop.com/api/v1/orders/cancel (or the hold endpoint from your Zendrop API docs). In the Body section use JSON mode and pass {"order_id": "{{$json.id}}", "reason": "High risk order flagged by Shopify"}. Add your Zendrop API key in the Headers as Authorization: Bearer YOUR_ZENDROP_API_KEY. Store the API key in n8n credentials and reference it via the node's notes field.

  4. 4

    Step 4 — Notify Your Team on Slack

    Add a Slack node after the HTTP Request node. Set Resource to Message and Operation to Post. Set Channel to your fraud or ops channel name (e.g. #fraud-review). In the Text field enter a message like: 🚨 High-Risk Order Held: Order #{{$node["Shopify Trigger"].json["order_number"]}} from {{$node["Shopify Trigger"].json["email"]}} — Total: ${{$node["Shopify Trigger"].json["total_price"]}}. Please review in Shopify and Zendrop before releasing. Connect your Slack OAuth2 credentials.

Frequently asked questions

What exactly does Shopify mean by 'high risk' and where does that field come from?

Shopify runs its own fraud analysis on every order and assigns a risk level of low, medium, or high based on signals like mismatched billing/shipping addresses, VPN use, and chargeback history. The `risk_level` field is included in the order payload when you use the orders/create webhook topic in n8n.

What if Zendrop's API endpoint or authentication method is different for my plan?

Log in to your Zendrop account, navigate to Settings > API, and copy your personal API key and the exact endpoint for canceling or holding orders. Update the `URL` and `Authorization` header in the HTTP Request node accordingly. If Zendrop uses a different auth method (e.g. a query parameter), adjust the node's `Query Parameters` section instead of Headers.

Can I release the hold automatically after a manual review approval?

Yes — you can extend this workflow by adding a second workflow triggered by a Slack slash command or a Google Sheets row update. When a reviewer marks an order as approved, that second workflow calls the Zendrop API to release the hold and optionally tags the Shopify order. This is an Intermediate-level addition and can be built as a separate n8n workflow.

About this recipe. Recipes on FlowRecipesHub are written for business owners, not developers, and are tested before publishing — how recipes get made. Some ingredient links are affiliate links that cost you nothing — full disclosure.