Traces (track & trace)
A trace is a scan/status event for a good — pickup scanned, delivered, returned, and similar track-and-trace milestones.
When to use
Section titled “When to use”| Situation | Command |
|---|---|
| Retrieve trace events matching a filter | RequestTracesGoods |
| Record new trace/scan events | StoreTracesGoods |
Retrieving traces
Section titled “Retrieving traces”The default period filter is date-based (the time-of-day part is
ignored). For sub-day precision, use a sibling filter type,
TEoTimeAwareFilterTracesGoods (both descend from a common base and
share the same field names, but the server treats them as distinct
classes, selected by the Type attribute):
<?xml version="1.0" encoding="windows-1252"?><EoCustomLinkRequestTracesGoods Type="TEoCustomLinkRequestTracesGoods"> <Filter Type="TEoTimeAwareFilterTracesGoods"> <PeriodBegin>2026-07-22T00:00:00</PeriodBegin> <PeriodEndExclusive>2026-07-22T01:00:00</PeriodEndExclusive> </Filter></EoCustomLinkRequestTracesGoods>| Filter field | Type | Description |
|---|---|---|
GoodIdsAsCsv | string (CSV) | Only traces for these good Ids. |
OrderIdsAsCsv | string (CSV) | Only traces for these order Ids. |
TaskIdsAsCsv | string (CSV) | Only traces for these task Ids. |
KeysExplicitAsCsv | string (CSV) | Explicit trace Ids. |
PeriodBegin | dateTime | Inclusive begin of the period. |
PeriodEnd | dateTime | Inclusive end of the period — used only when Type="TEoFilterTracesGoods" (date-only). |
PeriodEndExclusive | dateTime | Exclusive end of the period — used only when Type="TEoTimeAwareFilterTracesGoods" (time-aware). |
Note PeriodEndExclusive — the end of the window is not included, unlike
the inclusive PeriodEnd used by order filters.
Response fields (TEoTraceGoods)
Section titled “Response fields (TEoTraceGoods)”| Field | Type | Description |
|---|---|---|
Id | int | Database Id of the trace. |
GoodId | int | Database Id of the good this trace belongs to. |
Moment | dateTime | Date/time of the trace event. |
TraceTypeId | int | Tenant-configurable trace type (e.g. “registered”, “collected”). |
OperatorId | int | Operator who recorded this trace. |
Description | string | Free-text description of the trace. |
Percentage | int | Percentage of completion this trace indicates. |
City / Country | string | Location where the trace was created. |
Position | position | Not auto-populated by the server — if the caller supplies a Position when storing, it is persisted and returned on later retrieval. |
BarcodeScanned | string | Store-only. Alternative to GoodId when storing a trace — if GoodId is omitted, the good is looked up by this barcode instead (server-side, tenant-setting-dependent). Never populated on retrieval. |
Scenarios
Section titled “Scenarios”Scenario: retrieve all trace events for one order in the last hour.
Set OrderIdsAsCsv to the order’s Id, Type="TEoTimeAwareFilterTracesGoods",
PeriodBegin to one hour ago, and PeriodEndExclusive to now.
Scenario: retrieve every trace for a specific good. Set
GoodIdsAsCsv to the good’s Id and omit the period fields to get its
full trace history (subject to your tenant’s data retention).
Storing traces
Section titled “Storing traces”<?xml version="1.0" encoding="windows-1252"?><EoCustomLinkStoreTracesGoods Type="TEoCustomLinkStoreTracesGoods"> <Data Type="TEoTraceList"> <_TEoListBase_Items> <EoTraceGoods Type="TEoTraceGoods"> <Id>-1</Id> <GoodId>429</GoodId> <Moment>2026-07-22T15:19:04+02:00</Moment> <TraceTypeId>3</TraceTypeId> </EoTraceGoods> <EoTraceGoods Type="TEoTraceGoods"> <Id>-2</Id> <GoodId>429</GoodId> <Moment>2026-07-22T15:18:59+02:00</Moment> <TraceTypeId>2</TraceTypeId> </EoTraceGoods> </_TEoListBase_Items> </Data></EoCustomLinkStoreTracesGoods>Fields: see the Retrieve tab’s response field table above — the same
TEoTraceGoods shape is used for both directions. On store, set Id to
a negative value to insert, GoodId, Moment, and TraceTypeId. If
GoodId is not known, BarcodeScanned can be set instead to have the
good looked up by barcode server-side.
Response uses the shared EoStoreResultList shape:
<?xml version="1.0" encoding="windows-1252"?><EoStoreResultList Type="TEoStoreResultList"> <_TEoListBase_Items> <EoStoreResult Type="TEoStoreResult"> <Id>601</Id> <IdOld>-1</IdOld> <RowsAffected>1</RowsAffected> <StoreDescription></StoreDescription> <StoreDetail>0</StoreDetail> <StoreResult>srInserted</StoreResult> </EoStoreResult> <EoStoreResult Type="TEoStoreResult"> <Id>602</Id> <IdOld>-2</IdOld> <RowsAffected>1</RowsAffected> <StoreDescription></StoreDescription> <StoreDetail>0</StoreDetail> <StoreResult>srInserted</StoreResult> </EoStoreResult> </_TEoListBase_Items></EoStoreResultList>TraceTypeId values are tenant-configurable (e.g. 2 might mean
“registered,” 3 “collected”) — confirm the mapping for your tenant with
your MendriX contact.
Scenarios
Section titled “Scenarios”Scenario: record a pickup scan. Send one EoTraceGoods with
Id=-1, the scanned good’s GoodId, Moment set to the scan time, and
TraceTypeId set to your tenant’s “picked up” type.
Scenario: record two scans from the same event. Send two
EoTraceGoods items in one call (as shown above) — the response
contains one EoStoreResult per item, matched by position.
Gotchas
Section titled “Gotchas”- Storing traces works even for orders already on an invoice — trace events are not subject to the invoiced-order lock that applies to order articles.
KeysExplicitAsCsvsilently overrides every other filter field — see the caution in the Retrieve tab; combining it with a period filter does not narrow the results further, it silently ignores the period.PeriodEndExclusiveis exclusive, unlike thePeriodEndused elsewhere in Custom Link filters — a trace exactly at the end moment is not included.TraceTypeIdmeanings are tenant-specific — don’t hard-code assumptions about what a given Id means without confirming with your MendriX contact.
Related commands
Section titled “Related commands”- Order intake — the order the traced good belongs to.
GdxEoStructures.xsd—TEoTraceGoods,TEoFilterTracesGoodsfield definitions.