RMM: scheduled tasks
Tasks run one or more scripts on a schedule (every N hours, daily, weekly, a day of the month, or the Nth weekday of the month) on the devices they're assigned to. Each run records a result per device and per step.
| Method | Path | Summary |
|---|---|---|
| GET | /v1/admin/rmm/tasks | List scheduled tasks |
| GET | /v1/admin/rmm/tasks/:id | Get a task with its steps and assignments |
| POST | /v1/admin/rmm/tasks | Create a scheduled task |
| PUT | /v1/admin/rmm/tasks/:id | Update a scheduled task |
| POST | /v1/admin/rmm/tasks/:id/toggle | Turn a task on or off |
| DELETE | /v1/admin/rmm/tasks/:id | Delete a task |
| POST | /v1/admin/rmm/tasks/:id/run | Run a task now |
| GET | /v1/admin/rmm/tasks/:id/runs | A task's past runs |
| GET | /v1/admin/rmm/runs | Recent task runs |
| GET | /v1/admin/rmm/runs/:runId/results | Per-device rollup plus the full per-step timeline (client groups by device_id and orders by sort_order to render a mini step-by-step timeline per device) |
| POST | /v1/admin/rmm/runs/:runId/cancel | Cancel a running task |
#List scheduled tasks
GET
/v1/admin/rmm/tasks- Address
https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Permission (any of):rmm.scripts.run.
Response 200
| Field | Type | Description |
|---|---|---|
tasks | array of any |
Example response
JSON
{
"tasks": []
}Example request
Bash
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks' \
-H "X-API-Key: $BRAMBLE_KEY"JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks', {
method: 'GET',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();Python
import os, requests
r = requests.get(
"https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method GET -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks' -Headers $headers#Get a task with its steps and assignments
GET
/v1/admin/rmm/tasks/:id- Address
https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks/:id- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Permission (any of):rmm.scripts.run.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer |
Response 200
| Field | Type | Description |
|---|---|---|
task | any | |
steps | array of any | |
assignments | array of any |
Example response
JSON
{
"task": null,
"steps": [],
"assignments": []
}Errors
| Status | Message |
|---|---|
| 404 | Task not found |
Example request
Bash
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks/42' \
-H "X-API-Key: $BRAMBLE_KEY"JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks/42', {
method: 'GET',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();Python
import os, requests
r = requests.get(
"https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks/42",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method GET -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks/42' -Headers $headers#Create a scheduled task
POST
/v1/admin/rmm/tasks- Address
https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Permission (any of):rmm.scripts.run.
Request body JSON
| Name | Type | Description |
|---|---|---|
namerequired | string | The task's name. |
description | string | |
schedulerequired | object | When it runs: { "type": "interval", "every_hours": 6 }, { "type": "daily", "time": "02:00" }, { "type": "weekly", "weekday": 1, "time": "02:00" }, { "type": "monthly_day", "day": 1 } or { "type": "monthly_weekday", "week": 1, "weekday": 2 }. |
on_failure_notify | any | Notify when a run fails. |
notify_config | string | Who or which channel to notify. |
device_filters | array of any | Narrow the devices further by type, OS or name. |
assignments | array of any | Devices, sites or groups it runs on. |
stepsrequired | array of any | Scripts to run in order: [{ "script_id": 12, "script_args": {}, "stop_on_failure": true }]. |
Response 201
| Field | Type | Description |
|---|---|---|
message | string | |
task_id | integer |
Example response
JSON
{
"message": "Saved",
"task_id": 7
}Errors
| Status | Message |
|---|---|
| 400 | name, schedule and at least one step are required |
| 400 | Unknown notification channel type |
Example request
Bash
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks' \
-H "X-API-Key: $BRAMBLE_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Example name","description":"string","schedule":{},"on_failure_notify":"…","notify_config":"string","device_filters":[],"assignments":[],"steps":[]}'JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks', {
method: 'POST',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({"name":"Example name","description":"string","schedule":{},"on_failure_notify":"…","notify_config":"string","device_filters":[],"assignments":[],"steps":[]}),
});
const data = await res.json();Python
import os, requests
r = requests.post(
"https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
json={"name":"Example name","description":"string","schedule":{},"on_failure_notify":"…","notify_config":"string","device_filters":[],"assignments":[],"steps":[]},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
$body = '{"name":"Example name","description":"string","schedule":{},"on_failure_notify":"…","notify_config":"string","device_filters":[],"assignments":[],"steps":[]}'
Invoke-RestMethod -Method POST -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks' -Headers $headers -ContentType 'application/json' -Body $body#Update a scheduled task
PUT
/v1/admin/rmm/tasks/:id- Address
https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks/:id- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Permission (any of):rmm.scripts.run.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer |
Request body JSON
| Name | Type | Description |
|---|---|---|
name | string | |
description | string | |
schedule | any | |
on_failure_notify | any | |
notify_config | string | |
device_filters | string | |
assignments | array of any | |
stepsrequired | array of any |
Response 200
| Field | Type | Description |
|---|---|---|
message | string |
Example response
JSON
{
"message": "Saved"
}Errors
| Status | Message |
|---|---|
| 400 | At least one step is required |
| 400 | Unknown notification channel type |
| 404 | Task not found |
Example request
Bash
curl -X PUT 'https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks/42' \
-H "X-API-Key: $BRAMBLE_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Example name","description":"string","schedule":"…","on_failure_notify":"…","notify_config":"string","device_filters":"string","assignments":[],"steps":[]}'JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks/42', {
method: 'PUT',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({"name":"Example name","description":"string","schedule":"…","on_failure_notify":"…","notify_config":"string","device_filters":"string","assignments":[],"steps":[]}),
});
const data = await res.json();Python
import os, requests
r = requests.put(
"https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks/42",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
json={"name":"Example name","description":"string","schedule":"…","on_failure_notify":"…","notify_config":"string","device_filters":"string","assignments":[],"steps":[]},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
$body = '{"name":"Example name","description":"string","schedule":"…","on_failure_notify":"…","notify_config":"string","device_filters":"string","assignments":[],"steps":[]}'
Invoke-RestMethod -Method PUT -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks/42' -Headers $headers -ContentType 'application/json' -Body $body#Turn a task on or off
POST
/v1/admin/rmm/tasks/:id/toggle- Address
https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks/:id/toggle- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Permission (any of):rmm.scripts.run.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer |
Response 200
| Field | Type | Description |
|---|---|---|
message | string |
Example response
JSON
{
"message": "Saved"
}Example request
Bash
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks/42/toggle' \
-H "X-API-Key: $BRAMBLE_KEY"JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks/42/toggle', {
method: 'POST',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();Python
import os, requests
r = requests.post(
"https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks/42/toggle",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method POST -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks/42/toggle' -Headers $headers#Delete a task
DELETE
/v1/admin/rmm/tasks/:id- Address
https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks/:id- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Permission (any of):rmm.scripts.run.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer |
Response 200
| Field | Type | Description |
|---|---|---|
message | string |
Example response
JSON
{
"message": "Saved"
}Errors
| Status | Message |
|---|---|
| 404 | Task not found |
Example request
Bash
curl -X DELETE 'https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks/42' \
-H "X-API-Key: $BRAMBLE_KEY"JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks/42', {
method: 'DELETE',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();Python
import os, requests
r = requests.delete(
"https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks/42",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method DELETE -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks/42' -Headers $headers#Run a task now
POST
/v1/admin/rmm/tasks/:id/run- Address
https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks/:id/run- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Permission (any of):rmm.scripts.run.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer |
Response 200
| Field | Type | Description |
|---|---|---|
message | string |
Example response
JSON
{
"message": "Saved"
}Errors
| Status | Message |
|---|---|
| 404 | Task not found |
Example request
Bash
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks/42/run' \
-H "X-API-Key: $BRAMBLE_KEY"JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks/42/run', {
method: 'POST',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();Python
import os, requests
r = requests.post(
"https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks/42/run",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method POST -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks/42/run' -Headers $headers#A task's past runs
GET
/v1/admin/rmm/tasks/:id/runs- Address
https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks/:id/runs- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Permission (any of):rmm.scripts.run.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer |
Response 200
| Field | Type | Description |
|---|---|---|
runs | array of any |
Example response
JSON
{
"runs": []
}Example request
Bash
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks/42/runs' \
-H "X-API-Key: $BRAMBLE_KEY"JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks/42/runs', {
method: 'GET',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();Python
import os, requests
r = requests.get(
"https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks/42/runs",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method GET -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/rmm/tasks/42/runs' -Headers $headers#Recent task runs
GET
/v1/admin/rmm/runs- Address
https://<your-org>.brambleit.cloud/api/v1/admin/rmm/runs- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Permission (any of):rmm.scripts.run.
Response 200
| Field | Type | Description |
|---|---|---|
runs | array of any |
Example response
JSON
{
"runs": []
}Example request
Bash
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/admin/rmm/runs' \
-H "X-API-Key: $BRAMBLE_KEY"JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/rmm/runs', {
method: 'GET',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();Python
import os, requests
r = requests.get(
"https://<your-org>.brambleit.cloud/api/v1/admin/rmm/runs",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method GET -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/rmm/runs' -Headers $headers#Per-device rollup plus the full per-step timeline (client groups by device_id and orders by sort_order to render a mini step-by-step timeline per device)
GET
/v1/admin/rmm/runs/:runId/results- Address
https://<your-org>.brambleit.cloud/api/v1/admin/rmm/runs/:runId/results- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Permission (any of):rmm.scripts.run.
Path parameters
| Name | Type | Description |
|---|---|---|
runIdrequired | integer |
Response 200
| Field | Type | Description |
|---|---|---|
results | array of object | |
results[].id | integer | |
results[].run_id | integer | |
results[].task_id | integer | |
results[].device_id | string | |
results[].device_name | string, or null | |
results[].command_id | integer, or null | |
results[].status | string: "pending" | "running" | "success" | "failed" | "timeout" | |
results[].exit_code | integer, or null | |
results[].stdout | string, or null | |
results[].stderr | string, or null | |
results[].started_at | string (date-time), or null | |
results[].completed_at | string (date-time), or null | |
results[].updated_at | string (date-time), or null | |
steps | array of object | |
steps[].id | integer | |
steps[].run_id | integer | |
steps[].device_id | string | |
steps[].step_id | integer | |
steps[].sort_order | integer | |
steps[].command_id | integer, or null | |
steps[].status | string: "pending" | "queued" | "running" | "success" | "failed" | "timeout" | "skipped" | |
steps[].exit_code | integer, or null | |
steps[].stdout | string, or null | |
steps[].stderr | string, or null | |
steps[].started_at | string (date-time), or null | |
steps[].completed_at | string (date-time), or null | |
steps[].updated_at | string (date-time), or null | |
steps[].script_name | string | |
steps[].script_language | string |
Example response
JSON
{
"results": [
{
"id": 42,
"run_id": 7,
"task_id": 7,
"device_id": "string",
"device_name": "Example device name",
"command_id": 7,
"status": "pending",
"exit_code": 1,
"stdout": "string",
"stderr": "string",
"started_at": "2026-11-12T09:30:00.000Z",
"completed_at": "2026-11-12T09:30:00.000Z",
"updated_at": "2026-11-12T09:30:00.000Z"
}
],
"steps": [
{
"id": 42,
"run_id": 7,
"device_id": "string",
"step_id": 7,
"sort_order": 1,
"command_id": 7,
"status": "pending",
"exit_code": 1,
"stdout": "string",
"stderr": "string",
"started_at": "2026-11-12T09:30:00.000Z",
"completed_at": "2026-11-12T09:30:00.000Z",
"updated_at": "2026-11-12T09:30:00.000Z",
"script_name": "Example script name",
"script_language": "string"
}
]
}Example request
Bash
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/admin/rmm/runs/1/results' \
-H "X-API-Key: $BRAMBLE_KEY"JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/rmm/runs/1/results', {
method: 'GET',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();Python
import os, requests
r = requests.get(
"https://<your-org>.brambleit.cloud/api/v1/admin/rmm/runs/1/results",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method GET -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/rmm/runs/1/results' -Headers $headers#Cancel a running task
POST
/v1/admin/rmm/runs/:runId/cancel- Address
https://<your-org>.brambleit.cloud/api/v1/admin/rmm/runs/:runId/cancel- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Permission (any of):rmm.scripts.run.
Path parameters
| Name | Type | Description |
|---|---|---|
runIdrequired | integer |
Response 200
| Field | Type | Description |
|---|---|---|
message | string |
Example response
JSON
{
"message": "Saved"
}Errors
| Status | Message |
|---|---|
| 404 | Run not found |
| 409 | Run is not in progress |
Example request
Bash
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/admin/rmm/runs/1/cancel' \
-H "X-API-Key: $BRAMBLE_KEY"JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/rmm/runs/1/cancel', {
method: 'POST',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();Python
import os, requests
r = requests.post(
"https://<your-org>.brambleit.cloud/api/v1/admin/rmm/runs/1/cancel",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method POST -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/rmm/runs/1/cancel' -Headers $headersWas this page helpful?
Thanks for your feedback.