Machine Registrations
Paginated extraction of machine registrations for your machines — completed usage records for the machines your company owns, including registrations made on other companies’ projects (e.g. when your machine is rented out and used on a customer’s site). This is how machine owners feed utilization and billing systems without manual reports.
Endpoint
Section titled “Endpoint”GET /v1/machine-registrations- Test:
https://core-api.ditio.dev/reporting/v1/machine-registrations - Production:
https://core-api.ditio.app/reporting/v1/machine-registrations - Scope:
reportingapiv1(same as Image Extraction) - Returns: a
dataarray and acontinuationTokenfor paging
Sync modes
Section titled “Sync modes”| Mode | Trigger | Ordered by | Use for |
|---|---|---|---|
| Full | FromDateTime + ToDateTime set (or neither) | stop time (when usage ended) | Initial load / re-sync of a work-date window |
| Incremental | ModifiedSince set | modification time | Catching new and edited registrations since the last sync |
Use incremental sync to stay up to date: it returns any registration created
or changed since ModifiedSince, including edits to older records (which a
date-window query would miss).
Query parameters
Section titled “Query parameters”| Parameter | Type | Required | Description |
|---|---|---|---|
FromDateTime | datetime | No | Full sync: start of the stop-time window. Must be set together with ToDateTime. |
ToDateTime | datetime | No | Full sync: end of the stop-time 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. |
ChunkLimit | int | No | Target page size. Default 2500, range 1–10000. A page may slightly exceed it so that records sharing one exact timestamp are never split across pages. |
ContinuationToken | string | No | Opaque token from a previous response — echo it back verbatim to get the next page. |
Pagination
Section titled “Pagination”Identical to the shared pattern (see Pagination):
- Call the endpoint with your initial filter (no
ContinuationToken). - If the response’s
continuationTokenis non-empty, pass it verbatim asContinuationTokenon the next call (keep all other parameters the same). - Repeat until
continuationTokenis absent/empty.
Deleted registrations are reported during incremental sync as entries with
isDeleted: true; upsert/delete by id on your side.
Cross-company data & privacy
Section titled “Cross-company data & privacy”Because your machine may be used on another company’s project, a registration
can involve people from a company other than yours. When that is the case,
personal identifiers belonging to the other company are obscured: the
operator’s name and id (driverName, driverId) and the
created-by/modified-by fields are returned empty. Non-personal utilization
data is always returned: machine, project (company name, project
name/number), start/stop time, quantity, and the operator’s company
(driverCompanyName) — so you can see which customer used the machine,
without their employees’ personal data.
Response fields (selected)
Section titled “Response fields (selected)”| Field | Description |
|---|---|
id | Registration id |
machineId, machineName, machineTypeName, resourceNumber | The machine |
projectCompanyName, projectName, projectNumber, projectExternalNumber | Where it was used |
driverCompanyName | The operator’s company (always returned) |
driverName, driverId | The operator (obscured cross-company) |
startDateTime, stopDateTime, qty | Usage |
approved | Approval state |
createdDateTime, modifiedDateTime | Timestamps |
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/machine-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/machine-registrations", headers=headers, params=params, ).json() for registration in page["data"]: if registration.get("isDeleted"): delete_locally(registration["id"]) else: upsert_locally(registration) continuation = page.get("continuationToken") if not continuation: break params["ContinuationToken"] = continuationRelated
Section titled “Related”- Machines & Equipment — managing the machine catalogue itself
- Equipment Data guide — the full equipment-data workflow
- Pagination — the shared continuation-token pattern