Brands
Taxi & Private Hire › Products › Brand › Brands
Generally available
Multi-brand operations: tenants running multiple consumer-facing brands (e.g. a premium brand and an economy brand under one back-office) configure each as a Brand row. Each brand has its own ref, name, email, phone, website, optional primary fleet binding, and at most one isDefault per tenant. Brands scope Customers (each customer has a default brand) and can be referenced by Fleet operating-mode logic. Brand selection feeds the customer-facing app theming and the email templates.
Example request
POST /client/{clientId}/brand
{
"isDefault": false,
"ref": "<string>",
"name": "<string>",
"fleets": [
{
"id": "<id>"
}
],
"primaryGroup": "<string>",
"primaryContact": {
"id": "<id>"
},
"secondaryContact": {
"id": "<id>"
},
"streetAddress": "<string>",
"addressArea": "<string>",
"city": "<string>",
"state": "<string>",
"postCode": "<string>",
"country": "<string>",
"companyNumber": "<string>",
"taxNumber": "<string>",
"tradingAlias": "<string>",
"companyName": "<string>",
"website": "<string>",
"phone": "<string>",
"email": "<string>",
"tags": [
{
"id": "<id>"
}
],
"driverNote": "<string>",
"managementNote": "<string>"
}
Example shape, derived from the Brand fields — indicative,
not the authoritative schema (that arrives with the API reference).
Endpoints
| Method | Path | |
|---|---|---|
POST | /client/{clientId}/brand/{brandId}/fleet/{fleetId} | |
POST | /client/{clientId}/brand · primary | |
DELETE | /client/{clientId}/brand/{brandId}/fleet/{fleetId} | |
GET | /client/{clientId}/brand/{brandId} | |
POST | /client/{clientId}/brand/{brandId} |
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
Link a fleet to a brand for brand-scoped dispatch.
POST/client/{clientId}/brand/{brandId}/fleet/{fleetId}
config risk: low
Onboard a white-label brand / sub-fleet within the tenant.
POST/client/{clientId}/brand
Fields
| Field | Type | Description |
|---|---|---|
isDefault | bool | Default-brand flag — at most one Brand per tenant has this set. New customers / unassigned bookings fall back to the default brand for theming + email templates. |
ref | string | Short tenant-defined reference key (e.g. "premium", "city-cabs"). Stable handle used in URLs and integration payloads. |
name | string | Display name shown to customers + operators. Drives email-template branding and the customer-app theming. |
fleets | Collection | Fleets this brand operates through. A premium brand might bind to a luxury-only fleet while an economy brand uses the full fleet pool. |
primaryGroup | string | Operator-curated grouping label for the brand (used in console list grouping + reporting cuts). Free-text — not a relation. |
primaryContact | Customer | Customer record nominated as the brand's main point of contact (account manager, owner liaison). A `Customer` reference rather than free text so the contact's phone/email stay in sync with their customer profile. |
secondaryContact | Customer | Secondary / fallback contact Customer for the brand. Same shape as `primaryContact`. |
streetAddress | string | |
addressArea | string | |
city | string | |
state | string | |
postCode | string | |
country | string | |
companyNumber | string | Registered company / business number for the legal entity behind the brand. Jurisdiction-dependent format; appears on customer-facing invoices + receipts. |
taxNumber | string | Tax / VAT registration number for the brand's legal entity. Surfaced on invoices for tax-compliance. |
tradingAlias | string | Trading-as name when the brand operates publicly under a name different to `companyName` (the registered legal name). |
companyName | string | Registered legal name of the company behind the brand. Distinct from `name` (the customer-facing display name) and `tradingAlias` (the public trading name). |
website | string | |
phone | string | |
email | string | |
tags | Collection | Allows multiple brands to be grouped by a common tag, and referred to as a group in other areas of the system |
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. |