Corporate Accounts
Taxi & Private Hire › Products › Account › Corporate Accounts
Generally available
Corporate / B2B accounts that book and pay collectively for many passengers. Each Account has its own auth method (badge / PIN / SSO), default merge preference, capability set, custom field definitions, departmental hierarchy (AccountDepartment), and employee list (AccountEmployee). Trips charged to an account go on the account invoice instead of the passenger card. Used heavily for corporate commute contracts, school transport, medical-NHS contracts.
Example request
POST /client/{clientId}/account
{
"ref": "<external ref — required>",
"name": "<name — required>",
"active": true,
"authType": "PIN"
} Endpoints
| Method | Path | |
|---|---|---|
POST | /client/{clientId}/account/{accountId}/brand/{brandId} | |
POST | /client/{clientId}/account/{accountId}/clientcapability/{capabilityId} | |
POST | /client/{clientId}/account/{accountId}/tag/{tagName} | |
POST | /client/{clientId}/account · primary | |
DELETE | /client/{clientId}/account/{accountId}/clientcapability/{capabilityId} | |
GET | /client/{clientId}/account/{accountId} | |
GET | /client/{clientId}/account/{accountId}/tag | |
DELETE | /client/{clientId}/account/{accountId}/tag/{tagName} | |
GET | /client/{clientId}/account/search | |
POST | /client/{clientId}/account/{accountId} |
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
Set up a corporate account with a department and an employee.
POST/client/{clientId}/accountPOST/client/{clientId}/accountdepartmentPOST/client/{clientId}/accountemployee
config risk: low
Modify a corporate account (billing, contacts, SLA).
POST/client/{clientId}/account/{accountId}
Related
Fields
| Field | Type | Description |
|---|---|---|
ref | string | External reference for the account — integration-friendly handle. Surfaced on the dispatch board and invoices. |
name | string | Trading display name for the corporate account. Used wherever an account is shown to operators / drivers. |
active | bool | Master enable/disable. Inactive accounts cannot create new trips; existing data preserved for reporting. |
complexAccount | bool | When true, the account uses the complex routing rules — multi-department billing, per-department departments approver flow, AccountField-driven custom data capture. |
primaryGroup | string | Primary Group attachment — convenience field for the most-used bulk group when filtering / reporting. |
brand | Brand | Brand the account belongs to. Inherits default settings from the Brand. |
primaryContact | AccountEmployee | Primary AccountEmployee contact. Recipient of billing emails, escalation flows, and the default invoice CC. |
secondaryContact | AccountEmployee | Backup AccountEmployee contact — used when the primary is unreachable. |
streetAddress | string | |
addressArea | string | |
city | string | |
state | string | |
postCode | string | |
country | string | |
iban | string | |
bic | string | |
companyNumber | string | |
taxNumber | string | |
tradingAlias | string | |
companyName | string | |
website | string | |
phone | string | |
email | string | |
accountDepartments | Collection | Departments under this account — each department can carry its own billing config, primary group, and authorised employee list. |
accountEmployees | Collection | Employees authorised to book on this account. Each AccountEmployee is anchored to a Customer; flagged employees can authenticate via PIN/PASSWORD per `authType`. |
authType | AccountAuthType · PIN | SMS | NONE | MFA | INHERIT | Authentication method this account requires when employees book under its credit (PIN / PASSWORD / NONE). Drives the booking-flow auth prompt. |
automatedMergeStrategy | AutomatedMergeStrategy · DISABLED | ENABLED | Whether dispatch may automatically merge trips on this account (and how — DISABLED / SAME_DEPARTMENT / ANY). Drives the merge-analyzer eligibility check. |
mergePreference | MergePreference · INHERIT | NEVER | NONE | ACCOUNT | ACCOUNT_DEPARTMENT | ALL | Default MergePreference inherited by new departments / customers booking under this account. INHERIT falls back to the Brand setting → Client default. |
accountFields | Collection | |
tags | Collection | Allows multiple accounts 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. |
groups | Collection | |
clientCapabilities | Collection | Default Capabilities used when booking trips for this record |
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. |