{"openapi":"3.1.0","info":{"title":"Ubidots Values (BYOK) API","version":"0.1.0","description":"Ubidots Values (BYOK) lets an AI assistant read your own Ubidots Values data through the Ubidots Values API with a key you supply (Ubidots account token). Reads and device changes: 6 tools (list_devices, get_device_last_values, list_device_variables, get_variable, set_variable_value, set_variable_value_with_timestamp). The BYOK key travels with each request, is used for that one call only and is...\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_variable_value, set_variable_value_with_timestamp. The same tools are available over MCP (streamable HTTP) at https://byok-ubidots-values.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-ubidots-values/docs"},"termsOfService":"https://connectorbay.com/byok-ubidots-values/terms"},"servers":[{"url":"https://byok-ubidots-values.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-ubidots-values/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 Ubidots devices with label, name, active flag, last activity, tags and number of variables. Use for \"Which of my Ub","description":"List Ubidots devices with label, name, active flag, last activity, tags and number of variables. Use for \"Which of my Ubidots devices are active and when did they last report\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"page_size":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many items per page (1 to 200).","title":"Page Size"}},"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_last_values":{"post":{"operationId":"get_device_last_values","summary":"Get the latest value, timestamp and context of every variable of a device in one call. Use for \"What are the latest read","description":"Get the latest value, timestamp and context of every variable of a device in one call. Use for \"What are the latest readings of Ubidots device ~my-device\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"device_key":{"description":"Device id, or the device label with a ~ prefix such as ~my-device.","maxLength":200,"title":"Device Key","type":"string"},"only_value":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to return only the values without timestamps.","title":"Only Value"}},"required":["device_key"],"title":"get_device_last_valuesArguments","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_device_variables":{"post":{"operationId":"list_device_variables","summary":"List the variables of one device with label, type, unit, last value and last activity. Use for \"Which variables does Ubi","description":"List the variables of one device with label, type, unit, last value and last activity. Use for \"Which variables does Ubidots device ~my-device have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"device_key":{"description":"Device id, or the device label with a ~ prefix such as ~my-device.","maxLength":200,"title":"Device Key","type":"string"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"page_size":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many items per page (1 to 200).","title":"Page Size"}},"required":["device_key"],"title":"list_device_variablesArguments","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_variable":{"post":{"operationId":"get_variable","summary":"Get one variable by id with its type, unit, device, last value and properties. Use for \"Show Ubidots variable 5dfa39ee1a","description":"Get one variable by id with its type, unit, device, last value and properties. Use for \"Show Ubidots variable 5dfa39ee1a9ca53020c69391\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"variable_id":{"description":"Variable id as returned by list_variables.","maxLength":200,"title":"Variable Id","type":"string"}},"required":["variable_id"],"title":"get_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/set_variable_value":{"post":{"operationId":"set_variable_value","summary":"Write one numeric value (a dot) to a variable of a device, stamped with the reception time. For a variable that drives a","description":"Write one numeric value (a dot) to a variable of a device, stamped with the reception time. For a variable that drives an actuator, this changes the value the device will read or react to, so the physical device state can change. Ubidots creates the device and variable if they do not exist yet, and every dot counts toward the plan's data quota. Not for doors, locks, gates, alarms, cameras, vehicles or safety limits. Use for \"Set the relay variable of Ubidots device my-device to 1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"device_label":{"description":"Label of the device (its API label, not the display name), for example 'my-device'.","maxLength":100,"title":"Device Label","type":"string"},"variable_label":{"description":"Label of the variable inside the device, for example 'relay'. A variable that does not exist yet is created.","maxLength":100,"title":"Variable Label","type":"string"},"value":{"description":"Numeric value to store, for example 1 or 0 for an on/off variable, or 21.5 for a setpoint.","title":"Value","type":"number"},"confirm":{"const":"yes","description":"Must be exactly yes, only after the user approved this change in chat.","title":"Confirm","type":"string"}},"required":["device_label","variable_label","value","confirm"],"title":"set_variable_valueArguments","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/set_variable_value_with_timestamp":{"post":{"operationId":"set_variable_value_with_timestamp","summary":"Write one numeric value to a variable with an explicit timestamp in milliseconds. A device that polls the variable may a","description":"Write one numeric value to a variable with an explicit timestamp in milliseconds. A device that polls the variable may act on it, so this can change the physical device state. Ubidots creates the device and variable if they do not exist yet, and every dot counts toward the plan's data quota. Not for doors, locks, gates, alarms, cameras, vehicles or safety limits. Use for \"Record a value of 22.5 at a given time for the temperature variable of Ubidots device my-device\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"device_label":{"description":"Label of the device (its API label, not the display name), for example 'my-device'.","maxLength":100,"title":"Device Label","type":"string"},"variable_label":{"description":"Label of the variable inside the device, for example 'relay'. A variable that does not exist yet is created.","maxLength":100,"title":"Variable Label","type":"string"},"value":{"description":"Numeric value to store.","title":"Value","type":"number"},"timestamp":{"description":"Time of the value as a POSIX timestamp in milliseconds, for example 1634311791000.","minimum":0,"title":"Timestamp","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_label","variable_label","value","timestamp","confirm"],"title":"set_variable_value_with_timestampArguments","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"}}}}