Skip to content

API endpoints

API endpoints

A curated reference of the controller’s /api/v1 surface, grouped by family. For the authentication model, the RBAC + audit pattern, and error shapes, see Controller API.

Conventions:

  • All application routes are under /api/v1; GET /metrics and GET /healthz are at the root.
  • Successful responses are { "data": ... }; some writes return 201/202; deletes and logout return 204.
  • Perm is the exact RBAC permission checked. Agent rows are authenticated by a node credential, not a user permission (the listed label is the audit permission).

Auth & session — /api/v1/auth

Method & pathPermPurpose
POST /auth/loginIssue a session token.
POST /auth/logoutRevoke the current session.
GET /auth/meCurrent user + resolved permissions.

OIDC — /api/v1/auth/oidc

Method & pathPermPurpose
GET /auth/oidc/configPublic OIDC config.
GET /auth/oidc/loginStart the login redirect.
GET /auth/oidc/callbackComplete login (redirect with token).
GET /auth/oidc/discoveryauth:manageFetch IdP discovery doc.

Access / RBAC — /api/v1/auth/*

Method & pathPermPurpose
GET /auth/users · POST /auth/usersauth:manageList / create users.
GET /auth/users/:idauth:manageUser detail + action states.
PATCH /auth/users/:id/accessauth:manageUpdate roles/grants/groups.
PATCH /auth/users/:id/password · /status · DELETE /auth/users/:idauth:manageLifecycle (reset/enable-disable/delete).
GET /auth/groupsauth:manageList groups.
GET /auth/access-policies · PATCH /auth/access-policiesauth:manageRead / replace access policies.

Audit — /api/v1/audit-events

Method & pathPermPurpose
GET /audit-eventsaudit:readList/filter events.
GET|POST /audit-events/exportaudit:readExport (filtered / selected).
GET /audit-events/facetsaudit:readFilter facets.
GET /audit-events/:idaudit:readDetail + before/after.

Nodes — /api/v1/nodes

Method & pathPermPurpose
GET /nodes · GET|POST /nodes/exportnode:readList / export inventory (scoped).
GET /nodes/:id · /:id/actionsnode:readDetail / action summaries.
GET /nodes/:id/meters · GET /meter-eventsnode:readMeter snapshot / SSE stream.
POST /nodes/enrollnode:manageEnroll node (returns credential).
PATCH /nodes/:id · /:id/interfaces/:iidnode:manageUpdate node / interface.
POST /nodes/:id/credentials/rotatenode:manageRotate node credential.
GET /nodes/:id/lifecycle-jobsnode:readList lifecycle runs.
POST /nodes/:id/lifecycle/:actionnode:manageRun an allowlisted lifecycle action.
POST /nodes/:id/listen · GET /:id/listen/stream · DELETE /:id/listen/:sidlisten:monitorStart / stream / stop live listen.

Agent service routes (node-credential)

Method & pathAudit permPurpose
GET /nodes/:id/confignode:controlNode config + cache policies + capacity.
GET /nodes/:id/channel-map-assignmentsnode:controlAssigned channel maps.
POST /nodes/:id/heartbeatnode:controlNode heartbeat.
POST /nodes/:id/meter-framePush a meter frame.
POST /nodes/:id/listen/chunknode:controlIngest live-listen audio.
POST /nodes/:id/health-eventshealth:acknowledgeSync a health event.
POST /nodes/:id/recording-jobs/claim-nextrecording:controlClaim the next queued job.
POST /recording-jobs/:jid/heartbeatrecording:controlJob heartbeat.
GET /recording-jobs/:jidrecording:control/recording:readRead job (dual-mode auth).
POST /recording-jobs/:jid/cancelled · /failedrecording:controlTerminal job state.
PUT /recordings/:rid/cache-filerecording:controlUpload captured audio; completes the job.

Recordings — /api/v1/recordings

Method & pathPermPurpose
GET /recordings · /facets · /:id · /:id/context · /:id/actionsrecording:readLibrary reads (scoped).
GET|POST /recordings/exportrecording:readExport manifest (filtered / selected).
POST /recordingsrecording:createStart an ad-hoc recording.
POST /recordings/:id/stoprecording:controlStop a recording.
POST /recordings/:id/playback · GET /:id/streamrecording:playbackStart / stream playback.
POST /recordings/:id/download · GET /:id/filerecording:downloadPrepare / download file.
PATCH /recordings/:id/metadata · /bulk-metadatarecording:editEdit / bulk-organize.
DELETE /recordings/:id · POST /recordings/bulk-deleterecording:deleteDelete terminal recordings.

Recording jobs & uploads

Method & pathPermPurpose
GET /recording-jobs · /:id · /:id/actions · GET|POST /exportrecording:readJob reads / export.
POST /recording-jobs/:id/retry · /bulk-retry · /bulk-stoprecording:controlRetry / stop jobs.
GET /upload-queue · /:id · /:id/actionsrecording:readQueue reads.
POST /recordings/:id/upload-queue · /bulk-upload-queue · POST /upload-queue/:id/retryrecording:controlEnqueue / retry uploads.
GET /upload-runner · /actionsrecording:readRunner status.
POST /upload-runner/runrecording:controlTrigger a runner pass.

Schedules — /api/v1/schedules

Method & pathPermPurpose
GET /schedules · /:id · /:id/occurrences · /:id/actions · GET|POST /exportschedule:readReads / occurrences / export.
POST /schedules · PATCH /:id · DELETE /:idschedule:manageCreate / update / delete.
POST /schedules/:id/run-now · /skip-nextschedule:manageForce / skip the next occurrence.

Settings & retention — /api/v1/settings/*

Each settings family supports GET list, GET /:id, and GET /:id/actions reads under settings:read. Mutations require settings:manage.

FamilyReadManage
Recording profilessettings:readPATCH /settings/recording-profiles/:id
Watchdog policiessettings:readPATCH /settings/watchdog-policies/:id (+ calibrate)
Upload providers / policiessettings:readPATCH/POST providers & policies
Channel-map templates / assignments / planssettings:readcreate/update templates; PUT assignments (+ bulk, rollback); stage/apply plans
Retention policiessettings:readPOST / PATCH /settings/retention-policies/:id

Health — /api/v1/health-events

Method & pathPermPurpose
GET /health-events · /:id · /:id/actions · GET|POST /exporthealth:readReads / export.
POST /health-events · /bulk-lifecyclehealth:acknowledgeCreate / bulk lifecycle.
POST /health-events/:id/acknowledge · /suppress · /resolve · /reopenhealth:acknowledgeSingle-event lifecycle.

Status & metrics

Method & pathPermPurpose
GET /api/v1/statusnode:readAggregated scoped status (nodes, recordings, health, uptime).
GET /metricsmetrics:readPrometheus exposition (root path).
GET /healthzLiveness.