diff --git a/main.py b/main.py
index 012531d2861933992e09368cb5b05af925cb3605..dd13857ec595d4272dd5f69947049be3a1e5cac0 100644
--- a/main.py
+++ b/main.py
@@ -106,6 +106,13 @@ def wr_available_widgets():
 def wr_get_state():
     return json_response({}) # TODO
 
+@app.route("/api/toggle_screen_state", methods=["POST"])
+def wr_toggle_state():
+    mainthread_queue.put("TOGGLE_SCREEN_STATE")
+    return json_response({
+        "status": "OK"
+    })
+
 @app.route("/api/available_patterns")
 def wr_available_patterns():
     return json_response(PROP_AVAILABLE_PATTERNS)
@@ -448,6 +455,13 @@ if __name__ == "__main__":
                     force_change_widget = True
                 elif message == "CYCLE_PATTERN":
                     force_change_pattern = True
+                elif message == "TOGGLE_SCREEN_STATE":
+                    if screen_state == ScreenState.WIDGET_CYCLE:
+                        screen_state = ScreenState.WIDGET_SINGLE
+                    elif screen_state == ScreenState.WIDGET_SINGLE:
+                        screen_state = ScreenState.WIDGET_CYCLE
+                    else:
+                        pass
 
             except queue.Empty:
                 pass