{"openapi":"3.1.0","info":{"title":"5G on Wheels public monitoring API","version":"1.0.0","description":"Read-only, aggregate campus-network observations. No authentication or query parameters. Poll no more often than every 30 seconds. Null is missing data, not zero or false. No subscriber identifiers, raw logs or arbitrary Prometheus queries are exposed."},"servers":[{"url":"https://open5g.cs.hs-rm.de"}],"security":[],"externalDocs":{"url":"https://open5g.cs.hs-rm.de/api-docs","description":"Usage and interpretation"},"paths":{"/api/monitoring":{"get":{"operationId":"getMonitoringSnapshot","summary":"Read the public monitoring snapshot and 24-hour history","description":"The server caches successful snapshots for 30 seconds and unavailable responses for 10 seconds. History has 288 observations at 300-second intervals. The latest historical point can be up to five minutes old; checkedAt is request processing time, not proof of fresh samples. HTTP 200 means queries completed, not that the network or every service is healthy.","responses":{"200":{"description":"Observations available; individual fields may still be null.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailableSnapshot"}}}},"503":{"description":"Monitoring source is unconfigured or could not be queried. Do not interpret this as proof of a network outage. Retry after at least 30 seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnavailableSnapshot"}}}}}}}},"components":{"schemas":{"HistoryPoint":{"type":"object","properties":{"time":{"type":"integer","description":"Unix timestamp in SECONDS (UTC), unlike top-level checkedAt and sampleTime."},"core":{"type":["boolean","null"],"description":"True when both AMF and SMF Prometheus scrape targets are up; not an end-to-end health check."},"gnb":{"type":["boolean","null"],"description":"True when at least one gNB reports successful setup. Null when the InfoAPI exporter or endpoint is unavailable."},"registered":{"type":["number","null"],"description":"Aggregate registered subscriber count observed by AMF."},"sessions":{"type":["number","null"],"description":"Aggregate PDU session count observed by SMF."},"uplinkBps":{"type":["number","null"],"description":"Aggregate ogstun receive rate in BITS per second, averaged over five minutes; core-interface traffic, not a per-UE speed test."},"downlinkBps":{"type":["number","null"],"description":"Aggregate ogstun transmit rate in BITS per second, averaged over five minutes."},"backhaulMode":{"type":["integer","null"],"enum":[0,1,2,null],"description":"Core return-route mode: 0 unknown, 1 direct campus Ethernet, 2 OpenWrt/WireGuard. Null means no sample."},"backhaulState":{"type":["integer","null"],"enum":[0,1,2,3,4,null],"description":"N2 state: 0 unknown, 1 direct/up, 2 WireGuard/up, 3 direct/down, 4 WireGuard/down. Null means no sample. This does not establish UE application reachability."}},"required":["time","core","gnb","registered","sessions","uplinkBps","downlinkBps","backhaulMode","backhaulState"],"additionalProperties":false},"AvailableSnapshot":{"type":"object","properties":{"status":{"type":"string","const":"ok"},"checkedAt":{"type":"integer","description":"Unix timestamp in milliseconds (UTC)."},"sampleTime":{"type":"integer","description":"Unix timestamp in milliseconds (UTC)."},"services":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^open5gs-[a-z0-9]+\\.service$"},"active":{"type":"boolean","description":"systemd active state; not application health."}},"required":["name","active"],"additionalProperties":false}},"vmUptimeSeconds":{"type":["number","null"],"description":"Host VM uptime in seconds."},"uplinkBytesTotal":{"type":["number","null"],"description":"Cumulative ogstun received BYTES; may reset. Not a 24-hour total."},"downlinkBytesTotal":{"type":["number","null"],"description":"Cumulative ogstun transmitted BYTES; may reset. Not a 24-hour total."},"backhaulMode":{"type":["integer","null"],"enum":[0,1,2,null],"description":"Core return-route mode: 0 unknown, 1 direct campus Ethernet, 2 OpenWrt/WireGuard. Null means no sample."},"backhaulState":{"type":["integer","null"],"enum":[0,1,2,3,4,null],"description":"N2 state: 0 unknown, 1 direct/up, 2 WireGuard/up, 3 direct/down, 4 WireGuard/down. Null means no sample. This does not establish UE application reachability."},"current":{"$ref":"#/components/schemas/HistoryPoint"},"history":{"type":"array","minItems":288,"maxItems":288,"items":{"$ref":"#/components/schemas/HistoryPoint"}}},"required":["status","checkedAt","sampleTime","services","vmUptimeSeconds","uplinkBytesTotal","downlinkBytesTotal","backhaulMode","backhaulState","current","history"],"additionalProperties":false},"UnavailableSnapshot":{"type":"object","properties":{"status":{"type":"string","const":"unavailable"},"checkedAt":{"type":"integer","description":"Unix timestamp in milliseconds (UTC)."}},"required":["status","checkedAt"],"additionalProperties":false}}}}