Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
40rty-ai avatar

Shopify Admin Cancel And Restock

  • 7 installs
  • 173 repo stars
  • Updated June 26, 2026
  • 40rty-ai/shopify-admin-skills

shopify-admin-cancel-and-restock is a Claude Code skill that cancels an unfulfilled Shopify order with optional inventory restock, refund, and customer notification in one validated workflow.

About

shopify-admin-cancel-and-restock cancels an unfulfilled or partially-unfulfilled Shopify order with configurable restock, refund, and customer-notification options in one validated workflow. A support or ops agent runs it for fraud handling, out-of-stock cancellations, or customer-requested cancellations before dispatch. It checks the order is cancellable, then executes an irreversible orderCancel mutation.

  • Cancels an unfulfilled Shopify order with restock, refund, and notification options
  • Validates order state and aborts if not cancellable
  • Executes an irreversible orderCancel mutation; supports dry-run

Shopify Admin Cancel And Restock by the numbers

  • 7 all-time installs (skills.sh)
  • Ranked #1,587 of 2,715 Automation & Workflows skills by installs in the Skillselion catalog
  • Data as of Aug 1, 2026 (Skillselion catalog sync)
At a glance

shopify-admin-cancel-and-restock capabilities & compatibility

Free; requires an authenticated Shopify session with read_orders and write_orders scopes.

Capabilities
cancel and restock · address correction · bulk fulfillment creation
Pricing
Free
From the docs

What shopify-admin-cancel-and-restock says it does

Cancel an unfulfilled order, optionally restock inventory, and optionally notify the customer — all in a single validated workflow.
SKILL.md
npx skills add https://github.com/40rty-ai/shopify-admin-skills --skill shopify-admin-cancel-and-restock

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs7
repo stars173
Last updatedJune 26, 2026
Repository40rty-ai/shopify-admin-skills

What it does

Cancel an unfulfilled Shopify order with optional restock, refund, and customer notification.

Who is it for?

Support and ops handling fraud, out-of-stock, or customer-requested cancellations before dispatch.

Skip if: Cancelling orders that are already fully fulfilled, which it cannot do.

When should I use this skill?

You need to cancel an order and optionally restock and refund it before it ships.

What you get

The order is cancelled with a timestamp, and inventory and payment are optionally restored and refunded.

  • Cancelled order with optional restock and refund

By the numbers

  • Cancel reasons: CUSTOMER, DECLINED, FRAUD, INVENTORY, STAFF, OTHER
  • Two-step workflow: order query then orderCancel mutation

Files

SKILL.mdMarkdownGitHub ↗

Purpose

Cancels an unfulfilled or partially-unfulfilled order with configurable restock, refund, and customer notification options — without navigating the Shopify admin. Useful for fraud exception handling, out-of-stock cancellations, or customer-requested cancellations before dispatch. Cannot cancel orders that are already fully fulfilled.

Prerequisites

  • Authenticated Shopify CLI session: shopify auth login --store <domain>
  • API scopes: read_orders, write_orders

Parameters

ParameterTypeRequiredDefaultDescription
storestringyesStore domain (e.g., mystore.myshopify.com)
formatstringnohumanOutput format: human or json
dry_runboolnofalsePreview operations without executing mutations
order_idstringyesGID of the order (e.g., gid://shopify/Order/12345)
reasonstringnoOTHERCancel reason: CUSTOMER, DECLINED, FRAUD, INVENTORY, STAFF, OTHER
restockboolnotrueRestock inventory for cancelled line items
refundboolnotrueIssue refund for any captured payments
notify_customerboolnotrueSend cancellation email to customer
staff_notestringnoInternal note recorded on the cancellation

Safety

⚠️ Steps 2 executes orderCancel which is irreversible. A cancelled order cannot be reopened. If refund: true, any captured payment is automatically refunded. If restock: true, inventory quantities are immediately restored. Run with dry_run: true to verify the order state and confirm it is cancellable before committing.

Workflow Steps

1. OPERATION: order — query Inputs: id: <order_id> Expected output: Order name, displayFulfillmentStatus, displayFinancialStatus, cancelledAt (must be null), fulfillmentOrders.status (must be OPEN or ON_HOLD — abort if any fulfillment order is IN_PROGRESS or CLOSED)

2. OPERATION: orderCancel — mutation Inputs: orderId, reason, restock, refund, notifyCustomer, staffNote Expected output: orderCancelUserErrors — empty on success; order is now cancelled with cancelledAt timestamp

GraphQL Operations

# order:query — validated against api_version 2025-01
query OrderForCancel($id: ID!) {
  order(id: $id) {
    id
    name
    displayFulfillmentStatus
    displayFinancialStatus
    cancelledAt
    totalPriceSet {
      shopMoney { amount currencyCode }
    }
    lineItems(first: 50) {
      edges {
        node {
          id
          title
          quantity
          variant {
            id
            sku
            inventoryQuantity
          }
        }
      }
    }
    fulfillmentOrders(first: 5) {
      edges {
        node {
          id
          status
        }
      }
    }
    customer {
      id
      defaultEmailAddress {
        emailAddress
      }
      firstName
      lastName
    }
  }
}
# orderCancel:mutation — validated against api_version 2025-01
mutation OrderCancel(
  $orderId: ID!
  $reason: OrderCancelReason!
  $restock: Boolean!
  $refund: Boolean!
  $notifyCustomer: Boolean!
  $staffNote: String
) {
  orderCancel(
    orderId: $orderId
    reason: $reason
    restock: $restock
    refund: $refund
    notifyCustomer: $notifyCustomer
    staffNote: $staffNote
  ) {
    orderCancelUserErrors {
      field
      message
    }
    userErrors {
      field
      message
    }
  }
}

Session Tracking

Claude MUST emit the following output at each stage. This is mandatory.

On start, emit:

╔══════════════════════════════════════════════╗
║  SKILL: cancel-and-restock                   ║
║  Store: <store domain>                       ║
║  Started: <YYYY-MM-DD HH:MM UTC>             ║
╚══════════════════════════════════════════════╝

After each step, emit:

[N/TOTAL] <QUERY|MUTATION>  <OperationName>
          → Params: <brief summary of key inputs>
          → Result: <count or outcome>

If dry_run: true, prefix every mutation step with [DRY RUN] and do not execute it.

On completion, emit:

For format: human (default):

══════════════════════════════════════════════
OUTCOME SUMMARY
  Order:               <name>
  Cancellation reason: <reason>
  Restocked:           <true|false>
  Refund issued:       <true|false>
  Customer notified:   <true|false>
  Errors:              0
  Output:              none
══════════════════════════════════════════════

For format: json, emit:

{
  "skill": "cancel-and-restock",
  "store": "<domain>",
  "started_at": "<ISO8601>",
  "completed_at": "<ISO8601>",
  "dry_run": false,
  "steps": [
    { "step": 1, "operation": "OrderForCancel", "type": "query", "params_summary": "order <id>", "result_summary": "<status>", "skipped": false },
    { "step": 2, "operation": "OrderCancel", "type": "mutation", "params_summary": "reason: <reason>, restock: <bool>, refund: <bool>, notifyCustomer: <bool>", "result_summary": "cancelled at <timestamp>", "skipped": false }
  ],
  "outcome": {
    "order_name": "<name>",
    "reason": "<reason>",
    "restocked": true,
    "refund_issued": true,
    "customer_notified": true,
    "errors": 0,
    "output_file": null
  }
}

Output Format

No CSV output. The session summary reports the cancellation result inline. If restock: true, list the variant SKUs and quantities restored.

Error Handling

ErrorCauseRecovery
cancelledAt is not nullOrder is already cancelledNo action needed
Fulfillment order status: IN_PROGRESSOrder is being picked/packedContact warehouse to stop — cannot cancel programmatically once IN_PROGRESS
orderCancelUserErrorsOrder has already been fully fulfilledUse refund-and-reorder skill instead
Order not foundInvalid order GIDUse order-lookup-and-summary skill to find the correct ID

Best Practices

1. Always run dry_run: true first — check displayFulfillmentStatus and fulfillment order statuses before committing to a cancel. 2. Set reason: FRAUD for high-risk orders — this reason is logged in Shopify's fraud analytics. 3. If the order has already been captured (status PAID), set refund: true — an uncredited cancellation will cause customer disputes. 4. For large cancellation batches (e.g., out-of-stock event), loop through order IDs using format: json to capture each result for audit logging. 5. If the warehouse has already started picking, do not cancel via API — contact them directly and cancel only after they confirm no physical work has started.

Related skills

FAQ

Can I cancel a fully fulfilled order?

No. It aborts if any fulfillment order is IN_PROGRESS or CLOSED; it only cancels unfulfilled or partially-unfulfilled orders.

Is the cancellation reversible?

No. orderCancel is irreversible and a cancelled order cannot be reopened, so run dry_run first.

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.