Browse documentation

Operations

Tunnel and device actions return immediately. Use operations to learn when the requested work finishes.

Operation lifecycle

StatusMeaning
queuedThe action was accepted.
claimedThe target device received it.
runningThe device started execution.
succeededThe action completed successfully.
failedExecution failed; inspect error.
expiredThe action was not completed in time.
canceledAuthorization changed before completion.

List operations

GET/operationsoperations:read

Returns operations newest first. Accepts limit from 1 to 100 and an opaque cursor.

Get an operation

GET/operations/{operation_id}operations:read

Poll this endpoint until status is terminal: succeeded, failed, expired or canceled.

Response
{
  "data": {
    "id": "OPERATION_ID",
    "status": "succeeded",
    "action": "start",
    "device_id": "DEVICE_ID",
    "tunnel_id": "TUNNEL_ID",
    "result": {"running": true},
    "error": null,
    "created_at": "2026-09-09T18:00:00+00:00",
    "finished_at": "2026-09-09T18:00:03+00:00"
  },
  "meta": {"request_id":"..."}
}

Polling

Start with a short delay and back off between requests. For event-driven automation, subscribe to command.* webhooks instead.