Skip to content

Schedule Exclusions

Taxi & Private HireProductsTrip › Schedule Exclusions

Generally available

Operator-managed groups that pause one or many recurring trips for known disruptions — bad weather, voting days, school holidays, planned closures, strikes. Each group has a mode (RUN_ON, RUN_OFF, RUN_SCHEDULE) plus an inclusive startDay/endDay window for the schedule mode, and an optional scheduleResumeDay that auto-reverts manual overrides. Recurring trips can be linked to any number of groups; if ANY linked group resolves to OFF at release time, the trip is suppressed for that day. Lets operators lock down a whole class of recurring work with a single flip without touching each trip individually.

Example request

POST /client/{clientId}/scheduleexclusiongroup

{
  "name": "<string>",
  "mode": "RUN_SCHEDULE",
  "startDay": 0,
  "endDay": 0,
  "scheduleResumeDay": 0
}

Example shape, derived from the ScheduleExclusionGroup fields — indicative, not the authoritative schema (that arrives with the API reference).

Endpoints

MethodPath
POST /client/{clientId}/scheduleexclusiongroup · primary
DELETE /client/{clientId}/scheduleexclusiongroup/{id}
GET /client/{clientId}/scheduleexclusiongroup/{id}
GET /client/{clientId}/scheduleexclusiongroup
POST /client/{clientId}/scheduleexclusiongroup/{id}

Full request/response schemas and an interactive explorer will live in the API reference (coming soon).

Use cases

Operator flows that exercise this feature.

Add a schedule exclusion

config risk: low

Exclude a date range from a recurring schedule (term break / absence). Scope is per (weekday,time) block, not the whole schedule.

  1. POST /client/{clientId}/scheduleexclusiongroup

Fields

FieldTypeDescription
name string Operator-supplied label for the exclusion group ("Bad Weather", "Easter Holiday", "Voting Day"). Shown on the recurring-trip linker UI.
mode ScheduleExclusionGroupMode · RUN_SCHEDULE | RUN_ON | RUN_OFF Override mode — RUN_OFF (always off), RUN_ON (always on), RUN_SCHEDULE (window-driven). Named `mode` deliberately — `status` is reserved for lifecycle state machines.
startDay integer Inclusive YYYYMMDD calendar day. Only consulted when mode is RUN_SCHEDULE; override modes ignore the window. Null = no lower bound (OFF from forever up to endDay).
endDay integer Inclusive YYYYMMDD upper bound for the RUN_SCHEDULE window. Null = open-ended (OFF from startDay onwards). Both null = always on (no-op group).
scheduleResumeDay integer YYYYMMDD auto-revert date — when today reaches it, RUN_ON/RUN_OFF resets to RUN_SCHEDULE on the next read (see resetIfResumeDue). Null = manual revert only. Ignored while already in RUN_SCHEDULE.
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.