API Reference
The MQCentral API is organized around REST. Our API has predictable resource-oriented URLs, accepts form-encoded request bodies, returns JSON-encoded responses, and uses standard HTTP response codes, authentication, and verbs.
Getting Started
To begin using the API, you'll need a Client ID and Client Secret. Follow the steps in our Authentication & API Access guide to make your first request.
https://fuota.machineq.net
Authentication
The MQCentral API uses bearer tokens to authenticate requests. To get a bearer token, you need to use your account's Client ID and Client Secret to authenticate through the "get token" API. A successful response will include your bearer token, which you must include with every API request you make.
Your client credentials carry many privileges, so be sure to keep them secure! Do not share your secret Client ID and Client Secret in publicly accessible areas such as GitHub, client-side code, and so forth.
All API requests must be made over HTTPS. Calls made over plain HTTP will fail. API requests without authentication will also fail.
curl https://fuota.machineq.net/v1/endpoint \
-H "Authorization: Bearer eyJhbGciSR5cC...kpXVCIstpZeGYeVg" \
-H "Content-Type: application/json"
Errors
MQCentral uses conventional HTTP response codes to indicate the success or failure of an API request. In general: Code in the 2xx range indicate success. Codes in the 4xx range indicate an error that failed given the information provided (e.g., a required parameter was omitted, a parameter key was spelled wrong, etc.). Codes in the 5xx range indicate an error with MQCentral's servers (these are rare).
Some 4xx errors that could be handled programmatically include an error code that briefly explains the error reported.
| 200 | OK | Everything worked as expected. |
| 400 | Bad Request | The request was unacceptable, often due to missing a required parameter. |
| 401 | Unauthorized | No valid Client Credential provided. |
| 402 | Request Failed | The parameters were valid but the request failed. |
| 403 | Forbidden | The bearer token doesn’t have permissions to perform the request. |
| 404 | Not Found | The requested resource doesn’t exist. |
| 409 | Conflict | The request conflicts with another request (perhaps due to using the same idempotent key). |
| 424 | External Dependency Failed | The request couldn’t be completed due to a failure in a dependency external to MQCentral. |
| 429 | Too Many Requests | Too many requests hit the API too quickly. We recommend an exponential backoff of your requests. |
| 500, 502, 503, 504 | Server Errors | Something went wrong on MQCentral’s end. (These are rare.) |
Campaigns
Manages firmware update campaigns, including creation, monitoring, and deletion.
- GET/v3.2/campaigns
- POST/v3.2/campaigns
- GET/v3.2/campaigns/bulk-status
- GET/v3.2/campaigns/{campaign_id}
- DELETE/v3.2/campaigns/{campaign_id}
The Campaigns object
Attributes
Unique identifier of the campaign.
Name of the firmware image used by this campaign.
Human-readable label for the campaign.
Identifier of the device group targeted by this campaign.
Free-text status message. Empty when no notable status exists.
Timestamp when the campaign was created, in RFC 3339 format.
Scheduled start time in RFC 3339 format. Null if the campaign starts immediately.
Integer representation of the stage. For complete list see stage of the campaign schema
String representation of the stage. For complete list see stage of the campaign schema
Number of devices that have successfully updated.
Number of devices that failed to update.
Number of devices still in progress or setting up.
{
"campaign_id": "string",
"image_name": "string",
"name": "string",
"device_group_id": "string",
"status": "string",
"created_at": "2006-01-02T15:04:05.000Z",
"scheduled_start_at": "2006-01-02T15:04:05.000Z",
"stage": 0,
"stage_str": "string",
"num_devices_success": 0,
"num_devices_fail": 0,
"num_devices_in_progress": 0
}
Retrieves all campaigns
Retrieves all campaigns for the authenticated subscriber. Returns a list of campaign summary objects including stage, device counts, and scheduling information.
Body Parameters
No parameters.
Returns
curl 'https://fuota.machineq.net/api/v3.2/campaigns'
Creates a new campaign
Creates a new firmware update campaign or schedules one for later execution. Returns 202 with a partial campaign status while initialization is in progress.
name— a human-readable label for the campaign.image_name— name of the firmware image previously uploaded via /images.device_group_id— identifier of the target device group, created via /device_groups/keygen or /device_groups.expected_version— expected firmware version after the update. Accepts a semantic version string (e.g.,0.1.2.3or1.2.3) or a 16-character hex pattern. (See hex pattern documentation). Inferred fromimage_namewhen omitted.multicast_setup_time— (optional) multicast setup window in seconds. Automatically determined in most cases. Consult the documentation.
Body Parameters
Human-readable label for the campaign.
Name of the firmware image previously uploaded via /images.
Identifier of the target device group.
Multicast DevEUI. Auto-generated when omitted. If provided, mcast_devaddr and mcast_mc_key must also be set.
Multicast data rate. Allowed values: 1-14.
Multicast frequency in MHz. Must be between 0 and 1000 exclusive.
Multicast session timeout in seconds. Must be a power of 2. Null lets the server choose automatically.
Fraction of redundancy fragments to send, from 0.0 (none) to 1.0 (100%).
Expected firmware version after the update (e.g., '0.1.2.3'). Inferred from image_name when omitted.
Delay between sending each fragment, in seconds.
Maximum acceptable clock drift between server and device, in seconds.
Wait time after all fragments are sent before proceeding, in seconds.
8-character hex descriptor for the firmware image.
Minimum delay between consecutive downlinks to a device, in seconds.
Minimum timeout before retrying a downlink, in seconds. Must be greater than min_downlink_delay.
Whether to verify the device firmware version before starting the update. True means the version check is enforced.
Reserved. Currently unused.
Maximum number of retries for the final firmware version check.
Number of automatic retries for failed devices. 0 disables automatic retries.
Interval between automatic retries, in seconds.
Maximum random jitter added to downlink delays, in seconds. 0 disables jitter.
Number of individual fragment retransmissions per device. 0 disables individual retransmission. Experimental.
Multicast setup window in seconds. Auto-determined when omitted.
Scheduled start time in RFC 3339 format. Must be in the future. Null starts the campaign immediately.
Multicast device address. Required when mcast_deveui is provided.
Multicast session key (32-character hex). Required when mcast_deveui is provided.
Whether to collect debug information for each device. True enables debug logging in the campaign response.
Whether to run automated troubleshooting checks on each device. True enables troubleshooting output in the campaign response.
Examples
Returns
{
"name": "string",
"image_name": "string",
"device_group_id": "string",
"mcast_deveui": "string",
"mcast_dr": 0,
"mcast_freq": 0.0,
"mcast_session_timeout": 0,
"redundancy": 0.0,
"expected_version": "string",
"frag_send_delay": 0.0,
"acceptable_time_drift": 0,
"sleep_after_frag_sent": 0,
"descriptor": "string",
"min_downlink_delay": 0.0,
"min_timeout_delay": 0.0,
"force_initial_version_check": true,
"completed_email_alert": [
"string"
],
"max_final_version_check_retry": 0,
"automatic_retry_count": 0,
"automatic_retry_interval": 0,
"downlink_delay_rand_s": 0,
"individual_fragment_retransmit": 0,
"multicast_setup_time": 0,
"scheduled_start_at": "2006-01-02T15:04:05.000Z",
"mcast_devaddr": "string",
"mcast_mc_key": "string",
"is_debug": true,
"is_troubleshooting": true
}
curl -X POST 'https://fuota.machineq.net/api/v3.2/campaigns'
Retrieves statuses for multiple campaigns
Retrieves status information for multiple campaigns in a single request. Returns a dictionary keyed by campaign ID, where each value is an array of [stage, successful_device_count, total_device_count].
Query Parameters
List of campaign IDs to retrieve. Supports comma-separated values in a single query parameter.
Body Parameters
No parameters.
Returns
curl 'https://fuota.machineq.net/api/v3.2/campaigns/bulk-status'
Retrieves a specific campaign
Retrieves the full campaign state for the given campaign ID. Returns 202 while the campaign is still initializing. Debug and troubleshooting information is included only when the respective flags are enabled.
Path Parameters
Unique identifier of the campaign.
Body Parameters
No parameters.
Returns
curl 'https://fuota.machineq.net/api/v3.2/campaigns/{campaign_id}'
Deletes a campaign asynchronously
Deletes the specified campaign asynchronously and stops the update process if it is running. Returns 202 once the deletion is accepted. This operation is irreversible and does not preserve device update history. Use the /halt endpoint first to preserve history before deleting.
Path Parameters
Unique identifier of the campaign.
Body Parameters
No parameters.
Returns
curl -X DELETE 'https://fuota.machineq.net/api/v3.2/campaigns/{campaign_id}'
CampaignTools
Provides campaign lifecycle operations such as restart, halt, and short status retrieval.
- POST/v3.2/campaigns/{campaign_id}/halt
- POST/v3.2/campaigns/{campaign_id}/restart
- GET/v3.2/campaigns/{campaign_id}/short-status
Halt Campaign
Stops the running campaign without deleting its state.
Path Parameters
Unique identifier of the campaign.
Body Parameters
No parameters.
Returns
curl -X POST 'https://fuota.machineq.net/api/v3.2/campaigns/{campaign_id}/halt'
Restarts a campaign for failed devices
Restarts the campaign for devices that failed in a previous attempt. Devices that successfully updated retain their state.
Path Parameters
Unique identifier of the campaign.
Body Parameters
Optional list of gateway IDs to use for the restarted campaign. If omitted or empty, gateways are selected automatically.
Optional multicast setup time in seconds. If not set, original value preserved. Set to 0 or null to use the automatic value.
Optional RFC 3339 timestamp to schedule the campaign restart. Must be in the future.
Optional number of automatic retry attempts for failed devices. If omitted, the previous value is preserved.
Optional fragment redundancy ratio between 0 and 1. If omitted, the previous value is preserved.
Examples
Returns
{
"gateways": [
"string"
],
"multicast_setup_time": 0,
"scheduled_start_at": "2006-01-02T15:04:05.000Z",
"automatic_retry_count": 0,
"redundancy": 0.0
}
curl -X POST 'https://fuota.machineq.net/api/v3.2/campaigns/{campaign_id}/restart'
Retrieves an abbreviated campaign status
Retrieves an abbreviated campaign status showing only the most vital state parameters for each device. Returns 202 if the campaign state is not yet ready.
Path Parameters
Unique identifier of the campaign.
Body Parameters
No parameters.
Returns
curl 'https://fuota.machineq.net/api/v3.2/campaigns/{campaign_id}/short-status'
DeviceGroups
Manages device groups used as targets for firmware update campaigns.
- GET/v3.2/device_groups
- POST/v3.2/device_groups
- PATCH/v3.2/device_groups/keygen/{device_group_id}/add_devices
- GET/v3.2/device_groups/{device_group_id}
- PUT/v3.2/device_groups/{device_group_id}
- PATCH/v3.2/device_groups/{device_group_id}
- DELETE/v3.2/device_groups/{device_group_id}
- PATCH/v3.2/device_groups/{device_group_id}/add_devices
The DeviceGroups object
Attributes
Human-readable label for the device group.
LoRaWAN device class that determines how the FUOTA server sends downlinks. Class A sends all downlinks immediately, queuing them on the network server. Class C sends downlinks one by one, waiting for a response from the device before proceeding to the next step.
List of gateway NodeIDs assigned to this group. Maximum 10. When empty, gateways are automatically selected.
Unique identifier of the device group. 6-character alphanumeric string.
List of DevEUIs belonging to this device group.
{
"name": "string",
"lora_class": "string",
"gateways": [
"string"
],
"device_group_id": "string",
"devices": [
"string"
]
}
Retrieves all device groups
Retrieves a list of all device groups with basic information including ID, name, class, and devices.
Body Parameters
No parameters.
Returns
curl 'https://fuota.machineq.net/api/v3.2/device_groups'
Creates a device group
Creates a device group. The devices field is a list of DevEUIs. Keys for the DevEUIs can be uploaded separately via /key_management.
Gateways may optionally be provided; otherwise the FUOTA server automatically assigns gateways based on the best gateway for the provided devices. A maximum of ten gateway NodeIDs per group is allowed.
lora_class accepts "A" or "C". When omitted or set to null, the FUOTA server automatically determines the LoRaWAN class from the devices in the group. Device groups with mixed device classes are disallowed.
Body Parameters
Human-readable label for the device group.
LoRaWAN device class that determines downlink behavior. A: sends all downlinks immediately, queuing them on the network server. C: sends downlinks one by one, waiting for a device response before proceeding. When omitted or null, automatically determined from the devices in the group.
List of gateway NodeIDs assigned to this group. Maximum 10. When empty, gateways are automatically selected.
List of 16-character hexadecimal DevEUIs to include in the group.
Examples
Returns
{
"name": "string",
"lora_class": "string",
"gateways": [
"string"
],
"devices": [
"string"
]
}
curl -X POST 'https://fuota.machineq.net/api/v3.2/device_groups'
Adds devices to a device group with keygen
Adds devices to an existing device group using automatic key generation. The devices field is a list of DevEUIs. Only the "machineq" keygen_type is currently supported.
Path Parameters
Unique identifier of the device group. 6-character alphanumeric string.
Body Parameters
Supported key generation algorithms for deriving device GenAppKeys during FUOTA.
List of 16-character hexadecimal DevEUIs to add to the group.
Examples
Returns
{
"keygen_type": "string",
"devices": [
"string"
]
}
curl -X PATCH 'https://fuota.machineq.net/api/v3.2/device_groups/keygen/{device_group_id}/add_devices'
Retrieves a device group
Retrieves a single device group by device_group_id.
Path Parameters
Unique identifier of the device group. 6-character alphanumeric string.
Body Parameters
No parameters.
Returns
curl 'https://fuota.machineq.net/api/v3.2/device_groups/{device_group_id}'
Replaces a device group
Replaces the device group identified by device_group_id with the provided data.
Path Parameters
Unique identifier of the device group. 6-character alphanumeric string.
Body Parameters
Human-readable label for the device group.
LoRaWAN device class that determines downlink behavior. A: sends all downlinks immediately, queuing them on the network server. C: sends downlinks one by one, waiting for a device response before proceeding. When omitted or null, automatically determined from the devices in the group.
List of gateway NodeIDs assigned to this group. Maximum 10. When empty, gateways are automatically selected.
List of 16-character hexadecimal DevEUIs to include in the group.
Examples
Returns
{
"name": "string",
"lora_class": "string",
"gateways": [
"string"
],
"devices": [
"string"
]
}
curl -X PUT 'https://fuota.machineq.net/api/v3.2/device_groups/{device_group_id}'
Updates a device group partially
Updates the device group identified by device_group_id with partial data. Only provided fields are modified.
Path Parameters
Unique identifier of the device group. 6-character alphanumeric string.
Body Parameters
Human-readable label for the device group.
LoRaWAN device class that determines downlink behavior. A: sends all downlinks immediately, queuing them on the network server. C: sends downlinks one by one, waiting for a device response before proceeding. When omitted or null, automatically determined from the devices in the group.
List of gateway NodeIDs assigned to this group. Maximum 10. When empty, gateways are automatically selected.
List of 16-character hexadecimal DevEUIs to include in the group.
Examples
Returns
{
"name": "string",
"lora_class": "string",
"gateways": [
"string"
],
"devices": [
"string"
]
}
curl -X PATCH 'https://fuota.machineq.net/api/v3.2/device_groups/{device_group_id}'
Deletes a device group
Deletes the device group identified by device_group_id. Fails if any campaign is still associated with the group; delete the campaign first.
Path Parameters
Unique identifier of the device group. 6-character alphanumeric string.
Body Parameters
No parameters.
Returns
curl -X DELETE 'https://fuota.machineq.net/api/v3.2/device_groups/{device_group_id}'
Adds devices to a device group
Adds devices to an existing device group. The devices field is a list of DevEUIs.
Path Parameters
Unique identifier of the device group. 6-character alphanumeric string.
Body Parameters
List of 16-character hexadecimal DevEUIs to add to the group.
Examples
Returns
{
"devices": [
"string"
]
}
curl -X PATCH 'https://fuota.machineq.net/api/v3.2/device_groups/{device_group_id}/add_devices'
DeviceVersion
Retrieves the latest reported firmware version for one or more devices.
- GET/v3.2/device_version
- GET/v3.2/device_version/all
- GET/v3.2/device_version/{deveui}
The DeviceVersion object
Attributes
Raw firmware version as a hexadecimal string.
Timestamp when the device reported this firmware version, in RFC 3339 format.
Parsed semantic version derived from version_hex (e.g., "1.2.3").
{
"version_hex": "string",
"reported_at": "2006-01-02T15:04:05.000Z",
"firmware_version": "string"
}
Retrieves firmware versions for specified devices
Retrieves the reported firmware version for one or more devices identified by deveuis.
Query Parameters
List of DevEUIs to retrieve firmware versions for. Required. Supports repeated query parameters or a single comma-separated value.
Body Parameters
No parameters.
Returns
curl 'https://fuota.machineq.net/api/v3.2/device_version'
Retrieves firmware versions for all subscriber devices
Retrieves the firmware version of all devices belonging to the authenticated subscriber. Devices that have never reported a version are excluded from the response.
If delegated_subscriber_id is provided, returns only firmware versions for devices delegated by that subscriber. Returns 404 if the subscriber has no delegated devices.
Query Parameters
Subscriber ID of a delegating subscriber. When provided, returns firmware versions only for devices delegated by this subscriber. Returns 404 if no devices are delegated.
Body Parameters
No parameters.
Returns
curl 'https://fuota.machineq.net/api/v3.2/device_version/all'
Retrieves firmware version for a single device
Retrieves the reported firmware version for a single device identified by deveui. Returns 404 if the device has never reported a version.
Path Parameters
DevEUI of the device to retrieve the firmware version for. 16-character hexadecimal string.
Body Parameters
No parameters.
Returns
curl 'https://fuota.machineq.net/api/v3.2/device_version/{deveui}'
UpdateHistory
Retrieves device firmware update history records.
- GET/v3.2/history
- GET/v3.2/history/{deveui}
The UpdateHistory object
Attributes
Timestamp when the history entry was recorded, in RFC 3339 format.
Outcome status of the update attempt (e.g., success, failure, timeout).
Human-readable explanation of the status.
Firmware version of the device before the update. Null if unknown.
Firmware version of the device after the update. Null if the device did not report a new version.
Target firmware version the update was intended to install.
Identifier of the campaign that triggered the update. Null if not associated with a campaign.
{
"entry_date": "2006-01-02T15:04:05.000Z",
"status": "string",
"reason": "string",
"initial_version": "string",
"post_update_version": "string",
"expected_version": "string",
"campaign_id": "string"
}
Retrieves update history for all devices
Retrieves the firmware update history for every device belonging to the authenticated subscriber.
Body Parameters
No parameters.
Returns
curl 'https://fuota.machineq.net/api/v3.2/history'
Retrieves update history for a single device
Retrieves the firmware update history for a single device identified by deveui.
Path Parameters
16-character hexadecimal DevEUI identifying the device.
Body Parameters
No parameters.
Returns
curl 'https://fuota.machineq.net/api/v3.2/history/{deveui}'
FirmwareImages
Handles firmware image uploads, listings, and metadata.
- GET/v3.2/images
- POST/v3.2/images
- GET/v3.2/images/tags
- GET/v3.2/images/tags/{image_name}
- PUT/v3.2/images/tags/{image_name}
- DELETE/v3.2/images/tags/{image_name}
- PATCH/v3.2/images/tags/{image_name}/add
- PATCH/v3.2/images/tags/{image_name}/remove
- DELETE/v3.2/images/{image_id}
The FirmwareImages object
Attributes
Filename of the firmware image.
Hex-encoded hash of the firmware image contents.
List of tags associated with the firmware image.
{
"name": "string",
"hash": "string",
"tags": [
"string"
]
}
Lists all firmware images with metadata
Retrieves all available firmware images with their metadata, including name, hash, and tags, for the subscriber.
Body Parameters
No parameters.
Returns
curl 'https://fuota.machineq.net/api/v3.2/images'
Uploads a firmware image with tags
Creates a new firmware image by uploading a binary file with optional tags. Allowed extensions: .bin, .hex, .sfb.
Body Parameters
Binary firmware image file to upload. Allowed extensions: .bin, .hex, .sfb.
One or more tags to associate with the uploaded image. Defaults to an empty list if omitted.
Returns
curl -X POST 'https://fuota.machineq.net/api/v3.2/images'
Lists all tags
Retrieves a sorted list of all unique tags across all firmware images for the subscriber.
Body Parameters
No parameters.
Returns
curl 'https://fuota.machineq.net/api/v3.2/images/tags'
Lists tags for an image
Retrieves a sorted list of tags associated with the specified firmware image.
Path Parameters
Filename of the firmware image.
Body Parameters
No parameters.
Returns
curl 'https://fuota.machineq.net/api/v3.2/images/tags/{image_name}'
Replaces tags for an image
Replaces the entire tag list for the specified firmware image with the provided tags. Returns the updated sorted tag list.
Path Parameters
Filename of the firmware image.
Body Parameters
Alphanumeric label used to categorize a firmware image.
Returns
"string"
curl -X PUT 'https://fuota.machineq.net/api/v3.2/images/tags/{image_name}'
Deletes all tags from an image
Deletes all tags associated with the specified firmware image.
Path Parameters
Filename of the firmware image.
Body Parameters
No parameters.
Returns
curl -X DELETE 'https://fuota.machineq.net/api/v3.2/images/tags/{image_name}'
Adds tags to an image
Creates one or more new tag associations on the specified firmware image. Returns the updated sorted tag list.
Path Parameters
Filename of the firmware image.
Body Parameters
Alphanumeric label used to categorize a firmware image.
Returns
"string"
curl -X PATCH 'https://fuota.machineq.net/api/v3.2/images/tags/{image_name}/add'
Removes tags from an image
Removes one or more tags from the specified firmware image. Tags are not validated, allowing removal of previously valid tags that may no longer pass validation. Returns the updated sorted tag list.
Path Parameters
Filename of the firmware image.
Body Parameters
Returns
"string"
curl -X PATCH 'https://fuota.machineq.net/api/v3.2/images/tags/{image_name}/remove'
Deletes a firmware image
Deletes the specified firmware image. Fails with 409 if the image is currently used by any campaign.
Path Parameters
Filename of the firmware image to delete.
Body Parameters
No parameters.
Returns
curl -X DELETE 'https://fuota.machineq.net/api/v3.2/images/{image_id}'
KeyManagement
Manages device encryption keys used during firmware updates.
- POST/v3.2/key_management
- DELETE/v3.2/key_management
Uploads multicast keys for devices
Stores multicast keys to make them available to the FUOTA server when campaigns are created and/or managed by the server. If using MachineQ MQmonitor, MQflex, or MQio devices, there is no need to upload keys.
Body Parameters
Mapping of DevEUIs to multicast key values used for firmware update encryption.
Examples
Returns
{
"string": "string"
}
curl -X POST 'https://fuota.machineq.net/api/v3.2/key_management'
Deletes multicast keys for devices
Deletes multicast keys from the FUOTA server for the provided devices.
Body Parameters
List of 16-character hexadecimal DevEUI strings identifying the devices whose multicast keys should be removed.
Returns
[
"string"
]
curl -X DELETE 'https://fuota.machineq.net/api/v3.2/key_management'
ManagedCampaigns
Manages long-running managed campaigns that automatically discover and update devices.
- GET/v3.2/managed_campaigns
- POST/v3.2/managed_campaigns
- POST/v3.2/managed_campaigns/upload_multicast_keysDeprecated
- GET/v3.2/managed_campaigns/{managed_campaign_id}
- DELETE/v3.2/managed_campaigns/{managed_campaign_id}
- POST/v3.2/managed_campaigns/{managed_campaign_id}/halt
- GET/v3.2/managed_campaigns/{managed_campaign_id}/problematic_devices
- DELETE/v3.2/managed_campaigns/{managed_campaign_id}/problematic_devices
The ManagedCampaigns object
Attributes
Human-readable label for the managed campaign.
List of 16-character hexadecimal version-mask patterns where '.' matches any hex digit. Devices whose firmware version matches any pattern are eligible for update.
List of 16-character hexadecimal version-mask patterns. Devices whose firmware version matches any pattern are excluded from the campaign. Takes priority over include_versions.
Name of a firmware image previously uploaded via the /images endpoint.
16-character hexadecimal version-mask pattern that devices are expected to report after a successful update. If omitted, the server attempts to infer it from semantic versioning in image_name.
UTC time of day (HH:MM) when new child campaigns should be created. Only hours and minutes are used; seconds and below are ignored
When true, the managed campaign transitions to its finished state once no new matching devices are discovered. When false, the campaign continues running until run_until.
RFC 3339 datetime after which no new child campaigns are created. Defaults to seven days from creation when omitted.
List of gateway identifiers used to monitor for devices. Currently only a single gateway is supported.
Reserved for future use. Must be false; setting to true returns a 400 error.
Unique identifier assigned to the managed campaign at creation.
RFC 3339 datetime of the next scheduled child-campaign creation.
Map of DevEUI to firmware-version information for devices scheduled in the next child campaign.
Managed campaign stages:
- INITIALIZING (0): managed campaign was created but the state was not initialized yet
- GATHERING_DEVICES (1): the server is gathering a list of devices while waiting for the next start time, and a campaign may or may not be running with previously-discovered devices
- RUNNING_LAST_CAMPAIGN (3): no more devices will be gathered, waiting for the last campaign to be launched to finish
- FINISHED (7): The last campaign has finished running
- CLEANED (8): Finished and all campaigns (7+ days old at this point) have been deleted, this is the final state for a managed campaign
- ERROR_SETTING_UP (9): managed campaign failed to set up
The managed campaign is complete when the stage is CLEANED or ERROR_SETTING_UP.
RFC 3339 datetime when the managed campaign was created.
Map of DevEUI to firmware-version information for devices that have been successfully updated.
Human-readable name of the current managed campaign stage.
{
"name": "string",
"include_versions": [
"string"
],
"exclude_versions": [
"string"
],
"image_name": "string",
"expected_version": "string",
"preferred_start_time_utc": "string",
"stop_when_no_match": true,
"run_until": "2006-01-02T15:04:05.000Z",
"gateways": [
"string"
],
"whole_subscriber": true,
"managed_campaign_id": "string",
"next_update_session_time": "2006-01-02T15:04:05.000Z",
"scheduled_devices": {
"string": {
"version_hex": "string",
"reported_at": "2006-01-02T15:04:05.000Z"
}
},
"stage": 0,
"started_at": "2006-01-02T15:04:05.000Z",
"updated_devices": {
"string": {
"version_hex": "string",
"reported_at": "2006-01-02T15:04:05.000Z"
}
},
"stage_str": "string"
}
Retrieves all managed campaigns
Retrieves all managed campaigns for the authenticated subscriber.
Body Parameters
No parameters.
Returns
curl 'https://fuota.machineq.net/api/v3.2/managed_campaigns'
Creates a new managed campaign
Creates a managed campaign that automatically updates devices matching the specified firmware version patterns.
Most parameters have sensible defaults; only include_versions, image_name, and gateways are typically required.
The server infers expected_version from the semantic version in image_name when it is not provided.
Currently only a single gateway is supported.
-
include_versions- A list of 16-character hex patterns, where '.' indicates any value. The managed campaign will attempt to load the image onto any device seen by the gateway whose hexadecimal firmware version matches any of theinclude_versionspatterns. -
exclude_versions- A list in the same format asinclude_versions, but with the opposite effect: any device whose firmware version matches any of theexclude_versionspatterns.This takes priority over
include_versions, so a device that matched a pattern in both would be excluded from the managed campaign.
Body Parameters
Human-readable label for the managed campaign.
List of 16-character hexadecimal version-mask patterns where '.' matches any hex digit. Devices whose firmware version matches any pattern are eligible for update.
List of 16-character hexadecimal version-mask patterns. Devices whose firmware version matches any pattern are excluded from the campaign. Takes priority over include_versions.
Name of a firmware image previously uploaded via the /images endpoint.
16-character hexadecimal version-mask pattern that devices are expected to report after a successful update. If omitted, the server attempts to infer it from semantic versioning in image_name.
UTC time of day (HH:MM) when new child campaigns should be created. Only hours and minutes are used; seconds and below are ignored
When true, the managed campaign transitions to its finished state once no new matching devices are discovered. When false, the campaign continues running until run_until.
RFC 3339 datetime after which no new child campaigns are created. Defaults to seven days from creation when omitted.
List of gateway identifiers used to monitor for devices. Currently only a single gateway is supported.
Reserved for future use. Must be false; setting to true returns a 400 error.
Examples
Returns
{
"name": "string",
"include_versions": [
"string"
],
"exclude_versions": [
"string"
],
"image_name": "string",
"expected_version": "string",
"preferred_start_time_utc": "string",
"stop_when_no_match": true,
"run_until": "2006-01-02T15:04:05.000Z",
"gateways": [
"string"
],
"whole_subscriber": true
}
curl -X POST 'https://fuota.machineq.net/api/v3.2/managed_campaigns'
Uploads multicast keys for managed campaigns Deprecated
Stores multicast keys to make them available to managed campaigns. Devices without known keys cannot be included in a managed campaign. Deprecated in favor of /api/latest/key_management.
Body Parameters
Mapping of DevEUIs to multicast key values used for firmware update encryption.
Examples
Returns
{
"string": "string"
}
curl -X POST 'https://fuota.machineq.net/api/v3.2/managed_campaigns/upload_multicast_keys'
Retrieves a single managed campaign
Retrieves a managed campaign by managed_campaign_id, including devices that have been updated and devices scheduled for the next child campaign.
Path Parameters
Unique identifier of the managed campaign.
Body Parameters
No parameters.
Returns
curl 'https://fuota.machineq.net/api/v3.2/managed_campaigns/{managed_campaign_id}'
Deletes a managed campaign
Deletes a managed campaign identified by managed_campaign_id. The managed campaign must be in the FINISHED, CLEANED, or ERROR_SETTING_UP stage before it can be deleted.
Path Parameters
Unique identifier of the managed campaign.
Body Parameters
No parameters.
Returns
curl -X DELETE 'https://fuota.machineq.net/api/v3.2/managed_campaigns/{managed_campaign_id}'
Halts a managed campaign
Halts a managed campaign by managed_campaign_id, stopping any currently-running child campaign. Once halted, the managed campaign transitions into a completed state.
Path Parameters
Unique identifier of the managed campaign.
Body Parameters
No parameters.
Returns
curl -X POST 'https://fuota.machineq.net/api/v3.2/managed_campaigns/{managed_campaign_id}/halt'
Retrieves problematic devices for a managed campaign
Retrieves problematic devices for the managed campaign identified by managed_campaign_id. Problematic devices are those that have failed in two or more child campaigns.
Path Parameters
Unique identifier of the managed campaign.
Body Parameters
No parameters.
Returns
curl 'https://fuota.machineq.net/api/v3.2/managed_campaigns/{managed_campaign_id}/problematic_devices'
Clears the problematic devices list
Clears the problematic devices list for the managed campaign identified by managed_campaign_id. Future child campaigns will no longer exclude previously problematic devices.
Path Parameters
Unique identifier of the managed campaign.
Body Parameters
No parameters.
Returns
curl -X DELETE 'https://fuota.machineq.net/api/v3.2/managed_campaigns/{managed_campaign_id}/problematic_devices'
ReliableDownlink
Sends reliable downlinks to devices with confirmation and retry logic.
- GET/v3.2/reliable_downlinks
- POST/v3.2/reliable_downlinks
- GET/v3.2/reliable_downlinks/{job_id}
- DELETE/v3.2/reliable_downlinks/{job_id}
- PUT/v3.2/reliable_downlinks/{job_id}/restart
- PUT/v3.2/reliable_downlinks/{job_id}/stop
The ReliableDownlink object
Attributes
Human-readable label for the reliable downlink job.
Hexadecimal-encoded payload to send to the devices.
LoRaWAN FPort number for the downlink message.
Hexadecimal-encoded payload expected as the device response to the downlink.
LoRaWAN FPort number on which the expected uplink response arrives
Optional list of unique DevEUIs to target. At least one of devices or device_group_id must be provided.
Optional identifier of a device group whose members are targeted. At least one of devices or device_group_id must be provided.
Maximum number of retry attempts per device before marking it as failed.
Delay in seconds between downlink retry attempts per device.
Server-assigned unique identifier for the reliable downlink job.
Timestamp when the job was created, in RFC 3339 format.
List of DevEUIs that responded with the expected uplink. Null when no devices have succeeded yet.
List of DevEUIs that exhausted all retry attempts without the expected response. Null when no devices have failed yet.
Total number of devices targeted by the job. Null if the count is unavailable.
Number of devices that responded successfully. Null if the count is unavailable.
Number of devices that failed after all retry attempts. Null if the count is unavailable.
{
"name": "string",
"downlink_hex": "string",
"downlink_fport": 0,
"expected_uplink_hex": "string",
"expected_uplink_fport": 0,
"devices": [
"string"
],
"device_group_id": "string",
"max_retries": 0,
"retry_interval": 0,
"job_id": "string",
"created_at": "2006-01-02T15:04:05.000Z",
"successful_devices": [
"string"
],
"failed_devices": [
"string"
],
"device_count": 0,
"successful_count": 0,
"failed_count": 0
}
Lists all reliable downlink jobs with status
Retrieves all reliable downlink jobs for the authenticated subscriber, including device completion statuses.
Body Parameters
No parameters.
Returns
curl 'https://fuota.machineq.net/api/v3.2/reliable_downlinks'
Creates a reliable downlink job
Creates a reliable downlink job that sends the specified payload and waits for an expected device response. Retries automatically at the configured interval until the maximum retry count is reached. Accepts either a list of devices, a device_group_id, or both.
Body Parameters
Human-readable label for the reliable downlink job.
Hexadecimal-encoded payload to send to the devices.
LoRaWAN FPort number for the downlink message.
Hexadecimal-encoded payload expected as the device response to the downlink.
LoRaWAN FPort number on which the expected uplink response arrives
Optional list of unique DevEUIs to target. At least one of devices or device_group_id must be provided.
Optional identifier of a device group whose members are targeted. At least one of devices or device_group_id must be provided.
Maximum number of retry attempts per device before marking it as failed.
Delay in seconds between downlink retry attempts per device.
Examples
Returns
{
"name": "string",
"downlink_hex": "string",
"downlink_fport": 0,
"expected_uplink_hex": "string",
"expected_uplink_fport": 0,
"devices": [
"string"
],
"device_group_id": "string",
"max_retries": 0,
"retry_interval": 0
}
curl -X POST 'https://fuota.machineq.net/api/v3.2/reliable_downlinks'
Retrieves a reliable downlink job status
Retrieves the current status of a reliable downlink job identified by job_id, including device success and failure counts.
Path Parameters
Body Parameters
No parameters.
Returns
curl 'https://fuota.machineq.net/api/v3.2/reliable_downlinks/{job_id}'
Deletes a reliable downlink job
Deletes the reliable downlink job identified by job_id. Stops all pending device downlink attempts, clears queued downlinks, and removes the job and its associated device states.
Path Parameters
Body Parameters
No parameters.
Returns
curl -X DELETE 'https://fuota.machineq.net/api/v3.2/reliable_downlinks/{job_id}'
Restarts a reliable downlink job
Restarts the reliable downlink job identified by job_id by re-sending the downlink to all previously failed devices. Fails if any devices are still actively being processed or if all devices already succeeded.
Path Parameters
Body Parameters
No parameters.
Returns
curl -X PUT 'https://fuota.machineq.net/api/v3.2/reliable_downlinks/{job_id}/restart'
Stops a reliable downlink job
Stops the reliable downlink job identified by job_id. Halts all pending device downlink attempts and transitions pending devices to the failed state. Devices that already succeeded remain successful. Even if a downlink was already queued and delivered, the device response is ignored after stopping.
Path Parameters
Body Parameters
No parameters.
Returns
curl -X PUT 'https://fuota.machineq.net/api/v3.2/reliable_downlinks/{job_id}/stop'
UpgradeDelegation
Manages upgrade delegations that allow one subscriber to update another subscriber's devices.
- GET/v3.2/upgrade_delegation
- POST/v3.2/upgrade_delegation
- GET/v3.2/upgrade_delegation/{delegation_id}
- PATCH/v3.2/upgrade_delegation/{delegation_id}
- DELETE/v3.2/upgrade_delegation/{delegation_id}
The UpgradeDelegation object
Attributes
Subscriber ID of the party receiving upgrade management permissions.
RFC 3339 timestamp indicating when the delegation expires. Requests after this time are rejected.
List of DevEUI patterns identifying devices included in the delegation.
List of DevEUI patterns identifying devices excluded from the delegation.
List of DevEUI patterns identifying gateways included in the delegation. Currently ignored; reserved for future use.
List of DevEUI patterns identifying gateways excluded from the delegation. Currently ignored; reserved for future use.
Server-assigned unique identifier for the delegation record.
Subscriber ID of the party that created the delegation.
RFC 3339 timestamp indicating when the delegation record was created.
{
"delegate_to": "string",
"expires_at": "2006-01-02T15:04:05.000Z",
"include_devices": [
"string"
],
"exclude_devices": [
"string"
],
"include_gateways": [
"string"
],
"exclude_gateways": [
"string"
],
"delegation_id": "string",
"delegate_from": "string",
"created_at": "2006-01-02T15:04:05.000Z"
}
Retrieves all upgrade delegation records
Retrieves all upgrade delegation records for the current subscriber. Includes records where the subscriber is delegating upgrades to another party and records where the subscriber is receiving delegated upgrades.
Body Parameters
No parameters.
Returns
curl 'https://fuota.machineq.net/api/v3.2/upgrade_delegation'
Creates an upgrade delegation record
Creates a new upgrade delegation record that grants another subscriber permission to manage device upgrades.
Check out the documentation about upgrade delegation.
Note: currently the API does not support gateway delegation, only device delegation. The fields include_gateways and exclude_gateways are ignored for now. Later patches will add support for gateway delegation.
Body Parameters
Subscriber ID of the party receiving upgrade management permissions.
RFC 3339 timestamp indicating when the delegation expires. Requests after this time are rejected.
List of DevEUI patterns identifying devices included in the delegation.
List of DevEUI patterns identifying devices excluded from the delegation.
List of DevEUI patterns identifying gateways included in the delegation. Currently ignored; reserved for future use.
List of DevEUI patterns identifying gateways excluded from the delegation. Currently ignored; reserved for future use.
Examples
Returns
{
"delegate_to": "string",
"expires_at": "string",
"include_devices": [
"string"
],
"exclude_devices": [
"string"
],
"include_gateways": [
"string"
],
"exclude_gateways": [
"string"
]
}
curl -X POST 'https://fuota.machineq.net/api/v3.2/upgrade_delegation'
Retrieves a single upgrade delegation record
Retrieves a single upgrade delegation record by delegation_id. Returns the record regardless of whether the current subscriber is the delegator or the delegatee.
Path Parameters
Unique identifier of the delegation record to retrieve.
Body Parameters
No parameters.
Returns
curl 'https://fuota.machineq.net/api/v3.2/upgrade_delegation/{delegation_id}'
Updates an upgrade delegation record
Updates an existing upgrade delegation record with a partial patch. Only the subscriber that created the record can update it. Only supplied fields are modified; omitted fields remain unchanged.
Path Parameters
Unique identifier of the delegation record to update.
Body Parameters
Replacement list of DevEUI patterns identifying devices included in the delegation.
Replacement list of DevEUI patterns identifying devices excluded from the delegation.
RFC 3339 timestamp indicating the new expiration time. Null leaves the current value unchanged.
Replacement list of DevEUI patterns identifying gateways included in the delegation. Currently ignored; reserved for future use.
Replacement list of DevEUI patterns identifying gateways excluded from the delegation. Currently ignored; reserved for future use.
Examples
Returns
{
"include_devices": [
"string"
],
"exclude_devices": [
"string"
],
"expires_at": "2006-01-02T15:04:05.000Z",
"include_gateways": [
"string"
],
"exclude_gateways": [
"string"
]
}
curl -X PATCH 'https://fuota.machineq.net/api/v3.2/upgrade_delegation/{delegation_id}'
Deletes an upgrade delegation record
Deletes an upgrade delegation record. Only the subscriber that created the record can delete it.
Path Parameters
Unique identifier of the delegation record to delete.
Body Parameters
No parameters.
Returns
curl -X DELETE 'https://fuota.machineq.net/api/v3.2/upgrade_delegation/{delegation_id}'