Starting with the entry below, version numbers track the janus software’s release version (what actually shipped), not the
X-API-VERSION request-versioning scheme described in the Version Guide. Those are two separate things: X-API-VERSION identifies the shape of the request/response contract and has not changed since 3.0.0 below; the release version identifies which build of the software is running. A release can ship fixes or additive fields without bumping X-API-VERSION at all, which is what most entries below are.[2.16.3] - 2026/05/12
fixed
- Removed the upper cap on the
page_limit/page_indexpagination fields.
[2.16.2] - 2026/04/28
fixed
- Fixed an error when checking asset availability with certain filters.
last_job_idis now sourced fromLastRequest; added job type and date fields.
[2.16.1] - 2026/04/07
fixed
- Added missing fields to several response model schemas.
[2.16.0] - 2026/04/01
added
- Job responses now use repositioned asset coordinates for geolocation.
fixed
- A non-integer
x-tenant-idheader now returns an input error instead of an unhandled exception.
[2.15.1] - 2026/03/11
fixed
- Fixed the password reset flow for unverified and third-party users.
[2.15.0] - 2026/02/27
added
- Hauler invite links are now validated via a signed JWT at registration.
[2.13.4] - 2026/01/26
fixed
- Fixed an error when creating hauler connections (
POST /haulers/{hauler_uuid}/connections).
[2.13.3] - 2026/01/08
fixed
- List-assets endpoints now include assets that have no movement history (previously omitted).
[2.13.0] - 2025/12/11
fixed
- Corrected the latest-incident subquery logic in list-assets endpoints and handled a
Noneasset location value (previously caused errors). - Fixed a bug where auth token expiration checks could behave incorrectly due to timezone handling.
[2.12.5] - 2025/07/10
fixed
- Moved
PATCH /users/pwresetparameters from query parameters to the request body. - User verification email tokens now expire after 1 day instead of 1 hour.
- Fixed a bug where customer address updates (
PATCH) weren’t correctly committed to the database. - Reverted a stored-procedure optimization for list-assets endpoints that had introduced a regression.
[2.12.4] - 2023/05/02
fixed
GET /haulers/{third_party_hauler_id}/connectionsnow returns the correct connection list.GET /locations/{location_id}/trucksnow correctly returns trucks for third-party users.- All
PATCH/POSTendpoints now reliably commit their transaction. POST /customers/{customer_id}/locations/{customer_location_id}now returns a more descriptive error message on a conflict.
[2.12.3.rc0] - 2023/01/26
breaking
- Job materials: the
materialsfield was replaced byadditional_items.
added
- Added
GET /trailers. - Added job image support:
GET /jobs/{job_id}/images/{s3_object}, an upload endpoint, andDELETE /jobs/{job_id}/images/{s3_object}. - Added a decline-job endpoint.
- Added
verified_redirect_urltoPOST /usersandGET /users/verify_emailto redirect after verification (omitting it preserves the original “Account verified” response). - Renamed
LineItemModeltoProductModel; addedauto_deduct,purchase, andis_deletedfields, plus filters on the list-products endpoint. - Added
DispatcherandThirdParty*role access toGET /asset_typesandGET /locations/{location_id}/assets.
fixed
- All job-model-returning endpoints now format consistently by version (previously only the list-jobs endpoint was correct).
- Fixed a recaptcha issue on
POST /haulers. - Third-party hauler truck listings no longer show all trucks.
- Fixed job-listing authorization so all valid locations are covered.
- Public (unauthenticated) role introspection now works correctly.
- Fixed a server error caused by a missing default value on the contact profile during customer creation.
[2.12.2] - 2022/10/11
added
- Added
POST /locations/{location_id}/jobs/{job_id}/completeandPOST /locations/{location_id}/jobs/{job_id}/additional_items/{job_item_id}/completefor job completion. - Added
GET /products. - Added
X-API-VERSIONheader support, with backward-compatible input/output versioning across affected endpoints. - Added
can_user_access_location,JobModel.username,JobModel.rout_stop_id, and aquantityfield on job materials. - Added
has_role,page_index, andpage_limitfilters to the list-users endpoint. - Added
completed_byandrequested_byfilters to the list-jobs endpoints.
changed
- The list-jobs endpoints now include only the calling customer’s own location settings; the list-customers endpoints now include each customer’s list of location settings.
POST /haulersandPOST /haulers/{hauler_uuid}/connectionsnow accept a JSON body instead of query parameters, matching every other request.PATCH /locations/{location_id}/trucks/{truck_id}renamed internally fromset_truck_drivertoupdate_truck.
fixed
- Corrected list-assets model formatting.
- Removed the
Driverrole from job creation. - Fixed missing tenant-scoping filters on several endpoints (
UserModel.company_id, driver location filters,NULLlocation id handling). - Corrected duplicate entries in
can_dispatch_to/can_assign_tofor the driver detail endpoint. - Renamed
JobModel.created_by_idtocreated_byfor consistency. - Re-added a missing
scale_ticketfield (affects all endpoints returning job models). - Added missing
account_number_1/account_number_2fields. - Resized the reCAPTCHA token length limit from 512 to 4096 characters.
[3.0.0] - 2021/11/04
breaking
- Endpoint POST /locations//jobs definition in response body JobModel field customer:
customerdefinition changed from JobCustomerModel to DispatchCustomerLocationModel. - Endpoint PATCH /locations//jobs//dispatch definition in response body JobModel field customer:
customerdefinition changed from JobCustomerModel to DispatchCustomerLocationModel. - Endpoint GET /locations//jobs/ definition in response body JobModel field customer:
customerdefinition changed from JobCustomerModel to DispatchCustomerLocationModel. - Endpoint GET /jobs definition in response body JobModel field customer:
customerdefinition changed from JobCustomerModel to DispatchCustomerLocationModel. - Endpoint GET /locations//jobs definition in response body JobModel field customer:
customerdefinition changed from JobCustomerModel to DispatchCustomerLocationModel. - Endpoint PATCH /locations//jobs/ definition in response body JobModel field customer:
customerdefinition changed from JobCustomerModel to DispatchCustomerLocationModel.
added
- Added X-CRO-VERSION header for specifying versions (backwards compatibility).
- Added input format validation to user identifiers (applies to all user ids).
- Added completed_by and requested_by filters to GET /locations//jobs and GET /jobs.
- Added user id normalization to JobModel.created_by.
- Added 3rd party dispatcher to user identifier resolution.
- Added logic to include 3rd party locations for GET /locations//jobs and GET /jobs.
- Added location_id filter to GET /locations//drivers.
- Added GET /products endpoint.
- Added location_id filter to GET /products.
- Added quantity field to job materials endpoints (including job endpoints).
- Added schedule_lte and schedule_gte to GET /jobs and GET /locations//jobs.
- Added all filters from GET /locations//jobs filters to /jobs.
- Added account_number_1/2 to DispatchCustomerLocationModel, LocationAddressModel, CreateCustomerModel, UpdateDispatchCustomerLocationModel.
- Added LEED support.
- Added username field to GET /locations//drivers and GET /locations//drivers/.
- Added scale_ticket to JobModel.
changed
- Removed duplicate entries in the can_dispatch_to and can_assign_to fields for GET /locations//driver/.
- Fixed issue with paged results boundary calculation.
- Job listings now include correct total_count.
- Customer existence checks now ignore inactive customers & addresses.
- Provider user IDs now normalized correctly as user IDs (for endpoints accessing return full data).
- PATCH /locations//trucks/ now accepts NULL driver_id.
- Corrected issue with TruckModel.driver_id being incorrectly interpreted as user id (all endpoints accessing truck resources).
- Added missing default value (NULL) to GET /locations/ for postcode field.
- CreateCustomerAddressModel now uses defaults for optional fields.
- Adjusted asset location formatting to match models.
- Fixed invalid exception thrown when tblAdditionalItem.HeavyWeight is NULL.
- Job endpoints images & return_full fields now returned (previously always missing).
- NULL user identifier cases now handled correctly for all endpoints using user identifiers.
[2.9.1] - 2021/08/02
breaking
- Endpoint GET /locations//trucks//get_jobs_list_pdf final version: Endpoint no longer available after version 2021/08/02.
[2.6.0] - 2021/05/07
breaking
- PATCH /locations//trucks/: Query parameters were moved to the request body. Refer to UpdateTruckQueryParamsModel for older version compatibility.
[2.5.0] - 2021/04/07
breaking
- Endpoint POST /customers//locations/ definition in response body DispatchCustomerLocationModel field customer_id:
customer_idwas renamed toid. - Endpoint DELETE /customers//locations/ definition in response body DispatchCustomerLocationModel field customer_id:
customer_idwas renamed toid. - Endpoint GET /locations//customers/ definition in response body DispatchCustomerLocationModel field customer_id:
customer_idwas renamed toid. - Endpoint GET /customers//locations/ definition in response body DispatchCustomerLocationModel field customer_id:
customer_idwas renamed toid. - Endpoint GET /locations//customers definition in response body CustomerModel field customer_id:
customer_idwas renamed toid. - Endpoint GET /locations//customers definition in response body DispatchCustomerSettingsModel field customer_id:
customer_idwas renamed toid. - Endpoint PATCH /customers//locations/ definition in response body DispatchCustomerLocationModel field customer_id:
customer_idwas renamed toid. - Endpoint POST /locations//customers definition in response body DispatchCustomerLocationModel field customer_id:
customer_idwas renamed toid. - Endpoint GET /customers/ definition in response body CustomerModel field customer_id:
customer_idwas renamed toid. - Endpoint GET /customers/ definition in response body DispatchCustomerSettingsModel field customer_id:
customer_idwas renamed toid. - Endpoint GET /customers definition in response body CustomerModel field customer_id:
customer_idwas renamed toid. - Endpoint GET /customers definition in response body DispatchCustomerSettingsModel field customer_id:
customer_idwas renamed toid. - Endpoint GET /customers//locations definition in response body DispatchCustomerLocationModel field customer_id:
customer_idwas renamed toid. - Endpoint PATCH /customers/ definition in response body CustomerModel field customer_id:
customer_idwas renamed toid. - Endpoint PATCH /customers/ definition in response body DispatchCustomerSettingsModel field customer_id:
customer_idwas renamed toid. - Endpoint POST /locations//jobs definition in response body DispatchCustomerSettingsModel field customer_id:
customer_idwas renamed toid. - Endpoint PATCH /locations//jobs//dispatch definition in response body DispatchCustomerSettingsModel field customer_id:
customer_idwas renamed toid. - Endpoint GET /locations//jobs/ definition in response body DispatchCustomerSettingsModel field customer_id:
customer_idwas renamed toid. - Endpoint GET /jobs definition in response body DispatchCustomerSettingsModel field customer_id:
customer_idwas renamed toid. - Endpoint GET /locations//jobs definition in response body DispatchCustomerSettingsModel field customer_id:
customer_idwas renamed toid. - Endpoint PATCH /locations//jobs/ definition in response body DispatchCustomerSettingsModel field customer_id:
customer_idwas renamed toid.
[2.0.0] - 2021/08/03
added
- Excluded UserId formats from credit card number check.
- CC number checks to all string inputs/outputs.
- POST /locations/x/jobs/y/additional_items.
- PATCH /locations/x/jobs/y/additional_items.
- DELETE /locations/x/jobs/y/additional_items.
- GET /assets_types.
- ation & name info to GET /locations//assets.
- PATCH /locations//jobs//dispatch.
- GET /jobs.
- GET /destinations.
- GET /routes.
- GET /users/current.
- GET /users/current/locations.
- GET /users/current.
- GET /locations/x/assets implementation.
- Added location_id to CustomerLocationModel.
- trailer_id, interface_color to GET /locations/x/trucks.
- Fields can_set_request_trucks, can_dispatch, is_deactivated, interface_color to driver model for GET /drivers/.
- Missing driver_ids to user profiles.
- New crm user type and role.
- Fields name, active, and location_id filters added to GET /customers.
- Customer address constraints for billing/shipping.
- Field username to GET /locations//drivers and GET /locations//drivers/.
- Location permission check to driver validation (for all driver resources).
- Renamed contact_id input fields to customer_contact_id.
- Renamed address_id input fields to customer_address_id.
- Added location_id to CustomerLocationModel.
changed
- All user_id, driver_id, and provider_user_id inputs now accept numeric id, uuid, or username. Username used for outputs for all user_id, driver_id, and provider_user_id fields.
- The user_id and filter_driver_id are now UserId format.
- Updated list_assets to include location & name.
- Changed PATCH /locations//jobs/ to update job details (instead of dispatch job).
- Failed tenant/location checks now return 401 Unauthorized instead of 404 Not Found.
- User not found during authentication will now return 401 Unauthorized.
- The field sales_rep_id now accepts user uuid, username, or provider id for POST /locations//customers, PATCH /customers/, POST /customers//locations/.
- CustomerLocationModel.id renamed to customer_id.
- Output driver_ids are now set to the user_id.
- Paged results field current_page now returns the page index of the results returned.
- The sales_rep_identifier check now skips if sale_rep_identifier not set for customer endpoints.
- Address fields country, line_1, locality, postcode, region now nullable (customer addresses).
- The suspension_id field now nullable and defaults as NULL (for customers).
- The sales_rep and reference_number fields now allow null.
fixed
- Some fields not being updated for PATCH /drivers//chats/ now updated correctly.
- Omitted sales_rep_id for POST /customers//locations/ no longer returns 500.
- Fixed page_index issue in customer exists check (affects customer endpoints).
- CustomerLocationModel.id renamed customer_id.
[1.0.7] - 2020/07/31
added
- Added active, last_updated_gte, created_on_gte, is_parent, parent_id filters to GET location/x/customers.
- Added company_id filter to user list DAL functions
- Added active filter to list_users.
- Added filter parent_id to /customers.
- Added Dispatcher to Administrator roles results.
- Added is_parent, location_id, is_active filters to GET /customers.
- Added is_dispatched to list job filters.
- Added CrmUser role.
changed
- Removed role Public from user role list when listing users.
- Changed list-customer operations to return results based on role (GET /customers, etc.).
- Updated billing/shipping address logic to be based on parent_id.
fixed
- Corrected UserModel.id to UserModel.dispatcher_id for provider_id filter.
- Fixed issue with suspension_id nullability.
- Fixed incorrect location id column logic for all location-specific resources.
- Fixed Dispatcher role validation for null location_id for all endpoints.
[1.0.6] - 2020/06/04
changed
- Changed customer address create to accept null for country, region, locality, & postcode if line_1 is null.
[1.0.5] - 2020/05/20
changed
- Changed POST /locations//customers to allow omitted and/or NULL contact name, email, number, and fax.
[1.0.4] - 2020/05/09
added
- Email, name, & phone number inputs as csv to POST /locations//customers.
- completed_by_driver filter to GET /locations//jobs.
- Job materials data to GET /locations//jobs.
- Field is_active to PATCH /customers//locations/.
- GET locations//dump_destinations.
- GET locations//dump_destinations/.
- Customer dupe detection logic (name & address).
changed
- Changed POST /locations//customers to allow omitted and/or NULL renewal_date.
- Limited job dispatch to Dispatchers.
[1.0.3] - 2019/10/21
added
- Parameter max_address_edit_distance to POST /locations//customers.
- Name filter to GET /location//users.
changed
- Duplicate customers created via POST /locations//customers now return 409 conflict.
- Updated parent_id, line_2, line_3, line_4 to be optional fields for POST /locations//customers.
fixed
- Added missing ‘id’ field to /tenant return results.
[1.0.2] - 2019/09/25
added
- Added GET /locations//materials.
- Added GET /locations//users.
- Added GET /locations//users/.
- Added scale_ticket field to JobModel.
- Added webhooks callbacks.
- Added webhook ping endpoint to API.
- Fixed issue in user location authorization for Admin roles.
changed
- Changed field inputs type validation to restrict to specified type (e.g. JSON int not implicitly converted to string).
- Changed requests with Admin users to also auth for Dispatched authorized calls.
- Renamed GET /customers ‘filter_name’ param to ‘name’.
fixed
- Fixed header param naming issue in customer locations.
- Fixed authorization header spec.
- Fixed customer_id/location_id mixup in the CustomerLocation endpoints.
- Fixed bug in date filter validation.
- Fixed exception handling for missing/invalid endpoint arguments.
- Fixed exception bug and indentation error.
[1.0.1] - 2019/07/30
added
- Added filter_last_update_gte and filter_created_on_gte to GET /customers and GET /location//jobs.
- Changed requests with Admin users to also auth for Dispatcher authorized calls.
changed
- Renamed GET /customers ‘filter_name’ param to ‘name’.
fixed
- Un-flipped Customer ID and Location ID on the “Add customer to location” endpoint.
[0.0.0] - 2019/04/16
added
- Exception handling to endpoint arg processing.
- Support for X-REQUEST-ID header.
- Added field materials list to job records (for GET /locations//jobs/ only).
- GET /customer
- GET /customer/
- PATCH /customer/
- GET /customer//location
- GET /customer//location/
- POST /customer//location/
- PATCH /customer//location/
- GET /customer//address
- POST /customer//address
- GET /customer//address/
- PATCH /customer//address/
- DELETE /customer//address/
- GET /customer//contact
- POST /customer//contact
- GET /customer//contact/
- PATCH /customer//contact/
- POST /location//customer
- POST /location//customer
- PATCH /location//customer/
- GET /location//customer/
- DELETE /location//customer/
- POST /location//gps_event
- GET /tenant
- Added filters to list job endpoint (schedule date range, deleted, completed, driver id, truck id).
- Initial implementations for: - GET /location//driver - GET /location//driver/ - GET /location//customer - POST /hauler - POST /hauler//connection - GET /hauler/ - GET /hauler - GET /hauler//connection - GET /location - GET /location/ - PATCH /location//job/ - GET /location//job/ - GET /location//job - GET /location//truck/ - GET /location//truck - PATCH /location//truck/
changed
- Changed customer contact and address to Dispatcher role access (removed ThirdPartyDispatcher role access).
- Changed argument validation to raise InputError on invalid signature profile (vs HTTP 500).
- Changed scope list support (vs single scope).
- Changed tenant db session logic to raise InputError on x-tenant-id missing.
- Pluralized endpoint URLs.
- Changed CustomerLocationApi.list_customers to RoleGroup.Authenticated.
- Log GPS event now accepts application/json instead of gps_event_json parameter.
- Create/update customer changed from request parameter to JSON customer profile.
- Create/update customer creates/updates customer addresses.
- Create/update customer creates/updates billing zone codes.
- Policy verification moved to function entry points.
- Requests using unassigned tenant IDs now return 403 instead of 200.
- Added tenant/location check to policy enforcement
fixed
- Changed MultiTenantSAConnector to raise InputError on connection if missing tenant id.
- Fixed fence post error in paged queries logic.
- Improved /location//customers GET query performance.
- Invalid access token no longer returns 500 internal server error.
- <jwt-access-token> corrected to <access-token> in doc.
- Validation issues.
- Filtering issues.
- Issue with date comparisons during input validation (aware vs naive)
- ThirdPartyDriver permission issues with List Customers.