{
  "openapi": "3.1.1",
  "info": {
    "title": "FleetLive Public API",
    "description": "Public, versioned REST facade over the FleetLive platform.\n\n**Capabilities:**\n\n- **On-demand MDVR video.** Request a specific clip from a device with the media-request API, then receive a `media.available` webhook and pull a fresh SAS URI.\n- **Webhooks.** HMAC-SHA256 signed deliveries, a delivery inspector, one-click replay of any past delivery, and a machine-readable event-type catalog, so you can debug and back-fill an integration.\n- **Delta since-token feeds.** An incremental sync path for events, positions and journeys, built for high-frequency polling: keep a cursor to resume without gaps or duplicates.\n\nOAuth2 client-credentials only (audience `partner.api`); the tenant is resolved exclusively from the `fleetlive.org_id` token claim. Collections use an opaque, versioned keyset cursor and the uniform `PagedResult` envelope. Errors are RFC 9457 `application/problem+json` with a versioned `errorCode` registry.",
    "contact": {
      "name": "FleetLive API team"
    },
    "license": {
      "name": "Proprietary"
    },
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://api.partner.fleetlive.ai",
      "description": "Production."
    }
  ],
  "paths": {
    "/v1/api-clients": {
      "get": {
        "tags": [
          "ApiClients"
        ],
        "summary": "List API clients of the organization",
        "description": "**Required scope:** `fleetlive/credentials:read`",
        "operationId": "listApiClients",
        "parameters": [
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "count",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PagedResultOfApiClient"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/credentials:read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "ApiClients"
        ],
        "summary": "Create an API client",
        "description": "**Required scope:** `fleetlive/credentials:write`",
        "operationId": "createApiClient",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateApiClientRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiClientCreated"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/credentials:write"
            ]
          }
        ]
      }
    },
    "/v1/api-clients/{clientId}": {
      "get": {
        "tags": [
          "ApiClients"
        ],
        "summary": "Get an API client",
        "description": "**Required scope:** `fleetlive/credentials:read`",
        "operationId": "getApiClient",
        "parameters": [
          {
            "name": "clientId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiClient"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/credentials:read"
            ]
          }
        ]
      },
      "patch": {
        "tags": [
          "ApiClients"
        ],
        "summary": "Update an API client",
        "description": "**Required scope:** `fleetlive/credentials:write`",
        "operationId": "updateApiClient",
        "parameters": [
          {
            "name": "clientId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateApiClientRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiClient"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/credentials:write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "ApiClients"
        ],
        "summary": "Revoke and delete an API client",
        "description": "**Required scope:** `fleetlive/credentials:write`",
        "operationId": "deleteApiClient",
        "parameters": [
          {
            "name": "clientId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/credentials:write"
            ]
          }
        ]
      }
    },
    "/v1/api-clients/{clientId}:rotate-secret": {
      "post": {
        "tags": [
          "ApiClients"
        ],
        "summary": "Rotate an API client's secret",
        "description": "**Required scope:** `fleetlive/credentials:write`",
        "operationId": "rotateApiClientSecret",
        "parameters": [
          {
            "name": "clientId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientSecretRotated"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/credentials:write"
            ]
          }
        ]
      }
    },
    "/v1/commands": {
      "get": {
        "tags": [
          "Commands"
        ],
        "summary": "List device commands",
        "description": "**Required scope:** `fleetlive/commands:read`",
        "operationId": "listCommands",
        "parameters": [
          {
            "name": "hardwareIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "states",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "fleetIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid"
              }
            }
          },
          {
            "name": "vehicleIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "driverIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "createdAfter",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "count",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PagedResultOfCommandSummary"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/commands:read"
            ]
          }
        ]
      }
    },
    "/v1/commands/{commandId}": {
      "get": {
        "tags": [
          "Commands"
        ],
        "summary": "Get a command",
        "description": "**Required scope:** `fleetlive/commands:read`",
        "operationId": "getCommand",
        "parameters": [
          {
            "name": "commandId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommandDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/commands:read"
            ]
          }
        ]
      }
    },
    "/v1/context": {
      "get": {
        "tags": [
          "Context"
        ],
        "summary": "Introspect the calling client's auth context",
        "description": "Returns a clean projection of the caller's identity built from the token: the client id, the anchor organization and its reachable descendants, the granted licences and OAuth scopes. Any valid token is authorized (a client must always be able to introspect itself), so there is no scope gate and no internal client information is disclosed.",
        "operationId": "getContext",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthContext"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [ ]
          }
        ]
      }
    },
    "/v1/device-models": {
      "get": {
        "tags": [
          "DeviceCatalog"
        ],
        "summary": "List device models",
        "description": "**Required scope:** `fleetlive/devices:read`",
        "operationId": "listDeviceModels",
        "parameters": [
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "count",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PagedResultOfDeviceModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/devices:read"
            ]
          }
        ]
      }
    },
    "/v1/device-models/{deviceModelId}": {
      "get": {
        "tags": [
          "DeviceCatalog"
        ],
        "summary": "Get a device model",
        "description": "**Required scope:** `fleetlive/devices:read`",
        "operationId": "getDeviceModel",
        "parameters": [
          {
            "name": "deviceModelId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/devices:read"
            ]
          }
        ]
      }
    },
    "/v1/device-protocols": {
      "get": {
        "tags": [
          "DeviceCatalog"
        ],
        "summary": "List device protocols",
        "description": "**Required scope:** `fleetlive/devices:read`",
        "operationId": "listDeviceProtocols",
        "parameters": [
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "count",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PagedResultOfDeviceProtocol"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/devices:read"
            ]
          }
        ]
      }
    },
    "/v1/device-protocols/{deviceProtocolId}": {
      "get": {
        "tags": [
          "DeviceCatalog"
        ],
        "summary": "Get a device protocol",
        "description": "**Required scope:** `fleetlive/devices:read`",
        "operationId": "getDeviceProtocol",
        "parameters": [
          {
            "name": "deviceProtocolId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceProtocol"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/devices:read"
            ]
          }
        ]
      }
    },
    "/v1/devices": {
      "get": {
        "tags": [
          "Devices"
        ],
        "summary": "List devices",
        "description": "**Required scope:** `fleetlive/devices:read`",
        "operationId": "listDevices",
        "parameters": [
          {
            "name": "fleetIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid"
              }
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "organizationIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid"
              }
            }
          },
          {
            "name": "hardwareIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "simNumber",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "serialNumber",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "vehicleAssigned",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "fleetAssigned",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "count",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PagedResultOfDeviceSummary"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/devices:read"
            ]
          }
        ]
      }
    },
    "/v1/devices/{deviceId}": {
      "get": {
        "tags": [
          "Devices"
        ],
        "summary": "Get a device",
        "description": "**Required scope:** `fleetlive/devices:read`",
        "operationId": "getDevice",
        "parameters": [
          {
            "name": "deviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/devices:read"
            ]
          }
        ]
      }
    },
    "/v1/devices/{deviceId}/channels": {
      "get": {
        "tags": [
          "Devices"
        ],
        "summary": "List the device's video/media channels",
        "description": "**Required scope:** `fleetlive/devices:read`",
        "operationId": "listDeviceChannels",
        "parameters": [
          {
            "name": "deviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceChannelList"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/devices:read"
            ]
          }
        ]
      }
    },
    "/v1/devices/{deviceId}/events": {
      "get": {
        "tags": [
          "Devices"
        ],
        "summary": "List events for a device",
        "description": "**Required scope:** `fleetlive/events:read`",
        "operationId": "listDeviceEvents",
        "parameters": [
          {
            "name": "deviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "from",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "to",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "receivedFrom",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "receivedTo",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "count",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceEventPage"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/events:read"
            ]
          }
        ]
      }
    },
    "/v1/devices/{deviceId}/position": {
      "get": {
        "tags": [
          "Devices"
        ],
        "summary": "Get the device's last reported position",
        "description": "**Required scope:** `fleetlive/devices:read`",
        "operationId": "getDevicePosition",
        "parameters": [
          {
            "name": "deviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DevicePosition"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/devices:read"
            ]
          }
        ]
      }
    },
    "/v1/devices/{deviceId}/events/{eventId}": {
      "get": {
        "tags": [
          "Devices"
        ],
        "summary": "Get a single device event",
        "description": "**Required scope:** `fleetlive/events:read`",
        "operationId": "getDeviceEvent",
        "parameters": [
          {
            "name": "deviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "eventId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceEvent"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/events:read"
            ]
          }
        ]
      }
    },
    "/v1/devices/{deviceId}:move-fleet": {
      "post": {
        "tags": [
          "Devices"
        ],
        "summary": "Move a device to another fleet",
        "description": "**Required scope:** `fleetlive/devices:write`",
        "operationId": "moveDeviceFleet",
        "parameters": [
          {
            "name": "deviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MoveDeviceFleetRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/devices:write"
            ]
          }
        ]
      }
    },
    "/v1/devices/{deviceId}:disable-ingest": {
      "post": {
        "tags": [
          "Devices"
        ],
        "summary": "Disable data ingest for a device",
        "description": "**Required scope:** `fleetlive/devices:write`",
        "operationId": "disableDeviceIngest",
        "parameters": [
          {
            "name": "deviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/devices:write"
            ]
          }
        ]
      }
    },
    "/v1/devices/{deviceId}:enable-ingest": {
      "post": {
        "tags": [
          "Devices"
        ],
        "summary": "Enable data ingest for a device",
        "description": "**Required scope:** `fleetlive/devices:write`",
        "operationId": "enableDeviceIngest",
        "parameters": [
          {
            "name": "deviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/devices:write"
            ]
          }
        ]
      }
    },
    "/v1/devices/{deviceId}:reboot": {
      "post": {
        "tags": [
          "Devices"
        ],
        "summary": "Reboot a device",
        "description": "**Required scope:** `fleetlive/devices:write`",
        "operationId": "rebootDevice",
        "parameters": [
          {
            "name": "deviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommandAccepted"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/devices:write"
            ]
          }
        ]
      }
    },
    "/v1/devices/{deviceId}:wake": {
      "post": {
        "tags": [
          "Devices"
        ],
        "summary": "Wake a dormant device",
        "description": "**Required scope:** `fleetlive/devices:write`",
        "operationId": "wakeDevice",
        "parameters": [
          {
            "name": "deviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommandAccepted"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/devices:write"
            ]
          }
        ]
      }
    },
    "/v1/drivers": {
      "get": {
        "tags": [
          "Drivers"
        ],
        "summary": "List drivers",
        "description": "**Required scope:** `fleetlive/drivers:read`",
        "operationId": "listDrivers",
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "fleetIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid"
              }
            }
          },
          {
            "name": "name",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "count",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PagedResultOfDriverSummary"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/drivers:read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Drivers"
        ],
        "summary": "Create a driver",
        "description": "**Required scope:** `fleetlive/drivers:write`",
        "operationId": "createDriver",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateDriverRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DriverDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/drivers:write"
            ]
          }
        ]
      }
    },
    "/v1/drivers/{driverId}": {
      "get": {
        "tags": [
          "Drivers"
        ],
        "summary": "Get a driver",
        "description": "**Required scope:** `fleetlive/drivers:read`",
        "operationId": "getDriver",
        "parameters": [
          {
            "name": "driverId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DriverDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/drivers:read"
            ]
          }
        ]
      },
      "patch": {
        "tags": [
          "Drivers"
        ],
        "summary": "Update a driver",
        "description": "**Required scope:** `fleetlive/drivers:write`",
        "operationId": "updateDriver",
        "parameters": [
          {
            "name": "driverId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateDriverRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DriverDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/drivers:write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Drivers"
        ],
        "summary": "Delete a driver",
        "description": "**Required scope:** `fleetlive/drivers:write`",
        "operationId": "deleteDriver",
        "parameters": [
          {
            "name": "driverId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/drivers:write"
            ]
          }
        ]
      }
    },
    "/v1/events": {
      "get": {
        "tags": [
          "Events"
        ],
        "summary": "List device events (rich filtering)",
        "description": "**Required scope:** `fleetlive/events:read`",
        "operationId": "listEvents",
        "parameters": [
          {
            "name": "from",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "to",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "receivedFrom",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "receivedTo",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "fleetIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid"
              }
            }
          },
          {
            "name": "hardwareIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "organizationIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid"
              }
            }
          },
          {
            "name": "types",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "classifications",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "includeChildOrganizations",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "count",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceEventPage"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/events:read"
            ]
          }
        ]
      }
    },
    "/v1/feeds/events": {
      "get": {
        "tags": [
          "Feeds"
        ],
        "summary": "Delta feed of device events (since-token)",
        "description": "Delta feed of device events. Persist the returned `since` token and pass it on the next call to get only what changed, with no gaps or duplicates and no need to pick a time window. The high-frequency polling path for keeping an external system in step with device events.\n\n**Required scope:** `fleetlive/feeds:read`",
        "operationId": "getEventsFeed",
        "parameters": [
          {
            "name": "since",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "fleetIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid"
              }
            }
          },
          {
            "name": "vehicleIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "hardwareIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FeedPageOfDeviceEvent"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/feeds:read"
            ]
          }
        ]
      }
    },
    "/v1/feeds/positions": {
      "get": {
        "tags": [
          "Feeds"
        ],
        "summary": "Delta feed of vehicle positions (since-token)",
        "description": "Since-token stream of position updates for high-frequency polling. Round-trip the `since` cursor to receive only new fixes, with no gaps or re-processing.\n\n**Required scope:** `fleetlive/feeds:read`",
        "operationId": "getPositionsFeed",
        "parameters": [
          {
            "name": "since",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "hardwareIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FeedPageOfVehiclePosition"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/feeds:read"
            ]
          }
        ]
      }
    },
    "/v1/feeds/journeys": {
      "get": {
        "tags": [
          "Feeds"
        ],
        "summary": "Delta feed of processed journeys (since-token)",
        "description": "Since-token stream of newly-processed journeys. Keep the `since` cursor to ingest each journey exactly once as soon as it closes.\n\n**Required scope:** `fleetlive/feeds:read`",
        "operationId": "getJourneysFeed",
        "parameters": [
          {
            "name": "since",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "fleetIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid"
              }
            }
          },
          {
            "name": "vehicleIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "hardwareIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FeedPageOfJourneySummary"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/feeds:read"
            ]
          }
        ]
      }
    },
    "/v1/fleets": {
      "get": {
        "tags": [
          "Fleets"
        ],
        "summary": "List fleets",
        "description": "**Required scope:** `fleetlive/fleets:read`",
        "operationId": "listFleets",
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "count",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PagedResultOfFleetSummary"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/fleets:read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Fleets"
        ],
        "summary": "Create a fleet",
        "description": "**Required scope:** `fleetlive/fleets:write`",
        "operationId": "createFleet",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateFleetRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FleetDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/fleets:write"
            ]
          }
        ]
      }
    },
    "/v1/fleets/{fleetId}": {
      "get": {
        "tags": [
          "Fleets"
        ],
        "summary": "Get a fleet",
        "description": "**Required scope:** `fleetlive/fleets:read`",
        "operationId": "getFleet",
        "parameters": [
          {
            "name": "fleetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FleetDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/fleets:read"
            ]
          }
        ]
      },
      "patch": {
        "tags": [
          "Fleets"
        ],
        "summary": "Update a fleet",
        "description": "Partially updates a fleet; omitted fields are left unchanged. Supports optimistic concurrency via the `If-Match` header (the ETag returned by a prior read/write). Mirrors the vehicle and driver update endpoints.\n\n**Required scope:** `fleetlive/fleets:write`",
        "operationId": "updateFleet",
        "parameters": [
          {
            "name": "fleetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateFleetRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FleetDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/fleets:write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Fleets"
        ],
        "summary": "Delete a fleet",
        "description": "Deletes a fleet. Mirrors the vehicle and driver delete endpoints.\n\n**Required scope:** `fleetlive/fleets:write`",
        "operationId": "deleteFleet",
        "parameters": [
          {
            "name": "fleetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/fleets:write"
            ]
          }
        ]
      }
    },
    "/v1/geofences": {
      "get": {
        "tags": [
          "Geofences"
        ],
        "summary": "List geofences",
        "description": "Lists the geofence zones visible to the token, narrowed to the caller's organization subtree. Uses the uniform opaque keyset cursor and `PagedResult` envelope. Each zone is a `polygon` (ordered coordinate ring) or a `circle` (centre + radius).\n\n**Required scope:** `fleetlive/geofences:read`",
        "operationId": "listGeofences",
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "includeChildOrganizations",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "count",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PagedResultOfGeofenceSummary"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/geofences:read"
            ]
          }
        ]
      }
    },
    "/v1/geofences/{geofenceId}": {
      "get": {
        "tags": [
          "Geofences"
        ],
        "summary": "Get a geofence",
        "description": "Returns a single geofence with its full geometry: a `polygon`'s coordinate ring, or a `circle`'s centre point and radius in metres.\n\n**Required scope:** `fleetlive/geofences:read`",
        "operationId": "getGeofence",
        "parameters": [
          {
            "name": "geofenceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GeofenceDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/geofences:read"
            ]
          }
        ]
      }
    },
    "/v1/journeys": {
      "get": {
        "tags": [
          "Journeys"
        ],
        "summary": "List journeys",
        "description": "**Required scope:** `fleetlive/journeys:read`",
        "operationId": "listJourneys",
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "fleetIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid"
              }
            }
          },
          {
            "name": "vehicleIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "organizationIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid"
              }
            }
          },
          {
            "name": "from",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "to",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "createdFrom",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "createdTo",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "includeChildOrganizations",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "count",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PagedResultOfJourneySummary"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/journeys:read"
            ]
          }
        ]
      }
    },
    "/v1/journeys/{journeyId}": {
      "get": {
        "tags": [
          "Journeys"
        ],
        "summary": "Get a journey",
        "description": "**Required scope:** `fleetlive/journeys:read`",
        "operationId": "getJourney",
        "parameters": [
          {
            "name": "journeyId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JourneyDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/journeys:read"
            ]
          }
        ]
      }
    },
    "/v1/journeys/{journeyId}/frames": {
      "get": {
        "tags": [
          "Journeys"
        ],
        "summary": "List map-matched telemetry frames of a journey",
        "description": "**Required scope:** `fleetlive/journeys:read`",
        "operationId": "listJourneyFrames",
        "parameters": [
          {
            "name": "journeyId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PagedResultOfTelemetryFrame"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/journeys:read"
            ]
          }
        ]
      }
    },
    "/v1/journeys/{journeyId}/route": {
      "get": {
        "tags": [
          "Journeys"
        ],
        "summary": "List the travelled route (map-matched points) of a journey",
        "description": "**Required scope:** `fleetlive/journeys:read`",
        "operationId": "listJourneyRoute",
        "parameters": [
          {
            "name": "journeyId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PagedResultOfRoutePoint"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/journeys:read"
            ]
          }
        ]
      }
    },
    "/v1/journeys/{journeyId}/events": {
      "get": {
        "tags": [
          "Journeys"
        ],
        "summary": "List device events that occurred during a journey",
        "description": "**Required scope:** `fleetlive/events:read`",
        "operationId": "listJourneyEvents",
        "parameters": [
          {
            "name": "journeyId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceEventPage"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/events:read"
            ]
          }
        ]
      }
    },
    "/v1/devices/{deviceId}/live-streams": {
      "post": {
        "tags": [
          "Live"
        ],
        "summary": "Start a live stream from a device",
        "description": "Live video from a device's on-board recorder (MDVR). Opens a real-time stream from a device channel and returns the playback URL. Pair with the on-demand media-request API for both live and historical footage over one partner API.\n\n**Required scope:** `fleetlive/live:write`",
        "operationId": "startLiveStream",
        "parameters": [
          {
            "name": "deviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StartLiveStreamRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LiveStream"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/live:write"
            ]
          }
        ]
      }
    },
    "/v1/devices/{deviceId}/live-streams:stop": {
      "post": {
        "tags": [
          "Live"
        ],
        "summary": "Stop live streaming from a device",
        "description": "**Required scope:** `fleetlive/live:write`",
        "operationId": "stopLiveStream",
        "parameters": [
          {
            "name": "deviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/live:write"
            ]
          }
        ]
      }
    },
    "/v1/devices/{deviceId}/playback/calendar": {
      "get": {
        "tags": [
          "Live"
        ],
        "summary": "Days with recorded footage available on the device",
        "description": "**Required scope:** `fleetlive/live:read`",
        "operationId": "getPlaybackCalendar",
        "parameters": [
          {
            "name": "deviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "from",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "to",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlaybackCalendar"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/live:read"
            ]
          }
        ]
      }
    },
    "/v1/devices/{deviceId}/playback/files": {
      "get": {
        "tags": [
          "Live"
        ],
        "summary": "List recorded files on the device for a time window",
        "description": "**Required scope:** `fleetlive/live:read`",
        "operationId": "listPlaybackFiles",
        "parameters": [
          {
            "name": "deviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "from",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "to",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "channels",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlaybackFileList"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/live:read"
            ]
          }
        ]
      }
    },
    "/v1/devices/{deviceId}/playback": {
      "post": {
        "tags": [
          "Live"
        ],
        "summary": "Start remote playback from the device",
        "description": "Streams historical footage straight off the device's on-board recorder for a chosen time window and channels, for remote review without waiting for a full clip upload. Discover available windows with the playback calendar and file-listing endpoints.\n\n**Required scope:** `fleetlive/live:write`",
        "operationId": "startPlayback",
        "parameters": [
          {
            "name": "deviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StartPlaybackRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlaybackStream"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/live:write"
            ]
          }
        ]
      }
    },
    "/v1/devices/{deviceId}/playback:stop": {
      "post": {
        "tags": [
          "Live"
        ],
        "summary": "Stop remote playback",
        "description": "**Required scope:** `fleetlive/live:write`",
        "operationId": "stopPlayback",
        "parameters": [
          {
            "name": "deviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/live:write"
            ]
          }
        ]
      }
    },
    "/v1/devices/{deviceId}/events/{eventId}/media": {
      "get": {
        "tags": [
          "Media"
        ],
        "summary": "List media captured for a device event",
        "description": "**Required scope:** `fleetlive/media:read`",
        "operationId": "listDeviceEventMedia",
        "parameters": [
          {
            "name": "deviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "eventId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaList"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/media:read"
            ]
          }
        ]
      }
    },
    "/v1/events/{eventId}/media-requests": {
      "post": {
        "tags": [
          "Media"
        ],
        "summary": "Request media capture for an event",
        "description": "Asks the device to upload the on-board (MDVR) footage around a specific event. Returns 202 with a `commandId` to poll, or subscribe to the `media.available` webhook and pull a fresh SAS URI when it lands. Idempotent via `Idempotency-Key`.\n\n**Required scope:** `fleetlive/media:write`",
        "operationId": "createEventMediaRequest",
        "parameters": [
          {
            "name": "eventId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateEventMediaRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaRequestAccepted"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/media:write"
            ]
          }
        ]
      }
    },
    "/v1/commands/{commandId}/media": {
      "get": {
        "tags": [
          "Media"
        ],
        "summary": "List media produced by a command",
        "description": "**Required scope:** `fleetlive/media:read`",
        "operationId": "listCommandMedia",
        "parameters": [
          {
            "name": "commandId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaList"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/media:read"
            ]
          }
        ]
      }
    },
    "/v1/media-requests": {
      "post": {
        "tags": [
          "Media"
        ],
        "summary": "Request an on-demand video clip from a device",
        "description": "On-demand video from a device's on-board recorder (MDVR). Pull a specific clip (channel + time window) directly off the device, paired with the `media.available` webhook. Returns 202 with a `commandId`; poll `GET /v1/media-requests/{commandId}` (or await the webhook) then fetch a fresh SAS URI via `GET /v1/media-requests/{commandId}/media`. Idempotent via `Idempotency-Key`.\n\n**Required scope:** `fleetlive/media:write`",
        "operationId": "createMediaRequest",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateMediaRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaRequestAccepted"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/media:write"
            ]
          }
        ]
      }
    },
    "/v1/media-requests/{commandId}": {
      "get": {
        "tags": [
          "Media"
        ],
        "summary": "Poll the status of a media request",
        "description": "Polls an on-demand video request through its lifecycle (accepted -> uploading -> available / failed). The terminal `available` state is also signalled by the `command.state_changed` and `media.available` webhooks.\n\n**Required scope:** `fleetlive/media:read`",
        "operationId": "getMediaRequest",
        "parameters": [
          {
            "name": "commandId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaRequestStatus"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/media:read"
            ]
          }
        ]
      }
    },
    "/v1/media-requests/{commandId}/media": {
      "get": {
        "tags": [
          "Media"
        ],
        "summary": "Retrieve media produced by a media request",
        "description": "Returns freshly-minted, short-lived SAS URIs for the clips a completed video request produced. SAS URIs are issued on read and never stored or sent over webhooks, so always re-fetch here.\n\n**Required scope:** `fleetlive/media:read`",
        "operationId": "listMediaRequestMedia",
        "parameters": [
          {
            "name": "commandId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaList"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/media:read"
            ]
          }
        ]
      }
    },
    "/v1/organizations": {
      "get": {
        "tags": [
          "Organizations"
        ],
        "summary": "List organizations visible to the token",
        "description": "Lists the organizations in the caller's resolved subtree (its anchor plus descendants), using the uniform opaque keyset cursor and `PagedResult` envelope. The optional `organizationIds` filter can only narrow the result: ids outside the subtree are silently intersected away, never a 403. The optional `name` filter matches on a substring of the organization name.\n\n**Required scope:** `fleetlive/organizations:read`",
        "operationId": "listOrganizations",
        "parameters": [
          {
            "name": "name",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "organizationIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid"
              }
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "count",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PagedResultOfOrganizationSummary"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/organizations:read"
            ]
          }
        ]
      }
    },
    "/v1/organizations/{organizationId}": {
      "get": {
        "tags": [
          "Organizations"
        ],
        "summary": "Get an organization",
        "description": "Returns a single organization by its tenant id. An id outside the caller's subtree fails closed with 404 (the organization is not disclosed to be existing).\n\n**Required scope:** `fleetlive/organizations:read`",
        "operationId": "getOrganization",
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrganizationDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/organizations:read"
            ]
          }
        ]
      }
    },
    "/v1/status": {
      "get": {
        "tags": [
          "Status"
        ],
        "summary": "Service health and version",
        "description": "Returns `status: \"ok\"` with the deployed build version, the hosting environment and the server UTC time. Carries no platform data, just a cheap liveness + build-identity probe for clients and uptime monitors.",
        "operationId": "getStatus",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiStatus"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [ ]
          }
        ]
      }
    },
    "/v1/vehicles": {
      "get": {
        "tags": [
          "Vehicles"
        ],
        "summary": "List vehicles",
        "description": "**Required scope:** `fleetlive/vehicles:read`",
        "operationId": "listVehicles",
        "parameters": [
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "organizationIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid"
              }
            }
          },
          {
            "name": "includeChildOrganizations",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "registrationNumber",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "chassisNumber",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "make",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "model",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "fleetIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid"
              }
            }
          },
          {
            "name": "vehicleIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "count",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PagedResultOfVehicleSummary"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/vehicles:read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Vehicles"
        ],
        "summary": "Create a vehicle",
        "description": "**Required scope:** `fleetlive/vehicles:write`",
        "operationId": "createVehicle",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVehicleRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VehicleDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/vehicles:write"
            ]
          }
        ]
      }
    },
    "/v1/vehicles/{vehicleId}": {
      "get": {
        "tags": [
          "Vehicles"
        ],
        "summary": "Get a vehicle",
        "description": "**Required scope:** `fleetlive/vehicles:read`",
        "operationId": "getVehicle",
        "parameters": [
          {
            "name": "vehicleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VehicleDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/vehicles:read"
            ]
          }
        ]
      },
      "patch": {
        "tags": [
          "Vehicles"
        ],
        "summary": "Update a vehicle",
        "description": "**Required scope:** `fleetlive/vehicles:write`",
        "operationId": "updateVehicle",
        "parameters": [
          {
            "name": "vehicleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateVehicleRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VehicleDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/vehicles:write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Vehicles"
        ],
        "summary": "Delete a vehicle",
        "description": "**Required scope:** `fleetlive/vehicles:write`",
        "operationId": "deleteVehicle",
        "parameters": [
          {
            "name": "vehicleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/vehicles:write"
            ]
          }
        ]
      }
    },
    "/v1/vehicle-positions": {
      "get": {
        "tags": [
          "Vehicles"
        ],
        "summary": "Last reported position of each vehicle",
        "description": "**Required scope:** `fleetlive/vehicles:read`",
        "operationId": "listVehiclePositions",
        "parameters": [
          {
            "name": "fleetIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid"
              }
            }
          },
          {
            "name": "organizationId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "organizationIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid"
              }
            }
          },
          {
            "name": "includeChildOrganizations",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "count",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PagedResultOfVehiclePosition"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/vehicles:read"
            ]
          }
        ]
      }
    },
    "/v1/vehicles/{vehicleId}/current-journey": {
      "get": {
        "tags": [
          "Vehicles"
        ],
        "summary": "Get the vehicle's current journey",
        "description": "**Required scope:** `fleetlive/vehicles:read`",
        "operationId": "getVehicleCurrentJourney",
        "parameters": [
          {
            "name": "vehicleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CurrentJourney"
                }
              }
            }
          },
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/vehicles:read"
            ]
          }
        ]
      }
    },
    "/v1/vehicles/{vehicleId}/position": {
      "get": {
        "tags": [
          "Vehicles"
        ],
        "summary": "Get the vehicle's last reported position",
        "description": "**Required scope:** `fleetlive/vehicles:read`",
        "operationId": "getVehiclePosition",
        "parameters": [
          {
            "name": "vehicleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VehiclePosition"
                }
              }
            }
          },
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/vehicles:read"
            ]
          }
        ]
      }
    },
    "/v1/vehicles/{vehicleId}/drivers/{driverId}": {
      "put": {
        "tags": [
          "Vehicles"
        ],
        "summary": "Assign a driver to a vehicle",
        "description": "**Required scope:** `fleetlive/vehicles:write`",
        "operationId": "assignVehicleDriver",
        "parameters": [
          {
            "name": "vehicleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "driverId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/vehicles:write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Vehicles"
        ],
        "summary": "Unassign a driver from a vehicle",
        "description": "**Required scope:** `fleetlive/vehicles:write`",
        "operationId": "unassignVehicleDriver",
        "parameters": [
          {
            "name": "vehicleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "driverId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/vehicles:write"
            ]
          }
        ]
      }
    },
    "/v1/vehicles/{vehicleId}/devices/{deviceId}": {
      "put": {
        "tags": [
          "Vehicles"
        ],
        "summary": "Attach a device to a vehicle",
        "description": "**Required scope:** `fleetlive/vehicles:write`",
        "operationId": "assignVehicleDevice",
        "parameters": [
          {
            "name": "vehicleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/vehicles:write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Vehicles"
        ],
        "summary": "Detach a device from a vehicle",
        "description": "**Required scope:** `fleetlive/vehicles:write`",
        "operationId": "unassignVehicleDevice",
        "parameters": [
          {
            "name": "vehicleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/vehicles:write"
            ]
          }
        ]
      }
    },
    "/v1/webhook-endpoints": {
      "get": {
        "tags": [
          "WebhookEndpoints"
        ],
        "summary": "List webhook endpoints",
        "description": "**Required scope:** `fleetlive/webhooks:read`",
        "operationId": "listWebhookEndpoints",
        "parameters": [
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "count",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PagedResultOfWebhookEndpoint"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/webhooks:read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "WebhookEndpoints"
        ],
        "summary": "Create a webhook endpoint",
        "description": "**Required scope:** `fleetlive/webhooks:write`",
        "operationId": "createWebhookEndpoint",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateWebhookEndpointRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookEndpointCreated"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/webhooks:write"
            ]
          }
        ]
      }
    },
    "/v1/webhook-endpoints/{endpointId}": {
      "get": {
        "tags": [
          "WebhookEndpoints"
        ],
        "summary": "Get a webhook endpoint",
        "description": "**Required scope:** `fleetlive/webhooks:read`",
        "operationId": "getWebhookEndpoint",
        "parameters": [
          {
            "name": "endpointId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookEndpoint"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/webhooks:read"
            ]
          }
        ]
      },
      "patch": {
        "tags": [
          "WebhookEndpoints"
        ],
        "summary": "Update a webhook endpoint",
        "description": "**Required scope:** `fleetlive/webhooks:write`",
        "operationId": "updateWebhookEndpoint",
        "parameters": [
          {
            "name": "endpointId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateWebhookEndpointRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookEndpoint"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/webhooks:write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "WebhookEndpoints"
        ],
        "summary": "Delete a webhook endpoint",
        "description": "**Required scope:** `fleetlive/webhooks:write`",
        "operationId": "deleteWebhookEndpoint",
        "parameters": [
          {
            "name": "endpointId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/webhooks:write"
            ]
          }
        ]
      }
    },
    "/v1/webhook-endpoints/{endpointId}:rotate-secret": {
      "post": {
        "tags": [
          "WebhookEndpoints"
        ],
        "summary": "Rotate the endpoint's signing secret",
        "description": "**Required scope:** `fleetlive/webhooks:write`",
        "operationId": "rotateWebhookEndpointSecret",
        "parameters": [
          {
            "name": "endpointId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookSecretRotated"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/webhooks:write"
            ]
          }
        ]
      }
    },
    "/v1/webhook-endpoints/{endpointId}:test": {
      "post": {
        "tags": [
          "WebhookEndpoints"
        ],
        "summary": "Send a signed test event to the endpoint",
        "description": "Fires an HMAC-SHA256 signed test delivery at your endpoint so you can validate signature verification and connectivity before going live, without waiting for a real event. Returns 202 with the `deliveryId` to inspect.\n\n**Required scope:** `fleetlive/webhooks:write`",
        "operationId": "testWebhookEndpoint",
        "parameters": [
          {
            "name": "endpointId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "$ref": "#/components/schemas/WebhookTestRequest"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookTestAccepted"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/webhooks:write"
            ]
          }
        ]
      }
    },
    "/v1/webhook-endpoints/{endpointId}/deliveries": {
      "get": {
        "tags": [
          "WebhookEndpoints"
        ],
        "summary": "Inspect delivery attempts for an endpoint",
        "description": "A paged, filterable log of every delivery attempt: event type, status, attempt count and the receiver's response code, so you can debug a broken integration. HMAC-SHA256 signing means every attempt is verifiable at the receiver.\n\n**Required scope:** `fleetlive/webhooks:read`",
        "operationId": "listWebhookDeliveries",
        "parameters": [
          {
            "name": "endpointId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "eventType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "count",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PagedResultOfWebhookDelivery"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/webhooks:read"
            ]
          }
        ]
      }
    },
    "/v1/webhook-endpoints/{endpointId}/deliveries/{deliveryId}:replay": {
      "post": {
        "tags": [
          "WebhookEndpoints"
        ],
        "summary": "Replay a past delivery",
        "description": "Re-sends any past delivery (freshly signed) to recover from a receiver outage or bug without touching the source event: the back-fill path for webhook consumers that recovers missed deliveries. Returns 202 with the new `deliveryId`.\n\n**Required scope:** `fleetlive/webhooks:write`",
        "operationId": "replayWebhookDelivery",
        "parameters": [
          {
            "name": "endpointId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deliveryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookReplayAccepted"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [
              "fleetlive/webhooks:write"
            ]
          }
        ]
      }
    },
    "/v1/webhook-event-types": {
      "get": {
        "tags": [
          "WebhookEndpoints"
        ],
        "summary": "List the webhook event-type catalog",
        "description": "Returns the static, machine-readable catalog of the eight webhook event types a subscription can select, each with its description and a `$ref` to the delivered-payload schema. All deliveries share the HMAC-SHA256 signing scheme (`X-FleetLive-Signature: t=<unixTs>,v1=<hex>`) and are at-least-once with exponential backoff. Carries no platform data.",
        "operationId": "listWebhookEventTypes",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookEventTypeCatalog"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [ ]
          }
        ]
      }
    },
    "/v1/webhooks/message-schemas": {
      "get": {
        "tags": [
          "WebhookEndpoints"
        ],
        "summary": "Introspect the outbound webhook message schemas",
        "description": "Returns the machine-readable map of every outbound webhook message type: one `$ref` per topic to the delivered-body schema (`journey.completed`, `alarm.raised`, `device.event`, `media.available`, `video.request.completed`, `live-gps`, `telemetry-raw`, `geofence`). The full request bodies are also described under the document's `webhooks:` section. This anchor exists so generated clients gain a strongly-typed model for the envelope and each topic payload; it carries no platform data.",
        "operationId": "webhookMessageSchemas",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookMessageCatalog"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The bearer token is missing, malformed, expired or has the wrong audience.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. The token lacks the required scope (`auth.scope_missing`), or the target organization is outside the caller's tenant (`auth.tenant_forbidden`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests. The per-client rate limit was exceeded (`rate.limit_exceeded`); see `Retry-After`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error. An unexpected error occurred (`server.unexpected`).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "OAuth2": [ ]
          }
        ],
        "x-fleetlive-wave": 2
      }
    }
  },
  "components": {
    "schemas": {
      "Address": {
        "type": "object",
        "properties": {
          "label": {
            "type": [
              "null",
              "string"
            ],
            "description": "The full single-line formatted address, or null when unavailable."
          },
          "country": {
            "type": [
              "null",
              "string"
            ],
            "description": "The country name, or null when unavailable."
          },
          "state": {
            "type": [
              "null",
              "string"
            ],
            "description": "The state/region/province, or null when unavailable."
          },
          "county": {
            "type": [
              "null",
              "string"
            ],
            "description": "The county, or null when unavailable."
          },
          "city": {
            "type": [
              "null",
              "string"
            ],
            "description": "The city/town, or null when unavailable."
          },
          "district": {
            "type": [
              "null",
              "string"
            ],
            "description": "The district/borough, or null when unavailable."
          },
          "street": {
            "type": [
              "null",
              "string"
            ],
            "description": "The street name, or null when unavailable."
          },
          "houseNumber": {
            "type": [
              "null",
              "string"
            ],
            "description": "The house/building number, or null when unavailable."
          },
          "postalCode": {
            "type": [
              "null",
              "string"
            ],
            "description": "The postal/ZIP code, or null when unavailable."
          }
        },
        "description": "A reverse-geocoded postal address; every component is nullable."
      },
      "AlarmRaisedWebhookEvent": {
        "allOf": [
          {
            "$ref": "#/components/schemas/FleetLiveWebhookEvent"
          },
          {
            "required": [
              "data"
            ],
            "type": "object",
            "properties": {
              "type": {
                "const": "alarm.raised",
                "type": "string",
                "description": "Frozen wire topic name."
              },
              "data": {
                "$ref": "#/components/schemas/AlarmWebhookPayload"
              }
            }
          }
        ],
        "description": "A platform alarm fired for a vehicle/device (`alarmKey` is the sole `alarm.*` leaf, e.g. `harshBraking`). `occurredAt` is the alarm trigger time."
      },
      "AlarmWebhookPayload": {
        "required": [
          "id",
          "triggerTime",
          "alarmKey",
          "speed",
          "heading",
          "device"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Alarm id."
          },
          "triggerTime": {
            "type": "string",
            "description": "Alarm trigger time (ISO-8601 UTC); equals the envelope `occurredAt`.",
            "format": "date-time"
          },
          "alarmKey": {
            "type": "string",
            "description": "The alarm leaf key (e.g. `harshBraking`)."
          },
          "location": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/WebhookGeoPoint"
              },
              {
                "type": "null"
              }
            ],
            "description": "Location at trigger, if a fix was available."
          },
          "speed": {
            "type": "integer",
            "description": "Ground speed at trigger, km/h.",
            "format": "int32"
          },
          "heading": {
            "type": "integer",
            "description": "Heading at trigger, degrees.",
            "format": "int32"
          },
          "alarmState": {
            "type": [
              "null",
              "integer"
            ],
            "description": "Device-reported alarm state, if provided.",
            "format": "int32"
          },
          "ioNumber": {
            "type": [
              "null",
              "integer"
            ],
            "description": "Triggering IO number, if applicable.",
            "format": "int32"
          },
          "device": {
            "$ref": "#/components/schemas/WebhookDeviceReference"
          },
          "organisation": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/WebhookReference"
              },
              {
                "type": "null"
              }
            ],
            "description": "Owning organisation; null when unresolved."
          },
          "fleet": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/WebhookReference"
              },
              {
                "type": "null"
              }
            ],
            "description": "Owning fleet; null when unassigned."
          },
          "vehicle": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/WebhookReference"
              },
              {
                "type": "null"
              }
            ],
            "description": "Owning vehicle; null when unassigned."
          }
        },
        "description": "`alarm.raised` payload: a single platform alarm."
      },
      "ApiClient": {
        "required": [
          "clientId",
          "name",
          "organizationId",
          "scopes",
          "active",
          "createdAt"
        ],
        "type": "object",
        "properties": {
          "clientId": {
            "type": "string",
            "description": "Stable public client identifier used at the token endpoint."
          },
          "name": {
            "type": "string",
            "description": "Human-readable client name."
          },
          "organizationId": {
            "type": "string",
            "description": "Organization the client belongs to.",
            "format": "uuid"
          },
          "scopes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Scopes granted to the client (a subset of its creator's scopes)."
          },
          "secretHint": {
            "type": [
              "null",
              "string"
            ],
            "description": "Last-4 characters of the current client secret; null before a secret exists."
          },
          "active": {
            "type": "boolean",
            "description": "Whether the client is enabled and may obtain tokens."
          },
          "createdAt": {
            "type": "string",
            "description": "Instant the client was created.",
            "format": "date-time"
          }
        },
        "description": "An API client (Duende client). Never carries the secret, only a last-4 `SecretHint`."
      },
      "ApiClientCreated": {
        "required": [
          "clientId",
          "clientSecret",
          "secretHint",
          "name",
          "organizationId",
          "scopes"
        ],
        "type": "object",
        "properties": {
          "clientId": {
            "type": "string",
            "description": "Stable public client identifier used at the token endpoint."
          },
          "clientSecret": {
            "type": "string",
            "description": "The client secret, shown exactly once at creation."
          },
          "secretHint": {
            "type": "string",
            "description": "Last-4 characters of the freshly minted client secret."
          },
          "name": {
            "type": "string",
            "description": "Human-readable client name."
          },
          "organizationId": {
            "type": "string",
            "description": "Organization the client was created in.",
            "format": "uuid"
          },
          "scopes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Scopes granted to the client."
          }
        },
        "description": "Create response. `ClientSecret` is shown EXACTLY ONCE and stored hashed server-side."
      },
      "ApiStatus": {
        "required": [
          "status",
          "version",
          "environment",
          "serverTime"
        ],
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "description": "Liveness token; always `\"ok\"` for a 200 response."
          },
          "version": {
            "type": "string",
            "description": "The deployed assembly informational version serving this request."
          },
          "environment": {
            "type": "string",
            "description": "The hosting environment name (for example `Production` or `Development`)."
          },
          "serverTime": {
            "type": "string",
            "description": "The server clock at the moment the response was produced (UTC).",
            "format": "date-time"
          }
        },
        "description": "Service health + build metadata (no platform data). Returned by `GET /v1/status` so a client or an\nuptime monitor can confirm the API is live and see exactly which build/environment is serving traffic."
      },
      "AuthContext": {
        "required": [
          "clientId",
          "organizationId",
          "licenses",
          "childOrganizationIds",
          "scopes"
        ],
        "type": "object",
        "properties": {
          "clientId": {
            "type": "string",
            "description": "The authenticated API client's id."
          },
          "organizationId": {
            "type": "string",
            "description": "The caller's anchor organization: the root of its accessible subtree (a real tenant Guid).",
            "format": "uuid"
          },
          "organizationName": {
            "type": [
              "null",
              "string"
            ],
            "description": "The anchor organization's display name, or null when unset."
          },
          "licenses": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The licence/feature keys granted to the caller (empty when none)."
          },
          "childOrganizationIds": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "description": "The descendant organization ids reachable from the anchor (empty when the caller is a leaf)."
          },
          "scopes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The OAuth scopes granted to the token (empty when none)."
          }
        },
        "description": "Response of `GET /v1/context`: a clean projection of the caller's identity (no internal client\ninformation leaks). Any valid token is authorized: a client must always be able to introspect itself."
      },
      "Channel": {
        "required": [
          "number",
          "flag"
        ],
        "type": "object",
        "properties": {
          "number": {
            "type": "integer",
            "description": "The 1-based channel number, matching the value used in `channels` request inputs.",
            "format": "int32"
          },
          "flag": {
            "type": "integer",
            "description": "The device bitmask value for this channel (`1 &lt;&lt; (Number - 1)`).",
            "format": "int64"
          },
          "name": {
            "type": [
              "null",
              "string"
            ],
            "description": "The effective human label resolved server-side, or null when the channel is unlabeled."
          }
        },
        "description": "A video/media channel of a device. `Number` is the 1-based channel number (the same value used in\n`channels` request inputs); `Flag` is the device bitmask value (`1 &lt;&lt; (Number - 1)`);\n`Name` is the effective human label resolved server-side, or null when unlabeled."
      },
      "ClientSecretRotated": {
        "required": [
          "clientSecret",
          "secretHint"
        ],
        "type": "object",
        "properties": {
          "clientSecret": {
            "type": "string",
            "description": "The new client secret, shown exactly once."
          },
          "secretHint": {
            "type": "string",
            "description": "Last-4 characters of the new client secret."
          }
        },
        "description": "Secret-rotation response. `ClientSecret` shown exactly once."
      },
      "CommandAccepted": {
        "required": [
          "commandId",
          "statusUrl"
        ],
        "type": "object",
        "properties": {
          "commandId": {
            "type": "string",
            "description": "Opaque id of the accepted command."
          },
          "statusUrl": {
            "type": "string",
            "description": "Relative URL to poll for the command's state."
          }
        },
        "description": "202 body for an accepted asynchronous command; poll `StatusUrl` for state. Never a SAS."
      },
      "CommandDetail": {
        "required": [
          "id",
          "state",
          "type",
          "organization",
          "device",
          "createdAt",
          "isManual"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Opaque, tenant-scoped command id."
          },
          "state": {
            "type": "string",
            "description": "Open-enum lifecycle state of the command (e.g. pending, sent, completed)."
          },
          "type": {
            "type": "string",
            "description": "Open-enum command type (e.g. video, snapshot, reboot); the payload discriminator."
          },
          "organization": {
            "description": "The organization that owns the command.",
            "$ref": "#/components/schemas/IdReference"
          },
          "fleet": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The fleet the command targets; null when not fleet-scoped.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          },
          "vehicle": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The vehicle the command targets; null when not vehicle-scoped.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          },
          "event": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The device-event the command is linked to; null when standalone.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          },
          "device": {
            "description": "The device (by hardware id) the command was issued to.",
            "$ref": "#/components/schemas/HardwareReference"
          },
          "createdAt": {
            "type": "string",
            "description": "UTC instant the command was created.",
            "format": "date-time"
          },
          "updatedAt": {
            "type": [
              "null",
              "string"
            ],
            "description": "UTC instant the command was last updated; null when never updated since creation.",
            "format": "date-time"
          },
          "payload": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "Typed payload for the command; null for payload-less commands (e.g. reboot/wakeup).",
                "$ref": "#/components/schemas/CommandPayload"
              }
            ]
          },
          "driver": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The driver attributed to the command; null when none was resolved.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          },
          "createdBy": {
            "type": [
              "null",
              "string"
            ],
            "description": "The user who created the command; null for system-created commands."
          },
          "isManual": {
            "type": "boolean",
            "description": "True when the command was manually issued (vs. system/automation)."
          },
          "failureReason": {
            "type": [
              "null",
              "string"
            ],
            "description": "Reason the command failed, when in a failed state; null otherwise."
          }
        },
        "description": "Full command detail with typed payload."
      },
      "CommandPayload": {
        "required": [
          "kind"
        ],
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "description": "Payload discriminator (e.g. video, snapshot); an unknown kind still deserializes."
          },
          "startAt": {
            "type": [
              "null",
              "string"
            ],
            "description": "UTC start instant of the requested clip/anchor; null for kinds that carry no start.",
            "format": "date-time"
          },
          "durationSeconds": {
            "type": [
              "null",
              "integer"
            ],
            "description": "Requested clip duration in seconds; null when not applicable to the kind.",
            "format": "int32"
          },
          "channels": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "$ref": "#/components/schemas/Channel"
            },
            "description": "Requested camera channels; null when the kind targets no specific channels."
          },
          "overlay": {
            "type": [
              "null",
              "boolean"
            ],
            "description": "Whether telemetry overlay was requested on the media; null when not applicable."
          },
          "videoQuality": {
            "type": [
              "null",
              "integer"
            ],
            "description": "Requested video quality tier; null when not applicable to the kind.",
            "format": "int32"
          }
        },
        "description": "A structured command payload. The contract models this as an open union of video/snapshot payloads keyed\non `Kind`; the flattened shape here carries every field of both (all nullable), so an unknown kind\nstill deserializes. Reboot/wakeup commands are payload-less (null payload)."
      },
      "CommandSummary": {
        "required": [
          "id",
          "state",
          "type",
          "organization",
          "device",
          "createdAt"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Opaque, tenant-scoped command id. Round-trips into `GET /v1/commands/{commandId}`."
          },
          "state": {
            "type": "string",
            "description": "Open-enum lifecycle state of the command (e.g. pending, sent, completed)."
          },
          "type": {
            "type": "string",
            "description": "Open-enum command type (e.g. video, snapshot, reboot); the payload discriminator."
          },
          "organization": {
            "description": "The organization that owns the command.",
            "$ref": "#/components/schemas/IdReference"
          },
          "fleet": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The fleet the command targets; null when not fleet-scoped.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          },
          "vehicle": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The vehicle the command targets; null when not vehicle-scoped.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          },
          "event": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The device-event the command is linked to; null when standalone.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          },
          "device": {
            "description": "The device (by hardware id) the command was issued to.",
            "$ref": "#/components/schemas/HardwareReference"
          },
          "createdAt": {
            "type": "string",
            "description": "UTC instant the command was created.",
            "format": "date-time"
          },
          "updatedAt": {
            "type": [
              "null",
              "string"
            ],
            "description": "UTC instant the command was last updated; null when never updated since creation.",
            "format": "date-time"
          }
        },
        "description": "A device command in a list projection. `State`/`Type` are open enums (plain strings)."
      },
      "CreateApiClientRequest": {
        "required": [
          "name",
          "scopes",
          "organizationId"
        ],
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Human-readable name for the new client."
          },
          "scopes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Scopes to grant; must be a subset of the caller's own scopes."
          },
          "organizationId": {
            "type": "string",
            "description": "Organization to create the client in; must be within the caller's subtree.",
            "format": "uuid"
          }
        },
        "description": "Create-an-API-client request. `Scopes` must be a subset of the caller's scopes."
      },
      "CreateDriverRequest": {
        "required": [
          "fleetId",
          "firstName",
          "lastName"
        ],
        "type": "object",
        "properties": {
          "fleetId": {
            "type": "string",
            "description": "Identifier of the fleet the new driver will belong to; must resolve within your tenant subtree.",
            "format": "uuid"
          },
          "firstName": {
            "type": "string",
            "description": "The driver's given name. Required."
          },
          "lastName": {
            "type": "string",
            "description": "The driver's family name. Required."
          },
          "phoneNumber": {
            "type": [
              "null",
              "string"
            ],
            "description": "The driver's contact phone number; optional."
          }
        },
        "description": "Create-a-driver request body."
      },
      "CreateEventMediaRequest": {
        "required": [
          "durationSeconds",
          "channels",
          "type"
        ],
        "type": "object",
        "properties": {
          "startAt": {
            "type": [
              "null",
              "string"
            ],
            "description": "Clip start instant (UTC); when omitted the capture is anchored at the event's own time.",
            "format": "date-time"
          },
          "durationSeconds": {
            "type": "integer",
            "description": "Clip length in seconds; ignored for snapshots.",
            "format": "int32"
          },
          "channels": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "1-based camera channel numbers to capture."
          },
          "type": {
            "type": "string",
            "description": "Media kind (e.g. `video`/`snapshot`)."
          },
          "overlay": {
            "type": [
              "null",
              "boolean"
            ],
            "description": "Burn the on-screen telemetry overlay into the media; defaults to false."
          },
          "videoQuality": {
            "type": [
              "null",
              "string"
            ],
            "description": "Open `sd`/`hd` quality enum; ignored for snapshots."
          }
        },
        "description": "Request media capture for an event. `Channels` are 1-based channel numbers. `VideoQuality` is\nthe open `sd`/`hd` enum (the facade maps `sd`→0/`hd`→1); ignored for snapshots."
      },
      "CreateFleetRequest": {
        "required": [
          "name",
          "organizationId"
        ],
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "The fleet's display name (required)."
          },
          "organizationId": {
            "type": "string",
            "description": "The organization to create the fleet in; must be inside your tenant subtree.",
            "format": "uuid"
          }
        },
        "description": "Create-a-fleet request body."
      },
      "CreateMediaRequest": {
        "required": [
          "durationSeconds",
          "channels",
          "type"
        ],
        "type": "object",
        "properties": {
          "hardwareId": {
            "type": [
              "null",
              "string"
            ],
            "description": "Device hardware id addressing the target device; supply exactly one of `hardwareId`/`deviceId`."
          },
          "deviceId": {
            "type": [
              "null",
              "string"
            ],
            "description": "Device id addressing the target device; supply exactly one of `hardwareId`/`deviceId`."
          },
          "startAt": {
            "type": [
              "null",
              "string"
            ],
            "description": "Clip start instant (UTC); supply exactly one of `startAt`/`midpointAt`.",
            "format": "date-time"
          },
          "midpointAt": {
            "type": [
              "null",
              "string"
            ],
            "description": "Clip midpoint instant (UTC): an alternative anchor to `startAt` marking the clip's centre; supply exactly one of `startAt`/`midpointAt`.",
            "format": "date-time"
          },
          "durationSeconds": {
            "type": "integer",
            "description": "Clip length in seconds; ignored for snapshots.",
            "format": "int32"
          },
          "channels": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "1-based camera channel numbers to capture."
          },
          "type": {
            "type": "string",
            "description": "Media kind (e.g. `video`/`snapshot`)."
          },
          "overlay": {
            "type": [
              "null",
              "boolean"
            ],
            "description": "Burn the on-screen telemetry overlay into the media; defaults to false."
          },
          "videoQuality": {
            "type": [
              "null",
              "string"
            ],
            "description": "Open `sd`/`hd` quality enum; ignored for snapshots."
          }
        },
        "description": "            Request an on-demand media clip from a device. `Channels` are 1-based channel numbers.\n            `VideoQuality` is the open `sd`/`hd` enum; ignored for snapshots.\n            Two exactly-one rules apply (a 400 validation.failed otherwise): supply exactly one device\naddress: either hardwareId or deviceId, not both and not neither; and supply exactly one\nclip anchor: either startAt (clip start) or midpointAt (clip centre), not both and not neither."
      },
      "CreateVehicleRequest": {
        "required": [
          "fleetId",
          "registrationNumber"
        ],
        "type": "object",
        "properties": {
          "fleetId": {
            "type": "string",
            "description": "The fleet to create the vehicle in; its organization must be inside your tenant subtree.",
            "format": "uuid"
          },
          "registrationNumber": {
            "type": "string",
            "description": "The registration/number plate (required; unique within the fleet's organization)."
          },
          "make": {
            "type": [
              "null",
              "string"
            ],
            "description": "The manufacturer/make, or null."
          },
          "model": {
            "type": [
              "null",
              "string"
            ],
            "description": "The model name, or null."
          },
          "fuelType": {
            "type": [
              "null",
              "string"
            ],
            "description": "The fuel-type token (open enum), or null."
          },
          "engineSize": {
            "type": [
              "null",
              "string"
            ],
            "description": "The engine size (litres), or null."
          },
          "vehicleType": {
            "type": [
              "null",
              "string"
            ],
            "description": "The vehicle-type token (open enum), or null."
          },
          "chassisNumber": {
            "type": [
              "null",
              "string"
            ],
            "description": "The chassis/VIN, or null."
          }
        },
        "description": "Create-a-vehicle request body. `Odometer` is inert on writes (never accepted here)."
      },
      "CreateWebhookEndpointRequest": {
        "required": [
          "url",
          "eventTypes"
        ],
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "Destination URL the platform will POST signed deliveries to."
          },
          "eventTypes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Event-type tokens to subscribe the endpoint to (see the event-type catalog)."
          },
          "description": {
            "type": [
              "null",
              "string"
            ],
            "description": "Optional human label for the endpoint."
          },
          "active": {
            "type": "boolean",
            "description": "Whether the endpoint starts active and receiving deliveries.",
            "default": true
          }
        },
        "description": "Create-a-webhook-endpoint request."
      },
      "CurrentJourney": {
        "required": [
          "inProgress",
          "organization",
          "vehicle"
        ],
        "type": "object",
        "properties": {
          "journeyId": {
            "type": [
              "null",
              "string"
            ],
            "description": "The journey's opaque id, or null when a current journey has not yet been persisted."
          },
          "inProgress": {
            "type": "boolean",
            "description": "True when the journey is still open (no end recorded)."
          },
          "startedAt": {
            "type": [
              "null",
              "string"
            ],
            "description": "When the journey started (UTC), or null when unknown.",
            "format": "date-time"
          },
          "endedAt": {
            "type": [
              "null",
              "string"
            ],
            "description": "When the journey ended (UTC), or null while it is still in progress.",
            "format": "date-time"
          },
          "organization": {
            "description": "The owning organization.",
            "$ref": "#/components/schemas/IdReference"
          },
          "fleet": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The vehicle's fleet, or null when unassigned.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          },
          "vehicle": {
            "description": "The vehicle this journey belongs to.",
            "$ref": "#/components/schemas/IdReference"
          },
          "driver": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The driver on this journey, or null when none.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          },
          "device": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The reporting device, or null when unknown.",
                "$ref": "#/components/schemas/HardwareReference"
              }
            ]
          }
        },
        "description": "The vehicle's current (in-progress or latest) journey."
      },
      "DeviceChannel": {
        "required": [
          "number",
          "flag"
        ],
        "type": "object",
        "properties": {
          "number": {
            "type": "integer",
            "description": "The channel number on the device.",
            "format": "int32"
          },
          "flag": {
            "type": "integer",
            "description": "The channel's bit within the device's channel mask.",
            "format": "int64"
          },
          "name": {
            "type": [
              "null",
              "string"
            ],
            "description": "The channel's effective display name, or `null` when it has no label."
          },
          "labelId": {
            "type": [
              "null",
              "string"
            ],
            "description": "The label definition supplying the name, or `null` when the channel is unlabelled.",
            "format": "uuid"
          }
        },
        "description": "A device channel plus the id of the label definition behind its effective name."
      },
      "DeviceChannelList": {
        "required": [
          "hardwareId",
          "channels"
        ],
        "type": "object",
        "properties": {
          "hardwareId": {
            "type": "string",
            "description": "The hardware id of the device the channels belong to."
          },
          "channels": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DeviceChannel"
            },
            "description": "The device's channels."
          }
        },
        "description": "The catalog of channels available on a device."
      },
      "DeviceDetail": {
        "required": [
          "id",
          "hardwareId",
          "enabled",
          "organization"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Opaque device identifier, usable as the `{deviceId}` path segment."
          },
          "hardwareId": {
            "type": "string",
            "description": "The hardware/serial identifier the unit reports itself as."
          },
          "enabled": {
            "type": "boolean",
            "description": "Whether data ingest is currently enabled for the device."
          },
          "model": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The device's model reference, or `null` when no model is assigned.",
                "$ref": "#/components/schemas/DeviceModelReference"
              }
            ]
          },
          "organization": {
            "description": "The organization that owns the device.",
            "$ref": "#/components/schemas/IdReference"
          },
          "fleet": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The fleet the device is assigned to, or `null` when unassigned.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          },
          "vehicle": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The vehicle the device is fitted to, or `null` when unassigned.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          },
          "firmwareVersion": {
            "type": [
              "null",
              "string"
            ],
            "description": "The device's reported firmware version, or `null` when unknown."
          },
          "simNumber": {
            "type": [
              "null",
              "string"
            ],
            "description": "The SIM number provisioned in the device, or `null` when unknown."
          },
          "serialNumber": {
            "type": [
              "null",
              "string"
            ],
            "description": "The device's serial number, or `null` when unknown."
          }
        },
        "description": "Full device detail."
      },
      "DeviceEvent": {
        "required": [
          "id",
          "eventTypes",
          "categories",
          "triggeredAt",
          "receivedAt",
          "device",
          "organization",
          "hasMedia",
          "isAccident"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Opaque, tenant-scoped event id. Round-trips into event-scoped GETs."
          },
          "eventTypes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Open-enum event kinds (e.g. harshBraking, overspeed); unknown values pass through as-is."
          },
          "categories": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Open-enum event categories the kinds roll up into (e.g. driving, safety)."
          },
          "classification": {
            "type": [
              "null",
              "string"
            ],
            "description": "Severity for DSM/ADAS events: low/medium/high; null when the event carries no severity."
          },
          "vendorEventType": {
            "type": [
              "null",
              "string"
            ],
            "description": "The device vendor's own raw event-type token, when supplied; null otherwise."
          },
          "triggeredAt": {
            "type": "string",
            "description": "UTC instant the event was triggered on the device.",
            "format": "date-time"
          },
          "receivedAt": {
            "type": "string",
            "description": "UTC instant the platform received the event.",
            "format": "date-time"
          },
          "device": {
            "description": "The device (by hardware id) that raised the event.",
            "$ref": "#/components/schemas/HardwareReference"
          },
          "organization": {
            "description": "The organization that owns the event.",
            "$ref": "#/components/schemas/IdReference"
          },
          "fleet": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The fleet the device belonged to at trigger time; null when unassigned.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          },
          "vehicle": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The vehicle the device was fitted to at trigger time; null when unassigned.",
                "$ref": "#/components/schemas/VehicleReference"
              }
            ]
          },
          "driver": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The driver attributed to the event; null when none was resolved.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          },
          "hasMedia": {
            "type": "boolean",
            "description": "True when media (video/snapshot) is available for this event."
          },
          "isAccident": {
            "type": "boolean",
            "description": "True when the event is flagged as an accident."
          },
          "locations": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "$ref": "#/components/schemas/GeoPoint"
            },
            "description": "Geo-points captured across the event; null when the event carries no location trail."
          },
          "address": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "Resolved postal address at the event location; null when none was resolved.",
                "$ref": "#/components/schemas/Address"
              }
            ]
          },
          "speedLimitKph": {
            "type": [
              "null",
              "integer"
            ],
            "description": "Posted speed limit at the event location in km/h; null when unknown.",
            "format": "int32"
          },
          "speedPointsKph": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Per-sample speed readings across the event in km/h; null when none were captured."
          },
          "headingPointsDegrees": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Per-sample heading readings across the event in degrees (0 to 359); null when none were captured."
          },
          "gSensorFrames": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "$ref": "#/components/schemas/GSensorFrame"
            },
            "description": "Accelerometer sample burst for the event; null when the device sent no G-sensor data."
          }
        },
        "description": "A device-event projection. For DSM/ADAS events, `Classification` (low/medium/high) IS the severity;\n`EventTypes` is the kind of event. Open enums (`EventTypes`, `Classification`) are plain\nstrings so unknown values pass through (x-extensible-enum, ADR-0008)."
      },
      "DeviceEventPage": {
        "required": [
          "items",
          "hasMore"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DeviceEvent"
            },
            "description": "The events on this page, newest trigger-time first."
          },
          "nextCursor": {
            "type": [
              "null",
              "string"
            ],
            "description": "Opaque cursor for the next page; null when this is the last page."
          },
          "hasMore": {
            "type": "boolean",
            "description": "True when more pages follow this one."
          },
          "estimatedTotal": {
            "type": [
              "null",
              "integer"
            ],
            "description": "Estimated total matching events when a count was requested; null otherwise.",
            "format": "int64"
          },
          "meta": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "Echo of the effective time window the query resolved to; null when unavailable.",
                "$ref": "#/components/schemas/TimeWindowMeta"
              }
            ]
          }
        },
        "description": "Paged device events. Same envelope as `PagedResult` plus a `Meta` echo of the effective time\nwindow. Kept as its own type because the standard page envelope carries no window metadata."
      },
      "DeviceEventWebhookEvent": {
        "allOf": [
          {
            "$ref": "#/components/schemas/FleetLiveWebhookEvent"
          },
          {
            "required": [
              "data"
            ],
            "type": "object",
            "properties": {
              "type": {
                "const": "device.event",
                "type": "string",
                "description": "Frozen wire topic name."
              },
              "data": {
                "$ref": "#/components/schemas/EventWebhookPayload"
              }
            }
          }
        ],
        "description": "One or more device events were observed at the same instant; `eventTypes` carries the distinct canonical dotted tokens (e.g. `dsm.fatigue`), ascending and never empty. `occurredAt` is the event trigger time. Payloads never contain SAS URIs."
      },
      "DeviceModel": {
        "required": [
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The device model's stable identifier."
          },
          "name": {
            "type": "string",
            "description": "The device model's display name."
          }
        },
        "description": "A device model catalog entry."
      },
      "DeviceModelReference": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The device model's stable identifier."
          },
          "name": {
            "type": [
              "null",
              "string"
            ],
            "description": "Human-readable model name, or `null` when the model join did not resolve a name."
          }
        },
        "description": "Device-model reference; `Name` is hydrated via a device-model join."
      },
      "DevicePosition": {
        "required": [
          "device",
          "recordedAt",
          "location",
          "gpsValid",
          "organization"
        ],
        "type": "object",
        "properties": {
          "device": {
            "description": "The reporting device's hardware reference.",
            "$ref": "#/components/schemas/HardwareReference"
          },
          "recordedAt": {
            "type": "string",
            "description": "When the device recorded this position (UTC).",
            "format": "date-time"
          },
          "location": {
            "description": "The reported geographic location.",
            "$ref": "#/components/schemas/GeoPoint"
          },
          "speedKph": {
            "type": [
              "null",
              "integer"
            ],
            "description": "Reported ground speed in km/h, or `null` when not reported.",
            "format": "int32"
          },
          "headingDegrees": {
            "type": [
              "null",
              "integer"
            ],
            "description": "Reported heading in degrees, or `null` when not reported.",
            "format": "int32"
          },
          "ignition": {
            "type": [
              "null",
              "boolean"
            ],
            "description": "Ignition state when derivable from OBD, or `null` when unknown."
          },
          "odometerKm": {
            "type": [
              "null",
              "number"
            ],
            "description": "Odometer reading in kilometres, or `null` when not reported.",
            "format": "double"
          },
          "gpsValid": {
            "type": "boolean",
            "description": "Whether the GPS fix is valid; `false` means the location must not be trusted."
          },
          "organization": {
            "description": "The organization that owns the device.",
            "$ref": "#/components/schemas/IdReference"
          },
          "fleet": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The fleet the device is assigned to, or `null` when unassigned.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          },
          "vehicle": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The vehicle the device is fitted to, or `null` when unassigned.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          },
          "driver": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The driver associated at capture time, or `null` when unknown.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          }
        },
        "description": "A device's last reported position. `GpsValid` is false when the device reported an invalid fix.\nWithout it a `0,0` location would look legitimate."
      },
      "DeviceProtocol": {
        "required": [
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The device protocol's stable identifier."
          },
          "name": {
            "type": "string",
            "description": "The device protocol's display name."
          }
        },
        "description": "A device protocol catalog entry."
      },
      "DeviceSummary": {
        "required": [
          "id",
          "hardwareId",
          "enabled",
          "organization"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Opaque device identifier, usable as the `{deviceId}` path segment."
          },
          "hardwareId": {
            "type": "string",
            "description": "The hardware/serial identifier the unit reports itself as."
          },
          "enabled": {
            "type": "boolean",
            "description": "Whether data ingest is currently enabled for the device."
          },
          "model": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The device's model reference, or `null` when no model is assigned.",
                "$ref": "#/components/schemas/DeviceModelReference"
              }
            ]
          },
          "organization": {
            "description": "The organization that owns the device.",
            "$ref": "#/components/schemas/IdReference"
          },
          "fleet": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The fleet the device is assigned to, or `null` when unassigned.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          },
          "vehicle": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The vehicle the device is fitted to, or `null` when unassigned.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          }
        },
        "description": "A device in a list projection."
      },
      "DriverDetail": {
        "required": [
          "id",
          "organization"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The driver's identifier, stable for the lifetime of the driver."
          },
          "firstName": {
            "type": [
              "null",
              "string"
            ],
            "description": "The driver's given name; `null` when not recorded."
          },
          "lastName": {
            "type": [
              "null",
              "string"
            ],
            "description": "The driver's family name; `null` when not recorded."
          },
          "name": {
            "type": [
              "null",
              "string"
            ],
            "description": "The driver's full display name; `null` when not recorded."
          },
          "organization": {
            "description": "The organization (tenant) that owns the driver.",
            "$ref": "#/components/schemas/IdReference"
          },
          "fleet": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The fleet the driver belongs to; `null` when the driver is not assigned to a fleet.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          },
          "phoneNumber": {
            "type": [
              "null",
              "string"
            ],
            "description": "The driver's contact phone number; `null` when not recorded."
          },
          "currentVehicle": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The vehicle currently assigned to this driver; `null` when the driver is not assigned to a vehicle. Resolved from the driver's active vehicle assignment.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          }
        },
        "description": "Full driver detail."
      },
      "DriverSummary": {
        "required": [
          "id",
          "organization"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The driver's identifier, stable for the lifetime of the driver."
          },
          "firstName": {
            "type": [
              "null",
              "string"
            ],
            "description": "The driver's given name; `null` when not recorded."
          },
          "lastName": {
            "type": [
              "null",
              "string"
            ],
            "description": "The driver's family name; `null` when not recorded."
          },
          "name": {
            "type": [
              "null",
              "string"
            ],
            "description": "The driver's full display name; `null` when not recorded."
          },
          "organization": {
            "description": "The organization (tenant) that owns the driver.",
            "$ref": "#/components/schemas/IdReference"
          },
          "fleet": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The fleet the driver belongs to; `null` when the driver is not assigned to a fleet.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          }
        },
        "description": "A driver in a list projection."
      },
      "EventWebhookPayload": {
        "required": [
          "id",
          "triggerTime",
          "eventTypes",
          "device"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Event id."
          },
          "triggerTime": {
            "type": "string",
            "description": "Event trigger time (ISO-8601 UTC); equals the envelope `occurredAt`.",
            "format": "date-time"
          },
          "eventTypes": {
            "minItems": 1,
            "uniqueItems": true,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Distinct canonical dotted event tokens (e.g. `dsm.fatigue`), ascending; never empty."
          },
          "device": {
            "$ref": "#/components/schemas/WebhookDeviceReference"
          },
          "organisation": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/WebhookReference"
              },
              {
                "type": "null"
              }
            ],
            "description": "Owning organisation; null when unresolved."
          },
          "fleet": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/WebhookReference"
              },
              {
                "type": "null"
              }
            ],
            "description": "Owning fleet; null when unassigned."
          },
          "vehicle": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/WebhookReference"
              },
              {
                "type": "null"
              }
            ],
            "description": "Owning vehicle; null when unassigned."
          }
        },
        "description": "`device.event` payload: one or more device events observed at the same instant."
      },
      "FeedPageOfDeviceEvent": {
        "required": [
          "items",
          "hasMore"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DeviceEvent"
            }
          },
          "nextSinceToken": {
            "type": [
              "null",
              "string"
            ]
          },
          "hasMore": {
            "type": "boolean"
          }
        },
        "description": "Delta since-token feed envelope (ADR-0004): `{ items, nextSinceToken, hasMore }`. Distinct from\nPagedResult&lt;T&gt;: feeds are for incremental sync/reconciliation, not random-access paging.\nA string? FeedPage&lt;T&gt;.NextSinceToken older than the 7-day retention yields `410 feed.cursor_expired`.\nbool FeedPage&lt;T&gt;.HasMore is required by the contract (all three feed schemas): `true` when more items\nalready exist beyond this page, signalling the client to call again immediately with the token."
      },
      "FeedPageOfJourneySummary": {
        "required": [
          "items",
          "hasMore"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/JourneySummary"
            }
          },
          "nextSinceToken": {
            "type": [
              "null",
              "string"
            ]
          },
          "hasMore": {
            "type": "boolean"
          }
        },
        "description": "Delta since-token feed envelope (ADR-0004): `{ items, nextSinceToken, hasMore }`. Distinct from\nPagedResult&lt;T&gt;: feeds are for incremental sync/reconciliation, not random-access paging.\nA string? FeedPage&lt;T&gt;.NextSinceToken older than the 7-day retention yields `410 feed.cursor_expired`.\nbool FeedPage&lt;T&gt;.HasMore is required by the contract (all three feed schemas): `true` when more items\nalready exist beyond this page, signalling the client to call again immediately with the token."
      },
      "FeedPageOfVehiclePosition": {
        "required": [
          "items",
          "hasMore"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VehiclePosition"
            }
          },
          "nextSinceToken": {
            "type": [
              "null",
              "string"
            ]
          },
          "hasMore": {
            "type": "boolean"
          }
        },
        "description": "Delta since-token feed envelope (ADR-0004): `{ items, nextSinceToken, hasMore }`. Distinct from\nPagedResult&lt;T&gt;: feeds are for incremental sync/reconciliation, not random-access paging.\nA string? FeedPage&lt;T&gt;.NextSinceToken older than the 7-day retention yields `410 feed.cursor_expired`.\nbool FeedPage&lt;T&gt;.HasMore is required by the contract (all three feed schemas): `true` when more items\nalready exist beyond this page, signalling the client to call again immediately with the token."
      },
      "FleetDetail": {
        "required": [
          "id",
          "name",
          "organization"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The fleet's opaque id. Round-trips into `GET /v1/fleets/{fleetId}`.",
            "format": "uuid"
          },
          "name": {
            "type": "string",
            "description": "The fleet's display name."
          },
          "organization": {
            "description": "The organization that owns the fleet.",
            "$ref": "#/components/schemas/IdReference"
          }
        },
        "description": "Full fleet detail."
      },
      "FleetLiveWebhookEvent": {
        "required": [
          "eventId",
          "type",
          "organisationId",
          "occurredAt",
          "data"
        ],
        "type": "object",
        "properties": {
          "eventId": {
            "type": "string",
            "description": "Dedupe key; the delivery is quarantined if blank."
          },
          "type": {
            "type": "string",
            "description": "The frozen wire topic name (e.g. `journey.completed`)."
          },
          "organisationId": {
            "type": "string",
            "description": "Owning organisation (tenant); quarantined if empty.",
            "format": "uuid"
          },
          "occurredAt": {
            "type": "string",
            "description": "When the event occurred (ISO-8601 UTC); per-topic semantics.",
            "format": "date-time"
          },
          "data": {
            "type": "object",
            "description": "Topic-specific payload (overridden per topic wrapper)."
          }
        },
        "description": "The complete delivered body of every FleetLive webhook. British spelling `organisationId`. There is no `apiVersion`/`version`/`resource`/`deliveryId` field in the body. Wire evolution is additive-only and a breaking change mints a new topic. Signing/delivery metadata rides in HTTP headers, not here."
      },
      "FleetSummary": {
        "required": [
          "id",
          "name",
          "organization"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The fleet's opaque id. Round-trips into `GET /v1/fleets/{fleetId}`.",
            "format": "uuid"
          },
          "name": {
            "type": "string",
            "description": "The fleet's display name."
          },
          "organization": {
            "description": "The organization that owns the fleet.",
            "$ref": "#/components/schemas/IdReference"
          }
        },
        "description": "A fleet in a list projection."
      },
      "GeofenceDetail": {
        "required": [
          "id",
          "name",
          "type",
          "organization"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The geofence's opaque id. Round-trips into `GET /v1/geofences/{geofenceId}` and appears in geofence webhooks."
          },
          "name": {
            "type": "string",
            "description": "The geofence's display name."
          },
          "type": {
            "type": "string",
            "description": "The zone shape as an open enum string: `polygon` or `circle` (unknown values pass through)."
          },
          "organization": {
            "description": "The owning organization, referenced by its opaque id.",
            "$ref": "#/components/schemas/IdReference"
          },
          "coordinates": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "$ref": "#/components/schemas/GeoPoint"
            },
            "description": "The ordered coordinate ring for a `polygon` zone; null for a `circle`."
          },
          "center": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The centre point for a `circle` zone; null for a `polygon`.",
                "$ref": "#/components/schemas/GeoPoint"
              }
            ]
          },
          "radiusMeters": {
            "type": [
              "null",
              "number"
            ],
            "description": "The radius in metres for a `circle` zone; null for a `polygon`.",
            "format": "double"
          }
        },
        "description": "Full geofence detail. A `polygon` carries its ordered `Coordinates` ring; a `circle` carries\nits `Center` point plus `RadiusMeters`. The shape fields not relevant to the geofence type are null."
      },
      "GeofenceSummary": {
        "required": [
          "id",
          "name",
          "type",
          "organization"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The geofence's opaque id. Round-trips into `GET /v1/geofences/{geofenceId}` and appears in geofence webhooks."
          },
          "name": {
            "type": "string",
            "description": "The geofence's display name."
          },
          "type": {
            "type": "string",
            "description": "The zone shape as an open enum string: `polygon` or `circle` (unknown values pass through)."
          },
          "organization": {
            "description": "The owning organization, referenced by its opaque id.",
            "$ref": "#/components/schemas/IdReference"
          }
        },
        "description": "A geofence in a list projection. `Type` is an open enum (`polygon` | `circle`) modeled as a\nplain string so an unknown value is passed through, never a deserialization error (x-extensible-enum, ADR-0008)."
      },
      "GeofenceWebhookEvent": {
        "allOf": [
          {
            "$ref": "#/components/schemas/FleetLiveWebhookEvent"
          },
          {
            "required": [
              "data"
            ],
            "type": "object",
            "properties": {
              "type": {
                "const": "geofence",
                "type": "string",
                "description": "Frozen wire topic name."
              },
              "data": {
                "$ref": "#/components/schemas/GeofenceWebhookPayload"
              }
            }
          }
        ],
        "description": "A vehicle crossed a geofence boundary or exceeded a zone speed limit. `geofenceEventType` discriminates `entered` | `exited` | `speeding`; `speed` and `speedLimit` are populated only for `speeding` (null otherwise). `occurredAt` is the (possibly interpolated) transition time and equals the payload `id`. Consume idempotently, because the platform may re-assert on restart."
      },
      "GeofenceWebhookPayload": {
        "required": [
          "id",
          "occurredAt",
          "geofenceEventType",
          "geofence",
          "position",
          "device"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Transition id; equals the envelope `eventId`."
          },
          "occurredAt": {
            "type": "string",
            "description": "Transition time (ISO-8601 UTC), interpolated for cross transitions.",
            "format": "date-time"
          },
          "geofenceEventType": {
            "enum": [
              "entered",
              "exited",
              "speeding"
            ],
            "type": "string",
            "description": "Which geofence transition this is."
          },
          "geofence": {
            "$ref": "#/components/schemas/WebhookGeofenceReference"
          },
          "position": {
            "$ref": "#/components/schemas/WebhookGeoPoint"
          },
          "speed": {
            "type": [
              "null",
              "integer"
            ],
            "description": "Measured speed, km/h; populated only for `speeding`, otherwise null.",
            "format": "int32"
          },
          "speedLimit": {
            "type": [
              "null",
              "integer"
            ],
            "description": "Zone speed limit, km/h; populated only for `speeding`, otherwise null.",
            "format": "int32"
          },
          "device": {
            "$ref": "#/components/schemas/WebhookDeviceReference"
          },
          "organisation": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/WebhookReference"
              },
              {
                "type": "null"
              }
            ],
            "description": "Owning organisation; null when unresolved."
          },
          "fleet": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/WebhookReference"
              },
              {
                "type": "null"
              }
            ],
            "description": "Owning fleet; null when unassigned."
          },
          "vehicle": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/WebhookReference"
              },
              {
                "type": "null"
              }
            ],
            "description": "Owning vehicle; null when unassigned."
          }
        },
        "description": "`geofence` payload: a geofence entered/exited/speeding transition. `speed`/`speedLimit` are populated only when `geofenceEventType` is `speeding`."
      },
      "GeoPoint": {
        "required": [
          "latitude",
          "longitude"
        ],
        "type": "object",
        "properties": {
          "latitude": {
            "type": "number",
            "description": "Latitude in decimal degrees (WGS84).",
            "format": "double"
          },
          "longitude": {
            "type": "number",
            "description": "Longitude in decimal degrees (WGS84).",
            "format": "double"
          }
        },
        "description": "A WGS84 geographic point."
      },
      "GSensorFrame": {
        "required": [
          "xAxis",
          "yAxis",
          "zAxis",
          "sequenceNumber",
          "sampledAt"
        ],
        "type": "object",
        "properties": {
          "xAxis": {
            "type": "number",
            "description": "Lateral (X) accelerometer reading for this sample, in the device's raw g-sensor units.",
            "format": "double"
          },
          "yAxis": {
            "type": "number",
            "description": "Longitudinal (Y) accelerometer reading for this sample, in the device's raw g-sensor units.",
            "format": "double"
          },
          "zAxis": {
            "type": "number",
            "description": "Vertical (Z) accelerometer reading for this sample, in the device's raw g-sensor units.",
            "format": "double"
          },
          "sequenceNumber": {
            "type": "integer",
            "description": "Monotonic sample index within the event's G-sensor burst (0-based, ascending).",
            "format": "int32"
          },
          "sampledAt": {
            "type": "string",
            "description": "UTC instant this accelerometer sample was taken.",
            "format": "date-time"
          }
        },
        "description": "Raw accelerometer axes for one G-sensor sample. No synthetic scalar g-force exists in-domain."
      },
      "HardwareReference": {
        "required": [
          "hardwareId"
        ],
        "type": "object",
        "properties": {
          "hardwareId": {
            "type": "string",
            "description": "The device's hardware id (a real device serial, never opaque-encoded)."
          }
        },
        "description": "A device reference by its hardware id."
      },
      "IdReference": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The referenced resource's opaque id. Round-trips into the matching `/v1` GET."
          }
        },
        "description": "A minimal opaque-id reference to another resource."
      },
      "JourneyCompletedWebhookEvent": {
        "allOf": [
          {
            "$ref": "#/components/schemas/FleetLiveWebhookEvent"
          },
          {
            "required": [
              "data"
            ],
            "type": "object",
            "properties": {
              "type": {
                "const": "journey.completed",
                "type": "string",
                "description": "Frozen wire topic name."
              },
              "data": {
                "$ref": "#/components/schemas/JourneyWebhookPayload"
              }
            }
          }
        ],
        "description": "A journey was closed (or re-emitted with `isUpdated=true` after reprocessing) and is available via `/v1/journeys`. `occurredAt` is the journey end time."
      },
      "JourneyDetail": {
        "required": [
          "id",
          "idleDurationSeconds",
          "organization",
          "processedAt"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Opaque journey identifier."
          },
          "startedAt": {
            "type": [
              "null",
              "string"
            ],
            "description": "UTC instant the journey began; null when the journey document carries no start point.",
            "format": "date-time"
          },
          "endedAt": {
            "type": [
              "null",
              "string"
            ],
            "description": "UTC instant the journey ended; null when the journey document carries no end point (still in progress).",
            "format": "date-time"
          },
          "distanceKilometers": {
            "type": [
              "null",
              "number"
            ],
            "description": "Total travelled distance in kilometres; null when the journey has no computed length.",
            "format": "double"
          },
          "durationSeconds": {
            "type": [
              "null",
              "integer"
            ],
            "description": "Total journey duration in seconds; null when either endpoint timestamp is missing.",
            "format": "int32"
          },
          "idleDurationSeconds": {
            "type": "integer",
            "description": "Seconds spent idling during the journey.",
            "format": "int32"
          },
          "maxSpeedKph": {
            "type": [
              "null",
              "integer"
            ],
            "description": "Maximum speed reached in km/h; null when not recorded.",
            "format": "int32"
          },
          "startLocation": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "Geographic coordinate of the journey start; null when the start point carries no location.",
                "$ref": "#/components/schemas/GeoPoint"
              }
            ]
          },
          "endLocation": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "Geographic coordinate of the journey end; null when the end point carries no location.",
                "$ref": "#/components/schemas/GeoPoint"
              }
            ]
          },
          "startAddress": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "Reverse-geocoded address of the start; null when unavailable.",
                "$ref": "#/components/schemas/Address"
              }
            ]
          },
          "endAddress": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "Reverse-geocoded address of the end; null when unavailable.",
                "$ref": "#/components/schemas/Address"
              }
            ]
          },
          "organization": {
            "description": "Owning organization reference.",
            "$ref": "#/components/schemas/IdReference"
          },
          "fleet": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "Fleet the vehicle belongs to; null when unassigned.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          },
          "vehicle": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "Vehicle that drove the journey; null when unresolved.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          },
          "driver": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "Driver of the journey; null when unresolved.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          },
          "device": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "Hardware device that produced the telemetry; null when unresolved.",
                "$ref": "#/components/schemas/HardwareReference"
              }
            ]
          },
          "frameCount": {
            "type": [
              "null",
              "integer"
            ],
            "description": "Number of map-matched telemetry frames available for the journey; null when the journey carries no geometry.",
            "format": "int32"
          },
          "processedAt": {
            "type": "string",
            "description": "UTC instant the journey was last processed / reprocessed.",
            "format": "date-time"
          }
        },
        "description": "Full journey detail. Frames are NOT embedded; use the frames sub-resource."
      },
      "JourneySummary": {
        "required": [
          "id",
          "startedAt",
          "durationSeconds",
          "maxSpeedKph",
          "organization"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Opaque journey identifier; round-trips into `/v1/journeys/{journeyId}` and journey webhook payloads."
          },
          "startedAt": {
            "type": "string",
            "description": "UTC instant the journey began. Always present for a listed journey.",
            "format": "date-time"
          },
          "endedAt": {
            "type": [
              "null",
              "string"
            ],
            "description": "UTC instant the journey ended; null while the journey is still in progress.",
            "format": "date-time"
          },
          "startLocationLabel": {
            "type": [
              "null",
              "string"
            ],
            "description": "Human-readable label of the start location; null when the source report carries no label."
          },
          "endLocationLabel": {
            "type": [
              "null",
              "string"
            ],
            "description": "Human-readable label of the end location; null when the source report carries no label."
          },
          "distanceKilometers": {
            "type": [
              "null",
              "number"
            ],
            "description": "Total travelled distance in kilometres; null when the source report omits distance.",
            "format": "double"
          },
          "idleDurationSeconds": {
            "type": [
              "null",
              "integer"
            ],
            "description": "Seconds spent idling during the journey; null when the source report omits idle time.",
            "format": "int32"
          },
          "durationSeconds": {
            "type": "integer",
            "description": "Total journey duration in seconds, derived from start/end when not projected directly.",
            "format": "int32"
          },
          "maxSpeedKph": {
            "type": "number",
            "description": "Maximum speed reached in km/h. The list source does not project max speed, so this is 0 here; use the journey detail resource for a populated value.",
            "format": "double"
          },
          "organization": {
            "description": "Owning organization reference.",
            "$ref": "#/components/schemas/IdReference"
          },
          "fleet": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "Fleet the journey's vehicle belongs to; null when unassigned.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          },
          "vehicle": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "Vehicle that drove the journey; null when unresolved.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          },
          "driver": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "Driver of the journey; always null in the list projection (resolve via the detail resource).",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          },
          "device": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "Hardware device that produced the journey's telemetry; null when unresolved.",
                "$ref": "#/components/schemas/HardwareReference"
              }
            ]
          }
        },
        "description": "A journey in a list projection."
      },
      "JourneyWebhookPayload": {
        "required": [
          "journeyId",
          "isUpdated",
          "startedAt",
          "endedAt",
          "distanceKilometers",
          "durationSeconds",
          "maxSpeedKph",
          "idleDurationSeconds",
          "startLocation",
          "endLocation",
          "device"
        ],
        "type": "object",
        "properties": {
          "journeyId": {
            "type": "string",
            "description": "Journey id.",
            "format": "uuid"
          },
          "isUpdated": {
            "type": "boolean",
            "description": "True when this is a re-emission of a previously delivered journey after reprocessing."
          },
          "startAddress": {
            "type": [
              "null",
              "string"
            ],
            "description": "Reverse-geocoded start address, if resolved."
          },
          "endAddress": {
            "type": [
              "null",
              "string"
            ],
            "description": "Reverse-geocoded end address, if resolved."
          },
          "startedAt": {
            "type": "string",
            "description": "Journey start (ISO-8601 UTC).",
            "format": "date-time"
          },
          "endedAt": {
            "type": "string",
            "description": "Journey end (ISO-8601 UTC); equals the envelope `occurredAt`.",
            "format": "date-time"
          },
          "distanceKilometers": {
            "type": "number",
            "description": "Journey distance, kilometres.",
            "format": "double"
          },
          "durationSeconds": {
            "type": "integer",
            "description": "Journey duration, seconds.",
            "format": "int32"
          },
          "maxSpeedKph": {
            "type": "integer",
            "description": "Maximum speed, km/h.",
            "format": "int32"
          },
          "idleDurationSeconds": {
            "type": "integer",
            "description": "Idle time, seconds.",
            "format": "int32"
          },
          "startLocation": {
            "$ref": "#/components/schemas/WebhookGeoPoint"
          },
          "endLocation": {
            "$ref": "#/components/schemas/WebhookGeoPoint"
          },
          "device": {
            "$ref": "#/components/schemas/WebhookDeviceReference"
          },
          "organisation": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/WebhookReference"
              },
              {
                "type": "null"
              }
            ],
            "description": "Owning organisation; null when unresolved."
          },
          "fleet": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/WebhookReference"
              },
              {
                "type": "null"
              }
            ],
            "description": "Owning fleet; null when unassigned."
          },
          "vehicle": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/WebhookReference"
              },
              {
                "type": "null"
              }
            ],
            "description": "Owning vehicle; null when unassigned."
          }
        },
        "description": "`journey.completed` payload: a closed (or reprocessed) journey."
      },
      "LiveGpsWebhookEvent": {
        "allOf": [
          {
            "$ref": "#/components/schemas/FleetLiveWebhookEvent"
          },
          {
            "required": [
              "data"
            ],
            "type": "object",
            "properties": {
              "type": {
                "const": "live-gps",
                "type": "string",
                "description": "Frozen wire topic name."
              },
              "data": {
                "$ref": "#/components/schemas/LiveGpsWebhookPayload"
              }
            }
          }
        ],
        "description": "A single live GPS fix for a device. `occurredAt` and the envelope `eventId` (`{hardwareId}:{utc:O}`) are derived from the fix time `utc`."
      },
      "LiveGpsWebhookPayload": {
        "required": [
          "utc",
          "speed",
          "heading",
          "device"
        ],
        "type": "object",
        "properties": {
          "utc": {
            "type": "string",
            "description": "Fix time (ISO-8601 UTC); equals the envelope `occurredAt`.",
            "format": "date-time"
          },
          "speed": {
            "type": "number",
            "description": "Ground speed, km/h.",
            "format": "double"
          },
          "heading": {
            "type": "number",
            "description": "Heading, degrees 0 to 360.",
            "format": "double"
          },
          "location": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/WebhookGeoPoint"
              },
              {
                "type": "null"
              }
            ],
            "description": "Fix location, if valid."
          },
          "device": {
            "$ref": "#/components/schemas/WebhookDeviceReference"
          },
          "organisation": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/WebhookReference"
              },
              {
                "type": "null"
              }
            ],
            "description": "Owning organisation; null when unresolved."
          },
          "fleet": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/WebhookReference"
              },
              {
                "type": "null"
              }
            ],
            "description": "Owning fleet; null when unassigned."
          },
          "vehicle": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/WebhookReference"
              },
              {
                "type": "null"
              }
            ],
            "description": "Owning vehicle; null when unassigned."
          }
        },
        "description": "`live-gps` payload: a single live GPS fix."
      },
      "LiveStream": {
        "required": [
          "status",
          "standard",
          "urls"
        ],
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "description": "The streaming-host status reported for the started stream."
          },
          "standard": {
            "type": "string",
            "description": "The streaming protocol the returned URLs use."
          },
          "urls": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StreamUrl"
            },
            "description": "One stream URL per requested channel."
          }
        },
        "description": "A started live stream: one URL per requested channel."
      },
      "MediaAvailableWebhookEvent": {
        "allOf": [
          {
            "$ref": "#/components/schemas/FleetLiveWebhookEvent"
          },
          {
            "required": [
              "data"
            ],
            "type": "object",
            "properties": {
              "type": {
                "const": "media.available",
                "type": "string",
                "description": "Frozen wire topic name."
              },
              "data": {
                "$ref": "#/components/schemas/VideoRequestAvailableWebhookPayload"
              }
            }
          }
        ],
        "description": "A requested media clip became available. Carries references only, never a SAS URI; fetch fresh media via the media-request retrieval endpoint. The organisation is carried only in the envelope, not the payload. `occurredAt` is the media creation time."
      },
      "MediaItem": {
        "required": [
          "id",
          "uri"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Opaque media id. Stable across reads; pass it back to correlate a specific clip/snapshot."
          },
          "uri": {
            "type": "string",
            "description": "Freshly signed, short-lived read SAS URI for the media blob, never the raw blob path; re-GET for a fresh link."
          },
          "mimeType": {
            "type": [
              "null",
              "string"
            ],
            "description": "MIME type of the media (e.g. `video/mp4`, `image/jpeg`); null when the device did not report one."
          },
          "capturedAt": {
            "type": [
              "null",
              "string"
            ],
            "description": "Instant the media was captured on the device (UTC); null when the device did not stamp a capture time.",
            "format": "date-time"
          },
          "channel": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "Source camera channel the media came from; null for channel-agnostic media.",
                "$ref": "#/components/schemas/Channel"
              }
            ]
          },
          "commandId": {
            "type": [
              "null",
              "string"
            ],
            "description": "Opaque id of the command that produced this media, so a client can navigate media → command; null when the media is not command-linked."
          }
        },
        "description": "A media item with a freshly issued SAS URI (TTL 10 to 60 min). Do not persist; re-GET for a fresh link."
      },
      "MediaList": {
        "required": [
          "items"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MediaItem"
            },
            "description": "The media items; an empty list (never 204/404) when the resource exists but holds no media."
          }
        },
        "description": "A media list (fresh SAS URIs, issued per GET)."
      },
      "MediaPurpose": {
        "enum": [
          "Unspecified",
          "Video",
          "Snapshot",
          "Thumbnail",
          "Gif",
          "VideoWithAudio"
        ],
        "type": "string",
        "description": "Media purpose (mirrors the platform `MediaPurposeType`)."
      },
      "MediaRequestAccepted": {
        "required": [
          "commandId",
          "statusUrl"
        ],
        "type": "object",
        "properties": {
          "commandId": {
            "type": "string",
            "description": "Opaque id of the queued media-request command; poll it via `GET /v1/media-requests/{commandId}`."
          },
          "statusUrl": {
            "type": "string",
            "description": "Relative URL to poll this request's status."
          }
        },
        "description": "202 body for an accepted media request; never contains a SAS; poll `StatusUrl`."
      },
      "MediaRequestStatus": {
        "required": [
          "commandId",
          "state",
          "mediaReady"
        ],
        "type": "object",
        "properties": {
          "commandId": {
            "type": "string",
            "description": "Opaque id of the media-request command being polled."
          },
          "state": {
            "type": "string",
            "description": "Lifecycle token (queued/dispatched/acknowledged/completed/failed/cancelled/timed_out)."
          },
          "mediaReady": {
            "type": "boolean",
            "description": "True once the produced media is retrievable via the request's media endpoint."
          },
          "failureReason": {
            "type": [
              "null",
              "string"
            ],
            "description": "Human-readable failure reason for a terminal `failed`/`timed_out` state; null otherwise."
          }
        },
        "description": "Status of a media request. `State` includes terminal `failed`/`timed_out` values."
      },
      "MoveDeviceFleetRequest": {
        "required": [
          "fleetId"
        ],
        "type": "object",
        "properties": {
          "fleetId": {
            "type": "string",
            "description": "The target fleet's identifier; must be in the caller's subtree and the device's organization.",
            "format": "uuid"
          }
        },
        "description": "Move-a-device-to-another-fleet request body."
      },
      "Odometer": {
        "type": "object",
        "properties": {
          "odometerMeters": {
            "type": [
              "null",
              "number"
            ],
            "description": "The odometer reading in metres, or null when no telemetry is available.",
            "format": "double"
          },
          "engineHoursSeconds": {
            "type": [
              "null",
              "number"
            ],
            "description": "Accumulated engine-run time in seconds, or null when no telemetry is available.",
            "format": "double"
          },
          "lastUpdatedAt": {
            "type": [
              "null",
              "string"
            ],
            "description": "When these derived values were last refreshed from telemetry, or null when never.",
            "format": "date-time"
          },
          "source": {
            "type": [
              "null",
              "string"
            ],
            "description": "The telemetry source these values were derived from, or null when unknown."
          }
        },
        "description": "Odometer, DERIVED from telemetry. Every field may be null when the vehicle has no telemetry, and the\nwhole object is always null on write responses (inert on writes) per the contract."
      },
      "OrganizationDetail": {
        "required": [
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The organization's tenant identifier (a real platform Guid, not an opaque id).",
            "format": "uuid"
          },
          "name": {
            "type": "string",
            "description": "The organization's display name."
          },
          "timeZone": {
            "type": [
              "null",
              "string"
            ],
            "description": "The organization's IANA time-zone id (for example `Europe/London`), or null when unset."
          },
          "supportEmail": {
            "type": [
              "null",
              "string"
            ],
            "description": "The organization's support contact email, or null when unset."
          },
          "supportPhone": {
            "type": [
              "null",
              "string"
            ],
            "description": "The organization's support contact phone number, or null when unset."
          }
        },
        "description": "Full organization detail."
      },
      "OrganizationSummary": {
        "required": [
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The organization's tenant identifier (a real platform Guid, not an opaque id).",
            "format": "uuid"
          },
          "name": {
            "type": "string",
            "description": "The organization's display name."
          },
          "timeZone": {
            "type": [
              "null",
              "string"
            ],
            "description": "The organization's IANA time-zone id (for example `Europe/London`), or null when unset."
          },
          "supportEmail": {
            "type": [
              "null",
              "string"
            ],
            "description": "The organization's support contact email, or null when unset."
          },
          "supportPhone": {
            "type": [
              "null",
              "string"
            ],
            "description": "The organization's support contact phone number, or null when unset."
          }
        },
        "description": "An organization in a list projection."
      },
      "PagedResultOfApiClient": {
        "required": [
          "items",
          "hasMore"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApiClient"
            }
          },
          "nextCursor": {
            "type": [
              "null",
              "string"
            ]
          },
          "hasMore": {
            "type": "boolean"
          },
          "estimatedTotal": {
            "type": [
              "null",
              "integer"
            ],
            "format": "int64"
          }
        },
        "description": "The uniform collection envelope (ADR-0004): `{ items, nextCursor, hasMore, estimatedTotal }`.\nbool PagedResult&lt;T&gt;.HasMore is always present; string? PagedResult&lt;T&gt;.NextCursor is `null` at the end of the\ncollection; long? PagedResult&lt;T&gt;.EstimatedTotal is populated only when the caller passed `?count=true`.\nOffsets are never exposed: the cursor is opaque and versioned (see KeysetCursorCodec)."
      },
      "PagedResultOfCommandSummary": {
        "required": [
          "items",
          "hasMore"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CommandSummary"
            }
          },
          "nextCursor": {
            "type": [
              "null",
              "string"
            ]
          },
          "hasMore": {
            "type": "boolean"
          },
          "estimatedTotal": {
            "type": [
              "null",
              "integer"
            ],
            "format": "int64"
          }
        },
        "description": "The uniform collection envelope (ADR-0004): `{ items, nextCursor, hasMore, estimatedTotal }`.\nbool PagedResult&lt;T&gt;.HasMore is always present; string? PagedResult&lt;T&gt;.NextCursor is `null` at the end of the\ncollection; long? PagedResult&lt;T&gt;.EstimatedTotal is populated only when the caller passed `?count=true`.\nOffsets are never exposed: the cursor is opaque and versioned (see KeysetCursorCodec)."
      },
      "PagedResultOfDeviceModel": {
        "required": [
          "items",
          "hasMore"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DeviceModel"
            }
          },
          "nextCursor": {
            "type": [
              "null",
              "string"
            ]
          },
          "hasMore": {
            "type": "boolean"
          },
          "estimatedTotal": {
            "type": [
              "null",
              "integer"
            ],
            "format": "int64"
          }
        },
        "description": "The uniform collection envelope (ADR-0004): `{ items, nextCursor, hasMore, estimatedTotal }`.\nbool PagedResult&lt;T&gt;.HasMore is always present; string? PagedResult&lt;T&gt;.NextCursor is `null` at the end of the\ncollection; long? PagedResult&lt;T&gt;.EstimatedTotal is populated only when the caller passed `?count=true`.\nOffsets are never exposed: the cursor is opaque and versioned (see KeysetCursorCodec)."
      },
      "PagedResultOfDeviceProtocol": {
        "required": [
          "items",
          "hasMore"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DeviceProtocol"
            }
          },
          "nextCursor": {
            "type": [
              "null",
              "string"
            ]
          },
          "hasMore": {
            "type": "boolean"
          },
          "estimatedTotal": {
            "type": [
              "null",
              "integer"
            ],
            "format": "int64"
          }
        },
        "description": "The uniform collection envelope (ADR-0004): `{ items, nextCursor, hasMore, estimatedTotal }`.\nbool PagedResult&lt;T&gt;.HasMore is always present; string? PagedResult&lt;T&gt;.NextCursor is `null` at the end of the\ncollection; long? PagedResult&lt;T&gt;.EstimatedTotal is populated only when the caller passed `?count=true`.\nOffsets are never exposed: the cursor is opaque and versioned (see KeysetCursorCodec)."
      },
      "PagedResultOfDeviceSummary": {
        "required": [
          "items",
          "hasMore"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DeviceSummary"
            }
          },
          "nextCursor": {
            "type": [
              "null",
              "string"
            ]
          },
          "hasMore": {
            "type": "boolean"
          },
          "estimatedTotal": {
            "type": [
              "null",
              "integer"
            ],
            "format": "int64"
          }
        },
        "description": "The uniform collection envelope (ADR-0004): `{ items, nextCursor, hasMore, estimatedTotal }`.\nbool PagedResult&lt;T&gt;.HasMore is always present; string? PagedResult&lt;T&gt;.NextCursor is `null` at the end of the\ncollection; long? PagedResult&lt;T&gt;.EstimatedTotal is populated only when the caller passed `?count=true`.\nOffsets are never exposed: the cursor is opaque and versioned (see KeysetCursorCodec)."
      },
      "PagedResultOfDriverSummary": {
        "required": [
          "items",
          "hasMore"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DriverSummary"
            }
          },
          "nextCursor": {
            "type": [
              "null",
              "string"
            ]
          },
          "hasMore": {
            "type": "boolean"
          },
          "estimatedTotal": {
            "type": [
              "null",
              "integer"
            ],
            "format": "int64"
          }
        },
        "description": "The uniform collection envelope (ADR-0004): `{ items, nextCursor, hasMore, estimatedTotal }`.\nbool PagedResult&lt;T&gt;.HasMore is always present; string? PagedResult&lt;T&gt;.NextCursor is `null` at the end of the\ncollection; long? PagedResult&lt;T&gt;.EstimatedTotal is populated only when the caller passed `?count=true`.\nOffsets are never exposed: the cursor is opaque and versioned (see KeysetCursorCodec)."
      },
      "PagedResultOfFleetSummary": {
        "required": [
          "items",
          "hasMore"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FleetSummary"
            }
          },
          "nextCursor": {
            "type": [
              "null",
              "string"
            ]
          },
          "hasMore": {
            "type": "boolean"
          },
          "estimatedTotal": {
            "type": [
              "null",
              "integer"
            ],
            "format": "int64"
          }
        },
        "description": "The uniform collection envelope (ADR-0004): `{ items, nextCursor, hasMore, estimatedTotal }`.\nbool PagedResult&lt;T&gt;.HasMore is always present; string? PagedResult&lt;T&gt;.NextCursor is `null` at the end of the\ncollection; long? PagedResult&lt;T&gt;.EstimatedTotal is populated only when the caller passed `?count=true`.\nOffsets are never exposed: the cursor is opaque and versioned (see KeysetCursorCodec)."
      },
      "PagedResultOfGeofenceSummary": {
        "required": [
          "items",
          "hasMore"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GeofenceSummary"
            }
          },
          "nextCursor": {
            "type": [
              "null",
              "string"
            ]
          },
          "hasMore": {
            "type": "boolean"
          },
          "estimatedTotal": {
            "type": [
              "null",
              "integer"
            ],
            "format": "int64"
          }
        },
        "description": "The uniform collection envelope (ADR-0004): `{ items, nextCursor, hasMore, estimatedTotal }`.\nbool PagedResult&lt;T&gt;.HasMore is always present; string? PagedResult&lt;T&gt;.NextCursor is `null` at the end of the\ncollection; long? PagedResult&lt;T&gt;.EstimatedTotal is populated only when the caller passed `?count=true`.\nOffsets are never exposed: the cursor is opaque and versioned (see KeysetCursorCodec)."
      },
      "PagedResultOfJourneySummary": {
        "required": [
          "items",
          "hasMore"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/JourneySummary"
            }
          },
          "nextCursor": {
            "type": [
              "null",
              "string"
            ]
          },
          "hasMore": {
            "type": "boolean"
          },
          "estimatedTotal": {
            "type": [
              "null",
              "integer"
            ],
            "format": "int64"
          }
        },
        "description": "The uniform collection envelope (ADR-0004): `{ items, nextCursor, hasMore, estimatedTotal }`.\nbool PagedResult&lt;T&gt;.HasMore is always present; string? PagedResult&lt;T&gt;.NextCursor is `null` at the end of the\ncollection; long? PagedResult&lt;T&gt;.EstimatedTotal is populated only when the caller passed `?count=true`.\nOffsets are never exposed: the cursor is opaque and versioned (see KeysetCursorCodec)."
      },
      "PagedResultOfOrganizationSummary": {
        "required": [
          "items",
          "hasMore"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrganizationSummary"
            }
          },
          "nextCursor": {
            "type": [
              "null",
              "string"
            ]
          },
          "hasMore": {
            "type": "boolean"
          },
          "estimatedTotal": {
            "type": [
              "null",
              "integer"
            ],
            "format": "int64"
          }
        },
        "description": "The uniform collection envelope (ADR-0004): `{ items, nextCursor, hasMore, estimatedTotal }`.\nbool PagedResult&lt;T&gt;.HasMore is always present; string? PagedResult&lt;T&gt;.NextCursor is `null` at the end of the\ncollection; long? PagedResult&lt;T&gt;.EstimatedTotal is populated only when the caller passed `?count=true`.\nOffsets are never exposed: the cursor is opaque and versioned (see KeysetCursorCodec)."
      },
      "PagedResultOfRoutePoint": {
        "required": [
          "items",
          "hasMore"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RoutePoint"
            }
          },
          "nextCursor": {
            "type": [
              "null",
              "string"
            ]
          },
          "hasMore": {
            "type": "boolean"
          },
          "estimatedTotal": {
            "type": [
              "null",
              "integer"
            ],
            "format": "int64"
          }
        },
        "description": "The uniform collection envelope (ADR-0004): `{ items, nextCursor, hasMore, estimatedTotal }`.\nbool PagedResult&lt;T&gt;.HasMore is always present; string? PagedResult&lt;T&gt;.NextCursor is `null` at the end of the\ncollection; long? PagedResult&lt;T&gt;.EstimatedTotal is populated only when the caller passed `?count=true`.\nOffsets are never exposed: the cursor is opaque and versioned (see KeysetCursorCodec)."
      },
      "PagedResultOfTelemetryFrame": {
        "required": [
          "items",
          "hasMore"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TelemetryFrame"
            }
          },
          "nextCursor": {
            "type": [
              "null",
              "string"
            ]
          },
          "hasMore": {
            "type": "boolean"
          },
          "estimatedTotal": {
            "type": [
              "null",
              "integer"
            ],
            "format": "int64"
          }
        },
        "description": "The uniform collection envelope (ADR-0004): `{ items, nextCursor, hasMore, estimatedTotal }`.\nbool PagedResult&lt;T&gt;.HasMore is always present; string? PagedResult&lt;T&gt;.NextCursor is `null` at the end of the\ncollection; long? PagedResult&lt;T&gt;.EstimatedTotal is populated only when the caller passed `?count=true`.\nOffsets are never exposed: the cursor is opaque and versioned (see KeysetCursorCodec)."
      },
      "PagedResultOfVehiclePosition": {
        "required": [
          "items",
          "hasMore"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VehiclePosition"
            }
          },
          "nextCursor": {
            "type": [
              "null",
              "string"
            ]
          },
          "hasMore": {
            "type": "boolean"
          },
          "estimatedTotal": {
            "type": [
              "null",
              "integer"
            ],
            "format": "int64"
          }
        },
        "description": "The uniform collection envelope (ADR-0004): `{ items, nextCursor, hasMore, estimatedTotal }`.\nbool PagedResult&lt;T&gt;.HasMore is always present; string? PagedResult&lt;T&gt;.NextCursor is `null` at the end of the\ncollection; long? PagedResult&lt;T&gt;.EstimatedTotal is populated only when the caller passed `?count=true`.\nOffsets are never exposed: the cursor is opaque and versioned (see KeysetCursorCodec)."
      },
      "PagedResultOfVehicleSummary": {
        "required": [
          "items",
          "hasMore"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VehicleSummary"
            }
          },
          "nextCursor": {
            "type": [
              "null",
              "string"
            ]
          },
          "hasMore": {
            "type": "boolean"
          },
          "estimatedTotal": {
            "type": [
              "null",
              "integer"
            ],
            "format": "int64"
          }
        },
        "description": "The uniform collection envelope (ADR-0004): `{ items, nextCursor, hasMore, estimatedTotal }`.\nbool PagedResult&lt;T&gt;.HasMore is always present; string? PagedResult&lt;T&gt;.NextCursor is `null` at the end of the\ncollection; long? PagedResult&lt;T&gt;.EstimatedTotal is populated only when the caller passed `?count=true`.\nOffsets are never exposed: the cursor is opaque and versioned (see KeysetCursorCodec)."
      },
      "PagedResultOfWebhookDelivery": {
        "required": [
          "items",
          "hasMore"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebhookDelivery"
            }
          },
          "nextCursor": {
            "type": [
              "null",
              "string"
            ]
          },
          "hasMore": {
            "type": "boolean"
          },
          "estimatedTotal": {
            "type": [
              "null",
              "integer"
            ],
            "format": "int64"
          }
        },
        "description": "The uniform collection envelope (ADR-0004): `{ items, nextCursor, hasMore, estimatedTotal }`.\nbool PagedResult&lt;T&gt;.HasMore is always present; string? PagedResult&lt;T&gt;.NextCursor is `null` at the end of the\ncollection; long? PagedResult&lt;T&gt;.EstimatedTotal is populated only when the caller passed `?count=true`.\nOffsets are never exposed: the cursor is opaque and versioned (see KeysetCursorCodec)."
      },
      "PagedResultOfWebhookEndpoint": {
        "required": [
          "items",
          "hasMore"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebhookEndpoint"
            }
          },
          "nextCursor": {
            "type": [
              "null",
              "string"
            ]
          },
          "hasMore": {
            "type": "boolean"
          },
          "estimatedTotal": {
            "type": [
              "null",
              "integer"
            ],
            "format": "int64"
          }
        },
        "description": "The uniform collection envelope (ADR-0004): `{ items, nextCursor, hasMore, estimatedTotal }`.\nbool PagedResult&lt;T&gt;.HasMore is always present; string? PagedResult&lt;T&gt;.NextCursor is `null` at the end of the\ncollection; long? PagedResult&lt;T&gt;.EstimatedTotal is populated only when the caller passed `?count=true`.\nOffsets are never exposed: the cursor is opaque and versioned (see KeysetCursorCodec)."
      },
      "PlaybackCalendar": {
        "required": [
          "items"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PlaybackCalendarDay"
            },
            "description": "The days that have recorded footage available on the device."
          }
        },
        "description": "Days with recorded footage available on the device."
      },
      "PlaybackCalendarDay": {
        "required": [
          "date"
        ],
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "description": "The calendar date that has recorded footage available on the device.",
            "format": "date"
          }
        },
        "description": "A day with recorded footage available on the device."
      },
      "PlaybackFile": {
        "required": [
          "startAt",
          "endAt"
        ],
        "type": "object",
        "properties": {
          "channel": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The channel that recorded the file; `null` when the host did not attribute it to a channel.",
                "$ref": "#/components/schemas/Channel"
              }
            ]
          },
          "startAt": {
            "type": "string",
            "description": "When the recorded file's footage begins.",
            "format": "date-time"
          },
          "endAt": {
            "type": "string",
            "description": "When the recorded file's footage ends.",
            "format": "date-time"
          },
          "fileName": {
            "type": [
              "null",
              "string"
            ],
            "description": "The device file name; `null` when the host does not expose one."
          },
          "sizeBytes": {
            "type": [
              "null",
              "integer"
            ],
            "description": "The file size in bytes; `null` when the host does not report it.",
            "format": "int64"
          }
        },
        "description": "A recorded file available on the device for a time window."
      },
      "PlaybackFileList": {
        "required": [
          "items"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PlaybackFile"
            },
            "description": "The recorded files available on the device for the requested window."
          }
        },
        "description": "Recorded files on the device for a time window."
      },
      "PlaybackStream": {
        "required": [
          "standard",
          "urls"
        ],
        "type": "object",
        "properties": {
          "standard": {
            "type": "string",
            "description": "The streaming protocol the returned URLs use."
          },
          "urls": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StreamUrl"
            },
            "description": "One stream URL per requested channel."
          }
        },
        "description": "A started playback stream: one URL per requested channel."
      },
      "ProblemDetails": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "description": "URI reference identifying the problem type.",
            "format": "uri"
          },
          "title": {
            "type": [
              "null",
              "string"
            ],
            "description": "Short, human-readable summary of the problem type."
          },
          "status": {
            "type": [
              "null",
              "integer"
            ],
            "description": "The HTTP status code.",
            "format": "int32"
          },
          "detail": {
            "type": [
              "null",
              "string"
            ],
            "description": "Human-readable explanation specific to this occurrence."
          },
          "instance": {
            "type": [
              "null",
              "string"
            ],
            "description": "The request path that produced the error."
          },
          "errorCode": {
            "type": [
              "null",
              "string"
            ],
            "description": "Stable, machine-readable code from the versioned registry (`resource.reason`)."
          },
          "requestId": {
            "type": [
              "null",
              "string"
            ],
            "description": "Request identifier for support correlation."
          },
          "traceId": {
            "type": [
              "null",
              "string"
            ],
            "description": "Distributed-trace identifier."
          },
          "retryable": {
            "type": [
              "null",
              "boolean"
            ],
            "description": "True when the same request may be retried (5xx / 429)."
          },
          "errors": {
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "description": "Field-level validation errors, keyed by field name (validation failures only)."
          }
        },
        "description": "RFC 9457 problem document (shared $ref for clean client generation). `errorCode` is a stable, machine-readable value from the versioned registry (`resource.reason`); clients branch on it, never on the localized `title`/`detail`."
      },
      "RoutePoint": {
        "required": [
          "latitude",
          "longitude"
        ],
        "type": "object",
        "properties": {
          "latitude": {
            "type": "number",
            "description": "WGS84 latitude in decimal degrees.",
            "format": "double"
          },
          "longitude": {
            "type": "number",
            "description": "WGS84 longitude in decimal degrees.",
            "format": "double"
          },
          "recordedAt": {
            "type": [
              "null",
              "string"
            ],
            "description": "UTC instant of the underlying trace point; null for snapped vertices that do not coincide with an original trace point.",
            "format": "date-time"
          },
          "speedKph": {
            "type": [
              "null",
              "number"
            ],
            "description": "Ground speed at the point in km/h; null when unavailable.",
            "format": "double"
          },
          "speedLimitKph": {
            "type": [
              "null",
              "number"
            ],
            "description": "Posted speed limit at the point in km/h; populated only by the snapped RouteLinks source, null on the raw-frame fallback.",
            "format": "double"
          },
          "speeding": {
            "type": [
              "null",
              "boolean"
            ],
            "description": "Whether the vehicle exceeded the speed limit at the point; populated only by the snapped RouteLinks source, null on the raw-frame fallback."
          },
          "headingDegrees": {
            "type": [
              "null",
              "number"
            ],
            "description": "Heading in degrees clockwise from north; null when unavailable.",
            "format": "double"
          }
        },
        "description": "A single map-matched point of a journey's travelled route. Distinct from TelemetryFrame:\nsnapped route vertices carry a stamp only where they coincide with an original trace point, so\nDateTimeOffset? RoutePoint.RecordedAt is nullable by design. double? RoutePoint.SpeedLimitKph and bool? RoutePoint.Speeding\nare the value-add over the frames sub-resource and are populated only by the snapped RouteLinks source\n(null on the raw-frame fallback)."
      },
      "StartLiveStreamRequest": {
        "required": [
          "channels",
          "standard"
        ],
        "type": "object",
        "properties": {
          "channels": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "The 1-based device channel numbers to open a live stream for."
          },
          "quality": {
            "type": [
              "null",
              "string"
            ],
            "description": "Open `main`/`sub` stream selector; `null` defaults to `main`."
          },
          "standard": {
            "type": "string",
            "description": "Open streaming-protocol selector (e.g. `hls`, `webrtc`, `dash`, `sockets`)."
          }
        },
        "description": "Start-a-live-stream request. `Channels` are 1-based channel numbers. `Quality` is the open\n`main`/`sub` stream selector (defaults to `main`). `Standard` is an open enum\n(hls/webrtc/dash/sockets)."
      },
      "StartPlaybackRequest": {
        "required": [
          "startAt",
          "endAt",
          "channels",
          "standard"
        ],
        "type": "object",
        "properties": {
          "startAt": {
            "type": "string",
            "description": "Start of the playback window to stream off the device's on-board recorder.",
            "format": "date-time"
          },
          "endAt": {
            "type": "string",
            "description": "End of the playback window to stream off the device's on-board recorder.",
            "format": "date-time"
          },
          "channels": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "The 1-based device channel numbers to play back."
          },
          "quality": {
            "type": [
              "null",
              "string"
            ],
            "description": "Open `main`/`sub` stream selector; `null` defaults to `main`."
          },
          "standard": {
            "type": "string",
            "description": "Open streaming-protocol selector (e.g. `hls`, `webrtc`, `dash`, `sockets`)."
          }
        },
        "description": "Start remote playback from the device. `Channels` are 1-based channel numbers. `Quality` is\nthe open `main`/`sub` stream selector (defaults to `main`)."
      },
      "StreamUrl": {
        "required": [
          "url",
          "isActive"
        ],
        "type": "object",
        "properties": {
          "channel": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The channel this URL streams; `null` when the host did not attribute it to a channel.",
                "$ref": "#/components/schemas/Channel"
              }
            ]
          },
          "url": {
            "type": "string",
            "description": "The playback URL for this channel's stream."
          },
          "hasAudio": {
            "type": [
              "null",
              "boolean"
            ],
            "description": "Whether the stream carries audio; `null` when the capability is unknown."
          },
          "isActive": {
            "type": "boolean",
            "description": "Whether the stream is currently active."
          }
        },
        "description": "A stream URL for one channel. Audio capability may be unknown (`null`)."
      },
      "TelemetryFrame": {
        "required": [
          "latitude",
          "longitude",
          "recordedAt"
        ],
        "type": "object",
        "properties": {
          "latitude": {
            "type": "number",
            "description": "WGS84 latitude in decimal degrees.",
            "format": "double"
          },
          "longitude": {
            "type": "number",
            "description": "WGS84 longitude in decimal degrees.",
            "format": "double"
          },
          "speedKph": {
            "type": [
              "null",
              "number"
            ],
            "description": "Ground speed at the frame in km/h; null when the source frame carries no speed.",
            "format": "double"
          },
          "headingDegrees": {
            "type": [
              "null",
              "number"
            ],
            "description": "Heading in degrees clockwise from north (0 is a valid heading, not \"missing\"); null when unavailable.",
            "format": "double"
          },
          "recordedAt": {
            "type": "string",
            "description": "UTC instant the frame was recorded.",
            "format": "date-time"
          }
        },
        "description": "A single map-matched telemetry frame of a journey."
      },
      "TelemetryRawBatchWebhookPayload": {
        "required": [
          "device",
          "organisation",
          "windowStart",
          "windowEnd",
          "count",
          "historic",
          "frames"
        ],
        "type": "object",
        "properties": {
          "device": {
            "$ref": "#/components/schemas/WebhookDeviceReference"
          },
          "organisation": {
            "$ref": "#/components/schemas/WebhookReference"
          },
          "fleet": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/WebhookReference"
              },
              {
                "type": "null"
              }
            ],
            "description": "Owning fleet; emitted as null when unassigned."
          },
          "vehicle": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/WebhookReference"
              },
              {
                "type": "null"
              }
            ],
            "description": "Owning vehicle; emitted as null when unassigned."
          },
          "windowStart": {
            "type": "string",
            "description": "Batch window start (ISO-8601 UTC).",
            "format": "date-time"
          },
          "windowEnd": {
            "type": "string",
            "description": "Batch window end (ISO-8601 UTC); equals the envelope `occurredAt`.",
            "format": "date-time"
          },
          "count": {
            "type": "integer",
            "description": "Number of frames in this batch.",
            "format": "int32"
          },
          "historic": {
            "type": "boolean",
            "description": "True when the batch is a historic back-fill rather than live."
          },
          "frames": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TelemetryRawFrame"
            },
            "description": "Frames, ascending by `utc`."
          }
        },
        "description": "`telemetry-raw` payload: a best-effort batch of raw telemetry frames."
      },
      "TelemetryRawFrame": {
        "required": [
          "utc",
          "location",
          "speed",
          "heading"
        ],
        "type": "object",
        "properties": {
          "utc": {
            "type": "string",
            "description": "Fix time (ISO-8601 UTC).",
            "format": "date-time"
          },
          "location": {
            "$ref": "#/components/schemas/WebhookGeoPoint"
          },
          "speed": {
            "type": "integer",
            "description": "Ground speed, km/h.",
            "format": "int32"
          },
          "heading": {
            "type": "integer",
            "description": "Heading, degrees 0 to 360.",
            "format": "int32"
          },
          "ignition": {
            "type": [
              "null",
              "boolean"
            ],
            "description": "Ignition state derived from OBD; null when unknown."
          }
        },
        "description": "A single raw telemetry frame within a `telemetry-raw` batch."
      },
      "TelemetryRawWebhookEvent": {
        "allOf": [
          {
            "$ref": "#/components/schemas/FleetLiveWebhookEvent"
          },
          {
            "required": [
              "data"
            ],
            "type": "object",
            "properties": {
              "type": {
                "const": "telemetry-raw",
                "type": "string",
                "description": "Frozen wire topic name."
              },
              "data": {
                "$ref": "#/components/schemas/TelemetryRawBatchWebhookPayload"
              }
            }
          }
        ],
        "description": "A best-effort batch of raw telemetry frames for a device, ascending by `utc`. `occurredAt` is the window end; `eventId` is `{hardwareId}:{windowStart}:{chunkIndex}:{contentHash}`. Dedupe on it."
      },
      "TimeWindowMeta": {
        "required": [
          "effectiveFrom",
          "effectiveTo"
        ],
        "type": "object",
        "properties": {
          "effectiveFrom": {
            "type": "string",
            "description": "Start of the effective (defaulted, capped) trigger-time window applied to the query.",
            "format": "date-time"
          },
          "effectiveTo": {
            "type": "string",
            "description": "End of the effective (defaulted, capped) trigger-time window applied to the query.",
            "format": "date-time"
          },
          "effectiveReceivedFrom": {
            "type": [
              "null",
              "string"
            ],
            "description": "Start of the effective received-time window, when a received filter was applied; null otherwise.",
            "format": "date-time"
          },
          "effectiveReceivedTo": {
            "type": [
              "null",
              "string"
            ],
            "description": "End of the effective received-time window, when a received filter was applied; null otherwise.",
            "format": "date-time"
          }
        },
        "description": "Echo of the effective time window a device-event query resolved to (72h cap, 24h default). The\nreceived-window fields are populated only for event resources."
      },
      "UpdateApiClientRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": [
              "null",
              "string"
            ],
            "description": "New client name, or null to leave unchanged."
          },
          "scopes": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "type": "string"
            },
            "description": "New full set of granted scopes, or null to leave unchanged."
          }
        },
        "description": "Update-an-API-client request; omitted fields are left unchanged."
      },
      "UpdateDriverRequest": {
        "type": "object",
        "properties": {
          "firstName": {
            "type": [
              "null",
              "string"
            ],
            "description": "New given name; omit (`null`) to leave unchanged."
          },
          "lastName": {
            "type": [
              "null",
              "string"
            ],
            "description": "New family name; omit (`null`) to leave unchanged."
          },
          "phoneNumber": {
            "type": [
              "null",
              "string"
            ],
            "description": "New contact phone number; omit (`null`) to leave unchanged."
          }
        },
        "description": "Update-a-driver request body; omitted fields are left unchanged."
      },
      "UpdateFleetRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": [
              "null",
              "string"
            ],
            "description": "The new fleet name, or null to leave it unchanged."
          }
        },
        "description": "Update-a-fleet request body; omitted fields are left unchanged."
      },
      "UpdateVehicleRequest": {
        "type": "object",
        "properties": {
          "registrationNumber": {
            "type": [
              "null",
              "string"
            ],
            "description": "The new registration/number plate, or null to leave unchanged."
          },
          "make": {
            "type": [
              "null",
              "string"
            ],
            "description": "The new make, or null to leave unchanged."
          },
          "model": {
            "type": [
              "null",
              "string"
            ],
            "description": "The new model, or null to leave unchanged."
          },
          "fuelType": {
            "type": [
              "null",
              "string"
            ],
            "description": "The new fuel-type token, or null to leave unchanged."
          },
          "engineSize": {
            "type": [
              "null",
              "string"
            ],
            "description": "The new engine size, or null to leave unchanged."
          },
          "vehicleType": {
            "type": [
              "null",
              "string"
            ],
            "description": "The new vehicle-type token, or null to leave unchanged."
          },
          "chassisNumber": {
            "type": [
              "null",
              "string"
            ],
            "description": "The new chassis/VIN, or null to leave unchanged."
          }
        },
        "description": "Update-a-vehicle request body; omitted fields are left unchanged (odometer inert on writes)."
      },
      "UpdateWebhookEndpointRequest": {
        "type": "object",
        "properties": {
          "url": {
            "type": [
              "null",
              "string"
            ],
            "description": "New destination URL, or null to leave unchanged."
          },
          "eventTypes": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "type": "string"
            },
            "description": "New full set of subscribed event-type tokens, or null to leave unchanged."
          },
          "description": {
            "type": [
              "null",
              "string"
            ],
            "description": "New human label, or null to leave unchanged."
          },
          "active": {
            "type": [
              "null",
              "boolean"
            ],
            "description": "New active flag, or null to leave unchanged."
          }
        },
        "description": "Update-a-webhook-endpoint request; omitted fields are left unchanged."
      },
      "VehicleDetail": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The vehicle's opaque id. Round-trips into `GET /v1/vehicles/{vehicleId}`."
          },
          "registrationNumber": {
            "type": [
              "null",
              "string"
            ],
            "description": "The vehicle's registration/number plate, or null when unset."
          },
          "chassisNumber": {
            "type": [
              "null",
              "string"
            ],
            "description": "The vehicle's chassis/VIN, or null when unset."
          },
          "make": {
            "type": [
              "null",
              "string"
            ],
            "description": "The manufacturer/make, or null when unset."
          },
          "model": {
            "type": [
              "null",
              "string"
            ],
            "description": "The model name, or null when unset."
          },
          "fleet": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The fleet the vehicle belongs to, or null when it is not assigned to a fleet.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          },
          "driver": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The currently-assigned driver, or null when no driver is assigned.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          },
          "organization": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The owning organization (the fleet's organization), or null when the fleet is unresolved.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          },
          "odometer": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "Derived odometer; always null on writes and on this projection.",
                "$ref": "#/components/schemas/Odometer"
              }
            ]
          },
          "fuelType": {
            "type": [
              "null",
              "string"
            ],
            "description": "The fuel-type token (open enum), or null when unclassified."
          },
          "engineSize": {
            "type": [
              "null",
              "string"
            ],
            "description": "The engine size (litres, invariant-formatted), or null when unknown."
          },
          "vehicleType": {
            "type": [
              "null",
              "string"
            ],
            "description": "The vehicle-type token (open enum), or null when unclassified."
          },
          "trackingDevice": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The device capturing location for this vehicle, or null when none is attached.",
                "$ref": "#/components/schemas/HardwareReference"
              }
            ]
          },
          "mediaDevice": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The device capturing media for this vehicle, or null when none is attached.",
                "$ref": "#/components/schemas/HardwareReference"
              }
            ]
          }
        },
        "description": "Full vehicle detail. Adds the master-data fields not carried on the list projection."
      },
      "VehiclePosition": {
        "required": [
          "vehicle",
          "organization",
          "recordedAt",
          "location",
          "gpsValid"
        ],
        "type": "object",
        "properties": {
          "vehicle": {
            "description": "The vehicle this position belongs to, with its inline identifiers.",
            "$ref": "#/components/schemas/VehicleReference"
          },
          "device": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The reporting device, or null when the position has no associated hardware id.",
                "$ref": "#/components/schemas/HardwareReference"
              }
            ]
          },
          "organization": {
            "description": "The owning organization (always the vehicle's fleet organization).",
            "$ref": "#/components/schemas/IdReference"
          },
          "fleet": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The vehicle's fleet, or null when unassigned.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          },
          "driver": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The driver at the time of the fix, or null when none.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          },
          "recordedAt": {
            "type": "string",
            "description": "When the device recorded this position (UTC).",
            "format": "date-time"
          },
          "location": {
            "description": "The reported location; `0,0` when unknown. Always check `GpsValid`.",
            "$ref": "#/components/schemas/GeoPoint"
          },
          "speedKph": {
            "type": [
              "null",
              "integer"
            ],
            "description": "Ground speed in km/h, or null when not reported.",
            "format": "int32"
          },
          "headingDegrees": {
            "type": [
              "null",
              "integer"
            ],
            "description": "Heading in degrees (0 to 359), or null when not reported.",
            "format": "int32"
          },
          "ignition": {
            "type": [
              "null",
              "boolean"
            ],
            "description": "Ignition state (OBD-derived), or null when unknown."
          },
          "odometerKm": {
            "type": [
              "null",
              "number"
            ],
            "description": "Odometer reading in km, or null when not reported.",
            "format": "double"
          },
          "gpsValid": {
            "type": "boolean",
            "description": "False when the device reported an invalid GPS fix (the location is not trustworthy)."
          },
          "odometer": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "Derived odometer; null when no telemetry is available.",
                "$ref": "#/components/schemas/Odometer"
              }
            ]
          }
        },
        "description": "A vehicle's last reported position (derived odometer may be null). `GpsValid` is false when the\ndevice reported an invalid fix. Without it a `0,0` location would look legitimate."
      },
      "VehicleReference": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The vehicle's opaque id. Round-trips into `GET /v1/vehicles/{vehicleId}`."
          },
          "registrationNumber": {
            "type": [
              "null",
              "string"
            ],
            "description": "The vehicle's registration/number plate, or null when unset."
          },
          "chassisNumber": {
            "type": [
              "null",
              "string"
            ],
            "description": "The vehicle's chassis/VIN, or null when unset."
          }
        },
        "description": "A vehicle reference carrying the identifiers commonly needed inline (registration/chassis)."
      },
      "VehicleSummary": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The vehicle's opaque id. Round-trips into `GET /v1/vehicles/{vehicleId}`."
          },
          "registrationNumber": {
            "type": [
              "null",
              "string"
            ],
            "description": "The vehicle's registration/number plate, or null when unset."
          },
          "chassisNumber": {
            "type": [
              "null",
              "string"
            ],
            "description": "The vehicle's chassis/VIN, or null when unset."
          },
          "make": {
            "type": [
              "null",
              "string"
            ],
            "description": "The manufacturer/make, or null when unset."
          },
          "model": {
            "type": [
              "null",
              "string"
            ],
            "description": "The model name, or null when unset."
          },
          "fleet": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The fleet the vehicle belongs to, or null when it is not assigned to a fleet.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          },
          "driver": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The currently-assigned driver, or null when no driver is assigned.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          },
          "organization": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The owning organization (the fleet's organization), or null when the fleet is unresolved.",
                "$ref": "#/components/schemas/IdReference"
              }
            ]
          },
          "odometer": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "Derived odometer; always null on the list projection (out of scope for master data).",
                "$ref": "#/components/schemas/Odometer"
              }
            ]
          }
        },
        "description": "A vehicle in a list projection. Open enums (e.g. `fuelType`) are modeled as plain strings so an\nunknown value is passed through, never a deserialization error (x-extensible-enum, ADR-0008)."
      },
      "VideoRequestAvailableWebhookPayload": {
        "required": [
          "id",
          "type",
          "device"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Media request id.",
            "format": "uuid"
          },
          "type": {
            "$ref": "#/components/schemas/MediaPurpose"
          },
          "device": {
            "$ref": "#/components/schemas/WebhookDeviceReference"
          },
          "event": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/WebhookReference"
              },
              {
                "type": "null"
              }
            ],
            "description": "Source event reference; `id` is null when the media was not event-triggered."
          },
          "fleet": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/WebhookReference"
              },
              {
                "type": "null"
              }
            ],
            "description": "Owning fleet; null when unassigned."
          },
          "vehicle": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/WebhookReference"
              },
              {
                "type": "null"
              }
            ],
            "description": "Owning vehicle; null when unassigned."
          }
        },
        "description": "`media.available` payload: a requested media clip became available (references only, never a SAS URI)."
      },
      "VideoRequestCompletedWebhookEvent": {
        "allOf": [
          {
            "$ref": "#/components/schemas/FleetLiveWebhookEvent"
          },
          {
            "required": [
              "data"
            ],
            "type": "object",
            "properties": {
              "type": {
                "const": "video.request.completed",
                "type": "string",
                "description": "Frozen wire topic name."
              },
              "data": {
                "$ref": "#/components/schemas/VideoRequestCompletedWebhookPayload"
              }
            }
          }
        ],
        "description": "A requested video pull finished across all of its channels. Aggregates the completed request (references only, never a SAS URI); fetch each resulting clip via the media-request retrieval endpoint. `occurredAt` is the completion time."
      },
      "VideoRequestCompletedWebhookPayload": {
        "required": [
          "id",
          "type",
          "completedAt",
          "channels",
          "mediaCount",
          "device"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Video request id.",
            "format": "uuid"
          },
          "type": {
            "$ref": "#/components/schemas/MediaPurpose"
          },
          "completedAt": {
            "type": "string",
            "description": "When the whole request completed (ISO-8601 UTC); equals the envelope `occurredAt`.",
            "format": "date-time"
          },
          "channels": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Camera channels the request captured, ascending."
          },
          "mediaCount": {
            "type": "integer",
            "description": "Number of media clips produced across all channels.",
            "format": "int32"
          },
          "device": {
            "$ref": "#/components/schemas/WebhookDeviceReference"
          },
          "event": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/WebhookReference"
              },
              {
                "type": "null"
              }
            ],
            "description": "Source event reference; `id` is null when the request was not event-triggered."
          },
          "organisation": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/WebhookReference"
              },
              {
                "type": "null"
              }
            ],
            "description": "Owning organisation; null when unresolved."
          },
          "fleet": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/WebhookReference"
              },
              {
                "type": "null"
              }
            ],
            "description": "Owning fleet; null when unassigned."
          },
          "vehicle": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/WebhookReference"
              },
              {
                "type": "null"
              }
            ],
            "description": "Owning vehicle; null when unassigned."
          }
        },
        "description": "`video.request.completed` payload: a completed video request aggregated across its channels (references only, never a SAS URI)."
      },
      "WebhookDelivery": {
        "required": [
          "deliveryId",
          "organizationId",
          "eventId",
          "eventType",
          "status",
          "attempts"
        ],
        "type": "object",
        "properties": {
          "deliveryId": {
            "type": "string",
            "description": "Opaque identifier of this delivery attempt-group."
          },
          "organizationId": {
            "type": "string",
            "description": "Organization copied from the source-event envelope stamped at ingest.",
            "format": "uuid"
          },
          "eventId": {
            "type": "string",
            "description": "Identifier of the source event that produced this delivery."
          },
          "eventType": {
            "type": "string",
            "description": "Event-type token of the delivered payload (e.g. `alarm.raised`)."
          },
          "status": {
            "type": "string",
            "description": "Current delivery status (e.g. pending, succeeded, failed)."
          },
          "attempts": {
            "type": "integer",
            "description": "Number of delivery attempts made so far.",
            "format": "int32"
          },
          "lastAttemptAt": {
            "type": [
              "null",
              "string"
            ],
            "description": "Instant of the most recent attempt; null before the first attempt.",
            "format": "date-time"
          },
          "responseStatus": {
            "type": [
              "null",
              "integer"
            ],
            "description": "HTTP status returned by the receiver on the last attempt; null if none was received.",
            "format": "int32"
          }
        },
        "description": "A webhook delivery-log entry. Never stores SAS URIs, only references. `OrganizationId` is copied\nfrom the source-event envelope stamped at ingest."
      },
      "WebhookDeviceReference": {
        "required": [
          "hardwareId"
        ],
        "type": "object",
        "properties": {
          "hardwareId": {
            "type": "string",
            "description": "Stable device hardware id."
          }
        },
        "description": "A reference to the physical device by its stable hardware id."
      },
      "WebhookEndpoint": {
        "required": [
          "id",
          "organizationId",
          "url",
          "eventTypes",
          "active",
          "createdAt"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Opaque endpoint identifier used to address the endpoint in every sub-resource path."
          },
          "organizationId": {
            "type": "string",
            "description": "Organization the endpoint belongs to, stamped from the token at creation.",
            "format": "uuid"
          },
          "url": {
            "type": "string",
            "description": "Destination URL the platform POSTs signed deliveries to."
          },
          "eventTypes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Event-type tokens this endpoint is subscribed to (see the event-type catalog)."
          },
          "description": {
            "type": [
              "null",
              "string"
            ],
            "description": "Optional human label for the endpoint; null when none was set."
          },
          "active": {
            "type": "boolean",
            "description": "Whether the endpoint currently receives deliveries."
          },
          "secretHint": {
            "type": [
              "null",
              "string"
            ],
            "description": "Last-4 characters of the current signing secret; null before a secret exists."
          },
          "createdAt": {
            "type": "string",
            "description": "Instant the endpoint was created.",
            "format": "date-time"
          }
        },
        "description": "A webhook endpoint (Wave 2). Never carries the signing secret, only a last-4 `SecretHint`. This is a\nCLIENT-scoped resource; `OrganizationId` is stamped from the token organization at creation."
      },
      "WebhookEndpointCreated": {
        "required": [
          "id",
          "organizationId",
          "url",
          "eventTypes",
          "active",
          "createdAt",
          "signingSecret"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Opaque identifier of the created endpoint."
          },
          "organizationId": {
            "type": "string",
            "description": "Organization the endpoint was created in.",
            "format": "uuid"
          },
          "url": {
            "type": "string",
            "description": "Destination URL the platform will POST signed deliveries to."
          },
          "eventTypes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Event-type tokens the endpoint is subscribed to."
          },
          "description": {
            "type": [
              "null",
              "string"
            ],
            "description": "Optional human label; null when none was set."
          },
          "active": {
            "type": "boolean",
            "description": "Whether the endpoint is active and receiving deliveries."
          },
          "secretHint": {
            "type": [
              "null",
              "string"
            ],
            "description": "Last-4 characters of the freshly minted signing secret."
          },
          "createdAt": {
            "type": "string",
            "description": "Instant the endpoint was created.",
            "format": "date-time"
          },
          "signingSecret": {
            "type": "string",
            "description": "The HMAC-SHA256 signing secret, shown exactly once at creation."
          }
        },
        "description": "Create response. `SigningSecret` (HMAC-SHA256, CSPRNG) is shown EXACTLY ONCE."
      },
      "WebhookEventTypeCatalog": {
        "required": [
          "eventTypes"
        ],
        "type": "object",
        "properties": {
          "eventTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebhookEventTypeInfo"
            },
            "description": "The canonical list of selectable, deliverable webhook event types."
          }
        },
        "description": "The complete, static webhook event-type catalog (no platform data): the canonical list of the types a\nwebhook subscription can select and the platform will deliver."
      },
      "WebhookEventTypeInfo": {
        "required": [
          "type",
          "description",
          "samplePayloadRef"
        ],
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "description": "Wire token accepted by a subscription's `eventTypes` (e.g. `alarm.raised`)."
          },
          "description": {
            "type": "string",
            "description": "Human description of when the platform emits this event type."
          },
          "samplePayloadRef": {
            "type": "string",
            "description": "JSON-Pointer `$ref` to the delivered-body schema for this type."
          }
        },
        "description": "One entry in the machine-readable webhook event-type catalog. `Type` is the wire token a subscription's\n`eventTypes` accepts (e.g. `alarm.raised`); `SamplePayloadRef` is the JSON-Pointer `$ref`\ninto this document's `components.schemas` describing the delivered body for that type."
      },
      "WebhookGeofenceReference": {
        "required": [
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Geofence zone id.",
            "format": "uuid"
          },
          "name": {
            "type": "string",
            "description": "Geofence zone name (snapshot at event time)."
          }
        },
        "description": "A reference to a geofence zone with a name snapshot taken at event time."
      },
      "WebhookGeoPoint": {
        "required": [
          "lat",
          "long"
        ],
        "type": "object",
        "properties": {
          "lat": {
            "type": "number",
            "description": "Latitude, decimal degrees (WGS-84).",
            "format": "double"
          },
          "long": {
            "type": "number",
            "description": "Longitude, decimal degrees (WGS-84).",
            "format": "double"
          }
        },
        "description": "A geographic point on a webhook payload (distinct from the REST `GeoPoint`, which uses latitude/longitude)."
      },
      "WebhookMessageCatalog": {
        "type": "object",
        "properties": {
          "journeyCompleted": {
            "$ref": "#/components/schemas/JourneyCompletedWebhookEvent"
          },
          "alarmRaised": {
            "$ref": "#/components/schemas/AlarmRaisedWebhookEvent"
          },
          "deviceEvent": {
            "$ref": "#/components/schemas/DeviceEventWebhookEvent"
          },
          "mediaAvailable": {
            "$ref": "#/components/schemas/MediaAvailableWebhookEvent"
          },
          "videoRequestCompleted": {
            "$ref": "#/components/schemas/VideoRequestCompletedWebhookEvent"
          },
          "liveGps": {
            "$ref": "#/components/schemas/LiveGpsWebhookEvent"
          },
          "telemetryRaw": {
            "$ref": "#/components/schemas/TelemetryRawWebhookEvent"
          },
          "geofence": {
            "$ref": "#/components/schemas/GeofenceWebhookEvent"
          }
        },
        "description": "Introspection map of the outbound webhook message contracts: one property per topic, each a `$ref` to the delivered-body schema. This anchors the webhook message closure to a real operation so generated clients carry a strongly-typed model for the envelope and each topic payload."
      },
      "WebhookReference": {
        "type": "object",
        "properties": {
          "id": {
            "type": [
              "null",
              "string"
            ],
            "description": "Entity id; null when unset.",
            "format": "uuid"
          }
        },
        "description": "A lightweight reference to a platform entity by id. `id` is null when the relationship is unset."
      },
      "WebhookReplayAccepted": {
        "required": [
          "deliveryId",
          "requeued"
        ],
        "type": "object",
        "properties": {
          "deliveryId": {
            "type": "string",
            "description": "Identifier of the new replay delivery."
          },
          "requeued": {
            "type": "boolean",
            "description": "True when a fresh delivery was enqueued for the replay."
          }
        },
        "description": "202 body for an enqueued delivery replay."
      },
      "WebhookSecretRotated": {
        "required": [
          "signingSecret",
          "secretHint",
          "previousSecretExpiresAt"
        ],
        "type": "object",
        "properties": {
          "signingSecret": {
            "type": "string",
            "description": "The new HMAC-SHA256 signing secret, shown exactly once."
          },
          "secretHint": {
            "type": "string",
            "description": "Last-4 characters of the new signing secret."
          },
          "previousSecretExpiresAt": {
            "type": "string",
            "description": "Instant after which the previous secret stops verifying (24h grace).",
            "format": "date-time"
          }
        },
        "description": "Signing-secret rotation response. `SigningSecret` shown exactly once. The previous secret stays\nvalid until `PreviousSecretExpiresAt` (24h grace window)."
      },
      "WebhookTestAccepted": {
        "required": [
          "deliveryId"
        ],
        "type": "object",
        "properties": {
          "deliveryId": {
            "type": "string",
            "description": "Identifier of the enqueued test delivery to inspect."
          }
        },
        "description": "202 body for an enqueued test delivery."
      },
      "WebhookTestRequest": {
        "type": "object",
        "properties": {
          "eventType": {
            "type": [
              "null",
              "string"
            ],
            "description": "Event-type token to sample; null uses a generic device.event sample."
          }
        },
        "description": "Send-a-test-event request; `EventType` defaults to a generic device.event sample."
      }
    },
    "securitySchemes": {
      "OAuth2": {
        "type": "oauth2",
        "description": "OAuth2 client-credentials against FleetLive Identity (Duende). JWT Bearer (`at+jwt`), audience `partner.api`. The tenant comes exclusively from the `fleetlive.org_id` claim.",
        "flows": {
          "clientCredentials": {
            "tokenUrl": "https://identity.fleetlive.ai/connect/token",
            "scopes": {
              "fleetlive/commands:read": "commands read",
              "fleetlive/commands:write": "commands write",
              "fleetlive/context:read": "context read",
              "fleetlive/credentials:read": "credentials read",
              "fleetlive/credentials:write": "credentials write",
              "fleetlive/devices:read": "devices read",
              "fleetlive/devices:write": "devices write",
              "fleetlive/drivers:read": "drivers read",
              "fleetlive/drivers:write": "drivers write",
              "fleetlive/events:read": "events read",
              "fleetlive/feeds:read": "feeds read",
              "fleetlive/fleets:read": "fleets read",
              "fleetlive/fleets:write": "fleets write",
              "fleetlive/geofences:read": "geofences read",
              "fleetlive/journeys:read": "journeys read",
              "fleetlive/live:read": "live read",
              "fleetlive/live:write": "live write",
              "fleetlive/media:read": "media read",
              "fleetlive/media:write": "media write",
              "fleetlive/organizations:read": "organizations read",
              "fleetlive/vehicles:read": "vehicles read",
              "fleetlive/vehicles:write": "vehicles write",
              "fleetlive/webhooks:read": "webhooks read",
              "fleetlive/webhooks:write": "webhooks write"
            }
          }
        }
      }
    }
  },
  "security": [
    {
      "OAuth2": [ ]
    }
  ],
  "tags": [
    {
      "name": "Status",
      "description": "Service health and build metadata (no platform data)."
    },
    {
      "name": "Context",
      "description": "Introspection of the calling API client."
    },
    {
      "name": "Organizations",
      "description": "Organizations (tenants) visible to the calling client."
    },
    {
      "name": "Fleets",
      "description": "Fleet groupings of vehicles within an organization."
    },
    {
      "name": "Vehicles",
      "description": "Vehicles, their positions, and driver/device assignments."
    },
    {
      "name": "Drivers",
      "description": "Drivers and their organization assignments."
    },
    {
      "name": "Devices",
      "description": "Physical tracking and media devices, and ingest control."
    },
    {
      "name": "DeviceCatalog",
      "description": "Device models and protocols reference data."
    },
    {
      "name": "Geofences",
      "description": "Organization-scoped geofence zones (polygon/circle)."
    },
    {
      "name": "Events",
      "description": "Device events (rich filtering)."
    },
    {
      "name": "Journeys",
      "description": "Processed journeys, frames, and journey events."
    },
    {
      "name": "Commands",
      "description": "Device commands issued by media requests and the platform."
    },
    {
      "name": "Media",
      "description": "On-demand media clips (async command -> SAS retrieval)."
    },
    {
      "name": "Live",
      "description": "Live streaming and remote playback facade."
    },
    {
      "name": "Feeds",
      "description": "Delta since-token feeds (incremental sync)."
    },
    {
      "name": "ApiClients",
      "description": "Self-service OAuth2 client management."
    },
    {
      "name": "WebhookEndpoints",
      "description": "Outbound webhook subscription management + the event-type catalog (Wave 2)."
    }
  ],
  "x-error-codes": [
    {
      "code": "api_client.not_found",
      "status": 404
    },
    {
      "code": "auth.scope_missing",
      "status": 403
    },
    {
      "code": "auth.tenant_forbidden",
      "status": 403
    },
    {
      "code": "auth.token_invalid",
      "status": 401
    },
    {
      "code": "command.not_found",
      "status": 404
    },
    {
      "code": "concurrency.etag_mismatch",
      "status": 412
    },
    {
      "code": "dependency.timeout",
      "status": 504
    },
    {
      "code": "dependency.unavailable",
      "status": 503
    },
    {
      "code": "device.command_not_supported",
      "status": 400
    },
    {
      "code": "device.not_found",
      "status": 404
    },
    {
      "code": "device_model.not_found",
      "status": 404
    },
    {
      "code": "device_protocol.not_found",
      "status": 404
    },
    {
      "code": "driver.not_found",
      "status": 404
    },
    {
      "code": "event.not_found",
      "status": 404
    },
    {
      "code": "feed.cursor_expired",
      "status": 410
    },
    {
      "code": "fleet.not_found",
      "status": 404
    },
    {
      "code": "idempotency.in_progress",
      "status": 409
    },
    {
      "code": "idempotency.key_conflict",
      "status": 409
    },
    {
      "code": "journey.not_found",
      "status": 404
    },
    {
      "code": "organization.not_found",
      "status": 404
    },
    {
      "code": "precondition.required",
      "status": 428
    },
    {
      "code": "rate.limit_exceeded",
      "status": 429
    },
    {
      "code": "resource.link_conflict",
      "status": 409
    },
    {
      "code": "server.not_implemented",
      "status": 501
    },
    {
      "code": "server.unexpected",
      "status": 500
    },
    {
      "code": "validation.cursor_invalid",
      "status": 400
    },
    {
      "code": "validation.failed",
      "status": 400
    },
    {
      "code": "validation.reference_not_found",
      "status": 422
    },
    {
      "code": "vehicle.driver_fleet_mismatch",
      "status": 422
    },
    {
      "code": "vehicle.not_found",
      "status": 404
    }
  ],
  "webhooks": {
    "journey.completed": {
      "post": {
        "tags": [
          "WebhookEndpoints"
        ],
        "summary": "Journey completed",
        "description": "A journey was closed (or re-emitted with `isUpdated=true` after reprocessing) and is available via `/v1/journeys`. `occurredAt` is the journey end time.\n\n**Signing & delivery.** The whole delivered body is the `FleetLiveWebhookEvent` (this schema). Delivery metadata rides in HTTP headers, not the body: `X-FleetLive-Signature` (`t=<unixTs>,v1=<hexHmacSha256>` over `<t>.<rawBody>`, reject `|now−t| > 5 min`, compare in constant time), `FL-Delivery` (per-attempt delivery id) and `FL-Event` (the wire topic name). Delivery is at-least-once with exponential backoff; dedupe on `eventId`. Any non-2xx response triggers retry with backoff.",
        "operationId": "webhookJourneyCompleted",
        "requestBody": {
          "description": "The delivered webhook body.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JourneyCompletedWebhookEvent"
              }
            }
          },
          "required": true
        },
        "responses": {
          "2XX": {
            "description": "Acknowledged; any other status triggers retry with backoff."
          }
        },
        "x-fleetlive-wave": 2,
        "x-fleetlive-headers": [
          "X-FleetLive-Signature",
          "FL-Delivery",
          "FL-Event"
        ]
      }
    },
    "alarm.raised": {
      "post": {
        "tags": [
          "WebhookEndpoints"
        ],
        "summary": "Platform alarm raised",
        "description": "A platform alarm fired for a vehicle/device (`alarmKey` is the sole `alarm.*` leaf, e.g. `harshBraking`). `occurredAt` is the alarm trigger time.\n\n**Signing & delivery.** The whole delivered body is the `FleetLiveWebhookEvent` (this schema). Delivery metadata rides in HTTP headers, not the body: `X-FleetLive-Signature` (`t=<unixTs>,v1=<hexHmacSha256>` over `<t>.<rawBody>`, reject `|now−t| > 5 min`, compare in constant time), `FL-Delivery` (per-attempt delivery id) and `FL-Event` (the wire topic name). Delivery is at-least-once with exponential backoff; dedupe on `eventId`. Any non-2xx response triggers retry with backoff.",
        "operationId": "webhookAlarmRaised",
        "requestBody": {
          "description": "The delivered webhook body.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AlarmRaisedWebhookEvent"
              }
            }
          },
          "required": true
        },
        "responses": {
          "2XX": {
            "description": "Acknowledged; any other status triggers retry with backoff."
          }
        },
        "x-fleetlive-wave": 2,
        "x-fleetlive-headers": [
          "X-FleetLive-Signature",
          "FL-Delivery",
          "FL-Event"
        ]
      }
    },
    "device.event": {
      "post": {
        "tags": [
          "WebhookEndpoints"
        ],
        "summary": "Device event",
        "description": "One or more device events were observed at the same instant; `eventTypes` carries the distinct canonical dotted tokens (e.g. `dsm.fatigue`), ascending and never empty. `occurredAt` is the event trigger time. Payloads never contain SAS URIs.\n\n**Signing & delivery.** The whole delivered body is the `FleetLiveWebhookEvent` (this schema). Delivery metadata rides in HTTP headers, not the body: `X-FleetLive-Signature` (`t=<unixTs>,v1=<hexHmacSha256>` over `<t>.<rawBody>`, reject `|now−t| > 5 min`, compare in constant time), `FL-Delivery` (per-attempt delivery id) and `FL-Event` (the wire topic name). Delivery is at-least-once with exponential backoff; dedupe on `eventId`. Any non-2xx response triggers retry with backoff.",
        "operationId": "webhookDeviceEvent",
        "requestBody": {
          "description": "The delivered webhook body.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeviceEventWebhookEvent"
              }
            }
          },
          "required": true
        },
        "responses": {
          "2XX": {
            "description": "Acknowledged; any other status triggers retry with backoff."
          }
        },
        "x-fleetlive-wave": 2,
        "x-fleetlive-headers": [
          "X-FleetLive-Signature",
          "FL-Delivery",
          "FL-Event"
        ]
      }
    },
    "media.available": {
      "post": {
        "tags": [
          "WebhookEndpoints"
        ],
        "summary": "Media available",
        "description": "A requested media clip became available. Carries references only, never a SAS URI; fetch fresh media via the media-request retrieval endpoint. The organisation is carried only in the envelope, not the payload. `occurredAt` is the media creation time.\n\n**Signing & delivery.** The whole delivered body is the `FleetLiveWebhookEvent` (this schema). Delivery metadata rides in HTTP headers, not the body: `X-FleetLive-Signature` (`t=<unixTs>,v1=<hexHmacSha256>` over `<t>.<rawBody>`, reject `|now−t| > 5 min`, compare in constant time), `FL-Delivery` (per-attempt delivery id) and `FL-Event` (the wire topic name). Delivery is at-least-once with exponential backoff; dedupe on `eventId`. Any non-2xx response triggers retry with backoff.",
        "operationId": "webhookMediaAvailable",
        "requestBody": {
          "description": "The delivered webhook body.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MediaAvailableWebhookEvent"
              }
            }
          },
          "required": true
        },
        "responses": {
          "2XX": {
            "description": "Acknowledged; any other status triggers retry with backoff."
          }
        },
        "x-fleetlive-wave": 2,
        "x-fleetlive-headers": [
          "X-FleetLive-Signature",
          "FL-Delivery",
          "FL-Event"
        ]
      }
    },
    "video.request.completed": {
      "post": {
        "tags": [
          "WebhookEndpoints"
        ],
        "summary": "Video request completed",
        "description": "A requested video pull finished across all of its channels. Aggregates the completed request (references only, never a SAS URI); fetch each resulting clip via the media-request retrieval endpoint. `occurredAt` is the completion time.\n\n**Signing & delivery.** The whole delivered body is the `FleetLiveWebhookEvent` (this schema). Delivery metadata rides in HTTP headers, not the body: `X-FleetLive-Signature` (`t=<unixTs>,v1=<hexHmacSha256>` over `<t>.<rawBody>`, reject `|now−t| > 5 min`, compare in constant time), `FL-Delivery` (per-attempt delivery id) and `FL-Event` (the wire topic name). Delivery is at-least-once with exponential backoff; dedupe on `eventId`. Any non-2xx response triggers retry with backoff.",
        "operationId": "webhookVideoRequestCompleted",
        "requestBody": {
          "description": "The delivered webhook body.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoRequestCompletedWebhookEvent"
              }
            }
          },
          "required": true
        },
        "responses": {
          "2XX": {
            "description": "Acknowledged; any other status triggers retry with backoff."
          }
        },
        "x-fleetlive-wave": 2,
        "x-fleetlive-headers": [
          "X-FleetLive-Signature",
          "FL-Delivery",
          "FL-Event"
        ]
      }
    },
    "live-gps": {
      "post": {
        "tags": [
          "WebhookEndpoints"
        ],
        "summary": "Live GPS fix",
        "description": "A single live GPS fix for a device. `occurredAt` and the envelope `eventId` (`{hardwareId}:{utc:O}`) are derived from the fix time `utc`.\n\n**Signing & delivery.** The whole delivered body is the `FleetLiveWebhookEvent` (this schema). Delivery metadata rides in HTTP headers, not the body: `X-FleetLive-Signature` (`t=<unixTs>,v1=<hexHmacSha256>` over `<t>.<rawBody>`, reject `|now−t| > 5 min`, compare in constant time), `FL-Delivery` (per-attempt delivery id) and `FL-Event` (the wire topic name). Delivery is at-least-once with exponential backoff; dedupe on `eventId`. Any non-2xx response triggers retry with backoff.",
        "operationId": "webhookLiveGps",
        "requestBody": {
          "description": "The delivered webhook body.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LiveGpsWebhookEvent"
              }
            }
          },
          "required": true
        },
        "responses": {
          "2XX": {
            "description": "Acknowledged; any other status triggers retry with backoff."
          }
        },
        "x-fleetlive-wave": 2,
        "x-fleetlive-headers": [
          "X-FleetLive-Signature",
          "FL-Delivery",
          "FL-Event"
        ]
      }
    },
    "telemetry-raw": {
      "post": {
        "tags": [
          "WebhookEndpoints"
        ],
        "summary": "Raw telemetry batch",
        "description": "A best-effort batch of raw telemetry frames for a device, ascending by `utc`. `occurredAt` is the window end; `eventId` is `{hardwareId}:{windowStart}:{chunkIndex}:{contentHash}`. Dedupe on it.\n\n**Signing & delivery.** The whole delivered body is the `FleetLiveWebhookEvent` (this schema). Delivery metadata rides in HTTP headers, not the body: `X-FleetLive-Signature` (`t=<unixTs>,v1=<hexHmacSha256>` over `<t>.<rawBody>`, reject `|now−t| > 5 min`, compare in constant time), `FL-Delivery` (per-attempt delivery id) and `FL-Event` (the wire topic name). Delivery is at-least-once with exponential backoff; dedupe on `eventId`. Any non-2xx response triggers retry with backoff.",
        "operationId": "webhookTelemetryRaw",
        "requestBody": {
          "description": "The delivered webhook body.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TelemetryRawWebhookEvent"
              }
            }
          },
          "required": true
        },
        "responses": {
          "2XX": {
            "description": "Acknowledged; any other status triggers retry with backoff."
          }
        },
        "x-fleetlive-wave": 2,
        "x-fleetlive-headers": [
          "X-FleetLive-Signature",
          "FL-Delivery",
          "FL-Event"
        ]
      }
    },
    "geofence": {
      "post": {
        "tags": [
          "WebhookEndpoints"
        ],
        "summary": "Geofence transition",
        "description": "A vehicle crossed a geofence boundary or exceeded a zone speed limit. `geofenceEventType` discriminates `entered` | `exited` | `speeding`; `speed` and `speedLimit` are populated only for `speeding` (null otherwise). `occurredAt` is the (possibly interpolated) transition time and equals the payload `id`. Consume idempotently, because the platform may re-assert on restart.\n\n**Signing & delivery.** The whole delivered body is the `FleetLiveWebhookEvent` (this schema). Delivery metadata rides in HTTP headers, not the body: `X-FleetLive-Signature` (`t=<unixTs>,v1=<hexHmacSha256>` over `<t>.<rawBody>`, reject `|now−t| > 5 min`, compare in constant time), `FL-Delivery` (per-attempt delivery id) and `FL-Event` (the wire topic name). Delivery is at-least-once with exponential backoff; dedupe on `eventId`. Any non-2xx response triggers retry with backoff.",
        "operationId": "webhookGeofence",
        "requestBody": {
          "description": "The delivered webhook body.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GeofenceWebhookEvent"
              }
            }
          },
          "required": true
        },
        "responses": {
          "2XX": {
            "description": "Acknowledged; any other status triggers retry with backoff."
          }
        },
        "x-fleetlive-wave": 2,
        "x-fleetlive-headers": [
          "X-FleetLive-Signature",
          "FL-Delivery",
          "FL-Event"
        ]
      }
    }
  }
}