Chargeable Capabilities
Taxi & Private Hire › Products › Pricing › 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
| Method | Path | |
|---|---|---|
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).
Related
Fields
| Field | Type | Description |
|---|---|---|
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. |