List the caller's own runners
GET/api/user/runners
listMyRunners
Every personal (actor-bound) runner the caller registered, in any workspace, plus every runner in the caller's personal workspace — newest first, at most 500. `workspace_slug` names each runner's workspace. Needs `user:read` and no resource lock; each row is then decided like the workspace list.
Requires authentication using a bearer token or a session cookie — see tokens and scopes.
curl
curl -X GET 'https://neosource.dev/api/user/runners' \
-H 'Authorization: Bearer $NEOSOURCE_TOKEN'fetch
fetch("https://neosource.dev/api/user/runners", {
method: "GET",
headers: {
Authorization: "Bearer $NEOSOURCE_TOKEN",
},
});Responses
200The caller's runners
application/json
403Forbidden — one of: forbidden, needs_scope
application/json
Standard errors
Bodies documented once for the whole API — see standard errors.
- 400Bad Request — one of: invalid_input
- 401Authentication required
- 404Not Found — one of: not_found
- 429Rate limited — retry after the `Retry-After` header
- 500Internal server error
- 503Service temporarily unavailable / at capacity — retry after the `Retry-After` header
- 504Gateway timeout — the request exceeded the server's handling budget
Schemas
Referenced above. Listed here rather than expanded inline, so the same definition is not repeated at every level.
RunnerBindingKind
Which trust binding a job executed under (ADR 0056 §1/§7). Serialized on the wire and in `workflow_run_jobs.executed_on` as the `snake_case` strings `hosted` / `workspace` / `actor`.
"hosted""workspace""actor"
RunnerMachineInfo
What a runner agent reports about the machine it runs on (issue #777): `POST /api/runners` (`machine`) and `PUT /api/runners/{runner_id}/machine`. Every field is optional. A value of the wrong JSON type (a string for `cpu_cores`, a negative `memory_bytes`) fails request extraction like any other malformed body; a well-typed value is never rejected for its content — strings are trimmed, stripped of control and invisible formatting characters and truncated, and counts are clamped — since this is untrusted tenant-hardware input.
agent_versionAgent build that reported, e.g. `neo 0.1.0 (abc1234)`.
archCPU architecture as Rust's `std::env::consts::ARCH` spells it (`x86_64`, `aarch64`, …). Open vocabulary — render, don't match.
cpu_coresLogical CPUs available to the agent.
cpu_modelCPU model string, e.g. `AMD Ryzen 9 7950X 16-Core Processor`.
memory_bytesTotal physical memory in bytes.
nameDisplay name shown in the web UI and `neo runner list`. Defaults to the machine's hostname agent-side. On a report, `null` keeps the name already stored.
osOperating system as Rust's `std::env::consts::OS` spells it (`linux`, `macos`, `windows`, …). Open vocabulary — render, don't match.
RunnerStatus
"online""draining""offline"
VmBackendKind
"docker_shell""kata_clh""kata_fc""lib_krun""k8s_runc""cloud_hypervisor"