{"openapi":"3.1.0","info":{"title":"LIFX (BYOK) API","version":"0.1.0","description":"LIFX (BYOK) lets an AI assistant read your own LIFX devices and, with your approval of each change, change their state through the LIFX API with a key you supply (LIFX personal access token). Read tools plus 7 device-changing tools (set_state, toggle_power, state_delta, breathe_effect, pulse_effect, stop_effects, activate_scene); each change runs only when confirm is yes, after you approved it in...\n\nMost operations are read-only. These change the state of a device and run only with confirm = \"yes\" after the user approved that change: set_state, toggle_power, state_delta, breathe_effect, pulse_effect, stop_effects, activate_scene. The same tools are available over MCP (streamable HTTP) at https://byok-lifx-control.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-lifx-control/docs"},"termsOfService":"https://connectorbay.com/byok-lifx-control/terms"},"servers":[{"url":"https://byok-lifx-control.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-lifx-control/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_lights":{"post":{"operationId":"list_lights","summary":"List LIFX lights chosen by a selector with label, power, brightness, color (hue, saturation, kelvin), group, location, p","description":"List LIFX lights chosen by a selector with label, power, brightness, color (hue, saturation, kelvin), group, location, product and last seen time. Use for \"Which of my LIFX lights are on\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"selector":{"description":"Which lights: all, id:<serial>, label:<name>, group:<name>, location:<name>, group_id:, location_id: or scene_id:<uuid>.","maxLength":300,"title":"Selector","type":"string"}},"required":["selector"],"title":"list_lightsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_scenes":{"post":{"operationId":"list_scenes","summary":"List your LIFX scenes with uuid and name (the per-light states are not returned). Use for \"Which LIFX scenes do I have\".","description":"List your LIFX scenes with uuid and name (the per-light states are not returned). Use for \"Which LIFX scenes do I have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_scenesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/set_state":{"post":{"operationId":"set_state","summary":"Set the power, color, brightness and transition time of the selected lights; leave out whatever should stay as it is. Th","description":"Set the power, color, brightness and transition time of the selected lights; leave out whatever should stay as it is. This changes the lights it selects; a broad selector such as all changes every light on the account. Use for \"Turn my LIFX Desk Lamp to warm white at 30 percent\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"selector":{"description":"Which lights: all, id:<serial>, label:<name>, group:<name>, location:<name>, group_id:, location_id: or scene_id:<uuid>; combine up to 25 with commas, for example label:Bedroom.","maxLength":300,"title":"Selector","type":"string"},"confirm":{"const":"yes","description":"Must be exactly yes, only after the user approved this change in chat.","title":"Confirm","type":"string"},"power":{"anyOf":[{"enum":["on","off"],"type":"string"},{"type":"null"}],"default":null,"description":"on or off.","title":"Power"},"color":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"A color such as red, #ff8800, rgb:255,128,0, hue:120 saturation:1.0 brightness:0.5 or kelvin:2700 brightness:0.5.","title":"Color"},"brightness":{"anyOf":[{"maximum":1,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Brightness from 0.0 to 1.0; overrides any brightness inside color.","title":"Brightness"},"duration":{"anyOf":[{"maximum":3155760000,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Seconds the change takes, 0 to 3155760000 (default 1).","title":"Duration"}},"required":["selector","confirm"],"title":"set_stateArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":false,"x-changes-device-state":true,"x-requires-confirmation":"confirm"}},"/v1/tools/toggle_power":{"post":{"operationId":"toggle_power","summary":"Switch the selected lights off if they are on, and on if they are off. This changes the lights it selects; a broad selec","description":"Switch the selected lights off if they are on, and on if they are off. This changes the lights it selects; a broad selector such as all changes every light on the account. Use for \"Toggle my LIFX Desk Lamp\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"selector":{"description":"Which lights: all, id:<serial>, label:<name>, group:<name>, location:<name>, group_id:, location_id: or scene_id:<uuid>; combine up to 25 with commas, for example label:Bedroom.","maxLength":300,"title":"Selector","type":"string"},"confirm":{"const":"yes","description":"Must be exactly yes, only after the user approved this change in chat.","title":"Confirm","type":"string"},"duration":{"anyOf":[{"maximum":3155760000,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Seconds the change takes, 0 to 3155760000 (default 1).","title":"Duration"}},"required":["selector","confirm"],"title":"toggle_powerArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":false,"x-changes-device-state":true,"x-requires-confirmation":"confirm"}},"/v1/tools/state_delta":{"post":{"operationId":"state_delta","summary":"Change the selected lights relative to their current state: add to brightness, saturation or kelvin, or rotate the hue. ","description":"Change the selected lights relative to their current state: add to brightness, saturation or kelvin, or rotate the hue. This changes the lights it selects; a broad selector such as all changes every light on the account. Use for \"Make my LIFX Desk Lamp a bit brighter\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"selector":{"description":"Which lights: all, id:<serial>, label:<name>, group:<name>, location:<name>, group_id:, location_id: or scene_id:<uuid>; combine up to 25 with commas, for example label:Bedroom.","maxLength":300,"title":"Selector","type":"string"},"confirm":{"const":"yes","description":"Must be exactly yes, only after the user approved this change in chat.","title":"Confirm","type":"string"},"brightness":{"anyOf":[{"maximum":1,"minimum":-1,"type":"number"},{"type":"null"}],"default":null,"description":"Amount to add to brightness, -1.0 to 1.0 (the result is clipped to 0 to 1).","title":"Brightness"},"saturation":{"anyOf":[{"maximum":1,"minimum":-1,"type":"number"},{"type":"null"}],"default":null,"description":"Amount to add to saturation, -1.0 to 1.0 (the result is clipped to 0 to 1).","title":"Saturation"},"hue":{"anyOf":[{"maximum":360,"minimum":-360,"type":"number"},{"type":"null"}],"default":null,"description":"Degrees to rotate the hue, -360 to 360.","title":"Hue"},"kelvin":{"anyOf":[{"maximum":6500,"minimum":-6500,"type":"integer"},{"type":"null"}],"default":null,"description":"Kelvin to add (negative for warmer); the result is clipped to 2500 to 9000.","title":"Kelvin"},"duration":{"anyOf":[{"maximum":3155760000,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Seconds the change takes, 0 to 3155760000 (default 1).","title":"Duration"}},"required":["selector","confirm"],"title":"state_deltaArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":false,"x-changes-device-state":true,"x-requires-confirmation":"confirm"}},"/v1/tools/breathe_effect":{"post":{"operationId":"breathe_effect","summary":"Run a slow fade between two colors on the selected lights for a number of cycles. This changes the lights it selects; a ","description":"Run a slow fade between two colors on the selected lights for a number of cycles. This changes the lights it selects; a broad selector such as all changes every light on the account. Use for \"Make my LIFX Desk Lamp breathe red three times\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"selector":{"description":"Which lights: all, id:<serial>, label:<name>, group:<name>, location:<name>, group_id:, location_id: or scene_id:<uuid>; combine up to 25 with commas, for example label:Bedroom.","maxLength":300,"title":"Selector","type":"string"},"color":{"description":"A color such as red, #ff8800, rgb:255,128,0, hue:120 saturation:1.0 brightness:0.5 or kelvin:2700 brightness:0.5.","maxLength":120,"title":"Color","type":"string"},"confirm":{"const":"yes","description":"Must be exactly yes, only after the user approved this change in chat.","title":"Confirm","type":"string"},"from_color":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"Color to start from; leave empty to start from the current color.","title":"From Color"},"period":{"anyOf":[{"maximum":3600,"minimum":0.1,"type":"number"},{"type":"null"}],"default":null,"description":"Seconds for one cycle (default 1).","title":"Period"},"cycles":{"anyOf":[{"maximum":1000,"minimum":1,"type":"number"},{"type":"null"}],"default":null,"description":"How many times to repeat (default 1).","title":"Cycles"},"persist":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to keep the final color after the effect; false (default) to restore the previous state.","title":"Persist"},"power_on":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True (default) to turn the light on first if it is off.","title":"Power On"}},"required":["selector","color","confirm"],"title":"breathe_effectArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":false,"x-changes-device-state":true,"x-requires-confirmation":"confirm"}},"/v1/tools/pulse_effect":{"post":{"operationId":"pulse_effect","summary":"Flash the selected lights between two colors quickly for a number of cycles. This changes the lights it selects; a broad","description":"Flash the selected lights between two colors quickly for a number of cycles. This changes the lights it selects; a broad selector such as all changes every light on the account. Use for \"Make my LIFX Desk Lamp pulse blue five times\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"selector":{"description":"Which lights: all, id:<serial>, label:<name>, group:<name>, location:<name>, group_id:, location_id: or scene_id:<uuid>; combine up to 25 with commas, for example label:Bedroom.","maxLength":300,"title":"Selector","type":"string"},"color":{"description":"A color such as red, #ff8800, rgb:255,128,0, hue:120 saturation:1.0 brightness:0.5 or kelvin:2700 brightness:0.5.","maxLength":120,"title":"Color","type":"string"},"confirm":{"const":"yes","description":"Must be exactly yes, only after the user approved this change in chat.","title":"Confirm","type":"string"},"from_color":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"Color to start from; leave empty to start from the current color.","title":"From Color"},"period":{"anyOf":[{"maximum":3600,"minimum":0.1,"type":"number"},{"type":"null"}],"default":null,"description":"Seconds for one cycle (default 1).","title":"Period"},"cycles":{"anyOf":[{"maximum":1000,"minimum":1,"type":"number"},{"type":"null"}],"default":null,"description":"How many times to repeat (default 1).","title":"Cycles"},"persist":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to keep the final color after the effect; false (default) to restore the previous state.","title":"Persist"},"power_on":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True (default) to turn the light on first if it is off.","title":"Power On"}},"required":["selector","color","confirm"],"title":"pulse_effectArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":false,"x-changes-device-state":true,"x-requires-confirmation":"confirm"}},"/v1/tools/stop_effects":{"post":{"operationId":"stop_effects","summary":"Stop any running effect (breathe, pulse, move, morph, flame) on the selected lights, optionally turning them off too. Th","description":"Stop any running effect (breathe, pulse, move, morph, flame) on the selected lights, optionally turning them off too. This changes the lights it selects; a broad selector such as all changes every light on the account. Use for \"Stop the effect on my LIFX Desk Lamp\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"selector":{"description":"Which lights: all, id:<serial>, label:<name>, group:<name>, location:<name>, group_id:, location_id: or scene_id:<uuid>; combine up to 25 with commas, for example label:Bedroom.","maxLength":300,"title":"Selector","type":"string"},"confirm":{"const":"yes","description":"Must be exactly yes, only after the user approved this change in chat.","title":"Confirm","type":"string"},"power_off":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to also turn the lights off (default false).","title":"Power Off"}},"required":["selector","confirm"],"title":"stop_effectsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":false,"x-changes-device-state":true,"x-requires-confirmation":"confirm"}},"/v1/tools/activate_scene":{"post":{"operationId":"activate_scene","summary":"Activate a saved LIFX scene, which sets every light in it to its stored state. This changes the lights it selects; a bro","description":"Activate a saved LIFX scene, which sets every light in it to its stored state. This changes the lights it selects; a broad selector such as all changes every light on the account. Use for \"Activate my LIFX Night time scene\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"scene_uuid":{"description":"Scene uuid as returned by list_scenes.","maxLength":64,"title":"Scene Uuid","type":"string"},"confirm":{"const":"yes","description":"Must be exactly yes, only after the user approved this change in chat.","title":"Confirm","type":"string"},"duration":{"anyOf":[{"maximum":3155760000,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Seconds the change takes, 0 to 3155760000 (default 1).","title":"Duration"}},"required":["scene_uuid","confirm"],"title":"activate_sceneArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":false,"x-changes-device-state":true,"x-requires-confirmation":"confirm"}}}}