API reference / Jobs

Poll a tenant-scoped asynchronous bulk job (bjob_ + ULID). Required scope is the write scope of the persisted operation (catalog:write, inventory:write, or orders:write).

GET/open/v1/jobs/{jobId}Scope: catalog:write | inventory:write | orders:write (matches the job operation)

Service Endpoint Seller token required

EnvironmentBase URL + Path
Productionhttps://open.mallplus.ph/open/v1/jobs/{jobId}
Sandboxhttps://sandbox.open.mallplus.ph/open/v1/jobs/{jobId}
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
jobIdpathstringYes-The asynchronous bulk job ID returned when the bulk operation was accepted.
offsetqueryintegerNoMinimum: 0; Default: 00-based item offset for this asynchronous job result page.
limitqueryintegerNoMinimum: 1; Maximum: 100; Default: 50Maximum number of records to return.

Request Body

This operation has no JSON request body.

Response Parameters

Success status: HTTP 200

FieldTypeRulesDescription
successenumAllowed: trueAlways true on a successful response.
dataobject-Job status, aggregate summary, and a page of per-item results.
data.job_idstring-Job id (bjob_ + ULID).
data.operationenumAllowed: product_create, inventory_update, order_ship, order_cancelThe bulk operation this job executes.
data.statusenumAllowed: pending, processing, completed, partial_success, failed, cancelledOverall job status.
data.summaryobject-Aggregate item counts for the whole job (not just the current page).
data.summary.totalinteger-Total number of items in this summary.
data.summary.succeededinteger-Number of items that completed successfully.
data.summary.failedinteger-Number of items that failed.
data.summary.outcome_unknowninteger-Number of items whose final outcome is not yet known.
data.itemsarray<BulkJobItem>Max items: 100Page of per-item results for this poll.
data.items[]BulkJobItemNo additional propertiesOne item in an asynchronous bulk job poll page.
data.items[].indexintegerMinimum: 0Zero-based position of the item in the submitted batch.
data.items[].statusenumAllowed: pending, processing, succeeded, failed, outcome_unknownPer-item execution status for this page of the job.
data.items[].resource_idstring-Created or updated resource id when the item succeeded (e.g. a product id).
data.items[].resultobject-Optional executor payload for a succeeded item.
data.items[].errorobjectNo additional propertiesPresent when the item failed with a structured error.
data.items[].error.codestring-Machine-readable error code for the failed item.
data.items[].error.messagestring-Human-readable error message for the failed item.
data.paginationobject-Offset/limit of the items page in this response.
data.pagination.offsetinteger-0-based item offset for this result page.
data.pagination.limitintegerMaximum: 100Maximum number of result items returned in this page.

Error Codes

HTTP StatusSchemaDescription
400PlatformError400ResponseValidation error, or a missing/malformed required signing header (BAD_REQUEST)
401PlatformError401ResponseUnauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED)
403PlatformError403ResponseForbidden — insufficient scope
404PlatformError404ResponseThe requested resource does not exist or is not visible to the authenticated seller
429PlatformError429ResponseThe partner or endpoint rate limit has been exceeded
503PlatformError503ResponseA required platform or upstream dependency is temporarily unavailable

This operation can return these codes in error.code: VALIDATION_ERROR, NOT_FOUND, FORBIDDEN

Any operation can also return the authentication, signing, scope, rate-limit and system codes listed in the Error code reference.

Request Example

# Sandbox: https://sandbox.open.mallplus.ph/open/v1/jobs/jobId_123
curl -X GET "https://open.mallplus.ph/open/v1/jobs/jobId_123" \
  -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"

Response Example

{
  "success": true,
  "data": {
    "job_id": "bjob_01M2GEXAMPLE000000000000",
    "operation": "product_create",
    "status": "completed",
    "summary": {
      "total": 1,
      "succeeded": 1,
      "failed": 0,
      "outcome_unknown": 0
    },
    "items": [
      {
        "index": 0,
        "status": "succeeded",
        "resource_id": "prod_01EXAMPLE"
      }
    ],
    "pagination": {
      "offset": 0,
      "limit": 50
    }
  }
}