Inspections
The Inspection object
idstringoptionalPublic inspection identifier.
formobjectoptionalThe inspection form the report was filed against, when loaded.
vehicleobjectoptionalThe vehicle inspected, when loaded.
driverobjectoptionalThe driver who filed the inspection, when loaded.
issueobjectoptionalThe issue raised from the failed items, when the form asks for one and any item failed.
work_orderobjectoptionalThe work order opened for the failed items, when the form asks for one and any item failed.
custom_field_valuesarray of objectsoptionalThe 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 objectsoptionalThe 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 objectsoptionalOne result per pass-fail answer, derived from custom_field_values — item_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.
typestringoptionalInspection type, taken from the form — dvir, pre_trip, post_trip, or a custom type.
statusstringoptionalLifecycle status — submitted, needs_review or resolved.
resultstringoptionalpassed when every item passed, otherwise failed.
sourcestringoptionalHow it was filed — navigator for the driver app, public_link for a tokenised link.
odometernumberoptionalOdometer reading at the time of the inspection.
engine_hoursnumberoptionalEngine hours at the time of the inspection.
total_itemsintegeroptionalNumber of item results.
failed_itemsintegeroptionalNumber of item results that did not pass.
locationobjectoptionalWhere the inspection was filed from.
signatureobjectoptionalThe driver's signature, as the app captured it.
attachmentsarrayoptionalAdditional files attached to the inspection.
has_failuresbooleanoptionalWhether any item failed.
started_attimestampoptionalWhen the driver began the inspection.
submitted_attimestampoptionalWhen the inspection was filed.
resolved_attimestampoptionalWhen the failed items were resolved from the console, if they have been.
updated_attimestampoptionalTimestamp when the inspection was last updated.
created_attimestampoptionalTimestamp when the inspection was created.
{
"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"
}/v1/inspection-formsList 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.
vehiclestringoptionalOnly forms that apply to this vehicle — bound to it, or bound to no vehicle at all.
typestringoptionalOnly forms of these types, such as dvir or pre_trip,post_trip.
limitintegeroptionalMaximum forms to return. Defaults to 30.
/v1/inspection-formscurl https://api.fleetbase.io/v1/inspection-forms?vehicle={{vehicle_id}} \
-H "Authorization: Bearer flb_live_…"/v1/inspection-forms/:idRetrieve 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 type — pass-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.
/v1/inspection-forms/:idcurl https://api.fleetbase.io/v1/inspection-forms/:id \
-H "Authorization: Bearer flb_live_…"/v1/inspectionsSubmit 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.
inspection_formstringrequiredID of the published inspection form being filed against.
driverstringrequiredID of the driver filing the inspection.
vehiclestringoptionalID of the vehicle inspected. Defaults to the vehicle the driver is assigned to.
started_attimestampoptionalWhen the driver began the inspection. Defaults to the time it is filed.
odometerintegeroptionalOdometer reading at the time of the inspection.
engine_hoursintegeroptionalEngine hours at the time of the inspection.
item_resultsarray of objectsrequiredOne entry per checklist item answered. At least one is required.
item_keystringoptionalThe form item's key.
labelstringrequiredThe item as shown to the driver.
categorystringoptionalThe item's category on the form.
passedbooleanrequiredWhether the item passed.
statusstringoptionalpassed or failed. Derived from passed when omitted.
severitystringoptionalSeverity of a failure — low, medium, high or critical. Sets the priority of the issue and work order raised.
commentsstringoptionalThe driver's note on the item.
photosarrayoptionalPhotos of the item, each a base64 encoded image or a URL.
locationobjectoptionalWhere the inspection was filed from, as latitude and longitude.
signatureobjectoptionalThe driver's signature, as the app captured it.
attachmentsarrayoptionalAdditional files attached to the inspection.
/v1/inspectionscurl -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
}
]
}'/v1/inspectionsList 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.
driverstringoptionalOnly inspections filed by this driver.
vehiclestringoptionalOnly inspections of this vehicle.
typestringoptionalOnly inspections of these types, such as dvir or pre_trip,post_trip.
resultstringoptionalpassed or failed.
statusstringoptionalsubmitted, needs_review or resolved.
limitintegeroptionalMaximum inspections to return. Defaults to 30.
/v1/inspectionscurl https://api.fleetbase.io/v1/inspections?driver={{driver_id}} \
-H "Authorization: Bearer flb_live_…"/v1/inspections/:idRetrieve 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.
/v1/inspections/:idcurl https://api.fleetbase.io/v1/inspections/:id \
-H "Authorization: Bearer flb_live_…"/v1/vehicles/:id/inspectionsList 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.
typestringoptionalOnly inspections of these types, such as dvir or pre_trip,post_trip.
resultstringoptionalpassed or failed.
statusstringoptionalsubmitted, needs_review or resolved.
limitintegeroptionalMaximum inspections to return. Defaults to 30.
/v1/vehicles/:id/inspectionscurl https://api.fleetbase.io/v1/vehicles/:id/inspections \
-H "Authorization: Bearer flb_live_…"