Driver Sessions
Taxi & Private Hire › Products › Transporter › Driver Sessions
Generally available
A Transporter is a Driver-on-shift — the active pairing of a Driver, a Vehicle, and a Fleet during a shift, including authentication credentials, lifecycle state, current location, current trip assignment, and queue memberships. The driver app logs in as a Transporter; dispatch sees Transporters (not Drivers) as the unit of supply. Soft-delete preserves history when shifts end.
Example request
POST /client/{clientId}/transporter
{
"ref": "<string>",
"driver": {
"id": "<id>"
},
"driverEntryLocked": false,
"vehicle": {
"id": "<id>"
},
"vehicleEntryLocked": false,
"primaryGroup": "<string>",
"groups": [
{
"id": "<id>"
}
]
}
Example shape, derived from the Transporter fields — indicative,
not the authoritative schema (that arrives with the API reference).
Endpoints
| Method | Path | |
|---|---|---|
GET | /client/{clientId}/transporter/sessions | |
POST | /client/{clientId}/transporter · primary | |
GET | /client/{clientId}/transporter/{transporterId} | |
GET | /client/{clientId}/transporter/queues | |
POST | /client/{clientId}/transporter/{transporterId} | |
GET | /client/{clientId}/driver/me/eligible-vehicles | |
POST | /client/{clientId}/driver/me/end-shift | |
POST | /client/{clientId}/driver/me/messages/{id}/read | |
GET | /client/{clientId}/driver/me/messages | |
POST | /client/{clientId}/driver/me/start-shift | |
POST | /client/{clientId}/transporter/{transporterId}/force-end-shift | |
GET | /client/{clientId}/transporter/live-shifts | |
GET | /client/{clientId}/driver/me/surge | |
POST | /client/{clientId}/driver/me/surge/subscribe | |
POST | /client/{clientId}/driver/me/surge/unsubscribe |
Full request/response schemas and an interactive explorer will live in the API reference (coming soon).
Use cases
Operator flows that exercise this feature.
config risk: low
Create a transporter and link a driver + vehicle to it — the dispatchable unit.
POST/client/{clientId}/transporterPOST/client/{clientId}/transporter/{transporterId}/driver/{driverId}POST/client/{clientId}/transporter/{transporterId}/vehicle/{vehicleId}
Related
Fields
| Field | Type | Description |
|---|---|---|
ref | string | Shift reference / call-sign visible to operators + drivers ("DUB-042", "Night-7"). Queryable via `queryFields()`; not unique by itself — pair with `clientId`. |
driver | Driver | The current logged in Driver. If driver entry is locked, this is the only driver who may login to this Transporter |
driverEntryLocked | boolean | Single Driver Mode. This setting determines if the Transporter is in single driver mode only (locked to one specific driver). If this is enabled, you must specify a Driver record. If this is not enabled, you can choose which drivers are eligible below. |
vehicle | Vehicle | Vehicle paired into this shift. Combined with `driver` to form the dispatch-eligible Driver-on-shift unit. |
vehicleEntryLocked | boolean | Mirror of `driverEntryLocked` for the Vehicle side — `setVehicle()` throws when true. Keeps the Vehicle stable for the duration of an active trip / shift. |
capabilityMask | string | 32-bit bitmask of capabilities this Driver+Vehicle pairing satisfies. Aggregated from `Driver.capabilities` ∪ `Vehicle.capabilities`; dispatch matches it against `Trip.capabilityMask` with a single bitwise AND. |
fleetIds | json | Denormalised dispatch-scope: JSON array of Fleet IDs derived from the live Driver+Vehicle pairing. Source of truth on Driver/Vehicle; refreshed by membership-write hooks. |
primaryGroup | string | Primary group label within the fleet (controller groups, geographic teams, depot codes). Operator-curated; surfaces in the dispatch board grouping and reporting cuts. |
groups | Collection | |
deletedAt | integer | |
deletedBy | bigint | |
clientId | bigint | Tenant scope. Every tenant-aware entity carries this; `ClientFilter` enforces row-level isolation on read; the multi-tenancy routing layer (`/client/{clientId}`) sets it at create time. Surfaced only under `admin` / `tripLog` groups — never to end users. |
internalKey | string | Optional client-supplied external reference / idempotency key. When present, lets external systems correlate platform-side records back to their own source-of-truth ids. Not persisted to a column — populated by the request handler when the caller sets it. |
__objectType | string | Discriminator string (entity class short-name) emitted alongside the id in serialized output. Resolved at read time by `getObjectType()`; lets the FE dispatch entity-specific rendering without inspecting the URL. |
id | bigint | Snowflake-style primary key (unsigned BIGINT). Generated by `IdFactory` at create time; surfaced to the FE / API as a `G`-prefixed string and stripped back to plain bigint server-side before Doctrine lookup. |
createdDate | integer | Unix timestamp the row was first persisted. Set in the entity's PrePersist hook; never rewritten on subsequent updates. |
updatedDate | integer | Unix timestamp the row was last touched. Bumped on every commit that hits the Doctrine UoW for this entity; drives FE invalidation + the listing change cursor. |
passiveUpdatedDate | int | Read-through alias for `updatedDate` exposed under different serializer groups. Lets the FE distinguish "real edit" from "background touch" projections without changing the underlying column. |
listingUpdatedDate | int | Listing-projection timestamp surfaced only under the `listMode` group. Driven by `TripCache` and other listing-shape refreshers separately from `updatedDate` so a listing rebuild doesn't trigger detail-page invalidation. |