{"components":{"schemas":{"ActivityIndices":{"properties":{"indices":{"items":{"format":"uint32","type":"integer"},"type":"array"}},"required":["indices"],"type":"object"},"ActivityResponse":{"properties":{"hidden":{"items":{"$ref":"#/components/schemas/ActivityIndices"},"type":"array"},"network_id":{"type":"string"},"output":{"$ref":"#/components/schemas/ActivityIndices"},"sensory":{"$ref":"#/components/schemas/ActivityIndices"},"source":{"type":"string"}},"required":["network_id","sensory","hidden","output","source"],"type":"object"},"AerInjectPayload":{"properties":{"addr":{"description":"Orchestrator address; defaults to server config.","nullable":true,"type":"string"},"aer_base":{"description":"Base address for decoding AER payload.","format":"uint32","nullable":true,"type":"integer"},"aer_payload_hex":{"description":"Hex-encoded AER1 payload bytes.","nullable":true,"type":"string"},"dt_ms":{"description":"Optional timestep used for temporal encoders when `time_ms` is omitted.","format":"float","nullable":true,"type":"number"},"input_values":{"description":"Continuous input values to encode into spikes using `spike_io`.","items":{"format":"float","type":"number"},"nullable":true,"type":"array"},"is_backward":{"description":"Reserved; normally false for sensory injection.","nullable":true,"type":"boolean"},"network_id":{"type":"string"},"node_id":{"description":"Optional specific node target.","nullable":true,"type":"string"},"spike_indices":{"description":"Fallback direct sensory spike indices.","items":{"format":"uint32","type":"integer"},"nullable":true,"type":"array"},"spike_io":{"description":"Optional spike I/O override. Supports explicit profile/input/output selection including `ttfs`, `isi`, `phase`, and `multiplex`.","nullable":true,"type":"object"},"step_index":{"format":"int64","nullable":true,"type":"integer"},"time_ms":{"description":"Optional physical time for temporal encoders such as phase coding.","format":"float","nullable":true,"type":"number"}},"required":["network_id"],"type":"object"},"AerInjectResponse":{"properties":{"accepted":{"format":"uint64","type":"integer"},"frames":{"format":"uint64","nullable":true,"type":"integer"},"mode":{"nullable":true,"type":"string"},"network_id":{"type":"string"},"target":{"type":"string"}},"required":["accepted","target","network_id"],"type":"object"},"AuthModeResponse":{"properties":{"allow_signup":{"type":"boolean"},"mode":{"enum":["none","local","oidc"],"type":"string"}},"required":["mode","allow_signup"],"type":"object"},"ControlNetworkPayload":{"properties":{"action":{"enum":["start","stop","repeat","reset","new"],"type":"string"},"addr":{"nullable":true,"type":"string"},"network_id":{"type":"string"}},"required":["network_id","action"],"type":"object"},"ErrorResponse":{"properties":{"error":{"type":"string"}},"required":["error"],"type":"object"},"LoginPayload":{"properties":{"password":{"format":"password","type":"string"},"username":{"type":"string"}},"required":["username","password"],"type":"object"},"LoginResponse":{"properties":{"ok":{"type":"boolean"},"username":{"type":"string"}},"required":["ok","username"],"type":"object"},"LogoutResponse":{"properties":{"ok":{"type":"boolean"}},"required":["ok"],"type":"object"},"MeResponse":{"properties":{"authenticated":{"type":"boolean"},"mode":{"nullable":true,"type":"string"},"username":{"nullable":true,"type":"string"}},"required":["authenticated"],"type":"object"},"NetworkDistributionEntry":{"properties":{"layer_neuron_counts":{"additionalProperties":{"format":"uint64","type":"integer"},"type":"object"},"layers":{"items":{"format":"uint32","type":"integer"},"type":"array"},"node_id":{"type":"string"}},"required":["node_id","layers","layer_neuron_counts"],"type":"object"},"NetworkStatus":{"properties":{"current_dt":{"type":"number"},"desired_aarnn_depth":{"format":"uint32","type":"integer"},"distribution":{"items":{"$ref":"#/components/schemas/NetworkDistributionEntry"},"type":"array"},"learning_rule":{"type":"string"},"network_id":{"type":"string"},"neuron_model":{"type":"string"},"num_layers":{"format":"uint32","type":"integer"},"playing":{"type":"boolean"},"total_neurons":{"format":"uint64","type":"integer"}},"required":["network_id","distribution"],"type":"object"},"NodeStatus":{"properties":{"active_networks":{"items":{"type":"string"},"type":"array"},"address":{"type":"string"},"available_ram":{"format":"uint64","type":"integer"},"avg_step_time_ms":{"type":"number"},"capacity_score":{"type":"number"},"comm_protocol":{"type":"string"},"cpu_usage":{"type":"number"},"current_aarnn_depth":{"format":"uint32","type":"integer"},"desired_aarnn_depth":{"format":"uint32","type":"integer"},"desired_dt":{"type":"number"},"ga_active_eval_seed":{"format":"uint64","type":"integer"},"ga_best_config_json":{"type":"string"},"ga_best_fitness":{"type":"number"},"ga_eval_progress":{"type":"number"},"ga_evaluating":{"type":"boolean"},"ga_generation":{"format":"uint32","type":"integer"},"ga_pacing":{"type":"boolean"},"ga_pacing_reason":{"type":"string"},"ga_ramp_active":{"type":"boolean"},"ga_ramp_eval_conns":{"format":"uint64","type":"integer"},"ga_ramp_eval_ms":{"format":"uint64","type":"integer"},"ga_ramp_eval_neurons":{"format":"uint64","type":"integer"},"ga_ramp_population":{"format":"uint32","type":"integer"},"ga_ramp_sim_time_ms":{"type":"number"},"ga_ramp_worker_cap":{"format":"uint32","type":"integer"},"ga_running":{"type":"boolean"},"ga_total_evaluations":{"format":"uint64","type":"integer"},"node_id":{"type":"string"},"num_fpgas":{"format":"uint32","type":"integer"},"num_gpus":{"format":"uint32","type":"integer"},"num_neurons":{"format":"uint64","type":"integer"},"num_tpus":{"format":"uint32","type":"integer"},"peer_comm_protocols":{"additionalProperties":{"type":"string"},"type":"object"},"redundant_neurons":{"format":"uint64","type":"integer"},"temperature_c":{"type":"number"},"total_ram":{"format":"uint64","type":"integer"}},"required":["node_id","address","active_networks"],"type":"object"},"OidcExchangePayload":{"properties":{"access_token":{"nullable":true,"type":"string"},"id_token":{"nullable":true,"type":"string"},"next":{"nullable":true,"type":"string"}},"type":"object"},"SignupPayload":{"properties":{"password":{"format":"password","type":"string"},"username":{"type":"string"}},"required":["username","password"],"type":"object"},"SignupResponse":{"properties":{"ok":{"type":"boolean"}},"required":["ok"],"type":"object"},"SnapshotResponse":{"properties":{"network_id":{"type":"string"},"snapshot_json":{"description":"Serialized network snapshot JSON.","type":"string"},"source":{"description":"Resolved node address used for this request.","type":"string"}},"required":["network_id","snapshot_json","source"],"type":"object"},"StatusResponse":{"properties":{"networks":{"items":{"$ref":"#/components/schemas/NetworkStatus"},"type":"array"},"nodes":{"items":{"$ref":"#/components/schemas/NodeStatus"},"type":"array"},"orchestrator":{"type":"string"},"timestamp_ms":{"format":"uint64","type":"integer"}},"required":["orchestrator","nodes","networks","timestamp_ms"],"type":"object"},"SuccessResponse":{"properties":{"success":{"type":"boolean"}},"required":["success"],"type":"object"},"UiConfigResponse":{"properties":{"default_orchestrator":{"description":"Default gRPC orchestrator address.","nullable":true,"type":"string"},"default_runtime_user":{"description":"Default runtime workspace namespace used for anonymous browser sessions.","nullable":true,"type":"string"}},"type":"object"},"UpdateNetworkPayload":{"properties":{"addr":{"nullable":true,"type":"string"},"config_json":{"nullable":true,"type":"string"},"learning_rule":{"nullable":true,"type":"string"},"network_id":{"type":"string"},"neuron_model":{"nullable":true,"type":"string"}},"required":["network_id"],"type":"object"},"UserConfigPayload":{"properties":{"config":{"additionalProperties":true,"type":"object"}},"required":["config"],"type":"object"},"UserConfigResponse":{"properties":{"config":{"additionalProperties":true,"type":"object"}},"required":["config"],"type":"object"}},"securitySchemes":{"cookieAuth":{"description":"Session cookie set by /api/login or OIDC flow.","in":"cookie","name":"nm_session","type":"apiKey"}}},"externalDocs":{"description":"Human-readable docs and usage guidance","url":"/docs"},"info":{"description":"API for orchestrator status, network control, snapshots, activity, export, and user configuration.\n\nCurrent runtime auth mode: `local`. Protected endpoints require the `nm_session` cookie. Use `POST /api/login` (local mode) or OIDC endpoints to establish a session.\n\nDefault orchestrator configured on this server: `http://aarnn-orchestrator:50051`.","title":"Neuromorphic Web UI API","version":"1.0.0"},"openapi":"3.0.3","paths":{"/api/activity":{"get":{"operationId":"getNetworkActivity","parameters":[{"in":"query","name":"network_id","required":true,"schema":{"type":"string"}},{"in":"query","name":"addr","required":false,"schema":{"type":"string"}},{"in":"query","name":"node_id","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityResponse"}}},"description":"Activity vectors for sensory/hidden/output."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Missing network_id or address."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Unauthorized."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Activity fetch failed."}},"security":[{"cookieAuth":[]}],"summary":"Get latest spike activity","tags":["network"]}},"/api/aer/inject":{"post":{"description":"Injects sensory spikes into the next simulation step. Accepts raw spike transports (`aer_payload_hex`, `spike_indices`) or continuous `input_values` that are encoded using the provided `spike_io` policy.","operationId":"injectAerExchange","requestBody":{"content":{"application/json":{"examples":{"aerPayloadHex":{"value":{"aer_base":4096,"aer_payload_hex":"41455231b80b0000000000000100802001","network_id":"default"}},"spikeIndices":{"value":{"network_id":"default","spike_indices":[0,4,17]}},"ttfsValues":{"value":{"input_values":[0.1,0.6,0.95],"network_id":"default","spike_io":{"input_strategy":"ttfs","profile":"generic","ttfs":{"threshold":0.0,"window_steps":8}},"step_index":3}}},"schema":{"$ref":"#/components/schemas/AerInjectPayload"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AerInjectResponse"}}},"description":"AER exchange accepted."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid payload or missing fields."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Unauthorized."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Target connection/stream unavailable."}},"security":[{"cookieAuth":[]}],"summary":"Inject one AER exchange into a running network","tags":["network"]}},"/api/aer/stream":{"post":{"description":"Accepts newline-delimited JSON frames in request body. Each frame can contain raw spike transport fields (`aer_payload_hex`, `spike_indices`) or `input_values` with a `spike_io` encoder selection. Use `Content-Type: application/x-ndjson`.","operationId":"streamAerExchange","parameters":[{"description":"Optional default network ID for all frames; if omitted each frame must include `network_id`.","in":"query","name":"network_id","required":false,"schema":{"type":"string"}},{"in":"query","name":"addr","required":false,"schema":{"type":"string"}},{"in":"query","name":"node_id","required":false,"schema":{"type":"string"}},{"in":"query","name":"step_index","required":false,"schema":{"format":"int64","type":"integer"}},{"in":"query","name":"aer_base","required":false,"schema":{"format":"uint32","type":"integer"}},{"in":"query","name":"is_backward","required":false,"schema":{"type":"boolean"}}],"requestBody":{"content":{"application/x-ndjson":{"examples":{"ndjson":{"value":"{\"spike_indices\":[0,1,2]}\\n{\"input_values\":[0.2,0.9],\"spike_io\":{\"profile\":\"generic\",\"input_strategy\":\"phase\",\"phase\":{\"frequency_hz\":8.0,\"threshold\":0.55}}}\\n"}},"schema":{"description":"NDJSON frames, one JSON object per line.","type":"string"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AerInjectResponse"}}},"description":"Stream accepted and forwarded."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid NDJSON or missing data."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Unauthorized."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Target connection/stream unavailable."}},"security":[{"cookieAuth":[]}],"summary":"Inject a stream of AER exchanges (NDJSON over HTTP)","tags":["network"]}},"/api/auth/mode":{"get":{"operationId":"getAuthMode","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthModeResponse"}}},"description":"Authentication mode and signup capability."}},"summary":"Get auth mode","tags":["auth"]}},"/api/config":{"get":{"operationId":"getUiConfig","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UiConfigResponse"}}},"description":"UI bootstrap configuration."}},"summary":"Get web-ui bootstrap config","tags":["config"]}},"/api/control_network":{"post":{"operationId":"controlNetwork","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ControlNetworkPayload"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}},"description":"Control result."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid action or missing address."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Unauthorized."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Update failed."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Connect failed."}},"security":[{"cookieAuth":[]}],"summary":"Send control action (start/stop/repeat/reset/new)","tags":["network"]}},"/api/export":{"get":{"operationId":"exportNetwork","parameters":[{"in":"query","name":"network_id","required":true,"schema":{"type":"string"}},{"in":"query","name":"format","required":true,"schema":{"enum":["neuroml","pynn","nir","onnx","tflite"],"type":"string"}},{"in":"query","name":"addr","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/octet-stream":{"schema":{"format":"binary","type":"string"}}},"description":"Exported artifact file."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Missing/invalid parameters."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Unauthorized."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Tool or file processing failed."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Snapshot source unavailable."}},"security":[{"cookieAuth":[]}],"summary":"Export network using conversion tools","tags":["network"]}},"/api/login":{"post":{"description":"On success sets `nm_session` cookie.","operationId":"loginLocal","requestBody":{"content":{"application/json":{"examples":{"default":{"value":{"password":"change-me","username":"admin"}}},"schema":{"$ref":"#/components/schemas/LoginPayload"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}},"description":"Login successful."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Missing credentials or local auth disabled."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid credentials."}},"summary":"Login (local auth mode)","tags":["auth"]}},"/api/logout":{"post":{"operationId":"logout","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogoutResponse"}}},"description":"Session cleared."}},"security":[{"cookieAuth":[]}],"summary":"Logout session","tags":["auth"]}},"/api/me":{"get":{"operationId":"getCurrentUser","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeResponse"}}},"description":"Authenticated status."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"No valid session cookie."}},"summary":"Get current session user","tags":["auth"]}},"/api/openapi.json":{"get":{"operationId":"getOpenApiSpec","responses":{"200":{"description":"OpenAPI v3 specification for this server."}},"summary":"Get OpenAPI specification","tags":["docs"]}},"/api/signup":{"post":{"operationId":"signupLocal","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupPayload"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupResponse"}}},"description":"Signup successful."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid request or local auth disabled."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Signup disabled."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"User exists."}},"summary":"Signup (if enabled)","tags":["auth"]}},"/api/snapshot":{"get":{"operationId":"getNetworkSnapshot","parameters":[{"in":"query","name":"network_id","required":true,"schema":{"type":"string"}},{"in":"query","name":"addr","required":false,"schema":{"type":"string"}},{"description":"Optional specific node in cluster to query.","in":"query","name":"node_id","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SnapshotResponse"}}},"description":"Serialized network snapshot."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Missing network_id or address."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Unauthorized."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Snapshot fetch failed."}},"security":[{"cookieAuth":[]}],"summary":"Get network snapshot JSON","tags":["network"]}},"/api/status":{"get":{"operationId":"getSystemStatus","parameters":[{"description":"Optional orchestrator gRPC address; defaults to server configured value.","in":"query","name":"addr","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}},"description":"Cluster status payload."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Missing orchestrator address."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Unauthorized."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Unable to connect to orchestrator."}},"security":[{"cookieAuth":[]}],"summary":"Get cluster/system status","tags":["cluster"]}},"/api/update_network":{"post":{"operationId":"updateNetworkConfig","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateNetworkPayload"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}},"description":"Update result."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Missing orchestrator address."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Unauthorized."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Update failed."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Connect failed."}},"security":[{"cookieAuth":[]}],"summary":"Update network config/model/learning rule","tags":["network"]}},"/api/user/config":{"get":{"operationId":"getUserConfig","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserConfigResponse"}}},"description":"Saved config payload."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Unauthorized."}},"security":[{"cookieAuth":[]}],"summary":"Get saved user UI config","tags":["user"]},"post":{"operationId":"setUserConfig","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserConfigPayload"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"ok":{"type":"boolean"}},"required":["ok"],"type":"object"}}},"description":"Config saved."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Unauthorized."}},"security":[{"cookieAuth":[]}],"summary":"Persist user UI config","tags":["user"]}},"/auth/oidc/callback":{"get":{"operationId":"oidcCallback","parameters":[{"in":"query","name":"code","required":false,"schema":{"type":"string"}},{"in":"query","name":"state","required":false,"schema":{"type":"string"}},{"in":"query","name":"error","required":false,"schema":{"type":"string"}},{"in":"query","name":"error_description","required":false,"schema":{"type":"string"}}],"responses":{"303":{"description":"Redirect to app after successful token exchange."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid callback payload."}},"summary":"OIDC redirect callback handler","tags":["oidc"]}},"/auth/oidc/exchange":{"post":{"operationId":"oidcExchange","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OidcExchangePayload"}}},"required":true},"responses":{"200":{"description":"Session established; cookie set."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Missing token payload."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"OIDC validation failed."}},"summary":"Exchange OIDC tokens for local session","tags":["oidc"]}},"/auth/oidc/login":{"get":{"operationId":"startOidcLogin","responses":{"303":{"description":"Redirect to OIDC authorization endpoint."},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"OIDC not configured."}},"summary":"Start browser OIDC login","tags":["oidc"]}}},"servers":[{"description":"Current web-ui origin","url":"/"}],"tags":[{"description":"API documentation endpoints","name":"docs"},{"description":"Authentication and session endpoints","name":"auth"},{"description":"Web UI config bootstrap endpoints","name":"config"},{"description":"Per-user persisted configuration","name":"user"},{"description":"Cluster/system status and telemetry","name":"cluster"},{"description":"Network snapshot/activity/control/update/export APIs","name":"network"},{"description":"OIDC browser and token exchange endpoints","name":"oidc"}]}