Relayer logoRelayer
Push mode

Plan an update wave

One decision per device, using the exact same rollout logic as `GET /u/`: version comparison, sticky staged-rollout cohorts with fall-through, artifact matching and channel policy. Up to 500 devices per call, one rate-limit hit. `dryRun: true` plans without writing telemetry (no device upserts, no check-ins).

POST
/api/v1/fleet/decisions

One decision per device, using the exact same rollout logic as GET /u/: version comparison, sticky staged-rollout cohorts with fall-through, artifact matching and channel policy. Up to 500 devices per call, one rate-limit hit.

dryRun: true plans without writing telemetry (no device upserts, no check-ins).

Authorization

bearerAuth
AuthorizationBearer <token>

Mint keys from the dashboard (API keys). Shown once, stored hashed.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

app*string
channel?string
Default"stable"
dryRun?boolean
Defaultfalse
devices*array<>
Items1 <= items <= 500

Response Body

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/fleet/decisions" \  -H "Content-Type: application/json" \  -d '{    "app": "qsxsicotpbmtf8ag",    "channel": "stable",    "devices": [      {        "deviceId": "router-0042",        "version": "1.4.0",        "platform": "linux",        "arch": "aarch64"      }    ]  }'
{  "app": "string",  "channel": "string",  "decisions": [    {      "deviceId": "string",      "update": {        "version": "string",        "notes": "string",        "pub_date": "2019-08-24T14:15:22Z",        "url": "http://example.com",        "sha512": "string",        "signature": "string",        "size": 0,        "updateMode": "optional",        "minimumSupportedVersion": "string"      }    }  ],  "updatesOffered": 0}
{  "error": "Unknown app"}
{  "error": "Unknown app"}
{  "error": "Unknown app"}