{
  "endpoints": [
    {
      "method": "GET",
      "path": "/api/live-monitor/bootstrap",
      "description": "Lấy dữ liệu snapshot ngay lập tức cho lần tải trang đầu tiên. Loại bỏ trường signature khỏi response để bảo mật và giảm dung lượng payload.",
      "parameters": [
        {
          "name": "window_minutes",
          "type": "integer",
          "in": "query",
          "default": 20,
          "constraints": "5 <= x <= 60"
        }
      ]
    },
    {
      "method": "GET",
      "path": "/api/live-monitor/stream",
      "description": "Mở kết nối Server-Sent Events (SSE) để nhận các bản cập nhật thời gian thực bằng StreamingResponse của FastAPI.",
      "parameters": [
        {
          "name": "window_minutes",
          "type": "integer",
          "in": "query",
          "default": 20,
          "constraints": "5 <= x <= 60"
        },
        {
          "name": "interval_seconds",
          "type": "integer",
          "in": "query",
          "default": 4,
          "constraints": "2 <= x <= 15"
        }
      ],
      "events": [
        {
          "name": "snapshot",
          "trigger": "Ngay khi kết nối thành công, gửi trạng thái khởi tạo."
        },
        {
          "name": "dashboard_update",
          "trigger": "Khi có thay đổi dữ liệu thực tế dựa trên việc đánh giá signature."
        },
        {
          "name": "heartbeat",
          "trigger": "Định kỳ mỗi interval_seconds khi dữ liệu không đổi để thông báo kết nối còn sống."
        },
        {
          "name": "error",
          "trigger": "Bắn ra khi việc gọi Langfuse bị lỗi hoặc Exception xảy ra trong vòng lặp."
        }
      ]
    }
  ]
}