{"openapi":"3.1.0","info":{"title":"Particle (BYOK) API","version":"0.1.0","description":"Particle (BYOK) lets an AI assistant read your own Particle devices and, with your approval of each change, change their state through the Particle API with a key you supply (access token (a scoped token with devices:list, devices:get, devices.variable:get and devices.function:call)). Read tools plus 1 device-changing tools (signal_device); each change runs only when confirm is yes, after you...\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: signal_device. The same tools are available over MCP (streamable HTTP) at https://byok-particle-control.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-particle-control/docs"},"termsOfService":"https://connectorbay.com/byok-particle-control/terms"},"servers":[{"url":"https://byok-particle-control.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-particle-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_devices":{"post":{"operationId":"list_devices","summary":"List the devices claimed to the account, most recently connected first, with online flag, platform, firmware and last co","description":"List the devices claimed to the account, most recently connected first, with online flag, platform, firmware and last contact time. Use for \"Which of my Particle devices are online\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_devicesArguments","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/get_device":{"post":{"operationId":"get_device","summary":"Get one device by ID: online flag, platform, firmware version, last contact, and the names of the functions and variable","description":"Get one device by ID: online flag, platform, firmware version, last contact, and the names of the functions and variables it exposes. Use for \"Which functions does Particle device 0123456789abcdef01234567 expose\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"device_id":{"description":"Particle device ID (24 hex characters).","maxLength":200,"title":"Device Id","type":"string"}},"required":["device_id"],"title":"get_deviceArguments","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/read_variable":{"post":{"operationId":"read_variable","summary":"Read the current value of one cloud variable a device exposes (for example a temperature or counter). The device must be","description":"Read the current value of one cloud variable a device exposes (for example a temperature or counter). The device must be online. Use for \"What is the temperature variable of Particle device 0123456789abcdef01234567\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"device_id":{"description":"Particle device ID (24 hex characters).","maxLength":200,"title":"Device Id","type":"string"},"variable_name":{"description":"Name of a cloud variable the device firmware exposes (see the variables list in get_device), for example temperature.","maxLength":64,"title":"Variable Name","type":"string"}},"required":["device_id","variable_name"],"title":"read_variableArguments","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/signal_device":{"post":{"operationId":"signal_device","summary":"Start or stop the rainbow LED pattern on a device so it can be found physically. This changes the LED state of the devic","description":"Start or stop the rainbow LED pattern on a device so it can be found physically. This changes the LED state of the device. Use for \"Make my Particle device 0123456789abcdef01234567 flash its LED\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"device_id":{"description":"Particle device ID (24 hex characters).","maxLength":200,"title":"Device Id","type":"string"},"signal":{"description":"1 to start the rainbow LED pattern, 0 to stop it.","maximum":1,"minimum":0,"title":"Signal","type":"integer"},"confirm":{"const":"yes","description":"Must be exactly yes, only after the user approved this change in chat.","title":"Confirm","type":"string"}},"required":["device_id","signal","confirm"],"title":"signal_deviceArguments","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"}}}}