Reference
Servers API
Enrollment, server detail, metrics, actions and jobs.
Servers
GET
/api/v1/serversList servers with status, facts and latest metrics.
POST
/api/v1/servers/enrollmentsCreate a server and an enrollment token. Returns
install_command.GET
/api/v1/servers/{id}Server detail with inventory.
GET
/api/v1/servers/{id}/metrics?range=1hMetric series for
1h, 24h, 7d, 30d or 90d (hourly averages from 7d up).POST
/api/v1/servers/{id}/enrollmentsIssue a new enrollment token for a server that isn't enrolled yet.
POST
/api/v1/servers/{id}/revokeInvalidate the agent credential immediately.
DELETE
/api/v1/servers/{id}Delete a server record.
Create an enrollment
http
POST /api/v1/servers/enrollments{ "name": "web-1", "tags": ["prod", "eu"] }201 Created{ "server": { "id": "c1f0…", "name": "web-1", "status": "pending", … }, "token": "ept_…", "install_command": "curl -fsSL https://pilot.example.com/agent/install.sh | sudo bash -s -- --token ept_…", "expires_at": "2026-10-14T09:30:00Z"}Actions
Run a service or container operation on a server. The response is the queued job.
POST
/api/v1/servers/{id}/actionsQueue an action.
http
POST /api/v1/servers/{id}/actions{ "type": "service.restart", "payload": { "unit": "nginx.service" }, "idempotency_key": "restart-nginx-2026-10-14"}service.start · service.stop · service.restart{ unit }A systemd unit ending in
.service.service.logs{ unit, lines? }Last 1–500 lines, 200 by default.
container.start · container.stop · container.restart{ container }A container name.
container.logs{ container, lines? }Last 1–500 lines, 200 by default.
Jobs
GET
/api/v1/jobs?server_id=&limit=30Recent jobs, newest first (up to 100).
GET
/api/v1/jobs/{id}A job with its events and output.
POST
/api/v1/jobs/{id}/cancelCancel a queued job.