API reference / Orders

Cancel multiple orders in a single request (max 50)

POST/open/v1/orders/bulk-cancelScope: orders:write

Service Endpoint Seller token required

EnvironmentBase URL + Path
Productionhttps://open.mallplus.ph/open/v1/orders/bulk-cancel
Sandboxhttps://sandbox.open.mallplus.ph/open/v1/orders/bulk-cancel
Common Signing and Seller Headers
HeaderTypeRequiredRulesDescription
X-MallPlus-Partner-IdstringYesIssued client ID for the calling app.Identifies the partner app whose secret signs the request.
X-MallPlus-TimestampintegerYesUnix timestamp in seconds; default acceptance window is 90 seconds.Prevents replay outside the allowed signing window.
X-MallPlus-Signature-VersionstringYesUse 3 for HMAC v3.Selects the request signing algorithm.
X-MallPlus-NoncestringYes32-64 lowercase hexadecimal characters, unique per request.Replay-protection nonce included in the v3 signing base string.
X-MallPlus-SignaturestringYesHMAC-SHA256 over timestamp, client ID, method, path, canonical query, body hash, and nonce.Cryptographic proof that the request was signed with the app secret.
X-MallPlus-Access-TokenstringYesRequired when the operation says seller token required.Seller OAuth access token returned by the authorization flow.
X-MallPlus-Seller-IdstringYesRequired when X-MallPlus-Access-Token is required.Seller ID bound to the seller OAuth token.

Parameters

NameInTypeRequiredRulesDescription
Idempotency-KeyheaderstringYesMin length: 1Unique key, generated per request, used to safely retry this call.

Request Body required

FieldTypeRequiredRulesDescription
ordersarray<OrderBulkCancelItemRequest>YesMin items: 1; Max items: 1000Orders values.
orders[]OrderBulkCancelItemRequestNoNo additional propertiesAn order cancellation instruction included in a bulk cancel request.
orders[].orderIdstringYesMin length: 1Order ID associated with this value.
orders[].expectedStatusenumNoAllowed: PENDING, PAID, READY_TO_SHIP, SHIPPED, DELIVERED, CANCELLEDOptional compare-and-swap guard. When supplied, the transition only applies if the order is still in this status. PENDING, PAID, and READY_TO_SHIP are treated as the same pre-shipment state for this guard.

Response Parameters

FieldTypeRulesDescription
successenumAllowed: trueWhether the bulk request was processed.
dataobjectNo additional propertiesResponse or event payload for this schema.
data.cancelledarray<BulkOrderOutcome>-Orders that were cancelled.
data.cancelled[]BulkOrderOutcomeNo additional propertiesOne order that the bulk request processed successfully.
data.errorsarray<BulkOrderError>-Orders that could not be cancelled. Empty when every order succeeded.
data.errors[]BulkOrderErrorNo additional propertiesOne order the bulk request could not process.
data.summaryBulkOrderSummaryNo additional propertiesSummary details.
data.cancelled[]BulkOrderOutcome · 2 fields

One order that the bulk request processed successfully.

FieldTypeRulesDescription
data.cancelled[].orderIdstring-Order that was processed.
data.cancelled[].statusstring-State the order is now in.
data.errors[]BulkOrderError · 3 fields

One order the bulk request could not process.

FieldTypeRulesDescription
data.errors[].orderIdstring-Order that failed.
data.errors[].errorstring-Why this order could not be processed.
data.errors[].codestring-Machine-readable reason, when the failure maps to a catalogued error code.
data.summaryBulkOrderSummary · 3 fields

Summary details.

FieldTypeRulesDescription
data.summary.totalinteger-Number of orders submitted.
data.summary.succeededinteger-Number of orders processed successfully.
data.summary.failedinteger-Number of orders that failed.

Error Codes

HTTP StatusSchemaDescription
400ErrorResponseValidation error, or a missing/malformed required signing header (BAD_REQUEST)
401ErrorResponseUnauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
403ErrorResponseForbidden — insufficient scope
409ErrorResponseThe request conflicts with the current resource state or reuses an idempotency key
413ErrorResponseThe request body exceeds the endpoint payload limit
422ErrorResponseThe request is well-formed but cannot be processed in the resource’s current state
429ErrorResponseThe partner or endpoint rate limit has been exceeded
502ErrorResponseThe upstream commerce service rejected the request or returned an invalid response
503ErrorResponseA required platform or upstream dependency is temporarily unavailable
504ErrorResponseThe upstream commerce service did not respond before the platform timeout

Machine-readable codes are returned in error.code: ACCOUNT_LOCKED, APPROVE_FAILED, APP_LIMIT_REACHED, APP_NOT_FOUND, AUTHORIZATION_CODE_EXPIRED, AUTHORIZATION_REVOKED, AUTH_CODE_EXPIRED, AUTH_CODE_USED, BAD_REQUEST, CANCELLATION_ALREADY_PROCESSED, CANCELLATION_DEADLINE_EXCEEDED, CANCEL_FAILED, CANNOT_DELETE_ACCOUNT_WITH_APPS, CONCURRENT_MODIFICATION, CONFLICT, CREATE_FAILED, DISPUTE_FAILED, DUPLICATE, EMAIL_ALREADY_EXISTS, EMAIL_NOT_VERIFIED, FILE_TOO_LARGE, FORBIDDEN, HMAC_VERSION_DEPRECATED, IDEMPOTENCY_KEY_IN_PROGRESS, IDEMPOTENCY_KEY_REQUIRED, IDEMPOTENCY_KEY_REUSED, INTERNAL_ERROR, INVALID_AUTHORIZATION_CODE, INVALID_CREDENTIALS, INVALID_DEVELOPER_TYPE, INVALID_FILE_CONTENT, INVALID_FILE_TYPE, INVALID_JSON, INVALID_NONCE, INVALID_PATH, INVALID_PICKUP_DATE, INVALID_REFRESH_TOKEN, INVALID_REQUEST, INVALID_SIGNATURE, INVALID_STATE, INVALID_TRANSITION, INVALID_VERIFICATION_TOKEN, MAINTENANCE, MEMBER_PERMISSION_DENIED, MISSING_NONCE, NONCE_REUSED, NOT_FOUND, NOT_IMPLEMENTED, ORDER_NOT_CANCELLABLE, PAYLOAD_TOO_LARGE, PICKUP_DATES_UNAVAILABLE, PRODUCT_HAS_ACTIVE_ORDERS, PRODUCT_UNDER_REVIEW, PROFILE_ALREADY_SUBMITTED, PROFILE_TYPE_MISMATCH, PROXY_ERROR, RATE_LIMITED, REDIRECT_URL_MISMATCH, REFRESH_TOKEN_EXPIRED, REFRESH_TOKEN_REUSED, REJECT_FAILED, RETURN_ALREADY_PROCESSED, RETURN_DEADLINE_EXCEEDED, RE_AUTHORIZATION_REQUIRED, SANDBOX_LIMIT_REACHED, SELLER_TOKEN_REQUIRED, SERVICE_UNAVAILABLE, SESSION_EXPIRED, SHIPMENT_ALREADY_ARRANGED, SHIPMENT_NOT_ARRANGED, SHIPPING_LABEL_UNAVAILABLE, SHIP_FAILED, SIGNATURE_REPLAYED, SSRF_CHECK_FAILED, TEST_SHOP_LIMIT_REACHED, TIMESTAMP_EXPIRED, TOKEN_REVOKED, TOO_MANY_REQUESTS, UNAUTHORIZED, UPLOAD_ERROR, UPLOAD_NOT_CONFIGURED, UPSTREAM_ERROR, UPSTREAM_TIMEOUT, VALIDATION_ERROR, VERIFICATION_LINK_USED, VERIFICATION_TOKEN_EXPIRED, WEBHOOK_SUBSCRIPTION_EXISTS

Request Example

curl -X POST "https://open.mallplus.ph/open/v1/orders/bulk-cancel" \
  -H "X-MallPlus-Partner-Id: mp_partner_123" \
  -H "X-MallPlus-Timestamp: 1786924800" \
  -H "X-MallPlus-Signature-Version: 3" \
  -H "X-MallPlus-Nonce: 4f8b9a0c4d5e6f708192a3b4c5d6e7f8" \
  -H "X-MallPlus-Signature: <hex_hmac_sha256>" \
  -H "X-MallPlus-Access-Token: seller_access_token" \
  -H "X-MallPlus-Seller-Id: seller_123" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  --data '{
  "orders": [
    {
      "orderId": "orderId_123",
      "expectedStatus": "PENDING"
    }
  ]
}'

Response Example

{
  "success": true,
  "data": {
    "cancelled": [
      {
        "orderId": "QPS3OJQ6DF2QNL",
        "status": "cancelled"
      }
    ],
    "errors": [],
    "summary": {
      "total": 1,
      "succeeded": 1,
      "failed": 0
    }
  }
}