mcpField
C
ce-orders

ce-orders

github.com/commercengineOther090 installsUpdated 11w ago
Repository

About ce-orders

ce-orders is an Agent skill for developers implementing order management with the Commercengine storefront SDK. It covers order, payment, shipment, and cancellation flows, and clarifies that returns are handled by brand administrators.

Key features

  1. 01Create orders and handle payments
  2. 02List orders and retrieve details
  3. 03View shipment, payment, and refund data
  4. 04Check payment status and retry payments
  5. 05Check cancellation eligibility and cancel orders

Use cases

  1. 01Build post-checkout order placement
  2. 02Show order history and shipment tracking
  3. 03Poll payment status and retry failures
  4. 04Implement order cancellation with eligibility checks

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/commercengine/skills --skill ce-orders

After installing, type/ce-ordersin Claude Code to confirm it loaded.

Bundled files.claude-plugin/plugin.json.cursor-plugin/plugin.json

Details

From the project README

LLM Docs Header: All requests to https://llm-docs.commercengine.io must include the Accept: text/markdown header (or append .md to the URL path). Without it, responses return HTML instead of parseable markdown.

Order Management

Prerequisite: Order creation requires a cart with items and addresses. See cart-checkout/.

Quick Reference

TaskSDK Method
Create ordersdk.order.createOrder({ cart_id, payment_method? })
List orderssdk.order.listOrders({ page, limit })
Get order detailsdk.order.getOrderDetails({ order_number })
Get shipmentssdk.order.listOrderShipments({ order_number })
Get paymentssdk.order.listOrderPayments({ order_number })
Payment statussdk.order.getPaymentStatus(orderNumber) — takes a plain string, not { order_number }
Retry paymentsdk.order.retryOrderPayment({ order_number }, { payment_method })
Cancel ordersdk.order.cancelOrder({ order_number }, { cancellation_reason, refund_mode })
Get refundssdk.order.listOrderRefunds({ order_number })

Note: Returns are managed by the brand admin (Admin Portal), not the storefront. Customers can cancel within the cancellation window (is_cancellation_allowed); the admin then decides whether to schedule a return shipment or issue a direct refund. The default behavior is to refund if cancelled within the window. Return/replacement request APIs for storefront are under development.

Decision Tree

User Request
    │
    ├─ "Place order" / "Checkout"
    │   └─ sdk.order.createOrder() → handle payment_info
    │       → See cart-checkout/ for full checkout flow
    │
    ├─ "My orders" / "Order history"
    │   └─ sdk.order.listOrders({ page, limit })
    │
    ├─ "Order detail" / "Order #123"
    │   └─ sdk.order.getOrderDetails({ order_number })
    │
    ├─ "Track shipment"
    │   └─ sdk.order.listOrderShipments({ order_number })
    │       → tracking_url, awb_no, status, eta_delivery
    │
    ├─ "Payment failed" / "Retry"
    │   ├─ Check → sdk.order.getPaymentStatus(orderNumber)
    │   └─ Retry → sdk.order.retryOrderPayment({ order_number }, { payment_method })
    │
    └─ "Cancel order"
        ├─ Check is_cancellation_allowed first
        └─ sdk.order.cancelOrder({ order_number }, { ... })

Order Statuses

StatusDescription
draftOrder created, awaiting payment
confirmedPayment successful, order confirmed
processingBeing prepared for shipment
shippedIn transit
deliveredDelivered to customer
cancelledOrder cancelled

Payment Statuses

StatusDescriptionAction
pendingPayment not yet processedPoll again after delay
successPayment successfulShow confirmation
failedPayment failedCheck is_retry_available

Key Patterns

Create Order from Cart

See cart-checkout/references/payment-patterns.md § "Building Payment Payloads" for all payment_method shapes.

const { data: order, error } = await sdk.order.createOrder({
  cart_id: cartId,
  payment_method: {
    payment_provider_slug: "juspay",
    integration_type: "hyper-checkout",
    gateway_reference_id: gatewayRefId,
    return_url: "https://yoursite.com/order/confirm",
    action: "paymentPage",
  },
});

if (order.payment_required) {
  // Use payment_info to redirect or handle payment flow
}
List Orders with Filters
const { data, error } = await sdk.order.listOrders({
  page: 1,
  limit: 10,
  sort_by: JSON.stringify({ order_date: "desc" }),
});

// data.orders → OrderList[] (summary view)
// data.pagination → { total_records, total_pages, next_page }
Poll Payment Status
async function pollPaymentStatus(orderNumber: string) {
  // Note: getPaymentStatus takes a string, not an object
  const { data, error } = await sdk.order.getPaymentStatus(orderNumber);

  if (data.status === "pending") {
    setTimeout(() => pollPaymentStatus(orderNumber), 3000);
    return;
  }

  if (data.status === "success") {
    showConfirmation(orderNumber);
  } else if (data.is_retry_available) {
    showRetryOption(orderNumber);
  } else {
    showPaymentFailed();
  }
}
Cancel Order
// First check if cancellation is allowed
const { data: order } = await sdk.order.getOrderDetails({
  order_number: orderNumber,
});

if (order.is_cancellation_allowed) {
  const { data, error } = await sdk.order.cancelOrder(
    { order_number: orderNumber },
    {
      cancellation_reason: "Changed my mind",
      refund_mode: "original_payment_mode",
      feedback: "Optional feedback",
    }
  );
}
Shipment Tracking
const { data, error } = await sdk.order.listOrderShipments({
  order_number: orderNumber,
});

data.shipments.forEach((shipment) => {
  console.log(shipment.status);        // "shipped", "delivered", etc.
  console.log(shipment.tracking_url);  // Courier tracking link
  console.log(shipment.awb_no);        // Air waybill number
  console.log(shipment.eta_delivery);  // Estimated delivery date
});

Common Pitfalls

LevelIssueSolution
CRITICALCreating order without addressCart must have billing/shipping addresses set before createOrder()
HIGHNot polling payment statusAfter gateway redirect, always poll getPaymentStatus()
HIGHShowing cancel button when not allowedCheck is_cancellation_allowed from order detail first
MEDIUMNot handling multiple shipmentsOne order can have multiple shipments — iterate data.shipments
MEDIUMMissing return_urlMust provide return_url for payment gateway callback
MEDIUMBuilding a returns flow on storefrontReturns are admin-managed. Storefront supports cancellation only (cancelOrder). Show order/refund status, not a "Request Return" form.
LOWNot filtering orders by statusUse status[] query param to show relevant orders per tab

See Also

  • cart-checkout/ - Cart management and checkout flow
  • webhooks/ - Real-time order status updates via webhooks

Documentation

Comments

Markdown supported