Skip to content

Account Departments

Taxi & Private HireProductsAccount › 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

MethodPath
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.

Create a corporate account

config risk: low

Set up a corporate account with a department and an employee.

  1. POST /client/{clientId}/account
  2. POST /client/{clientId}/accountdepartment
  3. POST /client/{clientId}/accountemployee
Add an account department

config risk: low

Add a department (cost-centre) to an existing corporate account.

  1. POST /client/{clientId}/accountdepartment

Fields

FieldTypeDescription
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.