FleetbaseFleetbase

Inspections

Inspections are the driver's vehicle inspection reports — a DVIR filed before or after a trip against a form the organisation has published from the console. These endpoints are for the driver filing the inspection: read the published forms, submit against one, and read back what was filed and what it produced. A failed item can raise an issue and open a work order, depending on how the form is configured; both come back on the submission. Authoring and publishing forms, and reviewing or resolving submissions, is fleet management and is not part of the consumable API. The requests here need at least one published form in the organisation, which a contract run has to seed.

The Inspection object

An inspection is one filed report against a published inspection form: the vehicle and driver it was filed for, the driver's answer to every field of the form, the pass/fail results derived from the `pass-fail` answers, the photos and signature filed with it, and the issue or work order the form's settings raised from any failed items.
Attributes
idstringoptional

Public inspection identifier.

formobjectoptional

The inspection form the report was filed against, when loaded.

vehicleobjectoptional

The vehicle inspected, when loaded.

driverobjectoptional

The driver who filed the inspection, when loaded.

issueobjectoptional

The issue raised from the failed items, when the form asks for one and any item failed.

work_orderobjectoptional

The work order opened for the failed items, when the form asks for one and any item failed.

custom_field_valuesarray of objectsoptional

The driver's answer to each field of the form — the field's custom_field id, name, label, type and value_type beside the value. A pass-fail value is an object of passed, not_applicable, severity, comments, photos and unsafe; a photo or signature value is resolved to \{ id, url, filename, content_type \} rather than the base64 that was sent.

filesarray of objectsoptional

The photos and signatures filed with the inspection, however they arrived — inside the submit body, or dropped on the console's Photos panel.

item_resultsarray of objectsoptional

One result per pass-fail answer, derived from custom_field_valuesitem_key, label, category, status (passed, failed or not_applicable), severity, passed, comments and photos. This is what issues, work orders and the vehicle's history are built from.

typestringoptional

Inspection type, taken from the form — dvir, pre_trip, post_trip, or a custom type.

statusstringoptional

Lifecycle status — submitted, needs_review or resolved.

resultstringoptional

passed when every item passed, otherwise failed.

sourcestringoptional

How it was filed — navigator for the driver app, public_link for a tokenised link.

odometernumberoptional

Odometer reading at the time of the inspection.

engine_hoursnumberoptional

Engine hours at the time of the inspection.

total_itemsintegeroptional

Number of item results.

failed_itemsintegeroptional

Number of item results that did not pass.

locationobjectoptional

Where the inspection was filed from.

signatureobjectoptional

The driver's signature, as the app captured it.

attachmentsarrayoptional

Additional files attached to the inspection.

has_failuresbooleanoptional

Whether any item failed.

started_attimestampoptional

When the driver began the inspection.

submitted_attimestampoptional

When the inspection was filed.

resolved_attimestampoptional

When the failed items were resolved from the console, if they have been.

updated_attimestampoptional

Timestamp when the inspection was last updated.

created_attimestampoptional

Timestamp when the inspection was created.

The Inspection object
{
  "id": "inspection_submission_4Mnp8Qx2Vz",
  "form": {
    "id": "inspection_form_9Kd2Lm7Aq1",
    "name": "Pre-trip DVIR",
    "type": "dvir"
  },
  "vehicle": {
    "id": "vehicle_7Hx3Pq9Rt2",
    "plate_number": "TRK-7"
  },
  "driver": {
    "id": "driver_2Fb8Nc4Wm6",
    "name": "Dana Driver"
  },
  "issue": null,
  "work_order": null,
  "custom_field_values": [
    {
      "custom_field": "0d2b7f1e-4a3c-4d5e-9f61-2c8b7a6d5e4f",
      "name": "brakes",
      "label": "Brakes",
      "type": "pass-fail",
      "value_type": "object",
      "value": {
        "passed": true,
        "not_applicable": false,
        "severity": null,
        "comments": null,
        "photos": [],
        "unsafe": false
      }
    },
    {
      "custom_field": "7c1a9e42-6b8d-4f30-8a52-1d9f3b6c4e70",
      "name": "odometer",
      "label": "Odometer",
      "type": "number",
      "value_type": "number",
      "value": 120400
    },
    {
      "custom_field": "b8e5d3c1-2f74-4a96-bc08-5e1a7d2f9c63",
      "name": "signature",
      "label": "Sign here",
      "type": "signature",
      "value_type": "file",
      "value": {
        "id": "file_5Qw8Zt2Nb7",
        "url": "https://files.fleetbase.io/inspections/4Mnp8Qx2Vz/lq8w1c0v9xk3.png",
        "filename": "lq8w1c0v9xk3.png",
        "content_type": "image/png"
      }
    }
  ],
  "files": [
    {
      "id": "file_5Qw8Zt2Nb7",
      "uuid": "3a6c9e21-7b4d-4f18-9c05-2d8e1f7a6b34",
      "url": "https://files.fleetbase.io/inspections/4Mnp8Qx2Vz/lq8w1c0v9xk3.png",
      "original_filename": "lq8w1c0v9xk3.png",
      "content_type": "image/png",
      "type": "inspection_signature",
      "caption": null,
      "created_at": "2026-09-09T07:30:00.000000Z"
    }
  ],
  "item_results": [
    {
      "id": "b3f0c4a2-1d6e-4c1a-9c2b-8e7f6a5d4c3b",
      "item_key": "brakes",
      "label": "Brakes",
      "category": "Safety",
      "status": "passed",
      "severity": null,
      "passed": true,
      "comments": null,
      "photos": [],
      "meta": {},
      "submission_id": "inspection_submission_4Mnp8Qx2Vz",
      "updated_at": "2026-09-09T07:30:00.000000Z",
      "created_at": "2026-09-09T07:30:00.000000Z"
    }
  ],
  "type": "dvir",
  "status": "submitted",
  "result": "passed",
  "source": "navigator",
  "odometer": 120400,
  "engine_hours": null,
  "total_items": 1,
  "failed_items": 0,
  "location": {
    "latitude": 1.3521,
    "longitude": 103.8198
  },
  "signature": {},
  "attachments": [],
  "meta": {},
  "form_name": "Pre-trip DVIR",
  "vehicle_name": "Truck 7",
  "driver_name": "Dana Driver",
  "has_failures": false,
  "started_at": "2026-09-09T07:10:00.000000Z",
  "submitted_at": "2026-09-09T07:30:00.000000Z",
  "resolved_at": null,
  "updated_at": "2026-09-09T07:30:00.000000Z",
  "created_at": "2026-09-09T07:30:00.000000Z"
}
GET/v1/inspection-forms

List Inspection Forms

Lists the inspection forms the organisation has published, newest first. Draft and archived forms are never listed: a driver can only file against a published one.

Each form carries its structure as grouped_fields — the groups of typed fields a driver fills in — so a list is enough to render a form picker without reading each one.

Send vehicle to narrow the list to what applies to one vehicle — forms bound to that vehicle, and forms bound to nothing, which are the organisation-wide ones. Send type to narrow by form type, as one value or a comma separated list.

Query parameters
vehiclestringoptional

Only forms that apply to this vehicle — bound to it, or bound to no vehicle at all.

typestringoptional

Only forms of these types, such as dvir or pre_trip,post_trip.

limitintegeroptional

Maximum forms to return. Defaults to 30.

GET/v1/inspection-forms
curl https://api.fleetbase.io/v1/inspection-forms?vehicle={{vehicle_id}} \
  -H "Authorization: Bearer flb_live_…"
GET/v1/inspection-forms/:id

Retrieve an Inspection Form

Retrieves one published inspection form with its structure and settings.

A form is groups of typed fields. grouped_fields is what a driver renders: one entry per group, in the order the builder laid them out, each with a name, a meta.grid_size and its fields. A field carries an id, a name, a label, a typepass-fail, input, textarea, number, select, radio-button, boolean, date-picker, date-time-input, file-upload or signature — plus required, options and meta.

A pass-fail field's meta says what happens when it fails: the default severity, whether a photo or a comment is required, whether the defect takes the vehicle out of service (unsafe_on_fail), and any instructions. A number field's meta may name its unit and the role it plays, such as odometer.

The first cut's flat items checklist is still answered, read-only, for forms that have not been rebuilt; a form built from fields answers both, and grouped_fields is the one to render.

A form that is not published — a draft, or one that has been archived — answers 404, the same as one that does not exist: to a driver, a form that cannot be filled in is not there.

GET/v1/inspection-forms/:id
curl https://api.fleetbase.io/v1/inspection-forms/:id \
  -H "Authorization: Bearer flb_live_…"
POST/v1/inspections

Submit an Inspection

Files an inspection against a published form, as the driver app does at the end of a DVIR.

A form built from typed fields is answered with custom_field_values: one entry per field the driver answered, naming the field by the id the form read gave it, with a value_type and a value. A pass-fail answer is an object — passed, not_applicable, severity, comments, photos and unsafe; a meter is a number, a signature or a photo is base64. The server stores every photo and signature as a file and answers with file: references resolved, and mirrors each pass-fail answer into an item_results row, which is what issues, work orders and the vehicle's history are built from.

The first cut's flat item_results body is still accepted, for the tokenised public link and for older app builds. When both arrive the field values win and the duplicated results are ignored — which is exactly what the app sends, so one body works against either cut.

A failed pass-fail answer must carry whatever its field insists on: a form that sets require_comment_on_fail or require_photo_on_fail refuses the whole submission with a 422 rather than filing half an inspection.

Without vehicle the inspection is recorded against the vehicle the driver is currently assigned to. Without started_at the inspection is taken to have started when it was filed.

The app queues a submit while offline and replays it later. Send an Idempotency-Key header with each attempt: a replay with a key already used by the same driver answers with the inspection the first attempt filed rather than filing a second one.

The response is the inspection with its custom_field_values, item_results and files, and the issue and work_order the form's settings raised from any failed items.

Body parameters
inspection_formstringrequired

ID of the published inspection form being filed against.

driverstringrequired

ID of the driver filing the inspection.

vehiclestringoptional

ID of the vehicle inspected. Defaults to the vehicle the driver is assigned to.

started_attimestampoptional

When the driver began the inspection. Defaults to the time it is filed.

odometerintegeroptional

Odometer reading at the time of the inspection.

engine_hoursintegeroptional

Engine hours at the time of the inspection.

item_resultsarray of objectsrequired

One entry per checklist item answered. At least one is required.

item_keystringoptional

The form item's key.

labelstringrequired

The item as shown to the driver.

categorystringoptional

The item's category on the form.

passedbooleanrequired

Whether the item passed.

statusstringoptional

passed or failed. Derived from passed when omitted.

severitystringoptional

Severity of a failure — low, medium, high or critical. Sets the priority of the issue and work order raised.

commentsstringoptional

The driver's note on the item.

photosarrayoptional

Photos of the item, each a base64 encoded image or a URL.

locationobjectoptional

Where the inspection was filed from, as latitude and longitude.

signatureobjectoptional

The driver's signature, as the app captured it.

attachmentsarrayoptional

Additional files attached to the inspection.

POST/v1/inspections
curl -X POST https://api.fleetbase.io/v1/inspections \
  -H "Authorization: Bearer flb_live_…" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: {{$guid}}" \
  -H "Accept: application/json" \
  -d '{
  "inspection_form": "{{inspection_form_id}}",
  "driver": "{{driver_id}}",
  "vehicle": "{{vehicle_id}}",
  "started_at": "2026-09-09T07:10:00Z",
  "odometer": 120400,
  "engine_hours": 3100,
  "location": {
    "latitude": 1.3521,
    "longitude": 103.8198
  },
  "custom_field_values": [],
  "item_results": [
    {
      "item_key": "brakes",
      "label": "Brakes",
      "category": "Safety",
      "passed": false,
      "severity": "critical",
      "comments": "Pedal is soft.",
      "photos": ["{{proof_photo_base64}}"]
    },
    {
      "item_key": "lights",
      "label": "Lights",
      "category": "Safety",
      "passed": true
    }
  ]
}'
GET/v1/inspections

List Inspections

Lists filed inspections, newest first.

Narrow by driver or vehicle, and by type, result and status, each as one value or a comma separated list. Defaults to a recent window rather than the organisation's whole history; use limit to widen it.

Each row carries the same shape Retrieve an Inspection answers with: the answers as custom_field_values, the item_results derived from them, and the files filed with the inspection.

Query parameters
driverstringoptional

Only inspections filed by this driver.

vehiclestringoptional

Only inspections of this vehicle.

typestringoptional

Only inspections of these types, such as dvir or pre_trip,post_trip.

resultstringoptional

passed or failed.

statusstringoptional

submitted, needs_review or resolved.

limitintegeroptional

Maximum inspections to return. Defaults to 30.

GET/v1/inspections
curl https://api.fleetbase.io/v1/inspections?driver={{driver_id}} \
  -H "Authorization: Bearer flb_live_…"
GET/v1/inspections/:id

Retrieve an Inspection

Retrieves one inspection with everything it produced: custom_field_values — the driver's answers, each beside the field's name, label and type, with every photo and signature resolved to { id, url, filename, content_type } — the item_results derived from the pass-fail answers, the files filed with it, and the issue and work_order raised from any failed items.

GET/v1/inspections/:id
curl https://api.fleetbase.io/v1/inspections/:id \
  -H "Authorization: Bearer flb_live_…"
GET/v1/vehicles/:id/inspections

List Vehicle Inspections

Lists a vehicle's inspection history, newest first — the same inspections List Inspections answers with vehicle, addressed the way the driver app holds them, from the vehicle's screen.

Narrow by type, result and status, each as one value or a comma separated list.

Each row carries the answers as custom_field_values, the item_results derived from them, and the files filed with the inspection.

Query parameters
typestringoptional

Only inspections of these types, such as dvir or pre_trip,post_trip.

resultstringoptional

passed or failed.

statusstringoptional

submitted, needs_review or resolved.

limitintegeroptional

Maximum inspections to return. Defaults to 30.

GET/v1/vehicles/:id/inspections
curl https://api.fleetbase.io/v1/vehicles/:id/inspections \
  -H "Authorization: Bearer flb_live_…"
Inspections | Fleetbase