Files
BetterDesk/docs/features/MESH_REST_AUTOMATION.md
UNITRONIX 28893f8117 fix(mesh): emit stable 96-hex MeshID in download.msh (Fixes #336)
Replace the hardcoded 40-char MeshID placeholder with a persisted per-group SHA-384 id so MeshAgent no longer fails with bad size on panel-downloaded .msh files.
2026-07-31 22:11:55 +02:00

43 lines
2.1 KiB
Markdown

# MeshCentral REST automation (BetterDesk)
BetterDesk operators and scripts should use the **native REST API** instead of meshctrl against a MeshCentral server.
## Device operations
| Action | Endpoint | Body |
|--------|----------|------|
| Run command | `POST /api/peers/{id}/exec` | `{"command":"whoami","shell":true}` |
| Mesh-only exec | `POST /api/mesh/devices/{id}/exec` | same |
| Power wake/sleep/off/reset | `POST /api/mesh/devices/{id}/power` | `{"action":"wake","mac":"optional"}` |
| Guest desktop link | `POST /api/mesh/devices/{id}/share` | `{"ttl_minutes":60,"view_only":true}` |
| TCP port relay tunnel | `POST /api/mesh/devices/{id}/tcp` | `{"host":"127.0.0.1","port":3389}` |
| UDP port relay tunnel | `POST /api/mesh/devices/{id}/udp` | `{"host":"127.0.0.1","port":53}` |
| Assign mesh group | `POST /api/mesh/devices/{id}/group` | `{"group_id":"default"}` |
## Inventory and settings
| Action | Endpoint |
|--------|----------|
| Mesh status | `GET /api/mesh/status` |
| Server ID | `GET /api/mesh/server-id` |
| Mesh groups | `GET/POST /api/mesh/groups` |
| Download `.msh` | `GET /api/mesh/download.msh?name=BetterDesk%20Mesh` (optional `&mesh_id=` 64/96 hex; default = stable group MeshID) |
| Session recordings | `GET /api/session/recordings` |
| Download mesh recording | `GET /api/mesh/recordings/{filename}` |
## Authentication
Use panel session cookies, API keys, or JWT as for other BetterDesk REST endpoints. Mesh `.ashx` WebSockets (`/agent.ashx`, `/meshrelay.ashx`, `/control.ashx`) are proxied from the panel HTTPS listener.
## Wake on LAN
When a `mesh_agent` is offline, `POST /api/mesh/devices/{id}/power` with `{"action":"wake"}` attempts Wake-on-LAN using:
1. Optional `mac` in the request body
2. MAC parsed from mesh agent telemetry (`mesh_last_msg_*`)
3. MAC from the linked RustDesk/CDAP peer (`linked_peer_id`)
## Recording
Server-side mesh KVM capture: open web remote with mesh transport and toggle **Record** (sets `record=1` on the desktop tunnel), or pass `?record=1` when opening remote. Files are stored under `{data_dir}/mesh-recordings/*.mcrec`.