Drivers API
v1–2Create, list, update, deactivate, and reactivate drivers, and manage their workdays.
Drivers are fleet master data: who can drive, with which vehicles, skills, and working days. This API lets your HR/fleet system own that data instead of maintaining it twice.
Creating a driver creates a Zendera login. The driver gets a user account (email + password) for the driver app — see the create rules below before wiring up a sync.
Where this fits in your operation
- Fleet roster sync: your HR or fleet system creates and updates drivers (contact info, vehicles, skills, employment dates) so dispatch always plans with the current roster.
- Onboard subcontractors: external drivers (
is_external+export_orders) are how orders flow into the Orders Export feed for partner carriers. - Plan working time: push workdays (driver availability per day) from your scheduling system so the optimizer knows who is on duty.
- Offboarding: deactivate the driver — their login is disabled for the org and future workdays are removed, while history is kept.
Interactive API Explorer
Loading API Documentation...
Authentication
Authorization: apikey YOUR_API_KEY_HEREBase URLs
- Production:
https://app.zenderatms.com/api/ - Staging:
https://staging.zenderatms.com/api/
Managing drivers (v1)
List drivers
GET /v1/drivers?loads=Contact,Vehicles¬active=true
loads— relations, comma-separated (PascalCase):Contact,Address,Vehicles,Skills,Groups,DriverCosts,DriverStandardWorkdays,DriverPriority,OvertimePreference.filters— expressions (field=value, also>=,<=,!=,<,>,a|b|c):driver_id,organization_user_id,contact_id,vehicle_id,address_id,commission.notactive=true— include deactivated drivers.
204 No Content when there are none.
Create a driver
POST /v1/drivers
{
"contact": {
"first_name": "Anna",
"last_name": "Hansen",
"email_address": "anna@example.com",
"phone_number": "+4712345678"
},
"password": "a-strong-password",
"internal_driver_number": "DRV-042",
"is_external": false,
"notification_sms": true
}Rules (enforced by the API):
contact.first_nameandcontact.email_addressare required.passwordis required when the email doesn’t already belong to a Zendera user (and must be strong). If the user exists in another organization, the password is ignored and the existing login is linked to your org instead.- The email must not already exist in your organization.
- The driver is emailed an invitation/notification.
Nested arrays — vehicles, skills, groups, driver_costs, driver_standard_workdays — can be included on create and on update.
Get / update a driver
GET /v1/drivers/{driverID}?loads=Contact,Vehicles
PATCH /v1/drivers/{driverID}PATCH is partial. Sub-resources are managed through the same payload — send the vehicles / skills / groups / driver_costs arrays to update them; there are no separate sub-resource endpoints.
Deactivate / reactivate
DELETE /v1/drivers/{driverID} → soft: driver + org login set inactive, future workdays removed
PATCH /v1/drivers/{driverID}/reactivate → re-enables and regenerates upcoming workdaysBoth return { "org_user_is_active": ..., "driver_is_active": ... }. The user account itself is never deleted.
Workdays (v2)
A workday is one driver’s availability for one day (start/end time, vehicle).
GET /v2/drivers/{driverID}/workdays?startTime=2026-06-15T00:00:00Z&endTime=2026-06-22T00:00:00Z
POST /v2/drivers/{driverID}/workdays
PUT /v2/drivers/{driverID}/workdays/{workdayID}
DELETE /v2/drivers/{driverID}/workdays/{workdayID}startTime and endTime (RFC 3339) are required on the list call. Recurring weekly patterns are set via driver_standard_workdays on the driver itself; the v2 endpoints manage concrete per-day workdays.
Common gotchas
- Driver create = account create. Plan your sync so you don’t accidentally invite people (an email goes out).
- DELETE deactivates, never deletes. Use
notactive=trueto see deactivated drivers, andreactivateto bring one back. - No sub-resource endpoints. Skills/vehicles/groups/costs are arrays in the driver payload.
- snake_case JSON on v1 driver endpoints.
is_external+export_ordersis what routes a driver’s dispatched orders into the external fulfilment feed.
Related documentation
- Orders Export — fulfilment loop for external drivers
- Orders Overview — workday timelines, gantt, and live map