listShipments and listContainers), and iterators share the same filter types. Canonical names match API keys without the filter[...] wrapper. The complete filter reference lists every supported field, finite value set, and interaction. Types are generated from OpenAPI.
Filter shipments
tracking_stopped=false selects tracking not stopped. voyage_status accepts only arrived or on_ship; it is not a general shipment lifecycle field. Use created_at with timezone-bearing ISO 8601 timestamps to query shipment creation time. Shipment lists have no updated_at filter.
Filter containers
current_status values include on_ship, available, not_available, and the other documented states. in_transit, discharged, and available_for_pickup are not valid codes.
Arrays, dates, and nested values
The SDK serializes arrays with[] and nested objects with bracketed names, matching the API parser. Generic string arrays combine with AND; use comma-separated literals for OR. Shipment number arrays, shipment port/owner/terminal arrays, party IDs, and tags use the exceptions documented in the reference.
created_at and pod_eta_changed_at require timestamps with Z or timezone offsets. Container date fields, including updated_at, require dates. Relative date values (today, N.days.ago, N.days.from_now) are supported only on date filters and use the API’s day context. Explicit dates make the query reproducible in the API’s date context. Date filters do not convert the stored timestamp to the port timezone; for a local port day, query overlapping stored dates and refine returned timestamps using pod_timezone after processing the relevant pages.
last_free_day_on requires exactly two plain dates, without comparison operators: ['2026-10-01', '2026-10-07']. It adds status, destination, and tracking constraints; use pickup_lfd for general deadline comparisons.
pod_eta_changed_at requires a lower timestamp bound and applies only to active, unarrived shipments. It detects a meaningful local ETA-date change against historical data, so it is not interchangeable with a simple updated timestamp filter.
Validation and limitations
Invalid queries throwValidationError before a network request. This applies to JavaScript callers as well as TypeScript: unknown filter keys, invalid finite values, malformed bounds, unsupported sorts, and proven contradictory scopes produce an error naming the field and expected shape. The SDK does not fetch extra data merely to check ID existence or account entitlement; obtain IDs, port codes, and SCACs from authorized API results.
true for arriving_today, eta_changed_in_last_24h, and eta_changed_in_past_3_days. Their false values do not disable filtering reliably in the API. Omit a selector to disable it. Unknown terminal hold/fee data does not satisfy a false exception selector; do not add true/false result counts to infer total coverage.
Container pod_eta_at and pod_ata_at currently return server errors in deployed verification. Dynamic custom-field slugs currently leave the verification account’s list unfiltered. These inputs are excluded from supported filtering; JavaScript callers receive an actionable SDK error. Dynamic party-role filters are supported.
Migrate legacy arguments
Aliases and canonical fields with different values conflict and are rejected. Previously unsupported arguments could be omitted silently; they now fail with migration guidance. A successful mapped response retains
unsupportedFilters: [] for compatibility, because invalid queries fail before I/O. Raw responses remain the original API document.
Pagination
List calls fetch one page. Page numbers start at 1. Container page sizes cap at 50; shipment list requests use the SDK’s conservative cap of 100. The API default is 30 whenpageSize is omitted. Use meta.total as the filtered collection total, and links.next to identify remaining pages. Mark an answer based on fetched rows as partial while more pages remain.
format: 'mapped' exposes items, links, and meta. format: 'raw' exposes the original JSON:API data, links, and meta. format: 'both' returns { raw, mapped }. Large include sets expand payloads; use the detail endpoints for deep relationships when the list question does not need them.