Orders API
Last Updated: 2026-07-02
List Orders
/open/v1/ordersScope: orders:readReturns a paginated list of orders belonging to the seller bound to your access token. Orders are returned newest first. You can filter by status, date range, and sort direction, and walk large result sets efficiently with cursor pagination.
Only your seller's own orders are ever returned — the seller scope is enforced server-side from your access token and cannot be overridden by any query parameter.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| page | integer | No | Page number for offset pagination (default: 1). Ignored when cursor is supplied. |
| limit | integer | No | Items per page, capped at 100 (default: 20) |
| status | enum | No | Filter by order status. Allowed: pending, paid, shipped, delivered, cancelled, returned. Any other value returns 400. |
| created_after | ISO 8601 | No | Only return orders created at or after this timestamp |
| created_before | ISO 8601 | No | Only return orders created before this timestamp |
| sort | enum | No | Sort direction: created_at_asc or created_at_desc. Unknown values are ignored. |
| cursor | string | No | Opaque keyset cursor returned in meta.nextCursor. When supplied, page is ignored and sort is forced to created_at_desc for a deterministic walk. Never build cursors yourself — pass back nextCursor unchanged. |
Example Request
curl -X GET "https://api.mallplus.com/open/v1/orders?status=paid&limit=10" \ -H "X-MallPlus-Partner-Id: app_ck9x2mf3w0001" \ -H "X-MallPlus-Timestamp: 1713254400" \ -H "X-MallPlus-Signature: a1b2c3d4e5f6..."
Example Response — offset mode (no cursor)
{
"success": true,
"data": [
{
"id": "ord_98765",
"status": "paid",
"sellerId": "seller_xyz789",
"customerId": "cus_001",
"currency": "PHP",
"subtotal": 499800,
"total": 519800,
"shipping": 20000,
"paymentStatus": "paid",
"fulfillmentStatus": "not_fulfilled",
"created_at": "2026-06-15T16:30:00Z",
"updated_at": "2026-06-15T17:00:00Z"
}
],
"meta": { "page": 1, "limit": 10, "total": 87 }
}Example Response — cursor mode
{
"success": true,
"data": [ /* ...orders... */ ],
"meta": { "limit": 100, "nextCursor": "eyJ0cyI6IjIwMjYtMDYtMTUiLCJpZCI6Im9yZF85ODc2NSJ9" }
} In cursor mode meta omits page and total; nextCursor appears only when the page is full (an underfilled page signals end-of-list).
Get Order
/open/v1/orders/:idScope: orders:read Returns the full details of a single order, including its line items, fulfillments, and shipping/billing addresses. A request for an order that does not exist, or that belongs to a different seller, returns 404 NOT_FOUND — the two cases are intentionally indistinguishable to avoid leaking the existence of cross-seller orders.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
| id | string | The order ID (e.g., ord_98765) |
Example Request
curl -X GET "https://api.mallplus.com/open/v1/orders/ord_98765" \ -H "X-MallPlus-Partner-Id: app_ck9x2mf3w0001" \ -H "X-MallPlus-Timestamp: 1713254400" \ -H "X-MallPlus-Signature: a1b2c3d4e5f6..."
Example Response
{
"success": true,
"data": {
"id": "ord_98765",
"status": "paid",
"sellerId": "seller_xyz789",
"customerId": "cus_001",
"currency": "PHP",
"subtotal": 499800,
"total": 519800,
"shipping": 20000,
"paymentStatus": "paid",
"fulfillmentStatus": "not_fulfilled",
"created_at": "2026-06-15T16:30:00Z",
"updated_at": "2026-06-15T17:00:00Z",
"shipByDate": "2026-06-17T16:00:00Z",
"slaBreached": false,
"items": [
{
"id": "item_001",
"orderId": "ord_98765",
"productId": "prod_abc123",
"variantId": "variant_001",
"title": "Premium Leather Wallet",
"sku": "WALLET-BLK-001",
"quantity": 2,
"unitPrice": 249900,
"totalPrice": 499800
}
],
"fulfillments": [],
"shippingAddress": {
"name": "Maria Santos",
"line1": "123 Rizal Avenue",
"line2": "Unit 4B",
"city": "Makati",
"province": "Metro Manila",
"postalCode": "1200",
"country": "PH",
"phone": "(***) ***-4567"
}
}
} The shipping/billing address phone is masked by default. It is returned unmasked only when your access token carries the customer:contact:read scope. Customer email is never exposed.
Get Order Items
/open/v1/orders/:id/itemsScope: orders:read Returns the line items for a specific order, including product details, SKU, quantities, and prices. Useful for WMS systems that need to pick and pack individual items. As with Get Order, a missing or cross-seller order returns 404 NOT_FOUND.
Example Request
curl -X GET "https://api.mallplus.com/open/v1/orders/ord_98765/items" \ -H "X-MallPlus-Partner-Id: app_ck9x2mf3w0001" \ -H "X-MallPlus-Timestamp: 1713254400" \ -H "X-MallPlus-Signature: a1b2c3d4e5f6..."
Example Response
{
"success": true,
"data": [
{
"id": "item_001",
"orderId": "ord_98765",
"productId": "prod_abc123",
"variantId": "variant_001",
"title": "Premium Leather Wallet",
"sku": "WALLET-BLK-001",
"quantity": 2,
"unitPrice": 249900,
"totalPrice": 499800
}
]
}Order Object
The order object returned by List Orders (as array items) and Get Order (as a single object). Unless noted, all fields except id and status are optional — they appear only when the upstream order carries a value for them.
| Field | Type | Description |
|---|---|---|
| id | string | Order identifier |
| status | string | Order lifecycle status: pending, paid, shipped, delivered, cancelled, returned |
| sellerId | string | The seller that owns this order (always the seller bound to your token) |
| customerId | string | Customer identifier |
| currency | string | ISO 4217 currency code (e.g., PHP) |
| subtotal | number | Sum of line-item prices, in minor units (centavos) |
| total | number | Grand total after shipping, tax, and discounts |
| tax | number | Total tax, in minor units |
| shipping | number | Shipping cost, in minor units |
| discount | number | Total discount applied, in minor units |
| paymentStatus | string | Payment status (e.g., paid, awaiting, canceled) |
| fulfillmentStatus | string | Fulfillment status (e.g., not_fulfilled, fulfilled, shipped) |
| created_at | string | Creation timestamp (ISO 8601) |
| updated_at | string | Last update timestamp (ISO 8601) |
| items | array | Embedded line items (see Get Order Items for the item shape) |
| fulfillments | array | Embedded fulfillments (see the Fulfillments API) |
| shippingAddress | object | Shipping address (name, line1, line2, city, province, postalCode, country, phone). Phone is masked unless you hold customer:contact:read. |
| billingAddress | object | Billing address (same shape as shippingAddress) |
| shipByDate | string | null | Ship-by SLA deadline (ISO 8601), or null when the order has no SBD. Matches the deadline shown in Seller Center. |
| slaBreached | boolean | true when the order is unshipped and past its shipByDate. Present only when a deadline exists; false once the order has shipped (SLA no longer applies). |
Customer email is intentionally never exposed in V1; use customerId plus the masked phone for buyer identification.
Ship Order
/open/v1/orders/:id/shipScope: orders:write Ship an order by providing tracking information. The order must be in READY_TO_SHIP status. This is the primary endpoint WMS partners use after picking and packing.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| trackingNumber | string | Yes | Carrier tracking number |
| trackingCompany | string | Yes | Shipping carrier name (e.g., J&T Express, LBC, Ninja Van) |
| items | array | No | Partial shipment: specify which items and quantities |
Example Request
curl -X POST "https://api.mallplus.com/open/v1/orders/ORD123/ship" \
-H "X-MallPlus-Partner-Id: app_ck9x2mf3w0001" \
-H "X-MallPlus-Timestamp: 1713254400" \
-H "X-MallPlus-Signature: a1b2c3d4e5f6..." \
-H "Content-Type: application/json" \
-d '{"trackingNumber": "TRK123456789", "trackingCompany": "J&T Express"}'Cancel Order
/open/v1/orders/:id/cancelScope: orders:write Cancel an order that has not yet been shipped. The order must be in READY_TO_SHIP status. A cancellation reason is required for audit purposes.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| reason | string | Yes | Reason for cancellation |
| cancelItems | array | No | Partial cancellation: specify which items |
Example Request
curl -X POST "https://api.mallplus.com/open/v1/orders/ORD123/cancel" \
-H "X-MallPlus-Partner-Id: app_ck9x2mf3w0001" \
-H "X-MallPlus-Timestamp: 1713254400" \
-H "X-MallPlus-Signature: a1b2c3d4e5f6..." \
-H "Content-Type: application/json" \
-d '{"reason": "Customer requested cancellation"}'