List Shipments

GET/api/v1/shipments
QueryValues / purpose
statusOne or more comma-separated canonical carrier statuses
trackingStateactive or merchant-only held processing state
startDate, endDateISO date/time range
storeIdMerchant-owned store UUID
carrierNormalized carrier code
searchTracking/order search
pollStatuserrors or stuck
sortBy, sortOrderValidated sort field and asc/desc
page, limitPagination; limit is capped at 100

Shipment Detail and Re-poll

GET/api/v1/shipments/:id
POST/api/v1/shipments/:id/repoll

Detail includes the carrier event timeline, trackingState, nullable trackingHoldReason, and merchant-safe poll diagnostics. Re-poll queues an immediate provider check and remains scoped to the authenticated merchant. A held shipment returns 402 SHIPMENT_ACCESS_BLOCKED with shipmentAccess, reason, and action details.

Operational state is separate: A quota or billing hold never replaces currentStatus or adds an event to the customer timeline.

Analytics and Health

GET/api/v1/shipments/analytics
GET/api/v1/shipments/volume-insights
GET/api/v1/shipments/performance
GET/api/v1/shipments/sync-health

volume-insights returns the account-wide current calendar-month count, zero-filled completed-month average, current-month forecast and confidence, six-month history, and a 15%-headroom capacity recommendation. Analytics/performance accept date, store, carrier, and destination-country filters. Sync health reports active rows, normal polling, errors, stuck shipments, merchant-only billingHeld, and the latest successful poll.

Notification Log

GET/api/v1/shipments/notifications/log?page=1&limit=30

Returns merchant notification sends with channel, recipient, trigger status, delivery status, attempts, errors, timestamps, and pagination metadata.

CSV Export

POST/api/v1/shipments/export-token
GET/api/v1/shipments/export?_token=EXPORT_TOKEN
  1. Call POST /shipments/export-token with a bearer access token.
  2. Use the returned purpose-limited token within 60 seconds as _token on the public export route.
  3. Pass the same supported filters, including trackingState, and sort options as the list view.

The CSV keeps Carrier Status, Tracking State, and Hold Reason in separate columns, is capped at 10,000 rows, neutralises spreadsheet formula prefixes, and is served with private/no-store and nosniff headers.

Do not use an access token in the query string. The export endpoint rejects ordinary access tokens because it requires the csv-export purpose claim.