The CalAmp K-12 JSON API (JavaScript object notation application programming interface) enables you to pull data from our servers about your fleet, add entities such as devices and vehicles to your account, and make any necessary updates. Below you will find descriptions of the available methods, grouped by the type of data they provide. You can go to Getting K-12 Data Using the JSON API for more information.


Customer Data


Get Customer Information


Returns current customer information and a list of licenses enabled for the customer.


For Operator model customers, this will return a list of districts and operators you have permissions to access. For regular customers, this will always return one customer object.


Request

  • URL: /customer/info
  • Verb: POST
  • Parameters (as JSON):
    • empty object


Response

  • success: true or false
  • result: An array of customer account objects:
    • accountNumber: The customer account number
    • name: The customer name
    • id: The internal customer ID
    • licenses: The list of enabled licenses with these pairings:
      • id: The internal license ID
      • name: The license name
    • properties: The list of customer properties:
      • name: The property name
      • value: The property value
  • error: An object with an error code and a message


Vehicle Data


Get Vehicle Properties


Returns all available properties for the vehicle entity as well as available values for picklist type properties.


Request

  • URL: /vehicle/properties
  • Verb: POST
  • Parameters (as JSON): None


Response

  • success: true or false
  • result: Contains a properties array of vehicle properties:
    • propertyName
    • isRequired
    • propertyKey: A string value that identifies a property
    • propertyDatatype: The expected type of the property
    • pickList: A JSON array of available property values:
      • id: The picklist item GUID
      • name: The picklist item name
    • minValue
    • maxValue
  • error: An object with an error code and a message


Create or Update Vehicles


Creates or updates a vehicle and its properties.


You can create/update multiple vehicles at once.


Before creating a vehicle, you should first call Get Vehicle Properties to get a list of all properties available in the system and then use that object in your create vehicle request. Only the possible values from Get Vehicle Properties are acceptable for picklist type of properties.


Before editing a vehicle, you should first call Get Vehicle Details to get the current values, modify the object you receive, and then use that for the request.


Vehicle names can have only these characters: letters, numbers, and the symbols (), and -.


Request

  • URL: /vehicle/createupdate
  • Verb: POST
  • Parameters (as JSON):
    • An array of objects with the following format:
      • esn: The device's electronic serial number
        Note: During creation, if there is inactive mobile device with this ESN, it will be activated and linked to the vehicle; otherwise, it will be created and linked. If your customer account has the setting Autogenerate ESNs During Vehicle Create via JSON API enabled (by CalAmp Support), if you leave esn empty or don't pass it, the ESN will automatically be generated, and the device will be created and linked to the vehicle. If esn is empty but this setting is NOT enabled, it will be ignored.
      • vehicleId: The GUID of the vehicle to update (for creation, use NULL or don't send this parameter)
      • primaryGroupId: The GUID of the vehicle's primary group (will accept only groups you have permissions to access [see "Get the Group Tree" later in this article]; required for creating a vehicle; if passed for update, any previous vehicle/primary group relationship will be removed)
      • properties: An array of properties to create or update for the vehicle with propertyKey/value pairs (propertyKey is a string that identifies the property)
        Note: If no default vehicle type has been set up for your account, this must be passed as a parameter.

        To remove a value, send null or an empty string.

Response

  • success: true or false
    Note: If at least one vehicle was successfully created/updated, this will be true. The details status will describe any failures for the vehicles.
  • result: An array with the create/update status, as follows:
    • success: The number of vehicles that were created or updated
    • failed: The number of vehicles that failed to be created or updated
    • details: An array of the status of each vehicle's creation/update with the following:
      • vehicleId: The vehicle's GUID
      • status: For vehicles that were successfully created, "Created", for ones that were updated, "Updated"; otherwise, an error message explaining what went wrong
      • esn: The electronic serial number of the vehicle's device
      • vehicleName: The vehicle's name
  • error: An object with an error code and a message


Get Vehicle Details


Returns vehicle data such as odometer values and assigned yard, plus vehicle properties such as whether the bus has a stop arm camera, body style, fuel tank capacity, and make/model/year.


The vehicle properties will be included in the response if they have values. Deleted vehicle properties will also be returned but with an empty value.


No data will be returned for vehicles/groups you don't have permission to access.


Request

  • URL: /vehicle/details
  • Verb: POST
  • Parameters (as JSON):
    • JSON object with the following parameters:
      • vehicleList: A GUID array of specific vehicles to return (optional)
      • groupList: A GUID array of specific vehicle groups to return (optional)
      • propertyKeys: An array of specific vehicle properties to return (optional)
        Note: If the vehicleListgroupList, and propertyKeys parameters are empty, all vehicles you have rights to access will be returned with the full vehicle object.

        The vehicle name property will be returned even it is not defined in the 
        propertyKeys array.
      • status: An integer specifying which status the returned vehicles should have: 0 - All, 1 - Active Only, 2 - Inactive Only (by default, 1; optional)

Note: If the JSON object is empty, the method will return data for all the vehicles available to you.


Response

  • success: true or false
  • result: An array of vehicle objects:
    • vehicleId
    • primaryGroupId
    • nonPrimaryGroupsIds
    • esn
    • odometer
    • odometerUnits
    • yard: A nullable object with the vehicle yard's id and name
    • properties: A vehicle property array with paired property names such as Property_VIN and their values
    • isActive: A Boolean value (true or false)
  • error: An object with an error code and a message


Delete Vehicles


Deletes the entered vehicles.


Request

  • URL: /vehicle/delete
  • Verb: POST
  • Parameters (as JSON): A JSON array of the vehicle GUIDs to delete


Response

  • success: true or false
  • result: An array with the following:
    • success: The number of vehicles that were deleted
    • failed: The number of vehicles that failed to be deleted
    • details: An array of the status of each vehicle's deletion with the following:
      • vehicleId: The vehicle's GUID
      • status: For vehicles that were successfully deleted, "Deleted"; otherwise, an error message explaining what went wrong
  • error: An object with an error code and a message


Update Vehicle Odometer


Updates the odometer value for the entered vehicle.


Request

  • URL: /vehicle/updateOdometer
  • Verb: POST
  • Parameters (as JSON):
    • JSON object with the following parameters:
      • vehicleId: A vehicle GUID
      • odometerValue: The odometer value
      • odometerUnits: The unit of measure for the odometer value ("km" or "mi")


Response

  • success: true or false
  • result: null
  • error: An object with an error code and a message


Event Data


Get Vehicle History


Returns all the vehicle events (or optionally just certain events) for a specified date range and optional speed range.


No data will be returned for vehicles/groups you don't have permission to access.


The eventHistoryId field can be used as a key value to join the response from the Get Vehicle Event History API call.


Request

  • URL: /event/VehicleHistory
  • Verb: POST
  • Parameters (as JSON):
    • JSON object with the following parameters:
      • startDate: The first date of the time range (in the format YYYY-MM-DD; required)
      • endDate: The final date (in the format YYYY-MM-DD; required)
      • events: An array of event numbers (if this parameter is empty, all events will be returned)
      • speedOver: The lower value in the speed range — only events that occurred while the speed was greater than this will be returned (optional, ignored if not passed)
      • speedUnder: The higher value in the speed range — only events that occurred while the speed was lower than this will be returned (optional, ignored if not passed)
      • groupIds: A GUID array (either vehicleIds or groupIds is required)
      • vehicleIds: A GUID array (either vehicleIds or groupIds is required)
        Note: If both groupIds and vehicleIds are passed, the data will be merged.
      • filterOnPrimaryGroup: true or false; if true and groupIds was sent, only data for vehicles in the primary group will be returned (false by default)


Response

  • success: true or false
  • result: An array of event objects
  • error: An object with an error code and a message


Get Vehicle Last Position


Returns last position data for the entered vehicles (or all vehicles available to you if not specified).


No data will be returned for vehicles/groups you don't have permission to access.


Request

  • URL: /event/vehiclelastposition
  • Verb: POST
  • Parameters (as JSON):
    • JSON object with the following parameters:
      • groupIds: A GUID array (optional)
      • vehicleIds: A GUID array (optional)
        Note: If both groupIds and vehicleIds are passed, the data will be merged.

Response

  • success: true or false
  • result: An array of vehicle last position objects:
    • eventName
    • eventNumber
    • vehicleId
    • vehicleName
    • latitude
    • longitude
    • speed
    • heading
    • logTime
    • rgc
  • error: An object with an error code and a message


Get Vehicle Event History


Returns extended vehicle event data such as speed traveled and latitude/longitude for a specified time period and optional speed range for only certain events, as follows:


  • GPS Hard Acceleration (126): Returns standard fields of event data.
  • GPS Hard Braking (127): Returns standard fields of event data.
  • Harsh Turn (130): Returns standard fields of event data.
  • Idle Alert (27): Returns standard fields of event data, plus idleDuration and excessiveIdleDuration.
  • Speeding (128): Returns standard fields of event data, plus actualSpeed and postedSpeed.
  • Max Speed (28): Returns standard fields of event data, plus actualSpeed and postedSpeed.


The eventHistoryId field can be used as a key value to join the response from the Get Vehicle History API call.


If you enter vehicles/groups you don't have permission to access, no data will be returned.


Request

  • URL: /event/VehicleEventHistory
  • Verb: POST
  • Parameters (as JSON):
    • JSON object with the following parameters:
      • startDate: The first date of the time range (in the format YYYY-MM-DD; required)
      • endDate: The final date (in the format YYYY-MM-DD; required)
      • events: An array of event numbers (if this parameter is empty, all events from the available list will be returned; other events will not be processed)
      • speedOver: The lower value in the speed range — only events that occurred while the speed was greater than this will be returned (optional, ignored if not passed)
      • speedUnder: The higher value in the speed range — only events that occurred while the speed was lower than this will be returned (optional, ignored if not passed)
      • groupIds: A GUID array (either vehicleIds or groupIds is required)
      • vehicleIds: A GUID array (either vehicleIds or groupIds is required)
        Note: If both groupIds and vehicleIds are passed, the data will be merged.

Response

  • success: true or false
  • result: An array of event objects
  • error: An object with an error code and a message


Get Mileage History


Returns mileage data for a maximum time range of three days.


Request

  • URL: /event/MileageHistory
  • Verb: POST
  • Parameters (as JSON):
    • JSON object with the following parameters:
      • startDate: The first date of the time range (in the format YYYY-MM-DD; required)
      • endDate: The final date (in the format YYYY-MM-DD; required)
      • vehicleIds: A GUID array (optional)
      • groupIds: A GUID array (optional)


Response

  • success: true or false
  • result: An array of mileage objects
  • error: An object with an error code and a message


Get Event Points


Returns a list of event points data, such as the infraction event and point value deducted.


Request

  • URL: /event/eventpoints
  • Verb: GET
  • Parameters (as JSON): None


Response

  • success: true or false
  • result: A list of event points data
  • error: An object with an error code and a message


Get Trip Details


Returns details for vehicle trips during a maximum time range of one week, such as distance traveled and entry/exit times for zones.


You can optionally enter vehicle IDs, group IDs, or both. If neither is provided, all available user vehicles and groups will be used for searching. If both are passed, the vehicle data will be merged.


If you enter vehicles/groups you don't have permission to access, no data will be returned.


Request

  • URL: /event/TripDetails
  • Verb: POST
  • Parameters (as JSON):
    • JSON object with the following parameters:
      • startDate: A date string — the first date of the time range (required)
        Note: You can pass startDate and endDate with time, such as "2026-11-17 02:15:45 PM""2026-11-17 14:15:45", or "2026-11-17T14:15:45". If the time is not passed, the default time will be 12:00:00 AM.
      • endDate: A date string — the final date (required)
      • groupIds: A GUID array with a default value of an empty array (optional)
      • vehicleIds: A GUID array with a default value of an empty array (optional)
      • zoneIds: A GUID array with a default value of an empty array (optional)


Response

  • success: true or false
  • result: An array of trip detail objects:
    • vehicleId
    • vehicleName
    • zoneId
    • zoneName
    • exitTime
    • entryTime
    • distanceTravelled
    • unitsOfMeasure
  • error: An object with an error code and a message


Get Event List


Returns a list of events for customer accounts.


Only events available for the current customer will be returned.


Request

  • URL: /event/list
  • Verb: GET
  • Parameters (as JSON): None


Response

  • success: true or false
  • result: A list of event data
  • error: An object with an error code and a message


Get Excessive Idling History


Returns a list of excessive idling events in the specified date range.


You can enter vehicle IDs, group IDs, or both. If neither is provided, a missing parameter error will be returned. No data will be returned for vehicles/groups you don't have permission to view or for vehicles/groups that don't exist in the database.


Request

  • URL: /event/IdlingHistory
  • Verb: POST
  • Parameters (as JSON):
    • JSON object with the following parameters:
      • groupIds: A GUID array (either vehicleIds or groupIds is required)
      • vehicleIds: A GUID array (either vehicleIds or groupIds is required)
        Note: If both groupIds and vehicleIds are passed, data will be returned for both.
      • startDate: A date string — the first date of the time range (required)
      • endDate: A date string — the final date (required)
        Note: You can include the time of day with the startDate or endDate parameter, such as "2026-08-03T09:00:00", which will affect the search results.

        If either 
        startDate or endDate is missing, a required parameter error will be returned.

Response

  • success: true or false
  • result: An array of Idling event objects:
    • id
    • customerId
    • vehicleId
    • reportTime
    • totalDuration
    • excessiveDuration
    • geostring
    • address
  • error: An object with an error code and a message


Group Data


Get the Group Tree


Lists your available groups in a tree structure.


Note: The output of this call is used for the /vehicle/createupdate request's primary group field.


Request

  • URL: /group/tree
  • Verb: POST
  • Parameters (as JSON): None


Response

  • success: true or false
  • result: An array of group objects:
    • groupId
    • groupName
    • childGroups: An array of group objects
    • customerId
    • properties
  • error: An object with an error code and a message


Device Data


Get Devices


Returns all available devices.


Note: Devices assigned to vehicles you don't have access to will not be included in the list of results.


Request

  • URL: /device/list
  • Verb: POST
  • Parameters (as JSON): None


Response

  • success: true or false
  • result: An array of device objects:
    • id
    • esn
    • phoneNumber
    • currentVehicleId
    • currentVehicleName
    • notes
  • error: An object with an error code and a message


Create or Update Device


Creates devices in the system or updates device properties.


You can add or update multiple devices at once.


Request

  • URL: /device/createupdatedevice
  • Verb: POST
  • Parameters (as JSON):
    • An array of objects:
      • id: The GUID of a device to update (for device creation, use NULL or don't send this parameter)
      • esn: A string — the device's electronic serial number (required for creation; optional for updating because ESNs can't be edited)
      • phoneNumber: A string — the phone number of the device (required)
      • notes: A string — notes for the device with a maximum length of 128 characters (optional)


Response

  • success: true or false
  • result: An array of device objects:
    • details: An array of the status of each device's creation/update with the following:
      • esn: The device's electronic serial number
      • id: The device's ID
      • status: For devices that were successfully created, "Created", for ones that were updated, "Updated", for device ESNs that previously had an inactive record, "Activated"; otherwise, an error message explaining what went wrong
    • success: The number of devices that were created or updated
    • failed: The number of devices that failed to be created or updated
  • error: An object with an error code and a message


Assign Device to Vehicle


Assigns devices to the specified vehicles.


You can assign multiple devices at once.


Request

  • URL: /device/assigndevicetovehicle
  • Verb: POST
  • Parameters (as JSON):
    • An array of objects:
      • esn: The device's electronic serial number (required)
      • vehicleId: The GUID of the vehicle you want to assign the device to (required)


Response

  • success: true or false
  • result: An array of device objects:
    • details: An array of the status of each device's assignment with the following:
      • esn: The device's electronic serial number
      • vehicleId: The GUID of the vehicle
      • status: For devices that were successfully assigned, "Assigned"; otherwise, an error message explaining what went wrong
    • success: The number of devices that were assigned to their vehicles
    • failed: The number of devices that failed to be assigned to their vehicles
  • error: An object with an error code and a message


Unassign Device from Vehicle


Removes the specified devices' vehicle assignments.


You can unassign multiple devices at once.


Request

  • URL: /device/unassigndevicefromvehicle
  • Verb: POST
  • Parameters (as JSON):
    • An array of device ESNs


Response

  • success: true or false
  • result: An array:
    • details: An array of the status of each device's unassignment with the following:
      • status: For devices that were successfully unassigned, "Unassigned"; otherwise, an error message explaining what went wrong
      • esn: The device's electronic serial number
    • success: The number of devices that were unassigned from their vehicles
    • failed: The number of devices that failed to be unassigned from their vehicles
  • error: An object with an error code and a message


Inspection Data


Get Work Orders


For customers with work orders enabled, returns the work orders generated over a specified time range (if no date range is entered, the last 30 days).


You will be able to see only work orders for vehicles/groups you have access to.


Request

  • URL: /inspection/getworkorders
  • Verb: POST
  • Parameters (as JSON):
    • vehicleId: A GUID array
    • statuses: An array of work order statuses to search for (such as "LookupItem_WorkOrderStatus_InProgress")
      Note: If the status filter isn't set to only work orders that are still open, all work orders created in the time period will be returned.
    • workOrderId: The ID number of the work order (optional)
    • startDate: The first date of the time range (optional)
    • endDate: The final date (optional)


Response

  • success: true or false
  • result: An array of work order model objects
  • error: An object with an error code and a message


Update Work Order


For customers with work orders enabled, updates a work order.


Request

  • URL: /inspection/updateworkorder
  • Verb: POST
  • Parameters (as JSON):
    • id: The numeric work order ID
    • notes: The notes entered for the work order
    • statusId: The ID for the work order status
    • fixedDtUtc: The fixed date
    • workOrderItems array with the following parameters (optional):
      • id: The numeric ID of the work order item
      • externalId
      • notes
      • fixedDtUtc
      • statusId


Response

  • success: true or false
  • result: An array:
    • success
    • error
    • errorDescription
    • successDescription
    • successValue
  • error: An object with an error code and a message


Get Inspection Results by Form


Returns vehicle inspection results for individual inspection forms, one by one.


You can optionally enter vehicle IDs, group IDs, or both. If neither is provided, all available user vehicles and groups will be used for searching.


The maximum response length is 1,000 records.


Request

  • URL: /inspection/GetInspectionResultsByForm
  • Verb: POST
  • Parameters (as JSON):
    • vehicleIds: A GUID array
    • groupIds: A GUID array
    • startDate: The first date of the time range
    • endDate: The final date


Response

  • success: true or false
  • result: An array of inspection results
  • error: An object with an error code and a message


User Data


Create or Update User


Creates or update users.


To create or edit user profiles, you must have Edit permissions in the system. In addition, you can assign users only to vehicle groups that you yourself have access to.


Request

  • URL: /user/createupdate
  • Verb: POST
  • Parameters (as JSON):
    • userId: If you provide a user ID, the method will update the existing user data; if no user ID is provided, a new user will be created
      Note: This is the only required parameter for updating a user.
    • emailAddress
    • name
    • password
    • phone: The user's phone number (optional)
    • mobile: The user's mobile number (optional)
    • mobileCarrier: The user's mobile carrier (optional)
    • isMainContact:Y or N value indicating whether the user is the main contact for the account (if not sent, by default, N will be used; optional)
    • sendEmail:true or false value indicating whether the user should be sent a Welcome to CalAmp K-12 email (if not sent, by default, false will be used; optional)
    • userRoles: A GUID array of the user's roles
    • userVehicleGroups: A GUID array of the user's assigned vehicle groups


Response

  • success: true or false
  • result: A list of created/updated users
  • error: An object with an error code and a message


Delete User


Deletes the user who has the entered email address.


Note: This is a soft delete. You cannot remove users using is_system='Y' in zLogin.


Request

  • URL: /user/delete
  • Verb: POST
  • Parameters (as JSON):
    • The email address of the user to delete


Response

  • success: true or false
  • result: A list of deleted users
  • error: An object with an error code and a message


Get Carriers


Returns all available mobile carriers.


Request

  • URL: /user/getcarriers
  • Verb: POST
  • Parameters (as JSON): None


Response

  • success: true or false
  • result: A list of the available mobile carriers
  • error: An object with an error code and a message


Get Roles


Returns all available user roles, except for ones only for CalAmp use.


Request

  • URL: /user/getroles
  • Verb: POST
  • Parameters (as JSON): None


Response

  • success: true or false
  • result: A list of the available roles
  • error: An object with an error code and a message


Location Data


Get Locations


Returns all available locations.


Request

  • URL: /location/getlocations
  • Verb: POST
  • Parameters (as JSON):
    • zoneType: The type(s) of location you want to see, such as school, yard, and landmark, which can be specified in an array


Response

  • success: true or false
  • result: An array of location data
  • error: An object with an error code and a message


Employee Data


Get Clocked In Employee by ESN


Returns which employees are clocked in on the entered vehicle (using the device's electronic serial number).


There are no access restrictions for this method. Any user can send any device's ESN (no matter which vehicle the device is installed in).


Request

  • URL: /employee/GetClockedInEmployeeByEsn
  • Verb: POST
  • Parameters (as JSON):
    • esn: The device's electronic serial number


Response

  • success: true or false
  • result: An array of clocked-in employees
  • error: An object with an error code and a message


Get Employee Property Types


Returns a list of all available employee properties for the customer.


Note: This will return data only for active (not deleted) employees.


Request

  • URL: /employee/PropertyTypes
  • Verb: POST
  • Parameters (as JSON): None


Response

  • success: true or false
  • result: A list of all available employee properties
  • error: An object with an error code and a message


Get Employee Properties


Returns a list of employees and their properties (if you have access to the data for the specified employees).


You can optionally enter employee IDs, department IDs, or both. If neither is provided, all available user employees and departments will be used for searching.


If the EmployeeIds and departmentIds parameters are both passed, the data is merged.


Request

  • URL: /employee/properties
  • Verb: POST
  • Parameters (as JSON):
    • EmployeeIds: A list of int values that returns the specified employees (employeeIndexIds) (optional)
    • departmentIds: A list of int values that returns only employees in the specified departments (optional)
    • propertyGroups: A list of int values that returns only the specified properties (optional)


Response

  • success: true or false
  • result: An array of employee data
  • error: An object with an error code and a message


Diagnostics Data


Get JPOD1


Returns a day's worth of JPOD1 data.


You can optionally enter vehicle IDs, group IDs, or both. If neither is provided, all available user vehicles and groups will be used for searching.


Request

  • URL: /enginediagnostics/jpod1
  • Verb: POST
  • Parameters (as JSON):
    • vehicleIds: A GUID array (optional)
    • groupIds: A GUID array (optional)
    • date: The date of the data to be returned (in the format YYYY-MM-DD; required)


Response

  • success: true or false
  • result: An array of vehicles and their data
  • error: An object with an error code and a message


Get Mobile Engine Data


Returns raw OBDII mobile engine data for all vehicles for the specified date.


Request

  • URL: /enginediagnostics/odbiiMobileEngineData
  • Verb: POST
  • Parameters (as JSON):
    • date: The date of the data to be returned (in the format YYYY-MM-DD; required)
    • vehicleIds: A GUID array (optional)
    • groupIds: A GUID array (optional)


Response

  • success: true or false
  • result: An array of vehicles and their data
  • error: An object with an error code and a message


Get Mobile Engine Last Reported Data


Returns the most recent engine diagnostics data for heavy- and light-duty (OBDII) vehicles.


You can optionally enter vehicle IDs, group IDs, or both. If neither is provided, all available user vehicles and groups will be used for searching.


Request

  • URL: /enginediagnostics/GetMobileEngineLastReportedData
  • Verb: POST
  • Parameters (as JSON):
    • vehicleTypes: An integer value from 0 to 2 (required), as follows:
      • 0 (the default value): Returns data for both heavy-duty and light-duty/OBDII vehicles in the lightDutyItems and heavyDutyItems parameters
      • 1: Returns data for light-duty/OBDII vehicles only in the lightDutyItems parameter
      • 2: Returns data for heavy-duty vehicles only in the heavyDutyItems parameter
    • vehicleIds: A GUID array (optional)
    • groupIds: A GUID array (optional)


Response

  • success: true or false
  • result: An array of vehicles and their data
    Note: In lightDutyItems, the odometer value is returned in meters.
  • error: An object with an error code and a message


Get JPOD2 Data


Returns a day's worth of the most recent odometer/fuel values parsed out of packets for JPOD2 vehicles.


You can optionally enter vehicle IDs, group IDs, or both. If neither is provided, all available user vehicles and groups will be used for searching.


Request

  • URL: /enginediagnostics/GetJpod2Data
  • Verb: POST
  • Parameters (as JSON):
    • date: The date of the data to be returned (in the format YYYY-MM-DD; required)
    • vehicleIds: A GUID array (optional)
    • groupIds: A GUID array (optional)


Response

  • success: true or false
  • result: An array of vehicles and their data
  • error: An object with an error code and a message


Get Fault Code History


Returns a list of fault codes starting from a date or in a specified date range.


The esn value in the response is the electronic serial number of the device installed in the vehicle at the time the fault code was sent.


You must enter vehicle IDs, group IDs, or both. If neither is provided, an error will be thrown.


If a start date is entered but not an end date, all fault codes from that day until the current one will be returned.


Request

  • URL: /enginediagnostics/FaultCodeHistory
  • Verb: POST
  • Parameters (as JSON):
    • vehicleIds: A GUID array (either vehicleIds or groupIds is required)
    • groupIds: A GUID array (either vehicleIds or groupIds is required)
    • startDate: The first date of the time range (in the format YYYY-MM-DD; required)
    • endDate: The final date (in the format YYYY-MM-DD; optional)
    • activeOnly: true or false (the default value); if set to true, only open fault codes are returned (with no end date) (optional)


Response

  • success: true or false
  • result: An array of fault codes and their data
  • error: An object with an error code and a message


Get Fuel Economy History


Returns a list of fuel economy history items for a specified date range.


The time period is limited to one month (31 days). You can optionally enter vehicle IDs, group IDs, or both. If neither is provided, all available user vehicles and groups will be used for searching.


Request

  • URL: /enginediagnostics/FuelEconomyHistory
  • Verb: POST
  • Parameters (as JSON):
    • vehicleIds: A GUID array (optional)
    • groupIds: A GUID array (optional)
    • startDate: The first date of the time range (in the format YYYY-MM-DD; required)
    • endDate: The final date (in the format YYYY-MM-DD; required)


Response

  • success: true or false
  • result: An array of fuel economy items:
    • customerId: An int
    • vehicleId: A GUID
    • date: A date string (in the format YYYY-MM-DD)
    • mileage: A decimal value with up to two digits after the separator
    • mileageUnits: A string with possible values of mi and km
    • engineHours: A decimal value with up to two digits after the separator
    • fuelUsed: A decimal value with up to five digits after the separator
    • idleTime: A long
  • error: An object with an error code and a message


Boarding Card Data


Get Students Assigned to Boarding Cards


Returns a list of which students are assigned to the entered boarding cards.


If a boarding card exists in the database but is not currently assigned to a student, it will not be included in the response.


Request

  • URL: /hctb/boardingcards/details
  • Verb: POST
  • Parameters (as JSON):
    • cards: A list of card IDs (cardNumber)
    • students: A list of student district IDs (studentID)


Response

  • students array of studentIDs and corresponding cardNumbers
  • nonExistingStudents array of studentIDs that don't match any student district IDs in the system
  • nonExistingCards array of cardNumbers that don't match any boarding card IDs in the system


Create or Update Specific Boarding Cards


Creates or updates boarding cards for students.


Note: By default, students can have multiple boarding cards, so when you add a new card, both it and the old one will be active. This is a setting that can be turned off by CalAmp Support (using the setting Allow Multiple Boarding Cards per Student Via API).


Request

  • URL: /hctb/boardingcards/createupdate
  • Verb: POST
  • Parameters (as JSON):
    • forceCardReassignment: If the boarding card already belongs to another student, the true and false values have this effect:
      • true: The previous card will be unassigned for the other student and assigned to current one.
      • false: An error will be thrown.
    • cards: A list of student IDs and card numbers


Response

  • success: true or false
    • true will be returned if at least one card is created or updated.
    • false will be returned if your customer settings don't allow using the API to update boarding cards or if an error occurs.
  • result: A list of student IDs and the status of the card update, plus the number of successes and failures
  • error: An object with an error code and a message


Unassign Boarding Cards


Removes boarding card assignments for students.


Request

  • URL: /hctb/boardingcards/remove
  • Verb: POST
  • Parameters (as JSON):
    • The student ID and card number for each student (studentID and cardNumber)


Response

  • success: true or false (true will be returned if at least one card is unassigned)
  • result: The number of cards that were successfully removed or failed, such as this:
    • "result": {
      • "details": [],
      • "success": 1,
      • "failed": 0
    • },
  • error: An object with an error code and a message


Student Data


Create a Student


Creates a new student profile.


This API call will return the new student with their data.


Request

  • URL: /student/add
  • Verb: POST
  • Parameters (as JSON):
    • studentDistrictID
    • firstName
    • lastName
    • school (optional)
    • grade (optional)


Response

  • success: true or false
  • result: An array of new student data such as the following:
    • district_id
    • student_id
    • first_name
    • last_name
    • school_legacy_id
    • school_id
    • school_name
    • grade
  • error: An object with an error code and a message explaining why the student could not be created


Get Student Photo


Returns student photos.


Request

  • URL: /student/photo
  • Verb: POST
  • Parameters (as JSON):
    • studentDistrictID: A list of the student IDs in the format ["123456", "234567"] (required)


Response

  • success: true or false
  • result: An array of Rider Photos data:
    • studentDistrictId
    • riderPhoto (a byte array or an empty string if not found)
    • riderPhotoLastUpdateDateUtc
    • photoFormat
  • error: An object with an error code and a message


Parent Data


Delete Parents


Deletes parent accounts.


Note: This is applicable only for customers with Here Comes the Bus.


Request

  • URL: /parent/delete
  • Verb: POST
  • Parameters (as JSON):
    • A list of the parent emails in the format ["email1@xxx.com", "email2@xxx.com"] (required)


Response

  • success: true or false
  • result: A list of the parent's emails and the status of the deletion, such as "Deleted" or "Parent account not found", plus the number of successful/failed deletions 
  • error: An object with an error code and a message


Ridership Data


Get Student Scans


Returns student scans.


If the user doesn't have access rights to the student's bus, no data will be returned. If nothing is entered in "vehicleIds", all available user vehicles will be used for searching.


If the studentDistrictIds and cardIds parameters are both passed, the data is merged.


Request

  • URL: /ridership/scans
  • Verb: POST
  • Parameters (as JSON):
    • dateFrom: The start date (required; only date, no time)
    • dateTo: The end date (required; only date, no time)
    • vehicleIds: An array (optional)
    • studentDistrictIds: An array (optional)
    • cardIds: An array (optional)


Response

  • success: true or false
  • result: An array of scan objects:
    • scanId
    • scanDateTime
    • vehicleId
    • vehicleName
    • studentDistrictId
    • studentName
    • boardingCardNumber
    • onBoardIndicator
    • scanType
    • latitude
    • longitude
    • rgc
  • error: An object with an error code and a message


Planned Data


Get Route/Vehicle Assignments


Returns route vehicle assignments.


If the user doesn't have access rights to the entered group or vehicle, no data will be returned. If nothing is entered in groupIds, all available user groups will be used for searching; likewise, if nothing is entered in vehicleIds, all the available vehicles will be searched.


If the groupIds and vehicleIds parameters are both passed, the vehicle data is merged.


If filterOnPrimaryGroup is set to true and groupIds is sent, only data for vehicles in primary groups will be returned.


In the response id97604 is a substitution ID. For a source vehicle, id will return 0.


Request

  • URL: /plan/vehicleassignment
  • Verb: POST
  • Parameters (as JSON):
    • groupIds: An array of group GUIDs (optional; default: empty array)
    • vehicleIds: An array of vehicle GUIDs (optional; default: empty array)
    • serviceDate: A date string (required; only date, no time)
    • filterOnPrimaryGroup: A Boolean value (optional; default: false)


Response

  • success: true or false
  • result: An array of route vehicle assignment objects:
    • id
    • districtId
    • districtName
    • serviceDate
    • routeId
    • routeName
    • tierId
    • tierName
    • operatorId
    • operatorName
    • vehicleId
    • vehicleName
    • vehicleEsn
    • startTime
    • endTime
    • lastUpdateDate
  • error: An object with an error code and a message


Create Substitution by External ID


Creates a vehicle substitution using your route planning system IDs, not CalAmp K-12 IDs.


The substitution length cannot be more than seven days by default, although this value is configurable.


The start date should be today or in the future, given these criteria:

  • If you don't send either dateFrom or dateTo, the substitution will be created for today.
  • If you need to make a substitution for one date in the future, use dateFrom and don't send dateTo.
  • If you need create a substitution for a period of time, send both dates.


Request

  • URL: /plan/createsubstitutionbyexternalid
  • Verb: POST
  • Parameters (as JSON):
    • targetVehicleId: The target vehicle ID (required)
    • targetVehicleName: The target vehicle name (optional)
    • sourceTierId: The source tier ID (required)
    • sourceTierName: The source tier name ID (optional)
    • dateFrom: The start substitution date in date/time format, with a possible null value (optional)
    • dateTo: The end substitution date in date/time format, with a possible null value (optional)


Response

  • success: true or false
  • result: An array of vehicle substitution objects
  • error: An object with an error code and a message


TAA Time Data


Get Driver Scans by Date Range


Returns driver scans.


IMPORTANT!

Due to the type of data storage in the TAA system, 
shiftID is not a unique identifier for scans. The unique identifier is shiftId plus scanType; you should expect one in scan and one out scan for the same shift ID.

Also, you can retrieve data for a date range of only one month (31 days).

You can pass dates with time, such as 
"2026-11-17 02:15:45 PM""2026-11-17 14:15:45 PM" , or "2026-11-17T14:15:45 PM". If the time is not passed, the default time will be 12:00:00 AM.


Request

  • URL: /taatime/scansbydate
  • Verb: POST
  • Parameters (as JSON):
    • dateFrom: A date string (required)
    • dateTo: A date string (required)
    • assetIds: A string array (optional; default: empty array)
    • departmentIds: An integer array (optional; default: empty array)


Response

  • success: true or false
  • result: An array of driver scan objects:
    • employeeAssetId
    • shiftId
    • scanType
    • originalScanTime
    • currentScanTime
    • jobCode
    • vehicleName
    • vehicleId
    • scanSource
    • isManual
    • isEdited
  • error: An object with an error code and a message