Skip to content

Dashboard API Reference

Base URL: http://192.168.56.13:31880

Interactive API docs (Swagger UI): http://192.168.56.13:31880/docs

Authentication

Read operations are open. Mutating operations require a Bearer token:

Authorization: Bearer <DASHBOARD_ADMIN_TOKEN>

The token is set in dashboard/backend/.env (DASHBOARD_ADMIN_TOKEN).


Health

Method Path Auth Description
GET /health Backend liveness check

Pods & Deployments (Control Room)

Method Path Auth Description
GET /api/v1/pods List pods. Query: ?namespace=5g
GET /api/v1/pods/{pod}/describe Describe a pod. Query: ?namespace=5g
POST /api/v1/deployments/{deployment}/restart ✅ Admin Rolling restart a deployment. Query: ?namespace=5g

ConfigMaps

Method Path Auth Description
GET /api/v1/configmaps/{name} Read a ConfigMap. Query: ?namespace=5g
PUT /api/v1/configmaps/{name} ✅ Admin Update a ConfigMap. Requires DASHBOARD_ALLOW_CONFIGMAP_WRITE=true

Topology Map

Method Path Auth Description
GET /api/v1/topology Pod nodes + OVS bridges with Multus interface metadata. Query: ?namespace=5g
GET /api/v1/network/nads List NetworkAttachmentDefinitions. Query: ?namespace=5g
GET /api/v1/ovs/bridges/{bridge}/flows OVS OpenFlow rules for a bridge (from ovs-ofctl dump-flows)

Subscriber Management

Method Path Auth Description
GET /api/v1/subscribers List all Open5GS subscriber records
POST /api/v1/subscribers ✅ Admin Create a subscriber. Body: subscriber object
PUT /api/v1/subscribers/{imsi} ✅ Admin Update a subscriber
DELETE /api/v1/subscribers/{imsi} ✅ Admin Delete a subscriber
POST /api/v1/subscribers/init ✅ Admin Trigger Ansible subscriber import (reset to defaults)

UE Monitoring

Method Path Auth Description
GET /api/v1/ue/summary Prometheus-backed gauges: gNBs, RAN UEs, PDU sessions, registration counts
GET /api/v1/ue/events Log-parsed UE events. Query: ?minutes=10
GET /api/v1/ue/active Active UE list reconstructed from AMF/SMF logs
GET /api/v1/ue/pods UERANSIM UE pod list
POST /api/v1/ue/test/ping ✅ Admin Run ping from a UE pod. Body: {pod, namespace, target_ip}
POST /api/v1/ue/test/iperf ✅ Admin Run iperf3 from a UE pod. Body: {pod, namespace, target_ip, duration}

Metrics

Method Path Auth Description
GET /api/v1/metrics/nodes Node-level CPU, memory, disk from Prometheus/Node Exporter
GET /api/v1/metrics/nf Per-NF CPU, memory, restart counts

RAN Mode Control

Method Path Auth Description
GET /api/v1/ran/status Current RAN mode (physical / simulated / coexistence) and resource state
POST /api/v1/ran/enable ✅ Admin Enable a RAN mode. Body: {mode: "physical" \| "simulated" \| "coexistence"}
POST /api/v1/ran/disable ✅ Admin Disable a RAN mode. Body: {mode: "physical" \| "simulated"}

See RAN Modes for the full workflow.


Physical RAN Config

Method Path Auth Description
GET /api/v1/physical-ran/interfaces Available bridge interfaces on worker
GET /api/v1/physical-ran/status OVS bridge state, AMF annotation state
POST /api/v1/physical-ran/setup ✅ Admin Trigger Ansible OVS setup + AMF annotation patch

Network Health

Method Path Auth Description
GET /api/v1/network/health Cached N-interface connectivity results (N2/N3/N4/N6)
POST /api/v1/network/health/run Trigger immediate health check (bypasses cache)

WebSocket Endpoints

WebSocket connections are made to the same host on port 31880.

Log streaming

WS /api/v1/ws/logs/{namespace}/{pod}?container=<name>

Streams live container logs. Equivalent to kubectl logs -f. The server closes the connection when the pod disappears or the client disconnects.

Messages (server → client): JSON {line: "...", timestamp: "..."} per log line.

Traffic intensity

WS /api/v1/ws/traffic/intensity

Streams real-time OVS bridge counter deltas every second.

Messages (server → client):

{
  "bridges": {
    "br-n2": {"rx_packets": 42, "tx_packets": 38, "rx_bytes": 5400, "tx_bytes": 4800},
    "br-n3": {"rx_packets": 120, ...},
    ...
  },
  "timestamp": "2026-03-11T10:00:01Z"
}


Planned / Stubbed

Method Path Description
POST /api/v1/experiments/run Run a test scenario
POST /api/v1/snapshot/create Create a testbed state snapshot