{"openapi":"3.1.0","info":{"title":"Disruptive Technologies (BYOK) API","version":"0.1.0","description":"Disruptive Technologies (BYOK) lets an AI assistant read your own Disruptive Technologies data through the Disruptive Technologies API with a key you supply (DT Studio service account Key ID (paste the service account Secret as the second value)). Read-only: 6 tools (list_organizations, list_projects, get_project, list_devices, get_device, list_device_events). The BYOK key travels with each...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-disruptive.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-disruptive/docs"},"termsOfService":"https://connectorbay.com/byok-disruptive/terms"},"servers":[{"url":"https://byok-disruptive.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-disruptive/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_organizations":{"post":{"operationId":"list_organizations","summary":"List the organizations the service account can access with their display names. Use for \"Which Disruptive Technologies o","description":"List the organizations the service account can access with their display names. Use for \"Which Disruptive Technologies organizations can I see\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many items per page (1 to 1000).","title":"Page Size"},"page_token":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Page token: the nextPageToken value of the previous answer. Leave out for the first page.","title":"Page Token"}},"title":"list_organizationsArguments","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_projects":{"post":{"operationId":"list_projects","summary":"List projects with display name, organization, number of sensors and cloud connectors, and location. Use for \"Which DT S","description":"List projects with display name, organization, number of sensors and cloud connectors, and location. Use for \"Which DT Studio projects do I have and how many sensors are in each\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"organization":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only projects of this organization, for example 'organizations/c0a1'.","title":"Organization"},"query":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only projects whose name contains this text.","title":"Query"},"page_size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many items per page (1 to 1000).","title":"Page Size"},"page_token":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Page token: the nextPageToken value of the previous answer. Leave out for the first page.","title":"Page Token"}},"title":"list_projectsArguments","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_project":{"post":{"operationId":"get_project","summary":"Get one project: display name, organization, sensor and cloud connector counts, location and labels. Use for \"Show the d","description":"Get one project: display name, organization, sensor and cloud connector counts, location and labels. Use for \"Show the details of DT Studio project c0a1b2c3d4e5f6\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project":{"description":"Project id (the part after 'projects/' in a project name from list_projects), or '-' for all projects you can access where the API allows it.","maxLength":80,"title":"Project","type":"string"}},"required":["project"],"title":"get_projectArguments","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_devices":{"post":{"operationId":"list_devices","summary":"List sensors and cloud connectors in a project with type, labels, product number, active flag and the latest reported ne","description":"List sensors and cloud connectors in a project with type, labels, product number, active flag and the latest reported network and battery status. Use for \"Which of my Disruptive sensors are deactivated or have a weak signal\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project":{"description":"Project id (the part after 'projects/' in a project name from list_projects), or '-' for all projects you can access where the API allows it.","maxLength":80,"title":"Project","type":"string"},"device_type":{"anyOf":[{"enum":["temperature","touch","proximity","humidity","touchCounter","proximityCounter","waterDetector","co2","motion","contact","deskOccupancy","ccon"],"type":"string"},{"type":"null"}],"default":null,"description":"Only this device type.","title":"Device Type"},"activation_filter":{"anyOf":[{"enum":["ONLY_ACTIVATED_DEVICES","ONLY_DEACTIVATED_DEVICES"],"type":"string"},{"type":"null"}],"default":null,"description":"Only activated or only deactivated devices.","title":"Activation Filter"},"emulator_filter":{"anyOf":[{"enum":["ONLY_EMULATORS","ONLY_NON_EMULATORS"],"type":"string"},{"type":"null"}],"default":null,"description":"Only emulated or only real devices.","title":"Emulator Filter"},"query":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only devices matching this text (name, label or id).","title":"Query"},"page_size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many items per page (1 to 1000).","title":"Page Size"},"page_token":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Page token: the nextPageToken value of the previous answer. Leave out for the first page.","title":"Page Token"}},"required":["project"],"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 sensor or cloud connector: type, labels, product number, active flag and the latest reported network and battery","description":"Get one sensor or cloud connector: type, labels, product number, active flag and the latest reported network and battery status. Use for \"Show the status of Disruptive sensor emuc0a1b2\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project":{"description":"Project id (the part after 'projects/' in a project name from list_projects), or '-' for all projects you can access where the API allows it.","maxLength":80,"title":"Project","type":"string"},"device":{"description":"Device id (the part after 'devices/' in a device name, for example 'emuc0a1b2').","maxLength":80,"title":"Device","type":"string"}},"required":["project","device"],"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_device_events":{"post":{"operationId":"list_device_events","summary":"List historical events of one device (temperature, humidity, touch, proximity, motion, contact, CO2 and more) in a time ","description":"List historical events of one device (temperature, humidity, touch, proximity, motion, contact, CO2 and more) in a time range. Use for \"What temperatures did sensor emuc0a1b2 report in the last day\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project":{"description":"Project id (the part after 'projects/' in a project name from list_projects), or '-' for all projects you can access where the API allows it.","maxLength":80,"title":"Project","type":"string"},"device":{"description":"Device id (the part after 'devices/' in a device name, for example 'emuc0a1b2').","maxLength":80,"title":"Device","type":"string"},"event_type":{"anyOf":[{"enum":["touch","temperature","objectPresent","humidity","objectPresentCount","touchCount","waterPresent","co2","pressure","motion","contact","probeWireStatus"],"type":"string"},{"type":"null"}],"default":null,"description":"Only this event type.","title":"Event Type"},"start_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the range as an RFC 3339 time, for example 2026-10-16T00:00:00Z.","title":"Start Time"},"end_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"End of the range as an RFC 3339 time.","title":"End Time"},"page_size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many items per page (1 to 1000).","title":"Page Size"},"page_token":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Page token: the nextPageToken value of the previous answer. Leave out for the first page.","title":"Page Token"}},"required":["project","device"],"title":"list_device_eventsArguments","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}}}}