Skip to content

Document Storage

Taxi & Private HireProductsDocument › Document Storage

Generally available

The generic document record: a stored binary asset (such as a licence, insurance, NCT/MOT or tax document) plus its classification and metadata — issue date, expiry and issuing authority. Documents attach to drivers and vehicles, and the feature covers upload, download, replacement and tenant-scoped retention.

Example request

GET /client/{clientId}/document

See the API reference for the full request and response schema.

Endpoints

MethodPath
GET /client/{clientId}/document · primary
POST /client/{clientId}/document
GET /client/{clientId}/document/{id}/url

Full request/response schemas and an interactive explorer will live in the API reference (coming soon).

Fields

FieldTypeDescription
filename string Original filename at upload time. Display-only — storage uses `storageKey` to address the object.
storageKey string Opaque key the storage adapter uses to retrieve the binary (S3 object key, MinIO path, etc.). Treat as an internal handle — never log or surface.
documentType DocumentType · DRIVER_PHOTO | DRIVER_INSURANCE_POLICY | DRIVER_LICENCE | DRIVER_TAXI_LICENCE | POLICE_REPORT | OTHER Document classification — LICENCE / INSURANCE / NCT / TAX / TRAINING / PHOTO / OTHER. Drives compliance dashboards and the per-type expiry workflow.
bucket string Storage bucket name. Tenants can use multiple buckets (e.g. region-pinned EU vs IE compliance buckets); this field carries which one.
requiresAuthentication bool When true, the document URL is gated behind authenticated download. When false, the file lives at a presigned / public URL. Default true.
size int File size in bytes, captured at upload time. Display-only (shown as KB/MB).
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.