{"openapi":"3.1.0","info":{"title":"Particle (BYOK) API","version":"0.1.0","description":"Particle (BYOK) lets an AI assistant read your own Particle data through the Particle API with a key you supply (access token). Read-only: 4 tools (list_devices, get_device, list_product_devices, get_product_device). The BYOK key travels with each request, is used for that one call only and is never stored, logged or cached; it is only ever sent to api.particle.io. Unofficial connector by Unify...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-particle.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-particle/docs"},"termsOfService":"https://connectorbay.com/byok-particle/terms"},"servers":[{"url":"https://byok-particle.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-particle/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, exposed functions and variables. Use for \"W","description":"Get one device by ID: online flag, platform, firmware version, last contact, exposed functions and variables. Use for \"When did Particle device 0123456789abcdef01234567 last connect\".","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/list_product_devices":{"post":{"operationId":"list_product_devices","summary":"List devices of a product fleet with optional filters and sorting. Needs a token with devices:list scope. Pages of 25 by","description":"List devices of a product fleet with optional filters and sorting. Needs a token with devices:list scope. Pages of 25 by default. Use for \"Which devices in my Particle product are running old firmware\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"product_id_or_slug":{"description":"Product ID or slug.","maxLength":200,"title":"Product Id Or Slug","type":"string"},"device_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Partial device name to match.","title":"Device Name"},"device_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Partial device ID to match.","title":"Device Id"},"sort_attr":{"anyOf":[{"enum":["deviceName","deviceId","firmwareVersion","lastConnection"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort by deviceName, deviceId, firmwareVersion or lastConnection.","title":"Sort Attr"},"sort_dir":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction: asc or desc.","title":"Sort Dir"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Records per page (default 25).","title":"Per Page"}},"required":["product_id_or_slug"],"title":"list_product_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_product_device":{"post":{"operationId":"get_product_device","summary":"Get one device of a product fleet: firmware, desired firmware, groups, quarantine state and last contact. Needs devices:","description":"Get one device of a product fleet: firmware, desired firmware, groups, quarantine state and last contact. Needs devices:get scope. Use for \"What firmware is device 0123456789abcdef01234567 of my Particle product running\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"product_id_or_slug":{"description":"Product ID or slug.","maxLength":200,"title":"Product Id Or Slug","type":"string"},"device_id":{"description":"Particle device ID (24 hex characters).","maxLength":200,"title":"Device Id","type":"string"}},"required":["product_id_or_slug","device_id"],"title":"get_product_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}}}}