Skip to content

Chargeable Capabilities

Taxi & Private HireProductsPricing › Chargeable Capabilities

Generally available

When a ClientCapability has `priceCents` set, every trip segment that requests that capability gets a CAPABILITY_FEE line item added to its TripChargeItem breakdown — surfaced on the customer receipt and on the operator-side charge breakdown. The TaxCategory binding on the same row sets which tax classification the fee falls under at write time, so historical receipts reproduce correctly when tax rules change.

Example request

POST /client/{clientId}/taxcategory

{
  "ref": "<string>",
  "name": "<string>",
  "capability": {
    "id": "<id>"
  },
  "dispatchProximityModifier": 0,
  "priceCents": 0,
  "priceLabel": "<string>",
  "taxCategory": {
    "id": "<id>"
  },
  "driverNote": "<string>",
  "managementNote": "<string>"
}

Example shape, derived from the ClientCapability fields — indicative, not the authoritative schema (that arrives with the API reference).

Endpoints

MethodPath
POST /client/{clientId}/taxcategory · primary
GET /client/{clientId}/taxcategory/{taxCategoryId}
POST /client/{clientId}/taxcategory/{taxCategoryId}

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

Fields

FieldTypeDescription
ref string Short reference key the tenant picks (e.g. "wch", "child_seat"). Surfaces in dropdowns and on receipts; doesn't need to match the underlying Capability's globally-unique key.
name string Tenant-facing display name. Initialised from the global Capability.name but editable per tenant — lets a brand market the same capability as "Premium Vehicle" while another calls it "Executive".
capability Capability Link to the global Capability catalogue entry — provides the bit position used for bitmask matching at dispatch.
dispatchProximityModifier smallint Effective metres added to the dispatch search radius when this capability is required. Positive widens (look further for a wheelchair-accessible vehicle), negative narrows. Default 0.
priceCents integer Per-occurrence charge in cents added to TripChargeItem when this capability is requested. Null/0 = non-chargeable; positive = surcharge (wheelchair, child seat); negative = discount (allowed but uncommon). Drives the "Chargeable Capabilities" pricing pipeline.
priceLabel string Optional override for the line-item label written to TripChargeItem. Defaults to the capability's `name` when null. Use when the receipt should phrase the charge differently from the editor name ("Child Seat Fee" vs "Child Seat").
taxCategory TaxCategory Tax category snapshot for the chargeable line item this capability produces. Written onto TripChargeItem at build time so historical charges resolve correct tax even after the ClientCapability is later edited.
driverNote string Notes shared with the Driver and Operator, to be treated as publicly visible and not to include personal information
managementNote string Internal notes for management use only.
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.