Field and Dromivia

Drivers, phones, the day's routes, deliveries and evidence coming from Dromivia.

Export deliveries

GEThttps://api.drometra.com/v1/field/exports/deliveries

Requires the access token of a person in your company.

Headers

x-tenant-idmandatorystring · uuid
Your company's identifier. The server checks that you are still an active member of it.

Reference parameters

fromstring
tostring

It can respond with error 400, 401, 403, 404, 409, 410, 413, 415, 422, 429, 503. The error body is explained in Concepts.

request
curl -X GET "https://api.drometra.com/v1/field/exports/deliveries" \
  -H "Authorization: Bearer $DROMETRA _ TOKEN"\
  -H "x-tenant-id: $DROMETRA_TENANT" \
  -H "Accept: application / json"
response · 200
(text/csv)

Get field settings

GEThttps://api.drometra.com/v1/field/settings

Requires the access token of a person in your company.

Headers

x-tenant-idmandatorystring · uuid
Your company's identifier. The server checks that you are still an active member of it.

Response · 200

  • tenantIdstring · uuidalways
  • displayNamestring o nullalways
  • objectalways
  • versionintegeralways

It can respond with error 400, 401, 403, 404, 409, 410, 413, 415, 422, 429, 503. The error body is explained in Concepts.

request
curl -X GET "https://api.drometra.com/v1/field/settings" \
  -H "Authorization: Bearer $DROMETRA _ TOKEN"\
  -H "x-tenant-id: $DROMETRA_TENANT" \
  -H "Accept: application / json"
response · 200
{
  "tenantId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
  "displayName": "…",
  "verification": {
    "workerRequired": [
      "package_scan"
    ],
    "customerAllowed": [
      "otp"
    ],
    "customerMinimum": 2,
    "geofenceRadiusMeters": 1012.5,
    "allowGeofenceOverride": true
  },
  "version": 0
}

Save field settings

PUThttps://api.drometra.com/v1/field/settings

Requires the access token of a person in your company.

Headers

x-tenant-idmandatorystring · uuid
Your company's identifier. The server checks that you are still an active member of it.

Body

displayNamestring o null
verificationmandatoryobject
versionmandatoryinteger

Response · 200

  • tenantIdstring · uuidalways
  • displayNamestring o nullalways
  • objectalways
  • versionintegeralways

It can respond with error 400, 401, 403, 404, 409, 410, 413, 415, 422, 429, 503. The error body is explained in Concepts.

request
curl -X PUT "https://api.drometra.com/v1/field/settings" \
  -H "Authorization: Bearer $DROMETRA _ TOKEN"\
  -H "x-tenant-id: $DROMETRA_TENANT" \
  -H "Content-Type: application/json" \ -d '{
    "verification": {},
    "version": 0
  }'
response · 200
{
  "tenantId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
  "displayName": "…",
  "verification": {
    "workerRequired": [
      "package_scan"
    ],
    "customerAllowed": [
      "otp"
    ],
    "customerMinimum": 2,
    "geofenceRadiusMeters": 1012.5,
    "allowGeofenceOverride": true
  },
  "version": 0
}

List drivers

GEThttps://api.drometra.com/v1/field/workers

Requires the access token of a person in your company.

Headers

x-tenant-idmandatorystring · uuid
Your company's identifier. The server checks that you are still an active member of it.

Response · 200

  • array de objectalways

It can respond with error 400, 401, 403, 404, 409, 410, 413, 415, 422, 429, 503. The error body is explained in Concepts.

request
curl -X GET "https://api.drometra.com/v1/field/workers" \
  -H "Authorization: Bearer $DROMETRA _ TOKEN"\
  -H "x-tenant-id: $DROMETRA_TENANT" \
  -H "Accept: application / json"
response · 200
{
  "items": [
    {
      "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
      "tenantId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
      "displayName": "…",
      "phone": "…",
      "linked": true,
      "active": true,
      "version": 1,
      "devices": [
        {
          "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
          "model": "…",
          "appVersion": "…",
          "enrolledAt": "2026-10-21T14:02:31Z",
          "activatedAt": "2026-10-21T14:02:31Z",
          "revokedAt": "2026-10-21T14:02:31Z"
        }
      ],
      "createdAt": "2026-10-21T14:02:31Z"
    }
  ]
}

Create a driver

POSThttps://api.drometra.com/v1/field/workers

Requires the access token of a person in your company.

Headers

x-tenant-idmandatorystring · uuid
Your company's identifier. The server checks that you are still an active member of it.

Body

displayNamemandatorystring
phonestring

Response · 201

  • idstring · uuidalways
  • tenantIdstring · uuidalways
  • displayNamestringalways
  • phonestring o nullalways
  • linkedbooleanalways
  • activebooleanalways
  • versionintegeralways
  • array de objectalways
  • createdAtstring · date-timealways

It can respond with error 400, 401, 403, 404, 409, 410, 413, 415, 422, 429, 503. The error body is explained in Concepts.

request
curl -X POST "https://api.drometra.com/v1/field/workers" \
  -H "Authorization: Bearer $DROMETRA _ TOKEN"\
  -H "x-tenant-id: $DROMETRA_TENANT" \
  -H "Content-Type: application/json" \ -d '{
    "displayName": "…"
  }'
response · 201
{
  "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
  "tenantId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
  "displayName": "…",
  "phone": "…",
  "linked": true,
  "active": true,
  "version": 1,
  "devices": [
    {
      "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
      "model": "…",
      "appVersion": "…",
      "enrolledAt": "2026-10-21T14:02:31Z",
      "activatedAt": "2026-10-21T14:02:31Z",
      "revokedAt": "2026-10-21T14:02:31Z"
    }
  ],
  "createdAt": "2026-10-21T14:02:31Z"
}

Update a driver

PATCHhttps://api.drometra.com/v1/field/workers/{id}

Requires the access token of a person in your company.

Headers

x-tenant-idmandatorystring · uuid
Your company's identifier. The server checks that you are still an active member of it.

Road parameters

idmandatorystring · uuid
e. g. 0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d

Body

displayNamestring
phonestring o null
activeboolean
versionmandatoryinteger

Response · 200

  • idstring · uuidalways
  • tenantIdstring · uuidalways
  • displayNamestringalways
  • phonestring o nullalways
  • linkedbooleanalways
  • activebooleanalways
  • versionintegeralways
  • array de objectalways
  • createdAtstring · date-timealways

It can respond with error 400, 401, 403, 404, 409, 410, 413, 415, 422, 429, 503. The error body is explained in Concepts.

request
curl -X PATCH "https://api.drometra.com/v1/field/workers/0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d" \
  -H "Authorization: Bearer $DROMETRA _ TOKEN"\
  -H "x-tenant-id: $DROMETRA_TENANT" \
  -H "Content-Type: application/json" \ -d '{
    "version": 0
  }'
response · 200
{
  "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
  "tenantId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
  "displayName": "…",
  "phone": "…",
  "linked": true,
  "active": true,
  "version": 1,
  "devices": [
    {
      "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
      "model": "…",
      "appVersion": "…",
      "enrolledAt": "2026-10-21T14:02:31Z",
      "activatedAt": "2026-10-21T14:02:31Z",
      "revokedAt": "2026-10-21T14:02:31Z"
    }
  ],
  "createdAt": "2026-10-21T14:02:31Z"
}

Invite a driver to Dromivia

POSThttps://api.drometra.com/v1/field/workers/{id}/invitations

Requires the access token of a person in your company.

Headers

x-tenant-idmandatorystring · uuid
Your company's identifier. The server checks that you are still an active member of it.

Road parameters

idmandatorystring · uuid
e. g. 0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d

Response · 201

  • idstring · uuidalways
  • workerIdstring · uuidalways
  • expiresAtstring · date-timealways
  • codestringalways
  • enrollmentUristringalways

It can respond with error 400, 401, 403, 404, 409, 410, 413, 415, 422, 429, 503. The error body is explained in Concepts.

request
curl -X POST "https://api.drometra.com/v1/field/workers/0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d/invitations" \
  -H "Authorization: Bearer $DROMETRA _ TOKEN"\
  -H "x-tenant-id: $DROMETRA_TENANT" \
  -H "Accept: application / json"
response · 201
{
  "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
  "workerId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
  "expiresAt": "2026-10-21T14:02:31Z",
  "code": "…",
  "enrollmentUri": "…"
}

Unlink a phone

POSThttps://api.drometra.com/v1/field/devices/{id}/revoke

Requires the access token of a person in your company.

Headers

x-tenant-idmandatorystring · uuid
Your company's identifier. The server checks that you are still an active member of it.

Road parameters

idmandatorystring · uuid
e. g. 0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d

Response · 200

  • idstring · uuidalways
  • tenantIdstring · uuidalways
  • displayNamestringalways
  • phonestring o nullalways
  • linkedbooleanalways
  • activebooleanalways
  • versionintegeralways
  • array de objectalways
  • createdAtstring · date-timealways

It can respond with error 400, 401, 403, 404, 409, 410, 413, 415, 422, 429, 503. The error body is explained in Concepts.

request
curl -X POST "https://api.drometra.com/v1/field/devices/0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d/revoke" \
  -H "Authorization: Bearer $DROMETRA _ TOKEN"\
  -H "x-tenant-id: $DROMETRA_TENANT" \
  -H "Accept: application / json"
response · 200
{
  "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
  "tenantId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
  "displayName": "…",
  "phone": "…",
  "linked": true,
  "active": true,
  "version": 1,
  "devices": [
    {
      "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
      "model": "…",
      "appVersion": "…",
      "enrolledAt": "2026-10-21T14:02:31Z",
      "activatedAt": "2026-10-21T14:02:31Z",
      "revokedAt": "2026-10-21T14:02:31Z"
    }
  ],
  "createdAt": "2026-10-21T14:02:31Z"
}

Create a route

POSThttps://api.drometra.com/v1/field/routes

Requires the access token of a person in your company.

Headers

x-tenant-idmandatorystring · uuid
Your company's identifier. The server checks that you are still an active member of it.
idempotency-keymandatorystring · uuid
A new UUID per operation. If you repeat the request with the same key, the change is not applied twice.

Body

routePlanIdmandatorystring · uuid
vehicleRouteIdmandatorystring
workerIdmandatorystring · uuid
serviceDatemandatorystring
depotNamemandatorystring
vehiclemandatoryobject
verificationobject

Response · 201

  • idstring · uuidalways
  • tenantIdstring · uuidalways
  • workerIdstring · uuidalways
  • workerNamestringalways
  • routePlanIdstring · uuidalways
  • vehicleRouteIdstringalways
  • serviceDatestringalways
  • depotNamestringalways
  • objectalways
  • objectalways
  • stateenum: assigned | in_progress | finished | cancelledalways
  • versionintegeralways
  • createdAtstring · date-timealways
  • vehicleConfirmedAtstring · date-time o nullalways
  • finishedAtstring · date-time o nullalways
  • objectalways
  • array de objectalways

It can respond with error 400, 401, 403, 404, 409, 410, 413, 415, 422, 429, 503. The error body is explained in Concepts.

request
curl -X POST "https://api.drometra.com/v1/field/routes" \
  -H "Authorization: Bearer $DROMETRA _ TOKEN"\
  -H "x-tenant-id: $DROMETRA_TENANT" \
  -H "idempotency-key: $(uuidgen)" \
  -H "Content-Type: application/json" \ -d '{
    "routePlanId": "…",
    "vehicleRouteId": "…",
    "workerId": "…",
    "serviceDate": "…",
    "depotName": "…",
    "vehicle": {}
  }'
response · 201
{
  "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
  "tenantId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
  "workerId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
  "workerName": "…",
  "routePlanId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
  "vehicleRouteId": "…",
  "serviceDate": "…",
  "depotName": "…",
  "vehicle": {
    "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
    "plate": "…",
    "label": "…",
    "fleetVehicleId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d"
  },
  "verification": {
    "workerRequired": [
      "package_scan"
    ],
    "customerAllowed": [
      "otp"
    ],
    "customerMinimum": 2,
    "geofenceRadiusMeters": 1012.5,
    "allowGeofenceOverride": true
  },
  "state": "assigned",
  "version": 1,
  "createdAt": "2026-10-21T14:02:31Z",
  "vehicleConfirmedAt": "2026-10-21T14:02:31Z",
  "finishedAt": "2026-10-21T14:02:31Z",
  "progress": {
    "total": 0,
    "delivered": 0,
    "failed": 0,
    "pending": 0
  },
  "stops": [
    {
      "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
      "sequence": 1,
      "orderId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
      "reference": "…",
      "recipientName": "…",
      "address": "…",
      "coordinate": {
        "latitude": 0,
        "longitude": 0
      },
      "window": {
        "startsAt": "2026-10-21T14:02:31Z",
        "endsAt": "2026-10-21T14:02:31Z"
      },
      "state": "pending",
      "arrivedAt": "2026-10-21T14:02:31Z",
      "outcomeAt": "2026-10-21T14:02:31Z",
      "failureReason": "…",
      "receiverName": "…",
      "flags": [
        "…"
      ],
      "manifestSha256": "…",
      "evidence": [
        {
          "assetId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
          "kind": "DELIVERY_PHOTO",
          "sha256": "…",
          "capturedAt": "2026-10-21T14:02:31Z",
          "sizeBytes": 4194304.5
        }
      ],
      "parcels": [
        {
          "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
          "code": "…",
          "description": "…",
          "loadStatus": "PENDING",
          "deliveredAt": "2026-10-21T14:02:31Z",
          "returnedAt": "2026-10-21T14:02:31Z"
        }
      ],
      "plannedArrivalAt": "2026-10-21T14:02:31Z",
      "plannedDepartureAt": "2026-10-21T14:02:31Z",
      "codeVerifiedAt": "2026-10-21T14:02:31Z"
    }
  ]
}

List routes

GEThttps://api.drometra.com/v1/field/routes

Requires the access token of a person in your company.

Headers

x-tenant-idmandatorystring · uuid
Your company's identifier. The server checks that you are still an active member of it.

Reference parameters

serviceDatestring
fromstring
tostring
cursorstring

Response · 200

  • array de objectalways
  • nextCursorstring o null

It can respond with error 400, 401, 403, 404, 409, 410, 413, 415, 422, 429, 503. The error body is explained in Concepts.

request
curl -X GET "https://api.drometra.com/v1/field/routes" \
  -H "Authorization: Bearer $DROMETRA _ TOKEN"\
  -H "x-tenant-id: $DROMETRA_TENANT" \
  -H "Accept: application / json"
response · 200
{
  "items": [
    {
      "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
      "tenantId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
      "workerId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
      "workerName": "…",
      "routePlanId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
      "vehicleRouteId": "…",
      "serviceDate": "…",
      "depotName": "…",
      "vehicle": {
        "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
        "plate": "…",
        "label": "…",
        "fleetVehicleId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d"
      },
      "verification": {
        "workerRequired": [],
        "customerAllowed": [],
        "customerMinimum": 2,
        "geofenceRadiusMeters": 1012.5,
        "allowGeofenceOverride": true
      },
      "state": "assigned",
      "version": 1,
      "createdAt": "2026-10-21T14:02:31Z",
      "vehicleConfirmedAt": "2026-10-21T14:02:31Z",
      "finishedAt": "2026-10-21T14:02:31Z",
      "progress": {
        "total": 0,
        "delivered": 0,
        "failed": 0,
        "pending": 0
      },
      "stops": [
        {
          "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
          "sequence": 1,
          "orderId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
          "reference": "…",
          "recipientName": "…",
          "address": "…",
          "coordinate": {},
          "window": {},
          "state": "pending",
          "arrivedAt": "2026-10-21T14:02:31Z",
          "outcomeAt": "2026-10-21T14:02:31Z",
          "failureReason": "…",
          "receiverName": "…",
          "flags": [],
          "manifestSha256": "…",
          "evidence": [],
          "parcels": [],
          "plannedArrivalAt": "2026-10-21T14:02:31Z",
          "plannedDepartureAt": "2026-10-21T14:02:31Z",
          "codeVerifiedAt": "2026-10-21T14:02:31Z"
        }
      ]
    }
  ],
  "nextCursor": "…"
}

Get route progress

GEThttps://api.drometra.com/v1/field/routes/progress

Requires the access token of a person in your company.

Headers

x-tenant-idmandatorystring · uuid
Your company's identifier. The server checks that you are still an active member of it.

Reference parameters

serviceDatemandatorystring

Response · 200

  • serviceDatestringalways
  • array de objectalways

It can respond with error 400, 401, 403, 404, 409, 410, 413, 415, 422, 429, 503. The error body is explained in Concepts.

request
curl -X GET "https://api.drometra.com/v1/field/routes/progress" \
  -H "Authorization: Bearer $DROMETRA _ TOKEN"\
  -H "x-tenant-id: $DROMETRA_TENANT" \
  -H "Accept: application / json"
response · 200
{
  "serviceDate": "…",
  "items": [
    {
      "routeId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
      "fleetVehicleId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
      "state": "assigned",
      "total": 25,
      "delivered": 25,
      "failed": 25,
      "pending": 25,
      "next": {
        "sequence": 25.5,
        "name": "…"
      }
    }
  ]
}

Get a route

GEThttps://api.drometra.com/v1/field/routes/{id}

Requires the access token of a person in your company.

Headers

x-tenant-idmandatorystring · uuid
Your company's identifier. The server checks that you are still an active member of it.

Road parameters

idmandatorystring · uuid
e. g. 0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d

Response · 200

  • idstring · uuidalways
  • tenantIdstring · uuidalways
  • workerIdstring · uuidalways
  • workerNamestringalways
  • routePlanIdstring · uuidalways
  • vehicleRouteIdstringalways
  • serviceDatestringalways
  • depotNamestringalways
  • objectalways
  • objectalways
  • stateenum: assigned | in_progress | finished | cancelledalways
  • versionintegeralways
  • createdAtstring · date-timealways
  • vehicleConfirmedAtstring · date-time o nullalways
  • finishedAtstring · date-time o nullalways
  • objectalways
  • array de objectalways

It can respond with error 400, 401, 403, 404, 409, 410, 413, 415, 422, 429, 503. The error body is explained in Concepts.

request
curl -X GET "https://api.drometra.com/v1/field/routes/0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d" \
  -H "Authorization: Bearer $DROMETRA _ TOKEN"\
  -H "x-tenant-id: $DROMETRA_TENANT" \
  -H "Accept: application / json"
response · 200
{
  "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
  "tenantId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
  "workerId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
  "workerName": "…",
  "routePlanId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
  "vehicleRouteId": "…",
  "serviceDate": "…",
  "depotName": "…",
  "vehicle": {
    "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
    "plate": "…",
    "label": "…",
    "fleetVehicleId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d"
  },
  "verification": {
    "workerRequired": [
      "package_scan"
    ],
    "customerAllowed": [
      "otp"
    ],
    "customerMinimum": 2,
    "geofenceRadiusMeters": 1012.5,
    "allowGeofenceOverride": true
  },
  "state": "assigned",
  "version": 1,
  "createdAt": "2026-10-21T14:02:31Z",
  "vehicleConfirmedAt": "2026-10-21T14:02:31Z",
  "finishedAt": "2026-10-21T14:02:31Z",
  "progress": {
    "total": 0,
    "delivered": 0,
    "failed": 0,
    "pending": 0
  },
  "stops": [
    {
      "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
      "sequence": 1,
      "orderId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
      "reference": "…",
      "recipientName": "…",
      "address": "…",
      "coordinate": {
        "latitude": 0,
        "longitude": 0
      },
      "window": {
        "startsAt": "2026-10-21T14:02:31Z",
        "endsAt": "2026-10-21T14:02:31Z"
      },
      "state": "pending",
      "arrivedAt": "2026-10-21T14:02:31Z",
      "outcomeAt": "2026-10-21T14:02:31Z",
      "failureReason": "…",
      "receiverName": "…",
      "flags": [
        "…"
      ],
      "manifestSha256": "…",
      "evidence": [
        {
          "assetId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
          "kind": "DELIVERY_PHOTO",
          "sha256": "…",
          "capturedAt": "2026-10-21T14:02:31Z",
          "sizeBytes": 4194304.5
        }
      ],
      "parcels": [
        {
          "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
          "code": "…",
          "description": "…",
          "loadStatus": "PENDING",
          "deliveredAt": "2026-10-21T14:02:31Z",
          "returnedAt": "2026-10-21T14:02:31Z"
        }
      ],
      "plannedArrivalAt": "2026-10-21T14:02:31Z",
      "plannedDepartureAt": "2026-10-21T14:02:31Z",
      "codeVerifiedAt": "2026-10-21T14:02:31Z"
    }
  ]
}

Get the delivery summary

GEThttps://api.drometra.com/v1/field/deliveries/summary

Requires the access token of a person in your company.

Headers

x-tenant-idmandatorystring · uuid
Your company's identifier. The server checks that you are still an active member of it.

Reference parameters

frommandatorystring
tomandatorystring

Response · 200

  • objectalways
  • objectalways
  • objectalways
  • objectalways
  • array de objectalways
  • array de objectalways
  • array de objectalways
  • array de objectalways
  • objectalways

It can respond with error 400, 401, 403, 404, 409, 410, 413, 415, 422, 429, 503. The error body is explained in Concepts.

request
curl -X GET "https://api.drometra.com/v1/field/deliveries/summary" \
  -H "Authorization: Bearer $DROMETRA _ TOKEN"\
  -H "x-tenant-id: $DROMETRA_TENANT" \
  -H "Accept: application / json"
response · 200
{
  "period": {
    "from": "…",
    "to": "…"
  },
  "totals": {
    "stops": 0,
    "delivered": 0,
    "failed": 0,
    "pending": 0
  },
  "punctuality": {
    "evaluated": 0,
    "onTime": 0,
    "late": 0,
    "onTimeRate": 0.5
  },
  "serviceSeconds": {
    "measured": 0,
    "median": 0,
    "p90": 0
  },
  "failures": [
    {
      "reason": "…",
      "count": 0
    }
  ],
  "days": [
    {
      "date": "…",
      "stops": 0,
      "delivered": 0,
      "failed": 0,
      "pending": 0,
      "late": 0
    }
  ],
  "workers": [
    {
      "workerId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
      "name": "…",
      "stops": 0,
      "delivered": 0,
      "failed": 0,
      "late": 0
    }
  ],
  "places": [
    {
      "locationId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
      "name": "…",
      "lastDeliveredAt": "2026-10-21T14:02:31Z",
      "deliveries": 0,
      "daysSinceLast": 0,
      "usualIntervalDays": 0,
      "overdue": true
    }
  ],
  "rules": {
    "version": "…",
    "onTime": "…",
    "serviceTime": "…",
    "places": "…",
    "overdue": "…"
  }
}

Cancel a route

POSThttps://api.drometra.com/v1/field/routes/{id}/cancel

Requires the access token of a person in your company.

Headers

x-tenant-idmandatorystring · uuid
Your company's identifier. The server checks that you are still an active member of it.

Road parameters

idmandatorystring · uuid
e. g. 0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d

Body

versionmandatoryinteger

Response · 200

  • idstring · uuidalways
  • tenantIdstring · uuidalways
  • workerIdstring · uuidalways
  • workerNamestringalways
  • routePlanIdstring · uuidalways
  • vehicleRouteIdstringalways
  • serviceDatestringalways
  • depotNamestringalways
  • objectalways
  • objectalways
  • stateenum: assigned | in_progress | finished | cancelledalways
  • versionintegeralways
  • createdAtstring · date-timealways
  • vehicleConfirmedAtstring · date-time o nullalways
  • finishedAtstring · date-time o nullalways
  • objectalways
  • array de objectalways

It can respond with error 400, 401, 403, 404, 409, 410, 413, 415, 422, 429, 503. The error body is explained in Concepts.

request
curl -X POST "https://api.drometra.com/v1/field/routes/0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d/cancel" \
  -H "Authorization: Bearer $DROMETRA _ TOKEN"\
  -H "x-tenant-id: $DROMETRA_TENANT" \
  -H "Content-Type: application/json" \ -d '{
    "version": 0
  }'
response · 200
{
  "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
  "tenantId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
  "workerId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
  "workerName": "…",
  "routePlanId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
  "vehicleRouteId": "…",
  "serviceDate": "…",
  "depotName": "…",
  "vehicle": {
    "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
    "plate": "…",
    "label": "…",
    "fleetVehicleId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d"
  },
  "verification": {
    "workerRequired": [
      "package_scan"
    ],
    "customerAllowed": [
      "otp"
    ],
    "customerMinimum": 2,
    "geofenceRadiusMeters": 1012.5,
    "allowGeofenceOverride": true
  },
  "state": "assigned",
  "version": 1,
  "createdAt": "2026-10-21T14:02:31Z",
  "vehicleConfirmedAt": "2026-10-21T14:02:31Z",
  "finishedAt": "2026-10-21T14:02:31Z",
  "progress": {
    "total": 0,
    "delivered": 0,
    "failed": 0,
    "pending": 0
  },
  "stops": [
    {
      "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
      "sequence": 1,
      "orderId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
      "reference": "…",
      "recipientName": "…",
      "address": "…",
      "coordinate": {
        "latitude": 0,
        "longitude": 0
      },
      "window": {
        "startsAt": "2026-10-21T14:02:31Z",
        "endsAt": "2026-10-21T14:02:31Z"
      },
      "state": "pending",
      "arrivedAt": "2026-10-21T14:02:31Z",
      "outcomeAt": "2026-10-21T14:02:31Z",
      "failureReason": "…",
      "receiverName": "…",
      "flags": [
        "…"
      ],
      "manifestSha256": "…",
      "evidence": [
        {
          "assetId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
          "kind": "DELIVERY_PHOTO",
          "sha256": "…",
          "capturedAt": "2026-10-21T14:02:31Z",
          "sizeBytes": 4194304.5
        }
      ],
      "parcels": [
        {
          "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
          "code": "…",
          "description": "…",
          "loadStatus": "PENDING",
          "deliveredAt": "2026-10-21T14:02:31Z",
          "returnedAt": "2026-10-21T14:02:31Z"
        }
      ],
      "plannedArrivalAt": "2026-10-21T14:02:31Z",
      "plannedDepartureAt": "2026-10-21T14:02:31Z",
      "codeVerifiedAt": "2026-10-21T14:02:31Z"
    }
  ]
}

Download a piece of evidence

GEThttps://api.drometra.com/v1/field/assets/{id}/content

Requires the access token of a person in your company.

Headers

x-tenant-idmandatorystring · uuid
Your company's identifier. The server checks that you are still an active member of it.

Road parameters

idmandatorystring · uuid
e. g. 0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d

It can respond with error 400, 401, 403, 404, 409, 410, 413, 415, 422, 429, 503. The error body is explained in Concepts.

request
curl -X GET "https://api.drometra.com/v1/field/assets/0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d/content" \
  -H "Authorization: Bearer $DROMETRA _ TOKEN"\
  -H "x-tenant-id: $DROMETRA_TENANT" \
  -H "Accept: application / json"
response · 200
(image/jpeg)

Enroll a phone

POSThttps://api.drometra.com/v1/field/devices/enrollments

No session required: anyone with the link can open it.

Headers

x-tenant-idmandatorystring · uuid
Your company's identifier. The server checks that you are still an active member of it.
idempotency-keymandatorystring · uuid
A new UUID per operation. If you repeat the request with the same key, the change is not applied twice.

Body

codemandatorystring
devicemandatoryobject

Response · 201

  • deviceIdstring · uuidalways
  • objectalways

It can respond with error 400, 401, 403, 404, 409, 410, 413, 415, 422, 429, 503. The error body is explained in Concepts.

request
curl -X POST "https://api.drometra.com/v1/field/devices/enrollments" \
  -H "x-tenant-id: $DROMETRA_TENANT" \
  -H "idempotency-key: $(uuidgen)" \
  -H "Content-Type: application/json" \ -d '{
    "code": "…",
    "device": {}
  }'
response · 201
{
  "deviceId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
  "tenant": {
    "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
    "name": "…"
  }
}

Activate an enrolled phone

POSThttps://api.drometra.com/v1/field/devices/{id}/activation

Requires the access token of a person in your company.

Headers

x-tenant-idmandatorystring · uuid
Your company's identifier. The server checks that you are still an active member of it.

Road parameters

idmandatorystring · uuid
e. g. 0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d

Response · 200

  • objectalways
  • objectalways

It can respond with error 400, 401, 403, 404, 409, 410, 413, 415, 422, 429, 503. The error body is explained in Concepts.

request
curl -X POST "https://api.drometra.com/v1/field/devices/0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d/activation" \
  -H "Authorization: Bearer $DROMETRA _ TOKEN"\
  -H "x-tenant-id: $DROMETRA_TENANT" \
  -H "Accept: application / json"
response · 200
{
  "worker": {
    "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
    "displayName": "…"
  },
  "tenant": {
    "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
    "name": "…"
  }
}

Get this phone's driver

GEThttps://api.drometra.com/v1/field/me

Requires the access token of a person in your company.

Headers

x-tenant-idmandatorystring · uuid
Your company's identifier. The server checks that you are still an active member of it.
x-device-idmandatorystring · uuid
The phone linked in Dromivia that makes the request.

Response · 200

  • objectalways
  • objectalways

It can respond with error 400, 401, 403, 404, 409, 410, 413, 415, 422, 429, 503. The error body is explained in Concepts.

request
curl -X GET "https://api.drometra.com/v1/field/me" \
  -H "Authorization: Bearer $DROMETRA _ TOKEN"\
  -H "x-tenant-id: $DROMETRA_TENANT" \
  -H "x-device-id: $DROMETRA_DEVICE" \
  -H "Accept: application / json"
response · 200
{
  "worker": {
    "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
    "displayName": "…"
  },
  "tenant": {
    "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
    "name": "…"
  }
}

Get the driver's current route

GEThttps://api.drometra.com/v1/field/routes/current

Requires the access token of a person in your company.

Headers

x-tenant-idmandatorystring · uuid
Your company's identifier. The server checks that you are still an active member of it.
x-device-idmandatorystring · uuid
The phone linked in Dromivia that makes the request.

Response · 200

  • idstring · uuidalways
  • datestringalways
  • versionintegeralways
  • objectalways
  • objectalways
  • array de objectalways

It can respond with error 400, 401, 403, 404, 409, 410, 413, 415, 422, 429, 503. The error body is explained in Concepts.

request
curl -X GET "https://api.drometra.com/v1/field/routes/current" \
  -H "Authorization: Bearer $DROMETRA _ TOKEN"\
  -H "x-tenant-id: $DROMETRA_TENANT" \
  -H "x-device-id: $DROMETRA_DEVICE" \
  -H "Accept: application / json"
response · 200
{
  "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
  "date": "…",
  "version": 1,
  "depot": {
    "name": "…"
  },
  "vehicle": {
    "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
    "plate": "…",
    "label": "…"
  },
  "stops": [
    {
      "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
      "sequence": 1,
      "orderReference": "…",
      "customer": {
        "name": "…",
        "phoneMasked": "…",
        "canCall": true
      },
      "address": "…",
      "addressDetail": "…",
      "coordinate": {
        "lat": 0,
        "lon": 0
      },
      "window": {
        "startsAt": "2026-10-21T14:02:31Z",
        "endsAt": "2026-10-21T14:02:31Z"
      },
      "notes": "…",
      "verification": {
        "workerRequired": [],
        "customerAllowed": [],
        "customerMinimum": 2,
        "geofenceRadiusMeters": 1012.5,
        "allowGeofenceOverride": true
      },
      "lines": [
        {
          "position": 50.5,
          "description": "…",
          "quantity": "…"
        }
      ],
      "secrets": {
        "otp": {
          "saltHex": "…",
          "iterations": 300500,
          "hashHex": "…"
        }
      },
      "parcels": [
        {
          "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
          "code": "…",
          "description": "…"
        }
      ]
    }
  ]
}

Record route events

POSThttps://api.drometra.com/v1/field/routes/{id}/events

Requires the access token of a person in your company.

Headers

x-tenant-idmandatorystring · uuid
Your company's identifier. The server checks that you are still an active member of it.
x-device-idmandatorystring · uuid
The phone linked in Dromivia that makes the request.
idempotency-keymandatorystring · uuid
A new UUID per operation. If you repeat the request with the same key, the change is not applied twice.

Road parameters

idmandatorystring · uuid
e. g. 0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d

Body

eventIdmandatorystring
occurredAtmandatorystring · date-time
eventmandatoryobject

Response · 202

  • eventIdstringalways
  • duplicatebooleanalways

It can respond with error 400, 401, 403, 404, 409, 410, 413, 415, 422, 429, 503. The error body is explained in Concepts.

request
curl -X POST "https://api.drometra.com/v1/field/routes/0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d/events" \
  -H "Authorization: Bearer $DROMETRA _ TOKEN"\
  -H "x-tenant-id: $DROMETRA_TENANT" \
  -H "idempotency-key: $(uuidgen)" \
  -H "x-device-id: $DROMETRA_DEVICE" \
  -H "Content-Type: application/json" \ -d '{
    "eventId": "…",
    "occurredAt": "…",
    "event": {}
  }'
response · 202
{
  "eventId": "…",
  "duplicate": true
}

Send route positions

POSThttps://api.drometra.com/v1/field/routes/{id}/positions

Requires the access token of a person in your company.

Headers

x-tenant-idmandatorystring · uuid
Your company's identifier. The server checks that you are still an active member of it.
x-device-idmandatorystring · uuid
The phone linked in Dromivia that makes the request.
idempotency-keymandatorystring · uuid
A new UUID per operation. If you repeat the request with the same key, the change is not applied twice.

Road parameters

idmandatorystring · uuid
e. g. 0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d

Body

positionsmandatoryarray de object

Response · 200

  • acceptedintegeralways
  • duplicatesintegeralways
  • array de objectalways

It can respond with error 400, 401, 403, 404, 409, 410, 413, 415, 422, 429, 503. The error body is explained in Concepts.

request
curl -X POST "https://api.drometra.com/v1/field/routes/0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d/positions" \
  -H "Authorization: Bearer $DROMETRA _ TOKEN"\
  -H "x-tenant-id: $DROMETRA_TENANT" \
  -H "idempotency-key: $(uuidgen)" \
  -H "x-device-id: $DROMETRA_DEVICE" \
  -H "Content-Type: application/json" \ -d '{
    "positions": []
  }'
response · 200
{
  "accepted": 50,
  "duplicates": 50,
  "rejected": [
    {
      "id": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
      "reason": "stale"
    }
  ]
}

Start an evidence upload

POSThttps://api.drometra.com/v1/field/evidence/uploads

Requires the access token of a person in your company.

Headers

x-tenant-idmandatorystring · uuid
Your company's identifier. The server checks that you are still an active member of it.
x-device-idmandatorystring · uuid
The phone linked in Dromivia that makes the request.
idempotency-keymandatorystring · uuid
A new UUID per operation. If you repeat the request with the same key, the change is not applied twice.

Body

idmandatorystring
kindmandatoryenum: DELIVERY_PHOTO | FAILURE_PHOTO | SIGNATURE
mimeTypemandatoryenum: image/jpeg | image/svg+xml
sizeBytesmandatoryinteger
sha256mandatorystring
capturedAtMsmandatoryinteger

Response · 201

  • assetIdstring · uuidalways
  • uploadUrlstringalways
  • methodstringalways
  • headersobjectalways
  • expiresAtstring · date-timealways
  • alreadyUploadedbooleanalways

It can respond with error 400, 401, 403, 404, 409, 410, 413, 415, 422, 429, 503. The error body is explained in Concepts.

request
curl -X POST "https://api.drometra.com/v1/field/evidence/uploads" \
  -H "Authorization: Bearer $DROMETRA _ TOKEN"\
  -H "x-tenant-id: $DROMETRA_TENANT" \
  -H "idempotency-key: $(uuidgen)" \
  -H "x-device-id: $DROMETRA_DEVICE" \
  -H "Content-Type: application/json" \ -d '{
    "id": "…",
    "kind": "…",
    "mimeType": "…",
    "sizeBytes": 0,
    "sha256": "…",
    "capturedAtMs": 0
  }'
response · 201
{
  "assetId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
  "uploadUrl": "…",
  "method": "PUT",
  "headers": {},
  "expiresAt": "2026-10-21T14:02:31Z",
  "alreadyUploaded": true
}

Upload evidence content

PUThttps://api.drometra.com/v1/field/evidence/uploads/{id}/content

No session required: anyone with the link can open it.

Road parameters

idmandatorystring · uuid
e. g. 0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d

Reference parameters

tokenmandatorystring

The body is the file, with Content-Type: image/jpeg.

It can respond with error 400, 401, 403, 404, 409, 410, 413, 415, 422, 429, 503. The error body is explained in Concepts.

request
curl -X PUT "https://api.drometra.com/v1/field/evidence/uploads/0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d/content" \
  -H "Content-Type: image/jpeg" \ --data-binary @archivo
response · 204
(sin cuerpo)

Send the code to the recipient

POSThttps://api.drometra.com/v1/field/routes/{routeId}/stops/{stopId}/customer-code/dispatch

Requires the access token of a person in your company.

Headers

x-tenant-idmandatorystring · uuid
Your company's identifier. The server checks that you are still an active member of it.
x-device-idmandatorystring · uuid
The phone linked in Dromivia that makes the request.

Road parameters

routeIdmandatorystring · uuid
e. g. 0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d
stopIdmandatorystring · uuid
e. g. 0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d

Response · 400

  • errorenum: invalid_request | unauthorized | forbidden | not_found | conflict | cursor_expired | …always
  • requestIdstring · uuidalways
  • reasonstring

It can respond with error 400, 401, 403, 404, 409, 410, 413, 415, 422, 429, 503. The error body is explained in Concepts.

request
curl -X POST "https://api.drometra.com/v1/field/routes/0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d/stops/0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d/customer-code/dispatch" \
  -H "Authorization: Bearer $DROMETRA _ TOKEN"\
  -H "x-tenant-id: $DROMETRA_TENANT" \
  -H "x-device-id: $DROMETRA_DEVICE" \
  -H "Accept: application / json"
response · 400
{
  "error": "invalid_request",
  "requestId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
  "reason": "…"
}

Verify the recipient's code

POSThttps://api.drometra.com/v1/field/routes/{routeId}/stops/{stopId}/customer-code/verify

Requires the access token of a person in your company.

Headers

x-tenant-idmandatorystring · uuid
Your company's identifier. The server checks that you are still an active member of it.
x-device-idmandatorystring · uuid
The phone linked in Dromivia that makes the request.

Road parameters

routeIdmandatorystring · uuid
e. g. 0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d
stopIdmandatorystring · uuid
e. g. 0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d

Body

codemandatorystring

Response · 200

  • validbooleanalways
  • attemptsRemainingintegeralways

It can respond with error 400, 401, 403, 404, 409, 410, 413, 415, 422, 429, 503. The error body is explained in Concepts.

request
curl -X POST "https://api.drometra.com/v1/field/routes/0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d/stops/0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d/customer-code/verify" \
  -H "Authorization: Bearer $DROMETRA _ TOKEN"\
  -H "x-tenant-id: $DROMETRA_TENANT" \
  -H "x-device-id: $DROMETRA_DEVICE" \
  -H "Content-Type: application/json" \ -d '{
    "code": "…"
  }'
response · 200
{
  "valid": true,
  "attemptsRemaining": 2.5
}

List deliveries

GEThttps://api.drometra.com/v1/field/deliveries

Requires the access token of a person in your company.

Headers

x-tenant-idmandatorystring · uuid
Your company's identifier. The server checks that you are still an active member of it.

Reference parameters

fromstring
tostring
outcomeenum: delivered | failed
cursorstring

Response · 200

  • fromstringalways
  • tostringalways
  • objectalways
  • objectalways
  • array de objectalways
  • nextCursorstring o nullalways

It can respond with error 400, 401, 403, 404, 409, 410, 413, 415, 422, 429, 503. The error body is explained in Concepts.

request
curl -X GET "https://api.drometra.com/v1/field/deliveries" \
  -H "Authorization: Bearer $DROMETRA _ TOKEN"\
  -H "x-tenant-id: $DROMETRA_TENANT" \
  -H "Accept: application / json"
response · 200
{
  "from": "…",
  "to": "…",
  "rules": {
    "version": "…",
    "distance": "…",
    "code": "…",
    "window": "…"
  },
  "counts": {
    "delivered": 0,
    "failed": 0,
    "partial": 0
  },
  "items": [
    {
      "stopId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
      "routeId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
      "orderId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
      "serviceDate": "…",
      "sequence": 25.5,
      "reference": "…",
      "recipientName": "…",
      "address": "…",
      "workerName": "…",
      "vehicleLabel": "…",
      "vehiclePlate": "…",
      "plannedArrivalAt": "2026-10-21T14:02:31Z",
      "arrivedAt": "2026-10-21T14:02:31Z",
      "outcomeAt": "2026-10-21T14:02:31Z",
      "outcome": "delivered",
      "failureReason": "…",
      "receiverName": "…",
      "flags": [
        "…"
      ],
      "summary": {
        "methods": [],
        "closeDistanceMeters": 0,
        "positionAccuracyMeters": 0,
        "code": "online",
        "note": "…",
        "appVersion": "…"
      },
      "parcels": {
        "total": 0,
        "delivered": 0
      },
      "assets": [
        {
          "assetId": "0b6f8c2e-4a1d-4e5b-9c3f-2d7e8a9b1c4d",
          "kind": "DELIVERY_PHOTO",
          "sha256": "…",
          "capturedAt": "2026-10-21T14:02:31Z",
          "sizeBytes": 4194304.5
        }
      ],
      "manifestSha256": "…"
    }
  ],
  "nextCursor": "…"
}