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.
Endpoints
Section titled “Endpoints”| Endpoint | Returns |
|---|---|
GET /v1/flow-trip-registrations | Trip registrations (the main stream) |
GET /v1/flow-locations | Load/dump locations referenced by trips |
GET /v1/flow-mass-types | Mass 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
dataarray and acontinuationTokenfor 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.
Sync modes
Section titled “Sync modes”| Mode | Trigger | Ordered by | Use for |
|---|---|---|---|
| Full | FromDateTime + ToDateTime set (or neither) | trip time | Initial load / re-sync of a date window |
| Incremental | ModifiedSince set | modification time | Catching new and edited trips since the last sync |
Query parameters
Section titled “Query parameters”The shared extraction filter (see Pagination):
| Parameter | Type | Required | Description |
|---|---|---|---|
FromDateTime | datetime | No | Full sync: start of the window. Set together with ToDateTime. |
ToDateTime | datetime | No | Full sync: end of the window. |
ModifiedSince | datetime | No | Incremental sync: return records modified at/after this instant. |
ModifiedBefore | datetime | No | Optional upper bound for incremental sync. Requires ModifiedSince; must be greater than it. |
ProjectId | string | No | Restrict to a single project. |
CompanyId | string | No | Restrict to data owned by one company. |
OwnCompanyDataOnly | bool | No | Exclude data shared from external companies. |
ExcludeDataFromSubsidiaries | bool | No | For parent-company callers, exclude subsidiary data. |
ChunkLimit | int | No | Target page size. Default 2500, range 1–10000. |
ContinuationToken | string | No | Opaque token from a previous response — echo it back verbatim for the next page. |
Pagination
Section titled “Pagination”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.
Response fields (selected)
Section titled “Response fields (selected)”A trip carries a lot of context; these are the fields most integrations use.
| Field | Description |
|---|---|
id | Trip id |
projectCompanyName, projectName, projectNumber, projectExternalNumber | The project |
taskName, taskWbsNumber, taskExternalDim01 | The work order it was booked to |
massType, massTypeId | What was hauled |
quantity, quantityM3, verifiedQuantity, unitOfMeasureText | How much |
loadDateTime, dumpDateTime | When the cycle started and ended |
totalCycleTimeHours, m3PerHour, utilizationRate | Productivity |
distance, distanceAccumulated, averageSpeedKmh | Haul distance and speed |
loadLocationName, dumpLocationName, loadLocationId, dumpLocationId | Where it loaded and dumped (resolve IDs against flow-locations) |
loadCoordinates, dumpCoordinates | [lat, lng] of load and dump points |
dumperName, dumperNumber, dumperRegistrationNumber | The hauling machine |
dumperDriverName, dumperDriverId, dumperDriverCompanyName | The driver (personal identifiers obscured for cross-company data) |
loaderName, loaderNumber, loaderDriverName | The loading machine and operator |
verified, approved, invoiced | Trip state |
receiptNumber | Weighbridge/tip-site receipt reference, when present |
modifiedDateTime | Last change |
isDeleted, deletedDateTime | Set on deleted records during incremental sync |
Example — nightly incremental sync
Section titled “Example — nightly incremental sync”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 osimport 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"] = continuationRelated
Section titled “Related”- Machine Integration — pushing excavator states and weight measures (the write side)
- Machine Registrations — machine usage hours
- Pagination — the shared continuation-token pattern