Approved SCP Drivers
Taxi & Private Hire › Products › Fleet › Approved SCP Drivers
Generally available
Operator-defined approval / preference list of Drivers authorised to transport a specific Special Category Passenger. HARD mode locks dispatch to the approved list (compliance, safeguarding); SOFT mode prefers approved drivers within a window. Pairs naturally with Recurring Trips for school-run patterns where families want continuity with a known driver.
Example request
POST /client/{clientId}/driverscp
{
"driver": {
"id": "<id>"
},
"mode": "HARD",
"priority": 0,
"expiresAt": 0,
"notes": "<text>"
}
Example shape, derived from the DriverScp fields — indicative,
not the authoritative schema (that arrives with the API reference).
Endpoints
| Method | Path | |
|---|---|---|
POST | /client/{clientId}/driverscp · primary | |
POST | /client/{clientId}/driver/{driverId}/driverscp | |
POST | /client/{clientId}/scp/{scpId}/driverscp | |
DELETE | /client/{clientId}/driverscp/{prefId} | |
DELETE | /client/{clientId}/driver/{driverId}/driverscp/{prefId} | |
DELETE | /client/{clientId}/scp/{scpId}/driverscp/{prefId} | |
GET | /client/{clientId}/driverscp/{prefId} | |
GET | /client/{clientId}/driverscp | |
GET | /client/{clientId}/driver/{driverId}/driverscp | |
GET | /client/{clientId}/scp/{scpId}/driverscp | |
POST | /client/{clientId}/driverscp/{prefId} | |
POST | /client/{clientId}/driver/{driverId}/driverscp/{prefId} | |
POST | /client/{clientId}/scp/{scpId}/driverscp/{prefId} |
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
Authorise a vetted driver to carry a specific special-category (school) passenger.
POST/client/{clientId}/driverscp
Settings
How operators configure this feature.
School and care-programme passengers often need familiar, approved drivers, and the wrong match can mean a complaint or a safeguarding issue. This makes dispatch honour each programme's approved and preferred driver list when allocating those trips, so the right people stay on sensitive work — protecting both your passengers and your contracts.
On / off · default false
Related
Fields
| Field | Type | Description |
|---|---|---|
driver | Driver | Driver approved / preferred for this passenger. |
scp | SpecialCategoryPassenger | Special Category Passenger this approval belongs to. Set from the SCP edit page's Approved Drivers tab (parent context). |
mode | DriverPreferenceMode · HARD | SOFT | HARD = dispatch may only allocate this SCP to listed drivers; SOFT = prefer listed drivers within a window then fall through. Drives the dispatch eligibility filter. |
priority | integer | Tie-breaker priority among preferred drivers — lower numbers tried first. Lets operators rank "first choice / second choice" approved drivers. |
expiresAt | integer | Unix timestamp at which the approval lapses. Null = no expiry. Past expiry → row ignored by the resolver; kept on disk for audit / re-approval flows. |
notes | text | Internal operator note explaining why the approval is in place (background check ref, parent request, safeguarding note). protected serialization — not surfaced on driver/customer apps. |
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. |