4klyft API (1.0.0)

Download OpenAPI specification:

4klyft API Support: support@4klyft.com License: Proprietary

Logistics operations API for the 4klyft platform.

Overview

This API provides comprehensive endpoints for managing:

  • Routes & Execution: Create, manage, and execute delivery routes
  • Shipments & Loads: Track shipments from pickup to delivery
  • Fleet Management: Manage carriers, vehicles, and drivers
  • Proof of Delivery: Capture signatures, photos, and delivery confirmations
  • Settings: Configure system-wide and tenant-specific settings
  • Webhooks: Subscribe to real-time event notifications
  • Analytics: Access delivery performance metrics and reports

Authentication

All API endpoints (except /api/docs and /api/v1/iam/auth/*) require JWT Bearer token authentication. Include the token in the Authorization header:

Authorization: Bearer <your-jwt-token>

Rate Limiting

API requests are rate-limited to ensure fair usage. Standard limits are:

  • 1000 requests per minute for read operations
  • 100 requests per minute for write operations

Error Handling

The API uses RFC 7807 Problem Details for error responses.

Fleet

A depot — a first-class fleet base (hub, yard, cross-dock, parking site) where fleet units are stationed and dispatched from. Optionally linked to a co-located warehouse via the bare warehouseId.

Get the Fleet Dashboard KPI summary

Headline KPIs for the morning triage dashboard: fleet availability, units in maintenance, overdue/upcoming preventive maintenance, open work orders, utilization. Fields with no data source yet (docs-expiring, cost-per-km) are returned as null.

Authorizations:
Bearer

Responses

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "fleetAvailabilityPercent": 0,
  • "unitsTotal": 0,
  • "unitsInMaintenance": 0,
  • "unitsAvailable": 0,
  • "overduePmCount": 0,
  • "upcomingPmCount": 0,
  • "openWorkOrderCount": 0,
  • "docsExpiringSoonCount": 0,
  • "costPerKm": 0,
  • "utilizationPercent": 0
}

List upcoming and overdue maintenance for the dashboard

Detailed rows behind the dashboard overdue/upcoming PM counts: each active preventive-maintenance plan that is overdue or due within 30 days (calendar) or already over its odometer interval, joined to its fleet unit. Ranked overdue-first then soonest-due, capped at the top 50.

Authorizations:
Bearer
query Parameters
page
integer
Default: 1

The collection page number

Responses

Response samples

Content type
{
  • "totalItems": 0,
  • "search": {
    },
  • "view": {
    },
  • "member": [
    ]
}

List per-unit utilization for the dashboard

Per-unit trip activity over the last 30 days: trip count, total distance, total drive time, distinct active days and the resulting utilization percentage, joined to each operational fleet unit (retired and disposed excluded). Units with no logged trips appear as zero rows flagged idle. Ranked idle-first then lowest-utilization, capped at the top 50.

Authorizations:
Bearer
query Parameters
page
integer
Default: 1

The collection page number

Responses

Response samples

Content type
{
  • "totalItems": 0,
  • "search": {
    },
  • "view": {
    },
  • "member": [
    ]
}

Get the current tenant fleet onboarding config

Returns the required-document-types for Driver and Vehicle onboarding for the authenticated tenant. When no per-tenant row has been written, the response is seeded from platform defaults — never a 404.

Authorizations:
Bearer

Responses

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "tenantId": "string",
  • "driverRequiredDocumentTypes": [
    ],
  • "vehicleRequiredDocumentTypes": [
    ],
  • "createdAt": "string",
  • "updatedAt": "string"
}

Update the current tenant fleet onboarding config

Overwrites the tenant's required-document-types. Both lists are required (full replace, not a partial patch). Empty lists are allowed (means "no documents required").

Authorizations:
Bearer
Request Body schema: application/merge-patch+json
required

The updated TenantFleetOnboardingConfig resource

driverRequiredDocumentTypes
Array of strings unique
vehicleRequiredDocumentTypes
Array of strings unique

Responses

Request samples

Content type
application/merge-patch+json
{
  • "driverRequiredDocumentTypes": [
    ],
  • "vehicleRequiredDocumentTypes": [
    ]
}

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "tenantId": "string",
  • "driverRequiredDocumentTypes": [
    ],
  • "vehicleRequiredDocumentTypes": [
    ],
  • "createdAt": "string",
  • "updatedAt": "string"
}

List fleet units

Paginated list of fleet units. Filter by kind, status, team, or capability.

Authorizations:
Bearer
query Parameters
kind
string
Enum: "power_unit" "load_carrier" "rigid_vehicle"

Filter by kind

status
string
Enum: "available" "in_use" "maintenance" "retired" "disposed"

Filter by status

crewId
string <uuid>

Filter by team UUID

capability
string

Filter by a single provided capability

page
integer >= 1
Default: 1

Page number

itemsPerPage
integer [ 1 .. 100 ]
Default: 30

Items per page

Responses

Response samples

Content type
{
  • "totalItems": 0,
  • "search": {
    },
  • "view": {
    },
  • "member": [
    ]
}

Register a fleet unit

Register a fleet unit

Authorizations:
Bearer
Request Body schema:
required

The new FleetUnit resource

kind
required
string
Enum: "power_unit" "load_carrier" "rigid_vehicle"
carrierType
string or null
Enum: "trailer" "container"
registrationNumber
required
string <= 64 characters
maxWeightKg
number or null >= 0
maxVolumeM3
number or null >= 0
maxPallets
integer or null >= 0
usableLengthMm
integer or null >= 0
usableWidthMm
integer or null >= 0
usableHeightMm
integer or null >= 0
capabilities
Array of strings
crewId
string or null <ulid>
registerAsAsset
boolean
Default: false

Opt in to also recording this unit in the Asset ownership register.

Responses

Request samples

Content type
{
  • "kind": "power_unit",
  • "carrierType": "trailer",
  • "registrationNumber": "string",
  • "maxWeightKg": 0,
  • "maxVolumeM3": 0,
  • "maxPallets": 0,
  • "usableLengthMm": 0,
  • "usableWidthMm": 0,
  • "usableHeightMm": 0,
  • "capabilities": [
    ],
  • "crewId": "string",
  • "registerAsAsset": false
}

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "kind": "power_unit",
  • "carrierType": "string",
  • "registrationNumber": "",
  • "status": "available",
  • "resourceKind": "string",
  • "maxWeightKg": 0,
  • "maxVolumeM3": 0,
  • "maxPallets": 0,
  • "usableLengthMm": 0,
  • "usableWidthMm": 0,
  • "usableHeightMm": 0,
  • "capabilities": [
    ],
  • "crewId": "string",
  • "teamName": "string",
  • "currentLatitude": 0,
  • "currentLongitude": 0,
  • "lastLocationUpdate": "string",
  • "currentOdometerKm": 0,
  • "createdAt": "",
  • "updatedAt": ""
}

Get a fleet unit

Get a fleet unit

Authorizations:
Bearer
path Parameters
id
required
string

FleetUnit identifier

Responses

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "kind": "power_unit",
  • "carrierType": "string",
  • "registrationNumber": "",
  • "status": "available",
  • "resourceKind": "string",
  • "maxWeightKg": 0,
  • "maxVolumeM3": 0,
  • "maxPallets": 0,
  • "usableLengthMm": 0,
  • "usableWidthMm": 0,
  • "usableHeightMm": 0,
  • "capabilities": [
    ],
  • "crewId": "string",
  • "teamName": "string",
  • "currentLatitude": 0,
  • "currentLongitude": 0,
  • "lastLocationUpdate": "string",
  • "currentOdometerKm": 0,
  • "createdAt": "",
  • "updatedAt": ""
}

Retire a fleet unit

Retire a fleet unit

Authorizations:
Bearer
path Parameters
id
required
string

FleetUnit identifier

Responses

Response samples

Content type
{
  • "type": "/errors/validation-error",
  • "title": "Validation Error",
  • "status": 400,
  • "detail": "The provided input is invalid",
  • "violations": [
    ],
  • "instance": "string"
}

Update a fleet unit

Update a fleet unit

Authorizations:
Bearer
path Parameters
id
required
string

FleetUnit identifier

Request Body schema: application/merge-patch+json
required

The updated FleetUnit resource

registrationNumber
string or null <= 64 characters
maxWeightKg
number or null >= 0
maxVolumeM3
number or null >= 0
maxPallets
integer or null >= 0
usableLengthMm
integer or null >= 0
usableWidthMm
integer or null >= 0
usableHeightMm
integer or null >= 0
capabilities
Array of strings
status
string or null
Enum: "available" "in_use" "maintenance" "retired" "disposed"

Responses

Request samples

Content type
application/merge-patch+json
{
  • "registrationNumber": "string",
  • "maxWeightKg": 0,
  • "maxVolumeM3": 0,
  • "maxPallets": 0,
  • "usableLengthMm": 0,
  • "usableWidthMm": 0,
  • "usableHeightMm": 0,
  • "capabilities": [
    ],
  • "status": "available"
}

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "kind": "power_unit",
  • "carrierType": "string",
  • "registrationNumber": "",
  • "status": "available",
  • "resourceKind": "string",
  • "maxWeightKg": 0,
  • "maxVolumeM3": 0,
  • "maxPallets": 0,
  • "usableLengthMm": 0,
  • "usableWidthMm": 0,
  • "usableHeightMm": 0,
  • "capabilities": [
    ],
  • "crewId": "string",
  • "teamName": "string",
  • "currentLatitude": 0,
  • "currentLongitude": 0,
  • "lastLocationUpdate": "string",
  • "currentOdometerKm": 0,
  • "createdAt": "",
  • "updatedAt": ""
}

Dispose a fleet unit

Dispose a fleet unit

Authorizations:
Bearer
path Parameters
id
required
string

FleetUnit identifier

Responses

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "kind": "power_unit",
  • "carrierType": "string",
  • "registrationNumber": "",
  • "status": "available",
  • "resourceKind": "string",
  • "maxWeightKg": 0,
  • "maxVolumeM3": 0,
  • "maxPallets": 0,
  • "usableLengthMm": 0,
  • "usableWidthMm": 0,
  • "usableHeightMm": 0,
  • "capabilities": [
    ],
  • "crewId": "string",
  • "teamName": "string",
  • "currentLatitude": 0,
  • "currentLongitude": 0,
  • "lastLocationUpdate": "string",
  • "currentOdometerKm": 0,
  • "createdAt": "",
  • "updatedAt": ""
}

List all vehicles

Retrieve a paginated list of vehicles with optional filters. Supports filtering by status, type, and team.

Authorizations:
Bearer
query Parameters
status
string
Enum: "available" "in_use" "maintenance" "decommissioned"
Example: status=available

Filter by vehicle status

type
string
Enum: "van" "truck" "bike" "car"
Example: type=van

Filter by vehicle type

crewId
string <uuid>
Example: crewId=01912345-6789-7abc-def0-123456789abc

Filter by team UUID

page
integer >= 1
Default: 1
Example: page=1

Page number for pagination

itemsPerPage
integer [ 1 .. 100 ]
Default: 30
Example: itemsPerPage=30

Number of items per page

Responses

Response samples

Content type
{
  • "totalItems": 0,
  • "search": {
    },
  • "view": {
    },
  • "member": [
    ]
}

Register a vehicle

Register a new vehicle in the fleet. The vehicle will be available for assignment after registration.

Authorizations:
Bearer
Request Body schema: application/json
required

Vehicle registration data

registrationNumber
required
string <= 20 characters

Vehicle registration/license plate number

type
required
string
Enum: "van" "truck" "bike" "car"

Type of vehicle

make
string or null <= 100 characters

Vehicle manufacturer

model
string or null <= 100 characters

Vehicle model

year
integer or null >= 1990

Manufacturing year

crewId
string or null <uuid>

Team UUID to assign the vehicle to

maxWeightKg
number or null >= 0

Maximum weight capacity in kilograms

maxVolumeCubicMeters
number or null >= 0

Maximum volume capacity in cubic meters

Responses

Request samples

Content type
application/json
{
  • "registrationNumber": "ABC-1234",
  • "type": "van",
  • "make": "Mercedes-Benz",
  • "model": "Sprinter",
  • "year": 2023,
  • "crewId": "01912345-6789-7abc-def0-123456789abc",
  • "maxWeightKg": 1500,
  • "maxVolumeCubicMeters": 12.5
}

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "01912345-6789-7abc-def0-123456789abc",
  • "registrationNumber": "ABC-1234",
  • "type": "van",
  • "make": "Mercedes-Benz",
  • "model": "Sprinter",
  • "year": 2023,
  • "status": "available",
  • "crewId": "01912345-6789-7abc-def0-123456789abc",
  • "teamName": "Express Logistics",
  • "maxWeightKg": 1500,
  • "maxVolumeCubicMeters": 12.5,
  • "maxPallets": 8,
  • "currentLatitude": 40.7128,
  • "currentLongitude": -74.006,
  • "lastLocationUpdate": "2024-06-15T14:30:00+00:00",
  • "currentOdometerKm": 125000,
  • "createdAt": "2024-01-15T10:00:00+00:00",
  • "updatedAt": "2024-06-15T14:30:00+00:00"
}

Get a vehicle

Retrieve a single vehicle by its UUID. Returns full vehicle details including capacity and location.

Authorizations:
Bearer
path Parameters
id
required
string <uuid>
Example: 01912345-6789-7abc-def0-123456789abc

Vehicle UUID

Responses

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "01912345-6789-7abc-def0-123456789abc",
  • "registrationNumber": "ABC-1234",
  • "type": "van",
  • "make": "Mercedes-Benz",
  • "model": "Sprinter",
  • "year": 2023,
  • "status": "available",
  • "crewId": "01912345-6789-7abc-def0-123456789abc",
  • "teamName": "Express Logistics",
  • "maxWeightKg": 1500,
  • "maxVolumeCubicMeters": 12.5,
  • "maxPallets": 8,
  • "currentLatitude": 40.7128,
  • "currentLongitude": -74.006,
  • "lastLocationUpdate": "2024-06-15T14:30:00+00:00",
  • "currentOdometerKm": 125000,
  • "createdAt": "2024-01-15T10:00:00+00:00",
  • "updatedAt": "2024-06-15T14:30:00+00:00"
}

Decommission a vehicle

Decommission a vehicle, permanently removing it from active fleet operations. The vehicle must not be currently in use.

Authorizations:
Bearer
path Parameters
id
required
string <uuid>
Example: 01912345-6789-7abc-def0-123456789abc

Vehicle UUID

Responses

Update a vehicle

Update vehicle details. Only provided fields will be updated.

Authorizations:
Bearer
path Parameters
id
required
string <uuid>
Example: 01912345-6789-7abc-def0-123456789abc

Vehicle UUID

Request Body schema: application/merge-patch+json
required

The updated Vehicle resource

registrationNumber
string or null <= 20 characters
make
string or null <= 100 characters
model
string or null <= 100 characters
type
string or null
Enum: "van" "truck" "bike" "car"
capacityWeight
number or null >= 0
capacityVolume
number or null >= 0
fuelType
string or null
Enum: "petrol" "diesel" "electric" "hybrid" "lpg"
status
string or null
Enum: "available" "in_use" "maintenance" "decommissioned"
crewId
string or null <ulid>

Responses

Request samples

Content type
application/merge-patch+json
{
  • "registrationNumber": "string",
  • "make": "string",
  • "model": "string",
  • "type": "van",
  • "capacityWeight": 0,
  • "capacityVolume": 0,
  • "fuelType": "petrol",
  • "status": "available",
  • "crewId": "string"
}

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "01912345-6789-7abc-def0-123456789abc",
  • "registrationNumber": "ABC-1234",
  • "type": "van",
  • "make": "Mercedes-Benz",
  • "model": "Sprinter",
  • "year": 2023,
  • "status": "available",
  • "crewId": "01912345-6789-7abc-def0-123456789abc",
  • "teamName": "Express Logistics",
  • "maxWeightKg": 1500,
  • "maxVolumeCubicMeters": 12.5,
  • "maxPallets": 8,
  • "currentLatitude": 40.7128,
  • "currentLongitude": -74.006,
  • "lastLocationUpdate": "2024-06-15T14:30:00+00:00",
  • "currentOdometerKm": 125000,
  • "createdAt": "2024-01-15T10:00:00+00:00",
  • "updatedAt": "2024-06-15T14:30:00+00:00"
}

Record vehicle odometer reading

Persist the latest odometer reading for a vehicle. Drives odometer-based maintenance plan evaluation.

Authorizations:
Bearer
path Parameters
id
required
string <uuid>
Example: 01912345-6789-7abc-def0-123456789abc

Vehicle UUID

Request Body schema: application/json
required

Odometer reading payload

currentOdometerKm
required
integer >= 0

Current odometer reading in kilometers

recordedAt
string or null <date-time>

When the reading was taken (defaults to now)

Responses

Request samples

Content type
application/json
{
  • "currentOdometerKm": 125000,
  • "recordedAt": "2026-05-29T08:00:00+00:00"
}

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "01912345-6789-7abc-def0-123456789abc",
  • "registrationNumber": "ABC-1234",
  • "type": "van",
  • "make": "Mercedes-Benz",
  • "model": "Sprinter",
  • "year": 2023,
  • "status": "available",
  • "crewId": "01912345-6789-7abc-def0-123456789abc",
  • "teamName": "Express Logistics",
  • "maxWeightKg": 1500,
  • "maxVolumeCubicMeters": 12.5,
  • "maxPallets": 8,
  • "currentLatitude": 40.7128,
  • "currentLongitude": -74.006,
  • "lastLocationUpdate": "2024-06-15T14:30:00+00:00",
  • "currentOdometerKm": 125000,
  • "createdAt": "2024-01-15T10:00:00+00:00",
  • "updatedAt": "2024-06-15T14:30:00+00:00"
}

Fleet Catalogue

Read-only tenant view of the vehicle variant catalogue.

Tenant users may only browse the catalogue. All write operations (create/update/delete) are exposed exclusively under the admin route prefix and require platform-admin authentication.

List vehicle makes

List vehicle makes

Authorizations:
Bearer
query Parameters
page
integer
Default: 1

The collection page number

Responses

Response samples

Content type
{
  • "totalItems": 0,
  • "search": {
    },
  • "view": {
    },
  • "member": [
    ]
}

Get a vehicle make

Get a vehicle make

Authorizations:
Bearer
path Parameters
id
required
string

CatalogueMake identifier

Responses

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "name": "",
  • "slug": "",
  • "logoUrl": "string",
  • "countryOfOrigin": "string",
  • "createdAt": "",
  • "updatedAt": ""
}

List vehicle models

List vehicle models

Authorizations:
Bearer
query Parameters
page
integer
Default: 1

The collection page number

Responses

Response samples

Content type
{
  • "totalItems": 0,
  • "search": {
    },
  • "view": {
    },
  • "member": [
    ]
}

Get a vehicle model

Get a vehicle model

Authorizations:
Bearer
path Parameters
id
required
string

CatalogueModel identifier

Responses

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "makeId": "",
  • "makeName": "",
  • "name": "",
  • "slug": "",
  • "vehicleType": "",
  • "productionStartYear": 0,
  • "productionEndYear": 0,
  • "createdAt": "",
  • "updatedAt": ""
}

List vehicle variants

List vehicle variants

Authorizations:
Bearer
query Parameters
page
integer
Default: 1

The collection page number

Responses

Response samples

Content type
{
  • "totalItems": 0,
  • "search": {
    },
  • "view": {
    },
  • "member": [
    ]
}

Get a vehicle variant

Get a vehicle variant

Authorizations:
Bearer
path Parameters
id
required
string

CatalogueVariant identifier

Responses

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "modelId": "",
  • "modelName": "",
  • "makeName": "",
  • "name": "",
  • "slug": "",
  • "vehicleType": "",
  • "defaultFuelType": "",
  • "defaultMaxWeightKg": 0,
  • "defaultMaxVolumeM3": 0,
  • "defaultMaxPallets": 0,
  • "gvwClass": "string",
  • "axleCount": 0,
  • "bodyType": "string",
  • "yearFrom": 0,
  • "yearTo": 0,
  • "createdAt": "",
  • "updatedAt": ""
}

Fleet - Documents

API representation of one document type a fleet unit requires, derived from the static per-kind requirement registry. The collection endpoint resolves the unit's kind and returns its required document types so the unit's Documents tab can render required-vs-present.

No #[ApiProperty(identifier: true)] member declares an item operation — this resource is collection-only, keyed by the parent unit id.

List fleet document types

Returns document type definitions for vehicles and drivers.

Authorizations:
Bearer
query Parameters
resourceType
string
Enum: "vehicle" "driver"
Example: resourceType=vehicle

Filter by resource type

page
integer
Default: 1

The collection page number

Responses

Response samples

Content type
{
  • "totalItems": 0,
  • "search": {
    },
  • "view": {
    },
  • "member": [
    ]
}

Get a fleet document type

Get a fleet document type

Authorizations:
Bearer
path Parameters
type
required
string

FleetDocumentType identifier

Responses

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "type": "",
  • "label": "",
  • "description": "",
  • "hasExpiry": false,
  • "slots": [
    ],
  • "metadataSchema": [
    ]
}

List required document types for a fleet unit

Returns the document types required for the unit, derived from its kind.

Authorizations:
Bearer
path Parameters
id
required
string <ulid>
Example: 01912345-6789-7abc-def0-123456789abc

Fleet unit ULID

query Parameters
page
integer
Default: 1

The collection page number

Responses

Response samples

Content type
{
  • "totalItems": 0,
  • "search": {
    },
  • "view": {
    },
  • "member": [
    ]
}

Fleet - Maintenance

Resource 'Fleet - Maintenance' operations.

List maintenance plans

List maintenance plans

Authorizations:
Bearer
query Parameters
page
integer
Default: 1

The collection page number

Responses

Response samples

Content type
{
  • "totalItems": 0,
  • "search": {
    },
  • "view": {
    },
  • "member": [
    ]
}

Create a maintenance plan

Create a maintenance plan

Authorizations:
Bearer
Request Body schema:
required

The new MaintenancePlan resource

fleetUnitId
string or null <ulid>
planType
required
string
Default: "interval"
Enum: "interval" "odometer" "hours"
intervalDays
integer or null >= 0
intervalKm
integer or null >= 0
intervalHours
integer or null >= 0
serviceType
required
string
Default: ""
estimatedCostCents
integer or null >= 0

Responses

Request samples

Content type
{
  • "fleetUnitId": "string",
  • "planType": "interval",
  • "intervalDays": 0,
  • "intervalKm": 0,
  • "intervalHours": 0,
  • "serviceType": "",
  • "estimatedCostCents": 0
}

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "fleetUnitId": "string",
  • "fleetUnitNumber": "string",
  • "planType": "",
  • "intervalDays": 0,
  • "intervalKm": 0,
  • "intervalHours": 0,
  • "serviceType": "",
  • "estimatedCostCents": 0,
  • "active": true,
  • "lastTriggeredAt": "string",
  • "lastTriggeredAtOdometerKm": 0,
  • "lastTriggeredAtEngineHours": 0,
  • "createdBy": "",
  • "createdAt": "",
  • "updatedAt": ""
}

Get a maintenance plan

Get a maintenance plan

Authorizations:
Bearer
path Parameters
id
required
string

MaintenancePlan identifier

Responses

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "fleetUnitId": "string",
  • "fleetUnitNumber": "string",
  • "planType": "",
  • "intervalDays": 0,
  • "intervalKm": 0,
  • "intervalHours": 0,
  • "serviceType": "",
  • "estimatedCostCents": 0,
  • "active": true,
  • "lastTriggeredAt": "string",
  • "lastTriggeredAtOdometerKm": 0,
  • "lastTriggeredAtEngineHours": 0,
  • "createdBy": "",
  • "createdAt": "",
  • "updatedAt": ""
}

Soft-delete a maintenance plan

Soft-delete a maintenance plan

Authorizations:
Bearer
path Parameters
id
required
string

MaintenancePlan identifier

Responses

Response samples

Content type
{
  • "type": "/errors/validation-error",
  • "title": "Validation Error",
  • "status": 400,
  • "detail": "The provided input is invalid",
  • "violations": [
    ],
  • "instance": "string"
}

Update plan intervals or estimated cost

Update plan intervals or estimated cost

Authorizations:
Bearer
path Parameters
id
required
string

MaintenancePlan identifier

Request Body schema: application/merge-patch+json
required

The updated MaintenancePlan resource

intervalDays
integer or null >= 0
intervalKm
integer or null >= 0
intervalHours
integer or null >= 0
estimatedCostCents
integer or null >= 0

Responses

Request samples

Content type
application/merge-patch+json
{
  • "intervalDays": 0,
  • "intervalKm": 0,
  • "intervalHours": 0,
  • "estimatedCostCents": 0
}

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "fleetUnitId": "string",
  • "fleetUnitNumber": "string",
  • "planType": "",
  • "intervalDays": 0,
  • "intervalKm": 0,
  • "intervalHours": 0,
  • "serviceType": "",
  • "estimatedCostCents": 0,
  • "active": true,
  • "lastTriggeredAt": "string",
  • "lastTriggeredAtOdometerKm": 0,
  • "lastTriggeredAtEngineHours": 0,
  • "createdBy": "",
  • "createdAt": "",
  • "updatedAt": ""
}

Activate a maintenance plan

Activate a maintenance plan

Authorizations:
Bearer
path Parameters
id
required
string

MaintenancePlan identifier

Responses

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "fleetUnitId": "string",
  • "fleetUnitNumber": "string",
  • "planType": "",
  • "intervalDays": 0,
  • "intervalKm": 0,
  • "intervalHours": 0,
  • "serviceType": "",
  • "estimatedCostCents": 0,
  • "active": true,
  • "lastTriggeredAt": "string",
  • "lastTriggeredAtOdometerKm": 0,
  • "lastTriggeredAtEngineHours": 0,
  • "createdBy": "",
  • "createdAt": "",
  • "updatedAt": ""
}

Deactivate a maintenance plan

Deactivate a maintenance plan

Authorizations:
Bearer
path Parameters
id
required
string

MaintenancePlan identifier

Responses

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "fleetUnitId": "string",
  • "fleetUnitNumber": "string",
  • "planType": "",
  • "intervalDays": 0,
  • "intervalKm": 0,
  • "intervalHours": 0,
  • "serviceType": "",
  • "estimatedCostCents": 0,
  • "active": true,
  • "lastTriggeredAt": "string",
  • "lastTriggeredAtOdometerKm": 0,
  • "lastTriggeredAtEngineHours": 0,
  • "createdBy": "",
  • "createdAt": "",
  • "updatedAt": ""
}

List warranty claims

List warranty claims

Authorizations:
Bearer
query Parameters
page
integer
Default: 1

The collection page number

Responses

Response samples

Content type
{
  • "totalItems": 0,
  • "search": {
    },
  • "view": {
    },
  • "member": [
    ]
}

Submit a warranty claim

Submit a warranty claim

Authorizations:
Bearer
Request Body schema:
required

The new WarrantyClaim resource

fleetUnitId
required
string <ulid>
Default: ""
workOrderId
string or null <ulid>
supplier
required
string
Default: ""
claimedCents
integer > 0
Default: 0
notes
string or null
submittedAt
string or null

Responses

Request samples

Content type
{
  • "fleetUnitId": "",
  • "workOrderId": "string",
  • "supplier": "",
  • "claimedCents": 0,
  • "notes": "string",
  • "submittedAt": "string"
}

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "fleetUnitId": "",
  • "fleetUnitNumber": "string",
  • "workOrderId": "string",
  • "supplier": "",
  • "claimedCents": 0,
  • "recoveredCents": 0,
  • "status": "",
  • "submittedAt": "",
  • "resolvedAt": "string",
  • "notes": "string",
  • "createdAt": "",
  • "updatedAt": ""
}

Get a warranty claim

Get a warranty claim

Authorizations:
Bearer
path Parameters
id
required
string

WarrantyClaim identifier

Responses

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "fleetUnitId": "",
  • "fleetUnitNumber": "string",
  • "workOrderId": "string",
  • "supplier": "",
  • "claimedCents": 0,
  • "recoveredCents": 0,
  • "status": "",
  • "submittedAt": "",
  • "resolvedAt": "string",
  • "notes": "string",
  • "createdAt": "",
  • "updatedAt": ""
}

Approve a warranty claim

Approve a warranty claim

Authorizations:
Bearer
path Parameters
id
required
string

WarrantyClaim identifier

Request Body schema:
required

The new WarrantyClaim resource

approvedCents
required
integer > 0
Default: 0

Responses

Request samples

Content type
{
  • "approvedCents": 0
}

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "fleetUnitId": "",
  • "fleetUnitNumber": "string",
  • "workOrderId": "string",
  • "supplier": "",
  • "claimedCents": 0,
  • "recoveredCents": 0,
  • "status": "",
  • "submittedAt": "",
  • "resolvedAt": "string",
  • "notes": "string",
  • "createdAt": "",
  • "updatedAt": ""
}

Mark an approved warranty claim as paid

Mark an approved warranty claim as paid

Authorizations:
Bearer
path Parameters
id
required
string

WarrantyClaim identifier

Request Body schema:
required

The new WarrantyClaim resource

recoveredCents
required
integer >= 0
Default: 0
paidAt
string or null

ISO 8601 datetime. Defaults to now when omitted.

Responses

Request samples

Content type
{
  • "recoveredCents": 0,
  • "paidAt": "string"
}

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "fleetUnitId": "",
  • "fleetUnitNumber": "string",
  • "workOrderId": "string",
  • "supplier": "",
  • "claimedCents": 0,
  • "recoveredCents": 0,
  • "status": "",
  • "submittedAt": "",
  • "resolvedAt": "string",
  • "notes": "string",
  • "createdAt": "",
  • "updatedAt": ""
}

Reject a warranty claim

Reject a warranty claim

Authorizations:
Bearer
path Parameters
id
required
string

WarrantyClaim identifier

Request Body schema:
required

The new WarrantyClaim resource

reason
string or null

Responses

Request samples

Content type
{
  • "reason": "string"
}

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "fleetUnitId": "",
  • "fleetUnitNumber": "string",
  • "workOrderId": "string",
  • "supplier": "",
  • "claimedCents": 0,
  • "recoveredCents": 0,
  • "status": "",
  • "submittedAt": "",
  • "resolvedAt": "string",
  • "notes": "string",
  • "createdAt": "",
  • "updatedAt": ""
}

List maintenance work orders

List maintenance work orders

Authorizations:
Bearer
query Parameters
page
integer
Default: 1

The collection page number

Responses

Response samples

Content type
{
  • "totalItems": 0,
  • "search": {
    },
  • "view": {
    },
  • "member": [
    ]
}

Schedule a maintenance work order

Schedule a maintenance work order

Authorizations:
Bearer
Request Body schema:
required

The new MaintenanceWorkOrder resource

fleetUnitId
required
string <ulid>
Default: ""
planId
string or null <ulid>
serviceType
required
string
Default: ""
scheduledFor
required
string
Default: ""
estimatedCostCents
integer or null >= 0
notes
string or null
vendorPartnerId
string or null <ulid>

Optional third-party vendor (Partner) that will perform the maintenance.

Responses

Request samples

Content type
{
  • "fleetUnitId": "",
  • "planId": "string",
  • "serviceType": "",
  • "scheduledFor": "",
  • "estimatedCostCents": 0,
  • "notes": "string",
  • "vendorPartnerId": "string"
}

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "fleetUnitId": "",
  • "fleetUnitNumber": "string",
  • "planId": "string",
  • "serviceType": "",
  • "scheduledFor": "",
  • "startedAt": "string",
  • "completedAt": "string",
  • "odometerKmAtService": 0,
  • "estimatedCostCents": 0,
  • "actualCostCents": 0,
  • "notes": "string",
  • "status": "",
  • "createdAt": "",
  • "updatedAt": ""
}

Get a maintenance work order

Get a maintenance work order

Authorizations:
Bearer
path Parameters
id
required
string

MaintenanceWorkOrder identifier

Responses

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "fleetUnitId": "",
  • "fleetUnitNumber": "string",
  • "planId": "string",
  • "serviceType": "",
  • "scheduledFor": "",
  • "startedAt": "string",
  • "completedAt": "string",
  • "odometerKmAtService": 0,
  • "estimatedCostCents": 0,
  • "actualCostCents": 0,
  • "notes": "string",
  • "status": "",
  • "createdAt": "",
  • "updatedAt": ""
}

Cancel a work order

Cancel a work order

Authorizations:
Bearer
path Parameters
id
required
string

MaintenanceWorkOrder identifier

Request Body schema:
required

The new MaintenanceWorkOrder resource

reason
string or null

Responses

Request samples

Content type
{
  • "reason": "string"
}

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "fleetUnitId": "",
  • "fleetUnitNumber": "string",
  • "planId": "string",
  • "serviceType": "",
  • "scheduledFor": "",
  • "startedAt": "string",
  • "completedAt": "string",
  • "odometerKmAtService": 0,
  • "estimatedCostCents": 0,
  • "actualCostCents": 0,
  • "notes": "string",
  • "status": "",
  • "createdAt": "",
  • "updatedAt": ""
}

Complete a work order

Complete a work order

Authorizations:
Bearer
path Parameters
id
required
string

MaintenanceWorkOrder identifier

Request Body schema:
required

The new MaintenanceWorkOrder resource

completedAt
string or null

ISO 8601 datetime. Defaults to now when omitted.

odometerKmAtService
integer or null >= 0
actualCostCents
integer or null >= 0
notes
string or null

Responses

Request samples

Content type
{
  • "completedAt": "string",
  • "odometerKmAtService": 0,
  • "actualCostCents": 0,
  • "notes": "string"
}

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "fleetUnitId": "",
  • "fleetUnitNumber": "string",
  • "planId": "string",
  • "serviceType": "",
  • "scheduledFor": "",
  • "startedAt": "string",
  • "completedAt": "string",
  • "odometerKmAtService": 0,
  • "estimatedCostCents": 0,
  • "actualCostCents": 0,
  • "notes": "string",
  • "status": "",
  • "createdAt": "",
  • "updatedAt": ""
}

Start a scheduled work order

Start a scheduled work order

Authorizations:
Bearer
path Parameters
id
required
string

MaintenanceWorkOrder identifier

Request Body schema:
required

The new MaintenanceWorkOrder resource

startedAt
string or null

ISO 8601 datetime. Defaults to now when omitted.

Responses

Request samples

Content type
{
  • "startedAt": "string"
}

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "fleetUnitId": "",
  • "fleetUnitNumber": "string",
  • "planId": "string",
  • "serviceType": "",
  • "scheduledFor": "",
  • "startedAt": "string",
  • "completedAt": "string",
  • "odometerKmAtService": 0,
  • "estimatedCostCents": 0,
  • "actualCostCents": 0,
  • "notes": "string",
  • "status": "",
  • "createdAt": "",
  • "updatedAt": ""
}

Fleet - Scheduling

Resource 'Fleet - Scheduling' operations.

List scheduling assignments

List scheduling assignments

Authorizations:
Bearer
query Parameters
fleetUnitId
string <uuid>
driverId
string <uuid>
status
string
Enum: "active" "suspended" "ended"
page
integer >= 1
Default: 1
itemsPerPage
integer [ 1 .. 100 ]
Default: 30

Responses

Response samples

Content type
{
  • "totalItems": 0,
  • "search": {
    },
  • "view": {
    },
  • "member": [
    ]
}

Create a scheduling assignment

Create a one-off or recurring assignment of a vehicle (and optional driver).

Authorizations:
Bearer
Request Body schema:
required

The new SchedulingAssignment resource

fleetUnitId
required
string <ulid>
primaryDriverId
string or null <ulid>
recurrenceKind
string
Default: "one_off"
Enum: "one_off" "recurring"

'one_off' | 'recurring'.

startAt
string or null
endAt
string or null
daysOfWeek
Array of integers

For recurring: list of day-of-week 1..7 (Mon=1).

startTime
string or null
endTime
string or null
effectiveFrom
string or null
effectiveTo
string or null
shiftTemplateId
string or null <ulid>
notes
string or null
coDriverIds
Array of strings

Initial co-driver roster (team driving). Each entry is a driver ULID.

Responses

Request samples

Content type
{
  • "fleetUnitId": "string",
  • "primaryDriverId": "string",
  • "recurrenceKind": "one_off",
  • "startAt": "string",
  • "endAt": "string",
  • "daysOfWeek": [
    ],
  • "startTime": "string",
  • "endTime": "string",
  • "effectiveFrom": "string",
  • "effectiveTo": "string",
  • "shiftTemplateId": "string",
  • "notes": "string",
  • "coDriverIds": [
    ]
}

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "fleetUnitId": "",
  • "primaryDriverId": "string",
  • "recurrenceKind": "",
  • "oneOffStartAt": "string",
  • "oneOffEndAt": "string",
  • "recurringDaysOfWeek": [
    ],
  • "recurringStartTime": "string",
  • "recurringEndTime": "string",
  • "effectiveFrom": "",
  • "effectiveTo": "string",
  • "status": "",
  • "shiftTemplateId": "string",
  • "notes": "string",
  • "teamDriving": false,
  • "createdBy": "",
  • "createdAt": "",
  • "updatedAt": "",
  • "endedAt": "string",
  • "coDrivers": [
    ],
  • "breaks": [
    ]
}

Get a scheduling assignment

Get a scheduling assignment

Authorizations:
Bearer
path Parameters
id
required
string

SchedulingAssignment identifier

Responses

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "fleetUnitId": "",
  • "primaryDriverId": "string",
  • "recurrenceKind": "",
  • "oneOffStartAt": "string",
  • "oneOffEndAt": "string",
  • "recurringDaysOfWeek": [
    ],
  • "recurringStartTime": "string",
  • "recurringEndTime": "string",
  • "effectiveFrom": "",
  • "effectiveTo": "string",
  • "status": "",
  • "shiftTemplateId": "string",
  • "notes": "string",
  • "teamDriving": false,
  • "createdBy": "",
  • "createdAt": "",
  • "updatedAt": "",
  • "endedAt": "string",
  • "coDrivers": [
    ],
  • "breaks": [
    ]
}

End (cancel) a scheduling assignment

End (cancel) a scheduling assignment

Authorizations:
Bearer
path Parameters
id
required
string

SchedulingAssignment identifier

Request Body schema:
required

The new SchedulingAssignment resource

reason
string or null

Responses

Request samples

Content type
{
  • "reason": "string"
}

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "fleetUnitId": "",
  • "primaryDriverId": "string",
  • "recurrenceKind": "",
  • "oneOffStartAt": "string",
  • "oneOffEndAt": "string",
  • "recurringDaysOfWeek": [
    ],
  • "recurringStartTime": "string",
  • "recurringEndTime": "string",
  • "effectiveFrom": "",
  • "effectiveTo": "string",
  • "status": "",
  • "shiftTemplateId": "string",
  • "notes": "string",
  • "teamDriving": false,
  • "createdBy": "",
  • "createdAt": "",
  • "updatedAt": "",
  • "endedAt": "string",
  • "coDrivers": [
    ],
  • "breaks": [
    ]
}

Update assignment notes

Update assignment notes

Authorizations:
Bearer
path Parameters
id
required
string

SchedulingAssignment identifier

Request Body schema: application/merge-patch+json
required

The updated SchedulingAssignment resource

notes
string or null

Responses

Request samples

Content type
application/merge-patch+json
{
  • "notes": "string"
}

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "fleetUnitId": "",
  • "primaryDriverId": "string",
  • "recurrenceKind": "",
  • "oneOffStartAt": "string",
  • "oneOffEndAt": "string",
  • "recurringDaysOfWeek": [
    ],
  • "recurringStartTime": "string",
  • "recurringEndTime": "string",
  • "effectiveFrom": "",
  • "effectiveTo": "string",
  • "status": "",
  • "shiftTemplateId": "string",
  • "notes": "string",
  • "teamDriving": false,
  • "createdBy": "",
  • "createdAt": "",
  • "updatedAt": "",
  • "endedAt": "string",
  • "coDrivers": [
    ],
  • "breaks": [
    ]
}

Resume a scheduling assignment

Resume a scheduling assignment

Authorizations:
Bearer
path Parameters
id
required
string

SchedulingAssignment identifier

Request Body schema:
required

The new SchedulingAssignment resource

id
string
Default: ""
fleetUnitId
string
Default: ""
primaryDriverId
string or null
recurrenceKind
string
Default: ""

'one_off' or 'recurring'.

oneOffStartAt
string or null
oneOffEndAt
string or null
recurringDaysOfWeek
Array of integers
recurringStartTime
string or null
recurringEndTime
string or null
effectiveFrom
string
Default: ""
effectiveTo
string or null
status
string
Default: ""
shiftTemplateId
string or null
notes
string or null
teamDriving
boolean
Default: false

Derived: true when the assignment carries at least one co-driver.

createdBy
string
Default: ""
createdAt
string
Default: ""
updatedAt
string
Default: ""
endedAt
string or null
Array of objects (SchedulingAssignmentCoDriver)
Array of objects (AssignmentBreak)

Responses

Request samples

Content type
{
  • "id": "",
  • "fleetUnitId": "",
  • "primaryDriverId": "string",
  • "recurrenceKind": "",
  • "oneOffStartAt": "string",
  • "oneOffEndAt": "string",
  • "recurringDaysOfWeek": [
    ],
  • "recurringStartTime": "string",
  • "recurringEndTime": "string",
  • "effectiveFrom": "",
  • "effectiveTo": "string",
  • "status": "",
  • "shiftTemplateId": "string",
  • "notes": "string",
  • "teamDriving": false,
  • "createdBy": "",
  • "createdAt": "",
  • "updatedAt": "",
  • "endedAt": "string",
  • "coDrivers": [
    ],
  • "breaks": [
    ]
}

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "fleetUnitId": "",
  • "primaryDriverId": "string",
  • "recurrenceKind": "",
  • "oneOffStartAt": "string",
  • "oneOffEndAt": "string",
  • "recurringDaysOfWeek": [
    ],
  • "recurringStartTime": "string",
  • "recurringEndTime": "string",
  • "effectiveFrom": "",
  • "effectiveTo": "string",
  • "status": "",
  • "shiftTemplateId": "string",
  • "notes": "string",
  • "teamDriving": false,
  • "createdBy": "",
  • "createdAt": "",
  • "updatedAt": "",
  • "endedAt": "string",
  • "coDrivers": [
    ],
  • "breaks": [
    ]
}

Suspend a scheduling assignment

Suspend a scheduling assignment

Authorizations:
Bearer
path Parameters
id
required
string

SchedulingAssignment identifier

Request Body schema:
required

The new SchedulingAssignment resource

reason
string or null

Responses

Request samples

Content type
{
  • "reason": "string"
}

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "fleetUnitId": "",
  • "primaryDriverId": "string",
  • "recurrenceKind": "",
  • "oneOffStartAt": "string",
  • "oneOffEndAt": "string",
  • "recurringDaysOfWeek": [
    ],
  • "recurringStartTime": "string",
  • "recurringEndTime": "string",
  • "effectiveFrom": "",
  • "effectiveTo": "string",
  • "status": "",
  • "shiftTemplateId": "string",
  • "notes": "string",
  • "teamDriving": false,
  • "createdBy": "",
  • "createdAt": "",
  • "updatedAt": "",
  • "endedAt": "string",
  • "coDrivers": [
    ],
  • "breaks": [
    ]
}

Resource availability calendar (busy windows)

Returns the effective-capacity calendar (occupancy + breaks + maintenance, override-refined) for a single vehicle or driver over [from, to]. Each window carries its kind, source reference, human reason, and whether it is a firm occupancy claim that blocks dispatch.

Authorizations:
Bearer
query Parameters
resourceKind
required
string
Enum: "vehicle" "driver"
resourceId
required
string <uuid>
from
required
string <date-time>
to
required
string <date-time>

Responses

Response samples

Content type
{
  • "totalItems": 0,
  • "search": {
    },
  • "member": [
    ]
}

Resources free over a range (dispatch picker)

Returns the ids (with display names) of vehicles or drivers that hold no firm occupancy claim overlapping [from, to] for the current tenant — the candidate set for assignment.

Authorizations:
Bearer
query Parameters
resourceKind
required
string
Enum: "vehicle" "driver"
from
required
string <date-time>
to
required
string <date-time>

Responses

Response samples

Content type
{
  • "totalItems": 0,
  • "search": {
    },
  • "member": [
    ]
}

List breaks

List breaks

Authorizations:
Bearer
query Parameters
scope
string
Enum: "assignment" "instance"
scopeId
string <uuid>
includeRemoved
boolean
Default: false
page
integer >= 1
Default: 1
itemsPerPage
integer [ 1 .. 100 ]
Default: 30

Responses

Response samples

Content type
{
  • "totalItems": 0,
  • "search": {
    },
  • "view": {
    },
  • "member": [
    ]
}

Add a break to a shift

Assignment-scope breaks recur every occurrence (use startTime HH:MM). Instance-scope breaks attach to a single ShiftInstance (use startAt ISO datetime).

Authorizations:
Bearer
Request Body schema:
required

The new Break resource

scope
string
Default: "assignment"
Enum: "assignment" "instance"
scopeId
required
string <ulid>
startTime
string or null
startAt
string or null
durationMinutes
integer > 0
Default: 30
paid
boolean
Default: false
label
string or null

Responses

Request samples

Content type
{
  • "scope": "assignment",
  • "scopeId": "string",
  • "startTime": "string",
  • "startAt": "string",
  • "durationMinutes": 30,
  • "paid": false,
  • "label": "string"
}

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "scope": "",
  • "scopeId": "",
  • "startTime": "string",
  • "startAt": "string",
  • "durationMinutes": 0,
  • "paid": false,
  • "label": "string",
  • "removed": false,
  • "addedBy": "",
  • "addedAt": "",
  • "removedAt": "string"
}

Get a break

Get a break

Authorizations:
Bearer
path Parameters
id
required
string

Break identifier

Responses

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "scope": "",
  • "scopeId": "",
  • "startTime": "string",
  • "startAt": "string",
  • "durationMinutes": 0,
  • "paid": false,
  • "label": "string",
  • "removed": false,
  • "addedBy": "",
  • "addedAt": "",
  • "removedAt": "string"
}

Remove a break

Remove a break

Authorizations:
Bearer
path Parameters
id
required
string

Break identifier

Responses

List assignment exceptions

List assignment exceptions

Authorizations:
Bearer
query Parameters
assignmentId
string <uuid>
occurrenceDate
string <date>
includeRevoked
boolean
Default: false
page
integer >= 1
Default: 1
itemsPerPage
integer [ 1 .. 100 ]
Default: 30

Responses

Response samples

Content type
{
  • "totalItems": 0,
  • "search": {
    },
  • "view": {
    },
  • "member": [
    ]
}

Record an assignment exception

Skip or override a single occurrence of a recurring assignment.

Authorizations:
Bearer
Request Body schema:
required

The new AssignmentException resource

assignmentId
required
string <ulid>
occurrenceDate
required
string^(\d{4}-\d{2}-\d{2})$
kind
string
Default: "skip"
Enum: "skip" "override"
overrideStartAt
string or null
overrideEndAt
string or null
overrideDriverId
string or null <ulid>
reason
string or null

Responses

Request samples

Content type
{
  • "assignmentId": "string",
  • "occurrenceDate": "string",
  • "kind": "skip",
  • "overrideStartAt": "string",
  • "overrideEndAt": "string",
  • "overrideDriverId": "string",
  • "reason": "string"
}

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "assignmentId": "",
  • "occurrenceDate": "",
  • "kind": "",
  • "overrideStartAt": "string",
  • "overrideEndAt": "string",
  • "overrideDriverId": "string",
  • "reason": "string",
  • "revoked": false,
  • "recordedBy": "",
  • "recordedAt": "",
  • "revokedAt": "string",
  • "coDrivingOverride": true
}

Get an assignment exception

Get an assignment exception

Authorizations:
Bearer
path Parameters
id
required
string

AssignmentException identifier

Responses

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "assignmentId": "",
  • "occurrenceDate": "",
  • "kind": "",
  • "overrideStartAt": "string",
  • "overrideEndAt": "string",
  • "overrideDriverId": "string",
  • "reason": "string",
  • "revoked": false,
  • "recordedBy": "",
  • "recordedAt": "",
  • "revokedAt": "string",
  • "coDrivingOverride": true
}

Revoke an assignment exception

Revoke an assignment exception

Authorizations:
Bearer
path Parameters
id
required
string

AssignmentException identifier

Responses

Override co-driving flag for a single occurrence

Body: {coDriving: bool | null}. null clears the override (inherit parent assignment).

Authorizations:
Bearer
path Parameters
id
required
string

AssignmentException identifier

Request Body schema: application/merge-patch+json
required

The updated AssignmentException resource

coDriving
boolean or null

null = inherit parent assignment's flag; true/false = override for this single occurrence.

Responses

Request samples

Content type
application/merge-patch+json
{
  • "coDriving": true
}

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "assignmentId": "",
  • "occurrenceDate": "",
  • "kind": "",
  • "overrideStartAt": "string",
  • "overrideEndAt": "string",
  • "overrideDriverId": "string",
  • "reason": "string",
  • "revoked": false,
  • "recordedBy": "",
  • "recordedAt": "",
  • "revokedAt": "string",
  • "coDrivingOverride": true
}

Materialize the schedule between two timestamps

Expands active assignments over the [from, to] window. Returns shifts and any warnings (e.g. driver overlaps).

Authorizations:
Bearer
query Parameters
from
required
string <date-time>
to
required
string <date-time>
fleetUnitId
string <uuid>
driverId
string <uuid>

Responses

Response samples

Content type
{
  • "totalItems": 0,
  • "search": {
    },
  • "member": [
    ]
}

List materialized shift instances

List materialized shift instances

Authorizations:
Bearer
query Parameters
assignmentId
string <uuid>
occurrenceDate
string <date>
status
string
Enum: "planned" "in_progress" "completed" "cancelled"
page
integer >= 1
Default: 1
itemsPerPage
integer [ 1 .. 100 ]
Default: 30

Responses

Response samples

Content type
{
  • "totalItems": 0,
  • "search": {
    },
  • "view": {
    },
  • "member": [
    ]
}

Materialize a shift instance

Persist a single occurrence of an assignment so it can carry actuals, notes, or be cancelled.

Authorizations:
Bearer
Request Body schema:
required

The new ShiftInstance resource

assignmentId
required
string <ulid>
occurrenceDate
required
string^(\d{4}-\d{2}-\d{2})$
plannedStartAt
required
string
plannedEndAt
required
string
driverId
string or null <ulid>

Responses

Request samples

Content type
{
  • "assignmentId": "string",
  • "occurrenceDate": "string",
  • "plannedStartAt": "string",
  • "plannedEndAt": "string",
  • "driverId": "string"
}

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "assignmentId": "",
  • "occurrenceDate": "",
  • "plannedStartAt": "",
  • "plannedEndAt": "",
  • "actualStartAt": "string",
  • "actualEndAt": "string",
  • "driverId": "string",
  • "status": "",
  • "notes": "string",
  • "createdAt": "",
  • "updatedAt": ""
}

Get a shift instance

Get a shift instance

Authorizations:
Bearer
path Parameters
id
required
string

ShiftInstance identifier

Responses

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "assignmentId": "",
  • "occurrenceDate": "",
  • "plannedStartAt": "",
  • "plannedEndAt": "",
  • "actualStartAt": "string",
  • "actualEndAt": "string",
  • "driverId": "string",
  • "status": "",
  • "notes": "string",
  • "createdAt": "",
  • "updatedAt": ""
}

Cancel a shift instance

Cancel a shift instance

Authorizations:
Bearer
path Parameters
id
required
string

ShiftInstance identifier

Request Body schema:
required

The new ShiftInstance resource

reason
string or null

Responses

Request samples

Content type
{
  • "reason": "string"
}

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "assignmentId": "",
  • "occurrenceDate": "",
  • "plannedStartAt": "",
  • "plannedEndAt": "",
  • "actualStartAt": "string",
  • "actualEndAt": "string",
  • "driverId": "string",
  • "status": "",
  • "notes": "string",
  • "createdAt": "",
  • "updatedAt": ""
}

Mark a shift instance as completed

Mark a shift instance as completed

Authorizations:
Bearer
path Parameters
id
required
string

ShiftInstance identifier

Request Body schema:
required

The new ShiftInstance resource

actualEndAt
required
string

Responses

Request samples

Content type
{
  • "actualEndAt": "string"
}

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "assignmentId": "",
  • "occurrenceDate": "",
  • "plannedStartAt": "",
  • "plannedEndAt": "",
  • "actualStartAt": "string",
  • "actualEndAt": "string",
  • "driverId": "string",
  • "status": "",
  • "notes": "string",
  • "createdAt": "",
  • "updatedAt": ""
}

Update shift instance notes

Update shift instance notes

Authorizations:
Bearer
path Parameters
id
required
string

ShiftInstance identifier

Request Body schema: application/merge-patch+json
required

The updated ShiftInstance resource

notes
string or null

Responses

Request samples

Content type
application/merge-patch+json
{
  • "notes": "string"
}

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "assignmentId": "",
  • "occurrenceDate": "",
  • "plannedStartAt": "",
  • "plannedEndAt": "",
  • "actualStartAt": "string",
  • "actualEndAt": "string",
  • "driverId": "string",
  • "status": "",
  • "notes": "string",
  • "createdAt": "",
  • "updatedAt": ""
}

Mark a shift instance as started

Mark a shift instance as started

Authorizations:
Bearer
path Parameters
id
required
string

ShiftInstance identifier

Request Body schema:
required

The new ShiftInstance resource

actualStartAt
required
string

Responses

Request samples

Content type
{
  • "actualStartAt": "string"
}

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "assignmentId": "",
  • "occurrenceDate": "",
  • "plannedStartAt": "",
  • "plannedEndAt": "",
  • "actualStartAt": "string",
  • "actualEndAt": "string",
  • "driverId": "string",
  • "status": "",
  • "notes": "string",
  • "createdAt": "",
  • "updatedAt": ""
}

List shift templates

List shift templates

Authorizations:
Bearer
query Parameters
active
boolean
page
integer >= 1
Default: 1
itemsPerPage
integer [ 1 .. 100 ]
Default: 30

Responses

Response samples

Content type
{
  • "totalItems": 0,
  • "search": {
    },
  • "view": {
    },
  • "member": [
    ]
}

Create a shift template

Create a shift template

Authorizations:
Bearer
Request Body schema:
required

The new SchedulingShiftTemplate resource

name
required
string <= 80 characters
Default: ""
defaultStartTime
required
string^(.*(^([01]\d|2[0-3]):[0-5]\d$).*)$
Default: ""
defaultEndTime
required
string^(.*(^([01]\d|2[0-3]):[0-5]\d$).*)$
Default: ""
color
required
string <= 16 characters
Default: ""

Responses

Request samples

Content type
{
  • "name": "",
  • "defaultStartTime": "",
  • "defaultEndTime": "",
  • "color": ""
}

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "name": "",
  • "defaultStartTime": "",
  • "defaultEndTime": "",
  • "color": "",
  • "active": true,
  • "createdBy": "",
  • "createdAt": "",
  • "updatedAt": ""
}

Get a shift template

Get a shift template

Authorizations:
Bearer
path Parameters
id
required
string

SchedulingShiftTemplate identifier

Responses

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "name": "",
  • "defaultStartTime": "",
  • "defaultEndTime": "",
  • "color": "",
  • "active": true,
  • "createdBy": "",
  • "createdAt": "",
  • "updatedAt": ""
}

Delete a shift template

Delete a shift template

Authorizations:
Bearer
path Parameters
id
required
string

SchedulingShiftTemplate identifier

Responses

Update a shift template

Updates name, default times, color, or active flag. All fields are optional.

Authorizations:
Bearer
path Parameters
id
required
string

SchedulingShiftTemplate identifier

Request Body schema: application/merge-patch+json
required

The updated SchedulingShiftTemplate resource

name
string or null <= 80 characters
defaultStartTime
string or null^(.*(^([01]\d|2[0-3]):[0-5]\d$).*)$
defaultEndTime
string or null^(.*(^([01]\d|2[0-3]):[0-5]\d$).*)$
color
string or null <= 16 characters
active
boolean or null

Responses

Request samples

Content type
application/merge-patch+json
{
  • "name": "string",
  • "defaultStartTime": "string",
  • "defaultEndTime": "string",
  • "color": "string",
  • "active": true
}

Response samples

Content type
{
  • "@context": "string",
  • "@id": "string",
  • "@type": "string",
  • "id": "",
  • "name": "",
  • "defaultStartTime": "",
  • "defaultEndTime": "",
  • "color": "",
  • "active": true,
  • "createdBy": "",
  • "createdAt": "",
  • "updatedAt": ""
}