Skip to content

Mass Transport Registrations

Paginated extraction of mass transport trips — the load-to-dump haul cycles recorded on a project, including mass type, quantity, cycle time, distance, and load/dump coordinates. This is how you feed haul volumes and machine utilization into billing, progress tracking, and BI systems without manual reports.

The response combines trips from the current mass-haul solution and any trips made in the legacy mass-haul module, so you get one continuous stream per project.

EndpointReturns
GET /v1/flow-trip-registrationsTrip registrations (the main stream)
GET /v1/flow-locationsLoad/dump locations referenced by trips
GET /v1/flow-mass-typesMass types referenced by trips
  • Test: https://core-api.ditio.dev/reporting/v1/flow-trip-registrations
  • Production: https://core-api.ditio.app/reporting/v1/flow-trip-registrations
  • Scope: reportingapiv1 (same as the other extraction endpoints)
  • Returns: a data array and a continuationToken for paging

The two companion endpoints (flow-locations, flow-mass-types) are lookup streams — pull them once and resolve loadLocationId / dumpLocationId and massTypeId on the trip records against them. Both use the same filter model and pagination as the trip endpoint.

ModeTriggerOrdered byUse for
FullFromDateTime + ToDateTime set (or neither)trip timeInitial load / re-sync of a date window
IncrementalModifiedSince setmodification timeCatching new and edited trips since the last sync

The shared extraction filter (see Pagination):

ParameterTypeRequiredDescription
FromDateTimedatetimeNoFull sync: start of the window. Set together with ToDateTime.
ToDateTimedatetimeNoFull sync: end of the window.
ModifiedSincedatetimeNoIncremental sync: return records modified at/after this instant.
ModifiedBeforedatetimeNoOptional upper bound for incremental sync. Requires ModifiedSince; must be greater than it.
ProjectIdstringNoRestrict to a single project.
CompanyIdstringNoRestrict to data owned by one company.
OwnCompanyDataOnlyboolNoExclude data shared from external companies.
ExcludeDataFromSubsidiariesboolNoFor parent-company callers, exclude subsidiary data.
ChunkLimitintNoTarget page size. Default 2500, range 1–10000.
ContinuationTokenstringNoOpaque token from a previous response — echo it back verbatim for the next page.

Identical to the shared pattern (see Pagination): call with your initial filter, then keep passing the returned continuationToken as ContinuationToken (other parameters unchanged) until it comes back empty.

Deleted trips are reported during incremental sync as entries with isDeleted: true; upsert/delete by id on your side.

A trip carries a lot of context; these are the fields most integrations use.

FieldDescription
idTrip id
projectCompanyName, projectName, projectNumber, projectExternalNumberThe project
taskName, taskWbsNumber, taskExternalDim01The work order it was booked to
massType, massTypeIdWhat was hauled
quantity, quantityM3, verifiedQuantity, unitOfMeasureTextHow much
loadDateTime, dumpDateTimeWhen the cycle started and ended
totalCycleTimeHours, m3PerHour, utilizationRateProductivity
distance, distanceAccumulated, averageSpeedKmhHaul distance and speed
loadLocationName, dumpLocationName, loadLocationId, dumpLocationIdWhere it loaded and dumped (resolve IDs against flow-locations)
loadCoordinates, dumpCoordinates[lat, lng] of load and dump points
dumperName, dumperNumber, dumperRegistrationNumberThe hauling machine
dumperDriverName, dumperDriverId, dumperDriverCompanyNameThe driver (personal identifiers obscured for cross-company data)
loaderName, loaderNumber, loaderDriverNameThe loading machine and operator
verified, approved, invoicedTrip state
receiptNumberWeighbridge/tip-site receipt reference, when present
modifiedDateTimeLast change
isDeleted, deletedDateTimeSet on deleted records during incremental sync
Terminal window
export DITIO_REPORTING_BASE="https://core-api.ditio.dev/reporting" # test
curl -s -G "$DITIO_REPORTING_BASE/v1/flow-trip-registrations" \
-H "Authorization: Bearer $TOKEN" \
--data-urlencode "ModifiedSince=2026-07-01T00:00:00Z" \
--data-urlencode "ChunkLimit=2500"
import os
import requests
REPORTING_BASE = os.environ.get(
"DITIO_REPORTING_BASE", "https://core-api.ditio.dev/reporting"
)
headers = {"Authorization": f"Bearer {token}"}
params = {"ModifiedSince": "2026-07-01T00:00:00Z", "ChunkLimit": 2500}
while True:
page = requests.get(
f"{REPORTING_BASE}/v1/flow-trip-registrations",
headers=headers, params=params,
).json()
for trip in page["data"]:
if trip.get("isDeleted"):
delete_locally(trip["id"])
else:
upsert_locally(trip)
continuation = page.get("continuationToken")
if not continuation:
break
params["ContinuationToken"] = continuation