Loading...
Loading...
Commerce Engine order management - create orders, list/detail, shipment tracking, payment status, cancellation, and refunds.
npx skill4agent add commercengine/skills ce-ordersLLM Docs Header: All requests tomust include thehttps://llm-docs.commercengine.ioheader (or appendAccept: text/markdownto the URL path). Without it, responses return HTML instead of parseable markdown..md
Prerequisite: Order creation requires a cart with items and addresses. See.cart-checkout/
| Task | SDK Method |
|---|---|
| Create order | |
| List orders | |
| Get order detail | |
| Get shipments | |
| Get payments | |
| Payment status | |
| Retry payment | |
| Cancel order | |
| Get refunds | |
Note: Returns are managed by the brand admin (Admin Portal), not the storefront. Customers can cancel within the cancellation window (); 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.is_cancellation_allowed
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 }, { ... })| Status | Description |
|---|---|
| Order created, awaiting payment |
| Payment successful, order confirmed |
| Being prepared for shipment |
| In transit |
| Delivered to customer |
| Order cancelled |
| Status | Description | Action |
|---|---|---|
| Payment not yet processed | Poll again after delay |
| Payment successful | Show confirmation |
| Payment failed | Check |
See§ "Building Payment Payloads" for all payment_method shapes.cart-checkout/references/payment-patterns.md
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
}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 }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();
}
}// 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",
}
);
}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
});| Level | Issue | Solution |
|---|---|---|
| CRITICAL | Creating order without address | Cart must have billing/shipping addresses set before |
| HIGH | Not polling payment status | After gateway redirect, always poll |
| HIGH | Showing cancel button when not allowed | Check |
| MEDIUM | Not handling multiple shipments | One order can have multiple shipments — iterate |
| MEDIUM | Missing | Must provide |
| MEDIUM | Building a returns flow on storefront | Returns are admin-managed. Storefront supports cancellation only ( |
| LOW | Not filtering orders by status | Use |
cart-checkout/webhooks/