Skip to content
openlaunch
Esc
↑↓navigate↵open⌘Jpreview

Request device action

Requires action scope for OAuth callers and a current per-device capability grant. Idempotency key is 1–128 characters; TTL defaults to 30 seconds and is at most 300 seconds. Duplicate retries with the same key and identical request return the existing receipt; key reuse with a different request conflicts. Physical execution is not exactly once.

POST/v1/devices/{deviceId}/actions
Authorization
AuthorizationBearer token (Clerk owner session) · headerrequired

Owner identity required.

or
AuthorizationBearer token (ol_agent token) · headerrequired

Owner-issued agent API connection; access ceiling and live device grants are checked separately.

or
AuthorizationBearer token (OAuth access token) · headerrequired

OAuth read/act scope is a ceiling. Scopes do not create device grants.

Path parameters
deviceIdstring<uuid>required
Request body
requiredapplication/json
capabilitystringrequired
min length 1 · max length 64 · matches ^[a-z][a-z0-9_]*(?:\.[a-z][a-z0-9_]*)*$
argumentsobjectrequired
idempotencyKeystringrequired
min length 1 · max length 128
ttlSecondsinteger
min 1 · max 300 · default: 30
Responses
202

Accepted into queue

dataActionReceiptrequired
Show properties
idstring<uuid>required
deviceIdstring<uuid>required
capabilitystringrequired
argsobjectrequired
statusstringrequired
Allowed:queuedreceivedsucceededfailedexpiredcancelledunknown
createdAtintegerrequired
expiresAtintegerrequired
dispatchedAtinteger
resultany
clientKeystringrequired

Internal idempotency key stored in the action ledger; included by request/get/result handler responses.

fingerprintstringrequired

Internal canonical request fingerprint; included by request/get/result and action history responses.

principalIdstringrequired

Principal identifier associated with the action.

ownerAuthorizedbooleanrequired

Whether the action was directly authorized by an owner.

400

Invalid request or validation failure

errorobjectrequired
Show properties
codestringrequired
messagestring
issuesobject[]
Show properties
Array of object
pathstring
messagestring
401

Missing or invalid credential

errorobjectrequired
Show properties
codestringrequired
messagestring
issuesobject[]
Show properties
Array of object
pathstring
messagestring
403

Insufficient access or grant

errorobjectrequired
Show properties
codestringrequired
messagestring
issuesobject[]
Show properties
Array of object
pathstring
messagestring
404

Resource not found

errorobjectrequired
Show properties
codestringrequired
messagestring
issuesobject[]
Show properties
Array of object
pathstring
messagestring
409

Idempotency key conflict, device offline, or action cannot proceed

errorobjectrequired
Show properties
codestringrequired
messagestring
issuesobject[]
Show properties
Array of object
pathstring
messagestring
413

Request body exceeds the 16 KiB limit

errorobjectrequired
Show properties
codestringrequired
messagestring
issuesobject[]
Show properties
Array of object
pathstring
messagestring
429

Rate limit or workspace capacity limit

errorobjectrequired
Show properties
codestringrequired
messagestring
issuesobject[]
Show properties
Array of object
pathstring
messagestring
500

Internal error

errorobjectrequired
Show properties
codestringrequired
messagestring
issuesobject[]
Show properties
Array of object
pathstring
messagestring
503

Service or required integration is not configured

errorobjectrequired
Show properties
codestringrequired
messagestring
issuesobject[]
Show properties
Array of object
pathstring
messagestring
Try it
Server
Authorization
Parameters
Bodyapplication/json
Request
ol call "$DEVICE_ID" device.health '{}' --key health-001
Response
{
  "data": {
    "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    "deviceId": "4de4adb9-21ee-47e3-aeb4-8cf8ed6c109a",
    "capability": "string",
    "args": {},
    "status": "queued",
    "createdAt": 0,
    "expiresAt": 0,
    "dispatchedAt": 0,
    "result": null,
    "clientKey": "string",
    "fingerprint": "string",
    "principalId": "string",
    "ownerAuthorized": true
  }
}