Skip to Content
Welcome to Zendera Knowledge Hub
For DevelopersProduct Status Feed

Product Status Feed API

v1

A cursor-paginated feed of per-product status changes at each pickup and delivery — the product-level companion to the order status feed.

The order status feed tells you when an order changes status. This feed goes one level deeper: it streams status changes per product per stop — which items were actually picked up or delivered, and which were removed or not ready. Use it when your system needs line-item reconciliation (partial deliveries, missing colli) rather than just order-level progress.

Interactive API Explorer

Loading API Documentation...

Authentication

Authorization: apikey YOUR_API_KEY_HERE

Base URLs

  • Production: https://app.zenderatms.com/api/
  • Staging: https://staging.zenderatms.com/api/

Reading the feed

GET /v1/order-products/status-feed?since=1718100000000

Query params:

  • since — unix timestamp in milliseconds; entries from this point forward are returned. Use it for the first call.
  • pagination_token — opaque cursor from the previous response’s nextPage. Use it for every subsequent call.

Response:

{ "changes": [ { "timestamp": "1718100456000", "orderProductId": "501", "orderProductInternalNumber": "PROD-PALLET-EUR", "orderLocationId": "901", "orderLocationInternalNumber": "LOC-warehouse-1", "locationType": "DELIVERY", "productStatusAtLocation": "COMPLETED" } ], "nextPage": { "hasNextPage": false, "since": "1718100456000", "paginationToken": "..." } }

Each entry says: at timestamp, this product (orderProductId / your orderProductInternalNumber) at this stop (orderLocationId, locationType of PICKUP or DELIVERY) changed to productStatusAtLocation.

Product statuses

  • PENDING — not yet handled at this stop
  • COMPLETED — picked up / delivered at this stop
  • REMOVED — removed from the order
  • NOT_READY — flagged not ready for handling

The sync loop

  1. First call: ?since=<your-last-sync-unix-millis>.
  2. Process changes, persist nextPage.paginationToken.
  3. While nextPage.hasNextPage is true, call again with ?pagination_token=<token> immediately.
  4. On your next sync run, resume from the stored token.

Common gotchas

  • 64-bit numbers arrive as strings. timestamp, orderProductId, and orderLocationId are int64 values serialized as JSON strings — parse accordingly.
  • since is milliseconds, not seconds and not an ISO date.
  • Resume from the token, not from since. Re-deriving since from wall-clock time can skip or duplicate entries; the token is the reliable cursor.
  • This is product-level, not order-level. For order status changes, use the order status feed.
Last updated on