openapi: 3.0.1 info: title: Fleetbase API description: >- RESTful API for the Fleetbase open-source logistics and supply chain operating system. Manage orders, places, contacts, drivers, vehicles, fleets, zones, service rates, tracking, and webhooks. Available self-hosted (AGPL-3.0) or via managed Fleetbase Cloud. termsOfService: https://www.fleetbase.io/terms contact: name: Fleetbase Support email: hello@fleetbase.io url: https://docs.fleetbase.io license: name: AGPL-3.0 url: https://www.gnu.org/licenses/agpl-3.0.en.html version: '1.0' servers: - url: https://api.fleetbase.io/v1 description: Fleetbase Cloud / self-hosted REST API security: - bearerAuth: [] tags: - name: Orders description: Create, dispatch, and manage delivery orders. - name: Places description: Addressable geocoded locations. - name: Contacts description: Customer and facilitator contacts. - name: Drivers description: Drivers and their assignments. - name: Vehicles description: Vehicles in the fleet. - name: Fleets description: Groupings of drivers and vehicles. - name: Zones description: Service-area geofences. - name: Service Rates description: Pricing rules and delivery quotes. - name: Tracking description: Tracking status and telemetry. - name: Webhooks description: Event subscription endpoints. paths: /orders: get: operationId: listOrders tags: - Orders summary: List orders description: Returns a paginated list of orders for the organization. parameters: - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' - name: status in: query description: Filter orders by status (e.g. created, dispatched, completed). schema: type: string responses: '200': description: A list of orders. content: application/json: schema: type: array items: $ref: '#/components/schemas/Order' post: operationId: createOrder tags: - Orders summary: Create an order description: Creates a new delivery order with pickup, dropoff, and payload entities. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/OrderCreateRequest' responses: '200': description: The created order. content: application/json: schema: $ref: '#/components/schemas/Order' /orders/{id}: get: operationId: getOrder tags: - Orders summary: Retrieve an order parameters: - $ref: '#/components/parameters/id' responses: '200': description: The requested order. content: application/json: schema: $ref: '#/components/schemas/Order' put: operationId: updateOrder tags: - Orders summary: Update an order parameters: - $ref: '#/components/parameters/id' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/OrderCreateRequest' responses: '200': description: The updated order. content: application/json: schema: $ref: '#/components/schemas/Order' delete: operationId: cancelOrder tags: - Orders summary: Cancel an order parameters: - $ref: '#/components/parameters/id' responses: '200': description: Confirmation the order was cancelled. /orders/{id}/dispatch: patch: operationId: dispatchOrder tags: - Orders summary: Dispatch an order description: Dispatches an order to an assigned driver. parameters: - $ref: '#/components/parameters/id' responses: '200': description: The dispatched order. content: application/json: schema: $ref: '#/components/schemas/Order' /places: get: operationId: listPlaces tags: - Places summary: List places parameters: - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' responses: '200': description: A list of places. content: application/json: schema: type: array items: $ref: '#/components/schemas/Place' post: operationId: createPlace tags: - Places summary: Create a place requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Place' responses: '200': description: The created place. content: application/json: schema: $ref: '#/components/schemas/Place' /places/{id}: get: operationId: getPlace tags: - Places summary: Retrieve a place parameters: - $ref: '#/components/parameters/id' responses: '200': description: The requested place. content: application/json: schema: $ref: '#/components/schemas/Place' put: operationId: updatePlace tags: - Places summary: Update a place parameters: - $ref: '#/components/parameters/id' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Place' responses: '200': description: The updated place. content: application/json: schema: $ref: '#/components/schemas/Place' delete: operationId: deletePlace tags: - Places summary: Delete a place parameters: - $ref: '#/components/parameters/id' responses: '200': description: Confirmation the place was deleted. /contacts: get: operationId: listContacts tags: - Contacts summary: List contacts parameters: - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' responses: '200': description: A list of contacts. content: application/json: schema: type: array items: $ref: '#/components/schemas/Contact' post: operationId: createContact tags: - Contacts summary: Create a contact requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Contact' responses: '200': description: The created contact. content: application/json: schema: $ref: '#/components/schemas/Contact' /contacts/{id}: get: operationId: getContact tags: - Contacts summary: Retrieve a contact parameters: - $ref: '#/components/parameters/id' responses: '200': description: The requested contact. content: application/json: schema: $ref: '#/components/schemas/Contact' put: operationId: updateContact tags: - Contacts summary: Update a contact parameters: - $ref: '#/components/parameters/id' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Contact' responses: '200': description: The updated contact. content: application/json: schema: $ref: '#/components/schemas/Contact' delete: operationId: deleteContact tags: - Contacts summary: Delete a contact parameters: - $ref: '#/components/parameters/id' responses: '200': description: Confirmation the contact was deleted. /drivers: get: operationId: listDrivers tags: - Drivers summary: List drivers parameters: - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' responses: '200': description: A list of drivers. content: application/json: schema: type: array items: $ref: '#/components/schemas/Driver' post: operationId: createDriver tags: - Drivers summary: Create a driver requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Driver' responses: '200': description: The created driver. content: application/json: schema: $ref: '#/components/schemas/Driver' /drivers/{id}: get: operationId: getDriver tags: - Drivers summary: Retrieve a driver parameters: - $ref: '#/components/parameters/id' responses: '200': description: The requested driver. content: application/json: schema: $ref: '#/components/schemas/Driver' put: operationId: updateDriver tags: - Drivers summary: Update a driver parameters: - $ref: '#/components/parameters/id' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Driver' responses: '200': description: The updated driver. content: application/json: schema: $ref: '#/components/schemas/Driver' delete: operationId: deleteDriver tags: - Drivers summary: Delete a driver parameters: - $ref: '#/components/parameters/id' responses: '200': description: Confirmation the driver was deleted. /vehicles: get: operationId: listVehicles tags: - Vehicles summary: List vehicles parameters: - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' responses: '200': description: A list of vehicles. content: application/json: schema: type: array items: $ref: '#/components/schemas/Vehicle' post: operationId: createVehicle tags: - Vehicles summary: Create a vehicle requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Vehicle' responses: '200': description: The created vehicle. content: application/json: schema: $ref: '#/components/schemas/Vehicle' /vehicles/{id}: get: operationId: getVehicle tags: - Vehicles summary: Retrieve a vehicle parameters: - $ref: '#/components/parameters/id' responses: '200': description: The requested vehicle. content: application/json: schema: $ref: '#/components/schemas/Vehicle' put: operationId: updateVehicle tags: - Vehicles summary: Update a vehicle parameters: - $ref: '#/components/parameters/id' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Vehicle' responses: '200': description: The updated vehicle. content: application/json: schema: $ref: '#/components/schemas/Vehicle' delete: operationId: deleteVehicle tags: - Vehicles summary: Delete a vehicle parameters: - $ref: '#/components/parameters/id' responses: '200': description: Confirmation the vehicle was deleted. /fleets: get: operationId: listFleets tags: - Fleets summary: List fleets parameters: - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' responses: '200': description: A list of fleets. content: application/json: schema: type: array items: $ref: '#/components/schemas/Fleet' post: operationId: createFleet tags: - Fleets summary: Create a fleet requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Fleet' responses: '200': description: The created fleet. content: application/json: schema: $ref: '#/components/schemas/Fleet' /fleets/{id}: get: operationId: getFleet tags: - Fleets summary: Retrieve a fleet parameters: - $ref: '#/components/parameters/id' responses: '200': description: The requested fleet. content: application/json: schema: $ref: '#/components/schemas/Fleet' put: operationId: updateFleet tags: - Fleets summary: Update a fleet parameters: - $ref: '#/components/parameters/id' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Fleet' responses: '200': description: The updated fleet. content: application/json: schema: $ref: '#/components/schemas/Fleet' delete: operationId: deleteFleet tags: - Fleets summary: Delete a fleet parameters: - $ref: '#/components/parameters/id' responses: '200': description: Confirmation the fleet was deleted. /zones: get: operationId: listZones tags: - Zones summary: List zones parameters: - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' responses: '200': description: A list of zones. content: application/json: schema: type: array items: $ref: '#/components/schemas/Zone' post: operationId: createZone tags: - Zones summary: Create a zone requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Zone' responses: '200': description: The created zone. content: application/json: schema: $ref: '#/components/schemas/Zone' /zones/{id}: get: operationId: getZone tags: - Zones summary: Retrieve a zone parameters: - $ref: '#/components/parameters/id' responses: '200': description: The requested zone. content: application/json: schema: $ref: '#/components/schemas/Zone' put: operationId: updateZone tags: - Zones summary: Update a zone parameters: - $ref: '#/components/parameters/id' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Zone' responses: '200': description: The updated zone. content: application/json: schema: $ref: '#/components/schemas/Zone' delete: operationId: deleteZone tags: - Zones summary: Delete a zone parameters: - $ref: '#/components/parameters/id' responses: '200': description: Confirmation the zone was deleted. /service-rates: get: operationId: listServiceRates tags: - Service Rates summary: List service rates parameters: - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' responses: '200': description: A list of service rates. content: application/json: schema: type: array items: $ref: '#/components/schemas/ServiceRate' post: operationId: createServiceRate tags: - Service Rates summary: Create a service rate requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ServiceRate' responses: '200': description: The created service rate. content: application/json: schema: $ref: '#/components/schemas/ServiceRate' /service-rates/{id}: get: operationId: getServiceRate tags: - Service Rates summary: Retrieve a service rate parameters: - $ref: '#/components/parameters/id' responses: '200': description: The requested service rate. content: application/json: schema: $ref: '#/components/schemas/ServiceRate' delete: operationId: deleteServiceRate tags: - Service Rates summary: Delete a service rate parameters: - $ref: '#/components/parameters/id' responses: '200': description: Confirmation the service rate was deleted. /service-quotes: post: operationId: createServiceQuote tags: - Service Rates summary: Generate a delivery quote description: >- Calculates a delivery quote from configured service rates for a given pickup, dropoff, and payload. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ServiceQuoteRequest' responses: '200': description: The generated service quote. content: application/json: schema: $ref: '#/components/schemas/ServiceQuote' /tracking/{trackingNumber}: get: operationId: getTracking tags: - Tracking summary: Retrieve tracking status description: >- Returns tracking status and activity for a tracking number associated with an order or entity. parameters: - name: trackingNumber in: path required: true schema: type: string responses: '200': description: The tracking status and activity. content: application/json: schema: $ref: '#/components/schemas/TrackingStatus' /webhook-endpoints: get: operationId: listWebhookEndpoints tags: - Webhooks summary: List webhook endpoints responses: '200': description: A list of webhook endpoints. content: application/json: schema: type: array items: $ref: '#/components/schemas/WebhookEndpoint' post: operationId: createWebhookEndpoint tags: - Webhooks summary: Create a webhook endpoint requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/WebhookEndpoint' responses: '200': description: The created webhook endpoint. content: application/json: schema: $ref: '#/components/schemas/WebhookEndpoint' /webhook-endpoints/{id}: get: operationId: getWebhookEndpoint tags: - Webhooks summary: Retrieve a webhook endpoint parameters: - $ref: '#/components/parameters/id' responses: '200': description: The requested webhook endpoint. content: application/json: schema: $ref: '#/components/schemas/WebhookEndpoint' delete: operationId: deleteWebhookEndpoint tags: - Webhooks summary: Delete a webhook endpoint parameters: - $ref: '#/components/parameters/id' responses: '200': description: Confirmation the webhook endpoint was deleted. components: securitySchemes: bearerAuth: type: http scheme: bearer description: >- API key passed as a Bearer token in the Authorization header. Test keys are prefixed flb_test_ and live keys flb_live_. parameters: id: name: id in: path required: true description: The unique public identifier of the resource. schema: type: string limit: name: limit in: query description: Number of records to return (default 25, max 100). schema: type: integer default: 25 maximum: 100 offset: name: offset in: query description: Number of records to skip for pagination. schema: type: integer default: 0 schemas: Order: type: object properties: id: type: string status: type: string description: Lifecycle status (created, dispatched, en route, completed, canceled). pickup: type: string description: Public ID of the pickup place. dropoff: type: string description: Public ID of the dropoff place. driver_assigned: type: string description: Public ID of the assigned driver. notes: type: string scheduled_at: type: string format: date-time entities: type: array items: $ref: '#/components/schemas/Entity' tracking_number: type: string created_at: type: string format: date-time OrderCreateRequest: type: object properties: pickup: type: string dropoff: type: string notes: type: string scheduled_at: type: string format: date-time entities: type: array items: $ref: '#/components/schemas/Entity' Entity: type: object description: A payload item within an order. properties: destination: type: string name: type: string description: type: string currency: type: string price: type: number Place: type: object properties: id: type: string name: type: string street1: type: string city: type: string province: type: string postal_code: type: string country: type: string latitude: type: number longitude: type: number Contact: type: object properties: id: type: string name: type: string title: type: string email: type: string phone: type: string type: type: string description: Contact type (customer or contact). Driver: type: object properties: id: type: string name: type: string email: type: string phone: type: string status: type: string vehicle: type: string description: Public ID of the assigned vehicle. location: $ref: '#/components/schemas/Point' Vehicle: type: object properties: id: type: string make: type: string model: type: string year: type: integer plate_number: type: string vin: type: string status: type: string Fleet: type: object properties: id: type: string name: type: string status: type: string drivers: type: array items: type: string vehicles: type: array items: type: string Zone: type: object properties: id: type: string name: type: string description: type: string border: type: object description: GeoJSON polygon describing the zone boundary. ServiceRate: type: object properties: id: type: string service_name: type: string service_type: type: string description: Rate model (e.g. fixed_meters, per_drop, parcel). currency: type: string base_fee: type: number per_meter_flat_rate_fee: type: number ServiceQuoteRequest: type: object properties: pickup: type: string dropoff: type: string service_type: type: string entities: type: array items: $ref: '#/components/schemas/Entity' ServiceQuote: type: object properties: id: type: string amount: type: number currency: type: string service_rate: type: string TrackingStatus: type: object properties: tracking_number: type: string status: type: string code: type: string location: $ref: '#/components/schemas/Point' updated_at: type: string format: date-time WebhookEndpoint: type: object properties: id: type: string url: type: string events: type: array items: type: string status: type: string version: type: string Point: type: object properties: type: type: string example: Point coordinates: type: array items: type: number description: '[longitude, latitude]'