Skip to content

HTTPS Integration

This page describes how to integrate a device with EMQX Fleets using HTTPS only (the ThingDatas API). Use this path for devices that only need to upload data and can poll for desired state, without maintaining a persistent MQTT connection.

Limitation

HTTPS-only devices cannot receive real-time commands or job notifications. Inbound messages from Fleets (shadow desired state, commands, job dispatch) are delivered via MQTT. If your device needs to receive these, use MQTT Integration instead or in combination.

Prerequisites

  • The device is registered as a Thing in your Fleets deployment.
  • A Deployment API Key with permission to access /api/v1/thing-datas. See Manage API Keys.

Authentication

All ThingDatas API requests require Basic Auth using a Deployment API Key:

text
Authorization: Basic <base64(apiKey:apiSecret)>

Example:

bash
AUTH="Basic $(printf '%s:%s' 'ak_yourApiKey' 'your-api-secret' | base64)"

Report Shadow State

Report the device's current state:

text
POST /api/v1/thing-datas/shadow/reported
bash
curl -X POST https://{fleets-host}/api/v1/thing-datas/shadow/reported \
  -H "Content-Type: application/json" \
  -H "Authorization: $AUTH" \
  -d '{
    "thingName": "thermostat-001",
    "state": {
      "reported": {
        "temperature": 21.5,
        "humidity": 58
      }
    },
    "clientToken": "tok-001",
    "version": 0
  }'
  • clientToken: Optional. Echoed back in the response for correlation.
  • version: Optional. Shadow version for optimistic locking. Set to 0 to auto-increment.

The reported state is stored in GreptimeDB (history) and PostgreSQL (latest). Fleets recomputes the shadow delta after each report.

Read the Current Shadow

Fetch the device's current shadow on startup or to check for pending desired state:

text
GET /api/v1/thing-datas/{thingName}/shadow
bash
curl https://{fleets-host}/api/v1/thing-datas/thermostat-001/shadow \
  -H "Authorization: $AUTH"

Response:

json
{
  "reported": { "temperature": 21.5 },
  "desired": { "targetTemperature": 24 },
  "delta": { "targetTemperature": 24 },
  "version": 5,
  "updatedAt": "2026-05-27T10:05:00Z"
}

If delta is non-empty, apply the desired values and report the updated state.

Publish Events

Report a device event:

text
POST /api/v1/thing-datas/events
bash
curl -X POST https://{fleets-host}/api/v1/thing-datas/events \
  -H "Content-Type: application/json" \
  -H "Authorization: $AUTH" \
  -d '{
    "thingName": "thermostat-001",
    "eventType": "highTemperature",
    "severity": "warn",
    "timestamp": 1748390400000,
    "data": { "currentTemp": 45.2 }
  }'
  • timestamp: Unix milliseconds. Required.
  • severity: info, warn, or error. Optional.
  • appId: Optional. Application identifier for multi-app deployments.

Submit a Command Response

If a command was received over MQTT, submit the response over HTTPS:

text
POST /api/v1/thing-datas/command/response
bash
curl -X POST https://{fleets-host}/api/v1/thing-datas/command/response \
  -H "Content-Type: application/json" \
  -H "Authorization: $AUTH" \
  -d '{
    "thingName": "thermostat-001",
    "executionId": "8d88790c-9171-4526-8637-e6d6168bce22",
    "status": "SUCCEEDED",
    "result": { "currentTemperature": 24 },
    "timestamp": 1748390405
  }'

Jobs via HTTPS

Devices can participate in the jobs protocol over HTTPS by polling and reporting status synchronously.

Request Pending Jobs

text
POST /api/v1/thing-datas/jobs/get
bash
curl -X POST https://{fleets-host}/api/v1/thing-datas/jobs/get \
  -H "Content-Type: application/json" \
  -H "Authorization: $AUTH" \
  -d '{"thingName": "thermostat-001", "clientToken": "req-1"}'

Start the Next Pending Job

text
POST /api/v1/thing-datas/jobs/start-next

Report Job Execution Status

text
POST /api/v1/thing-datas/jobs/{jobId}/update
bash
curl -X POST https://{fleets-host}/api/v1/thing-datas/jobs/{jobId}/update \
  -H "Content-Type: application/json" \
  -H "Authorization: $AUTH" \
  -d '{
    "thingName": "thermostat-001",
    "status": "SUCCEEDED",
    "statusDetails": { "installedVersion": "2.0.0" },
    "expectedVersion": 1,
    "clientToken": "req-3"
  }'

ThingDatas API Reference

EndpointMethodPurpose
/api/v1/thing-datas/shadow/reportedPOSTReport shadow state
/api/v1/thing-datas/{thingName}/shadowGETRead current shadow
/api/v1/thing-datas/eventsPOSTPublish an event
/api/v1/thing-datas/command/responsePOSTSubmit a command response
/api/v1/thing-datas/jobs/getPOSTRequest pending jobs
/api/v1/thing-datas/jobs/start-nextPOSTStart next pending job
/api/v1/thing-datas/jobs/{jobId}/getPOSTGet a specific job execution
/api/v1/thing-datas/jobs/{jobId}/updatePOSTReport job execution status

Next Steps