Account Departments
Taxi & Private Hire › Products › Account › Account Departments
Generally available
Departments inside a corporate Account. Each department has its own contacts, optional override capabilities, optional own auth method, and a list of AccountEmployees. Used for split billing, reporting by department, and access control (an employee in Department A cannot book on Department B's budget).
Example request
POST /client/{clientId}/account/{accountId}/accountdepartment
{
"departmentName": "<string>",
"active": false,
"primaryGroup": "<string>",
"mergePreference": "INHERIT",
"primaryContact": {
"id": "<id>"
},
"secondaryContact": {
"id": "<id>"
},
"streetAddress": "<string>",
"addressArea": "<string>",
"city": "<string>",
"state": "<string>",
"postCode": "<string>",
"country": "<string>",
"iban": "<string>",
"bic": "<string>",
"companyName": "<string>",
"tradingAlias": "<string>",
"companyNumber": "<string>",
"taxNumber": "<string>",
"accountEmployees": [
{
"id": "<id>"
}
],
"authType": "PIN",
"driverNote": "<string>",
"managementNote": "<string>",
"groups": [
{
"id": "<id>"
}
],
"clientCapabilities": [
{
"id": "<id>"
}
]
}
Example shape, derived from the AccountDepartment fields — indicative,
not the authoritative schema (that arrives with the API reference).
Endpoints
| Method | Path | |
|---|---|---|
POST | /client/{clientId}/account/{accountId}/accountdepartment · primary | |
GET | /client/{clientId}/account/{accountId}/accountdepartment | |
POST | /client/{clientId}/account/{accountId}/accountdepartment/{accountdepartmentId} | |
POST | /client/{clientId}/accountdepartment/{accountdepartmentId}/brand/{brandId} | |
POST | /client/{clientId}/accountdepartment/{accountdepartmentId}/clientcapability/{capabilityId} | |
POST | /client/{clientId}/accountdepartment | |
DELETE | /client/{clientId}/accountdepartment/{accountdepartmentId}/clientcapability/{capabilityId} | |
GET | /client/{clientId}/accountdepartment/{accountdepartmentId} | |
GET | /client/{clientId}/accountdepartment | |
POST | /client/{clientId}/accountdepartment/{accountdepartmentId} | |
GET | /client/{clientId}/brand/{brandId}/accountdepartment/{accountdepartmentId} | |
POST | /client/{clientId}/brand/{brandId}/accountdepartment/{accountdepartmentId} |
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
Add a department (cost-centre) to an existing corporate account.
POST/client/{clientId}/accountdepartment
Related
Fields
| Field | Type | Description |
|---|---|---|
departmentName | string | Display name for the department — used in the system for operators and drivers, on receipts, and in reporting. |
active | bool | Whether this department can be selected for new bookings. Inactive departments stay on historical trips for reporting but disappear from operator-side pickers. |
primaryGroup | string | ACL group used to scope visibility of this department — operators in this group see it, others do not. Null means visible to anyone with the parent account. |
mergePreference | MergePreference · INHERIT | NEVER | NONE | ACCOUNT | ACCOUNT_DEPARTMENT | ALL | Override or inherit the parent account's merge preference. INHERIT defers to the account; explicit values override (NEVER, OWN_ACCOUNT, OWN_DEPARTMENT, ANY). |
primaryContact | AccountEmployee | Recipient of billing emails, escalation flows, and the default invoice CC. |
secondaryContact | AccountEmployee | Backup contact employee for the department — used when the primary contact is unavailable. |
streetAddress | string | |
addressArea | string | |
city | string | |
state | string | |
postCode | string | |
country | string | |
iban | string | |
bic | string | |
companyName | string | |
tradingAlias | string | |
companyNumber | string | |
taxNumber | string | |
account | Account | Parent account. Departments scope inside one account — billing rolls up to the account, an employee in Account A's Department X cannot book on Account B's budget. |
accountEmployees | Collection | |
authType | AccountAuthType · PIN | SMS | NONE | MFA | INHERIT | Override the parent account's auth method (badge / PIN / SSO) for this department. INHERIT uses whatever the account has set; an explicit value overrides for employees scoped to this department. |
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. |