XDM API Changelog
May 15, 2026
Added Endpoints
Looking at the existing changelog, the section numbers follow the document's table of contents. I need to check the actual OpenAPI spec to find where these groups fall.Here's the updated changelog with proper section locations:
May 26, 2026
Added Endpoints
9.2 POST /api/external/v1/firmware/list
Location: Section 9.2
Description: Retrieve a paged list of firmwares with optional filtering.
Details:
Request Body: application/json
Response: 200 (success)
Supports filtering by version and notes fields, extended from the base paginated request contract.
9.3 GET /api/external/v1/firmware/getFirmwareByTypeAndId
Location: Section 9.3
Description: Retrieve firmware details by type and ID.
Details:
Parameters:
id(integer),groupType(integer)Response: 200 (success)
9.4 GET /api/external/v1/firmware/download
Location: Section 9.4
Description: Download a firmware file by ID and group type.
Details:
Parameters:
id(integer),groupType(integer)Response: 200 (success), 404 (not found)
9.5 PUT /api/external/v1/firmware
Location: Section 9.5
Description: Update an existing firmware entry.
Details:
Request Body: application/json
Response: 200 (success)
Allows updating firmware metadata including notes, availability, visibility, assigned hardware versions, and dealer assignments.
9.6 POST /api/external/v1/firmware/import
Location: Section 9.6
Description: Import new firmware entries into the system.
Details:
Response: 200 (success)
17.4 PUT /api/external/v3/settingsOverrides/{deviceUid}/local
Location: Section 17.4
Description: Update device settings overrides using localSettingId and localGroupId from the user settings template.
Details:
Path Parameter:
deviceUid(string)Request Body: application/json
Response: 200 (success)
This endpoint allows updating settings overrides for a specific device using local IDs sourced directly from the user settings template structure, rather than global identifiers.
19.1 POST /api/external/v1/sms/send
Location: Section 19.1
Description: Send an SMS message to one or more devices.
Details:
Request Body: application/json
Response: 200 (success)
Accepts a list of device UIDs, SMS type, message body, and an optional addSignature flag.
19.2 POST /api/external/v1/sms/sendSdk
Location: Section 19.2
Description: Send an SMS message to one or more SDK devices.
Details:
Request Body: application/json
Response: 200 (success)
Extends the standard SMS send contract with an optional connectionParameters field for SDK-specific connection settings.
19.3 POST /api/external/v1/sms/preview
Location: Section 19.3
Description: Preview an SMS message before sending.
Details:
Request Body: application/json
Response: 200 (success)
Accepts the same request contract as the send endpoint — device UIDs, SMS type, message body, and an optional signature flag — allowing callers to verify message content prior to dispatch.
23.1 DELETE /api/external/v1/userTemplatesFiles/temp/{fileName}
Location: Section 23.1
Description: Delete a temporary template file by filename.
Details:
Path Parameter:
fileName(string)Response: 200 (success)
23.2 GET /api/external/v1/userTemplatesFiles/temp/{fileName}
Location: Section 23.2
Description: Retrieve a temporary template file by filename.
Details:
Path Parameter:
fileName(string)Response: 200 (success), 204 (no content)
23.3 GET /api/external/v1/userTemplatesFiles/stored/{fileName}
Location: Section 23.3
Description: Retrieve a stored template file by filename.
Details:
Path Parameter:
fileName(string)Response: 200 (success), 204 (no content)
23.4 POST /api/external/v1/userTemplatesFiles/temp
Location: Section 23.4
Description: Upload or update a temporary file associated with a template element.
Details:
Request Body: application/json
Response: 200 (success)
Accepts fileData (Base64-encoded content), fileName, elementId, acceptedTypes, and maxSize. Intended for staging files before they are committed to a template element.
Also worth noting — Section 24 (UserTemplatesGatewayExternal) has a new supporting endpoint GET /api/external/v1/userTemplates/{templateId}/forDuplication which returns template data prepared for use with the existing duplicate endpoint (Section 21.2).
6.12 POST /api/external/v4/customCommands
Location: Section 6.12
Description: Added v4 endpoint for sending custom commands to multiple devices using device UIDs.
Details:
Request Body: application/json
Response: 200 (success), 400 (validation errors), 403 (unauthorized), 500 (internal error)
This endpoint introduces version 4 of custom commands functionality.
Unlike previous versions, each command item now includes its own device UID and optional output index, which is required for XG devices.
The endpoint supports sending custom commands to multiple devices in a single request with an updated request/response contract.
6.13 GET /api/external/v4/customCommands/{uid}/responses
Location: Section 6.13
Description: Retrieve custom command responses for a specific device by UID.
Details:
Path Parameter: uid (string)
Request Body: application/json
Response: 200 (success), 400 (validation errors), 403 (unauthorized), 500 (internal error)
This endpoint introduces version 4 of custom command response retrieval using device UID instead of IMEI.
The response contract was updated to support the new v4 custom command response model.
6.14 GET /api/external/v4/customCommands/{uid}/history
Location: Section 6.14
Description: Retrieve sent custom command history for a specific device by UID.
Details:
Path Parameter: uid (string)
Request Body: application/json
Response: 200 (success), 400 (validation errors), 403 (unauthorized), 500 (internal error)
This endpoint introduces version 4 of custom command history retrieval using device UID instead of IMEI.
The endpoint returns paged command history data using the updated v4 response contract.
Jan 1, 2026
Added Endpoints
6.11 POST /api/external/v4/devicesSdk/filter
Location: Section 6.11
Description: Added v4 endpoint for filtering SDK devices.
Details:
Request Body: application/json
Response: 200 (success), 400 (validation errors), 403 (unauthorized), 500 (internal error)
This endpoint introduces version 4 of device SDK filtering and extends the existing v1 and v3 filter functionality with the latest improvements to the request/response contract.
Jan 7, 2026
Updated Endpoints
6.4 POST /api/external/v1/devicesSdk/cancelUpdate
6.6 POST /api/external/v3/devicesSdk/cancelUpdate
Added validation that permits inserting multiple devices in a single request as long as they belong to the same dealer. Devices from different dealers can no longer be mixed in one request.
This aligns the behavior with other endpoints and improves audit functionality.
20.2 PUT /api/external/v1/userTemplates/{templateId}/categories/ {categoryId}/elementGroups/{elementGroupId}/elements/{elementId}
Added support for submitting files in Base64 format.
File-type elements now support an additional filename field, which is required when submitting files.
Example request body for filename upload:
{
"id": 12345,
"value": "SGVsbG8gd29ybGQh",
"filename": "new file.txt"
}
20.3 PUT /api/external/v1/userTemplates/{templateId}/elements/multiple
Added support for submitting files in Base64 format.
File-type elements now support an additional filename field, which is required when submitting files.
Example request body for filename upload:
[
{
"id": 12345,
"value": "SGVsbG8gd29ybGQh",
"filename": "new file.txt"
}
]
Oct 3, 2025
Added Endpoints
15.1 POST /api/external/v1/rollouts/create
Location: Section 15.1
Description: Endpoint to create a new rollout.
Details:
Request Body: application/json
Auth: Authorized dealer users only
Response: 200 (success), 400 (validation errors), 403 (unauthorized), 500 (internal error)
15.2 GET /api/external/v1/rollouts/{rolloutId}
Location: Section 15.2
Description: Retrieve details of a specific rollout.
Details:
Path Parameter: rolloutId (GUID)
Auth: Authorized dealer users only
Response: 200 (success), 400, 403, 404 (not found), 500
15.3 DELETE /api/external/v1/rollouts/{rolloutId}
Location: Section 15.3
Description: Delete an existing rollout.
Details:
Path Parameter: rolloutId (GUID)
Response: 200 (success), 400, 403, 500
15.4 GET /api/external/v1/rollouts/{rolloutId}/approvals
Location: Section 15.4
Description: Retrieve approvals and their status for a rollout.
Details:
Path Parameter: rolloutId (GUID)
Response: 200 (success), 400, 403, 500
15.5 GET /api/external/v1/rollouts/devices
Location: Section 15.5
Description: Retrieve device states for a rollout with filtering options.
Details:
Request Body: application/json
Response: 200 (success), 400, 403, 500
15.6 GET /api/external/v1/rollouts
Location: Section 15.6
Description: Retrieve filtered rollouts and their data.
Details:
Request Body: application/json
Response: 200 (success), 400, 403, 500
15.7 GET /api/external/v1/rollouts/device/commands
Location: Section 15.7
Description: Retrieve commands and their latest status for a rollout device.
Details:
Request Body: application/json
Response: 200 (success), 400, 403, 500
15.8 GET /api/external/v1/rollouts/device/command/states
Location: Section 15.8
Description: Retrieve states of a specific device command.
Details:
Request Body: application/json
Response: 200 (success), 400, 403, 500
15.9 POST /api/external/v1/rollouts/{rolloutId}/release
Location: Section 15.9
Description: Release a rollout that is ready.
Details:
Path Parameter: rolloutId (GUID)
Response: 200 (success), 400, 403, 500
15.10 POST /api/external/v1/rollouts/{rolloutId}/terminate
Location: Section 15.10
Description: Terminate an active rollout.
Details:
Path Parameter: rolloutId (GUID)
Response: 200 (success), 400, 403, 500
15.11 POST /api/external/v1/rollouts/{rolloutId}/approve
Location: Section 15.11
Description: Approve a rollout.
Details:
Path Parameter: rolloutId (GUID)
Response: 200 (success), 400, 403, 500
15.12 POST /api/external/v1/rollouts/remove/devices
Location: Section 15.12
Description: Remove devices from an existing rollout.
Details:
Request Body: application/json
Response: 200 (success), 400, 403, 500
Sep 1, 2025
Created Endpoints
POST /api/external/v1/userTemplates/duplicate
Location: Section 21.2
Description: Endpoint to duplicate existing settings template
Details:
Request Body: application/json
Auth: Authorized dealer users only
Response: 200 (success), 400 (validation errors), 403 (unauthorized), 500 (internal error)
NAME | TYPE | DESCRIPTION |
|---|---|---|
settingTemplateId | integer | ID of an already existing settings template |
name | string | Name of a new settings template |
notes | string | Notes for a new settings template |
dealerId | integer | Dealer ID of the new settings template owner |
DELETE /api/external/v1/userTemplates/{templateId}
Location: Section 21.5
Description: Endpoint to delete existing settings template
Details:
Path Parameter: id (int32)
Auth: Authorized dealer users only
Response: 200 (success), 400 (validation errors), 403 (unauthorized), 500 (internal error)
NAME | TYPE | DESCRIPTION |
|---|---|---|
templateId | integer | ID of an already existing settings template |
Aug 20, 2025
Updated Endpoints
20.3 POST /api/external/v1/userTemplates/{templateId}/categories/{categoryId}/elementGroups
Location: Section 20.3
Description: Endpoint to create a new element group
Details:
Request Body: application/json
Auth: Authorized dealer users only
Now allows for submission of a file in base64 format. Introduced new field: filename for each file type elements.
Response: 200 (success), 400 (validation errors), 403 (unauthorized), 500 (internal error)
Apr 23, 2025
Added Endpoints
15.2 POST /api/external/v1/scripts
Location: Section 15.2
Description: Endpoint to create a new script
Details:
Request Body: application/json
Auth: Authorized dealer users only
Allows for submission of a new script with source code and configuration parameters.
Response: 200 (success), 400 (validation errors), 403 (unauthorized), 500 (internal error)
15.3 GET /api/external/v1/scripts/{id}
Location: Section 15.3
Description: Retrieve script details by ID
Details:
Path Parameter: id (int32)
Auth: Authorized dealer users only
Returns script metadata and content
Response: 200 (success), 400, 403, 404 (not found), 500
15.4 PUT /api/external/v1/scripts/{id}
Location: Section 15.4
Description: Update an existing script
Details:
Path Parameter: id (int32)
Request Body: application/json
Auth: Authorized dealer users only
Replaces script content and configuration
Response: 200 (success), 400, 403 (unauthorized or released), 500
15.5 DELETE /api/external/v1/scripts/{id}
Location: Section 15.5
Description: Delete a script by ID
Details:
Path Parameter: id (int32)
Auth: Authorized dealer users only
Removes the script from the system
Response: 200 (success), 403, 404 (not found), 500
15.6 POST /api/external/v1/scripts/Release/{id}
Location: Section 15.6
Description: Release a script
Details:
Path Parameter: id (int32)