components: responses: {} schemas: EmptyResponse: description: Consumer of this response should look for a http status code to comprehend the response example: '' title: EmptyResponse type: string Incident: description: Incident model example: detected_at: '2021-06-21T18:28:00.717720Z' id: 3a9c7416-ff53-48d1-b667-99e822eec29b open: false possible_actions: - reopen severity: high signal_id: 3a9c7416-ff53-48d1-b667-99e822ee0010 sonic_id: 3a9c7416-ff53-48d1-b667-99e822ee0011 state: resolved type: long_flow_alert properties: detected_at: description: The timestamp when the incident occurred. type: string id: description: Incident UUID type: string open: description: Whether the incident is opened or closed type: boolean possible_actions: description: List of available actions for the incident items: $ref: '#/components/schemas/IncidentPossibleActions' type: array severity: description: Severity of the incident enum: - low - high type: string signal_id: description: Signal UUID type: string sonic_id: description: Sonic UUID type: string state: description: State of the incident enum: - initialising - contacting - waiting_for_user - snoozed - resolved - dismissed - processing - contacted - escalation_ended type: string type: description: Incident type enum: - high_volume_alert - long_flow_alert - device_handle_moved - battery_too_low_to_move_handle - radio_disconnection - cloud_disconnection - pressure_test_failed - pressure_test_skipped - pressure_test_aborted - health_check_failed - low_battery_level - legionella_risk - legionella_high_risk - low_water_temperature - water_presence_detected - low_temperature - high_temperature - high_humidity - advanced_valve_misalignment - backup_battery_usage type: string title: Incident type: object IncidentAction: properties: action: description: An action transitioning the incident to another state e.g. resolved. type: string title: IncidentAction type: object IncidentPaginatedResponse: description: Response for multiple incidents example: data: - detected_at: '2021-06-21T18:28:00.717720Z' id: 3a9c7416-ff53-48d1-b667-99e822eec29b open: false possible_actions: - reopen severity: high signal_id: 3a9c7416-ff53-48d1-b667-99e822ee0010 sonic_id: 3a9c7416-ff53-48d1-b667-99e822ee0011 state: resolved type: long_flow_alert page_number: 1 page_size: 10 total_entries: 10 total_pages: 2 properties: data: items: $ref: '#/components/schemas/Incident' type: array page_number: type: number page_size: type: number total_entries: type: number total_pages: type: number title: IncidentPaginatedResponse type: object IncidentPossibleActions: title: IncidentPossibleActions type: string JsonErrorResponse: properties: errors: items: properties: detail: example: null value where string expected type: string source: properties: pointer: example: /data/attributes/petName type: string required: - pointer type: object title: example: Invalid value type: string required: - title - source - detail type: object type: array required: - errors title: JsonErrorResponse type: object NotificationSettings: description: Notification settings data example: battery_too_low_to_move_handle: true cloud_disconnection: true device_handle_moved: true health_check_failed: true high_humidity: true high_humidity_threshold: true high_temperature: true high_temperature_threshold: true high_volume_threshold_litres: 200 legionella_risk: true long_flow_notification_delay_mins: 60 low_battery_level: true low_temperature: true low_temperature_threshold: true low_water_temperature: true pressure_test_failed: true pressure_test_skipped: true radio_disconnection: true water_presence_detected: true properties: battery_too_low_to_move_handle: description: Handle couldn't be moved due to low battery notification type: boolean cloud_disconnection: description: Cloud disconnection notification (e.g. internet failure) type: boolean device_handle_moved: description: Handle moved notification (e.g. manually closing the valve) type: boolean health_check_failed: description: Health check failed notification type: boolean high_humidity: description: High humidity notification type: boolean high_humidity_threshold: description: High humidity notification threshold type: boolean high_temperature: description: High temperature notification type: boolean high_temperature_threshold: description: High temperature notification threshold type: boolean high_volume_threshold_litres: description: Send a notification when we identify water is constantly running and the volume is more than X liters. type: integer legionella_risk: description: Legionella stagnation and temperature checks will made every day if true type: boolean long_flow_notification_delay_mins: description: Send a notification when we identify water is constantly running for over than X mins. type: integer low_battery_level: description: Low battery notification type: boolean low_temperature: description: Low temperature notification type: boolean low_temperature_threshold: description: Low temperature notification threshold type: boolean low_water_temperature: description: Low water temperature notification type: boolean pressure_test_failed: description: Pressure test failed notification type: boolean pressure_test_skipped: description: Pressure test skipped notification type: boolean radio_disconnection: description: Radio disconnection notification (e.g. Sonic cannot connect to Bridge) type: boolean water_presence_detected: description: Water presence detected notification type: boolean title: NotificationSettings type: object PropertiesPaginatedResponse: description: Response for multiple properties example: data: - active: true address: Kensington Gardens city: London country: United Kingdom created_at: '2022-01-22T10:20:30.000Z' id: 7bcb5fe0-abcd-25e7-93c5-6e6a71c123d2 lat: 51.5158392 lng: -0.1114453 name: Kensington Gardens postcode: W8 4PX uprn: '' page_number: 1 page_size: 10 total_entries: 10 total_pages: 2 properties: data: items: $ref: '#/components/schemas/Property' type: array page_number: type: number page_size: type: number total_entries: type: number total_pages: type: number title: PropertiesPaginatedResponse type: object Property: allOf: - $ref: '#/components/schemas/PropertyUpdate' description: Property model example: active: true address: Kensington Gardens city: London country: United Kingdom created_at: '2022-01-22T10:20:30.000Z' id: 7bcb5fe0-abcd-25e7-93c5-6e6a71c123d2 lat: 51.5158392 lng: -0.1114453 name: Kensington Gardens postcode: W8 4PX uprn: '' properties: id: description: Property ID type: string title: Property type: object PropertySettings: description: Property settings data example: auto_shut_off: true pressure_tests_enabled: true pressure_tests_schedule: 03:00:00 timezone: Europe/London webhook_enabled: true webhook_url: https://api.acme.com/webhooks properties: auto_shut_off: description: Automatic shut off type: boolean pressure_tests_enabled: description: Enable or disable the pressure test type: boolean pressure_tests_schedule: description: The time of day when the pressure test runs, formatted as HH:MM:SS in a 24-hour clock. in 24h clock. type: string timezone: description: The time zone of the property. type: string webhook_enabled: description: Enable or disable the webhook type: boolean webhook_url: description: Webhook url type: string title: PropertySettings type: object PropertyUpdate: example: active: true address: Kensington Gardens city: London country: United Kingdom created_at: '2022-01-22T10:20:30.000Z' lat: 51.5158392 lng: -0.1114453 name: Kensington Gardens postcode: W8 4PX uprn: '' properties: active: description: Whether the property is active or not type: boolean address: description: Property address type: string city: description: Property city type: string country: description: Property country type: string created_at: description: Date when the property has been created. type: string lat: description: Property latitude type: number lng: description: Property longitude type: number name: description: Property name type: string postcode: description: Property postcode type: string uprn: description: Property uprn type: string title: PropertyUpdate type: object Signal: description: Signal model example: boot_time: 1622972033 cloud_connection: connected created_at: '2022-01-22T10:20:30.000Z' id: 7bcb5fe0-a28a-25e7-93c5-6e6a71c123d2 modem_boot_time: 1623526880 modem_version: 1.2.535-84ea330 name: This is my Signal name serial_no: fd3c164c13b2d20e version: 1.2.547-c8efc17 wifi_rssi: -69 properties: boot_time: description: Signal boot time timestamp type: number cloud_connection: description: Cloud connection status enum: - connected - disconnected type: string created_at: description: The date when the Signal was registered. type: string id: description: Signal UUID type: string modem_boot_time: description: Modem boot time timestamp type: number modem_version: description: Modem Signal Version type: string name: description: Signal name type: string serial_no: description: Signal Serial Number type: string version: description: Signal Version type: string wifi_rssi: description: Wi-Fi RSSI (Received Signal Strength Indicator). type: integer title: Signal type: object SignalsPaginatedResponse: description: Response for multiple Signals example: data: - boot_time: 1622972033 cloud_connection: connected created_at: '2022-01-22T10:20:30.000Z' id: 7bcb5fe0-a28a-25e7-93c5-6e6a71c123d2 modem_boot_time: 1623526880 modem_version: 1.2.535-84ea330 name: This is my Signal name serial_no: fd3c164c13b2d20e version: 1.2.547-c8efc17 wifi_rssi: -69 page_number: 1 page_size: 10 total_entries: 10 total_pages: 2 properties: data: items: $ref: '#/components/schemas/Signal' type: array page_number: type: number page_size: type: number total_entries: type: number total_pages: type: number title: SignalsPaginatedResponse type: object Sonic: description: Sonic model example: battery: external_power_supply created_at: '2022-01-22T10:20:30.000Z' id: 39bdc4af-a1b8-47d4-8342-82d311e5538e name: This is my Sonic name radio_connection: connected radio_rssi: 166 serial_no: 20fa74b6bffabc12 signal_id: 39bdc4af-a1b8-47d4-8342-82d311e1234e status: active valve_state: open properties: battery: description: The current battery level of the Sonic device. enum: - external_power_supply - high - mid - low type: string created_at: description: Date when the Sonic has been registered. type: string id: description: Sonic UUID type: string name: description: Sonic name type: string radio_connection: description: The status of the radio connection. enum: - connected - disconnected type: string radio_rssi: description: 'Radio rssi with values: < 60 no connection, 100 - 120 good, > 120 very good' type: integer serial_no: description: Serial Number type: string signal_id: description: Signal UUID type: string status: description: Sonic status type: string valve_state: description: Valve state enum: - open - closed - opening - closing - faulty - pressure_test - requested_open - requested_closed type: string title: Sonic type: object SonicPaginatedResponse: description: Response for multiple Sonics example: data: - battery: external_power_supply created_at: '2022-01-22T10:20:30.000Z' id: 39bdc4af-a1b8-47d4-8342-82d311e5538e name: This is my Sonic name radio_connection: connected radio_rssi: 166 serial_no: 20fa74b6bffabc12 signal_id: 39bdc4af-a1b8-47d4-8342-82d311e1234e status: active valve_state: open page_number: 1 page_size: 10 total_entries: 10 total_pages: 2 properties: data: items: $ref: '#/components/schemas/Sonic' type: array page_number: type: number page_size: type: number total_entries: type: number total_pages: type: number title: SonicPaginatedResponse type: object SonicUpdateRequest: properties: name: description: Sonic name type: string title: SonicUpdateRequest type: object SonicUpdateValveRequest: properties: action: description: Action for opening or closing the valve. enum: - open - close type: string required: - action title: SonicUpdateValveRequest type: object Telemetry: description: The latest telemetry details example: pressure: 3252 probed_at: 1623414482 water_flow: 0 water_temp: 17.1 properties: pressure: description: Pressure in millibar type: number probed_at: description: The Unix timestamp (in seconds) when the Sonic recorded measurements. type: number water_flow: description: The average water flow rate in milliliters per minute. type: number water_temp: description: "Water temperature in \xB0C" type: number title: Telemetry type: object UpdateRequest: properties: name: description: Signal name type: string title: UpdateRequest type: object securitySchemes: BearerAuth: type: http scheme: bearer bearerFormat: JWT info: title: Watergate Cloud API version: 2025.1.0 description: | ## Authentication This API uses **Bearer Token authentication** with a **refresh token flow**. ### Step 1 - Login Use your credentials to authenticate and get an `access_token` and `refresh_token`. ### Step 2 - Use Access Token Include the `access_token` in the Authorization header: ```bash Authorization: Bearer your_token_here ### Step 3 - Refresh When your access token expires, use the `refresh_token` to get a new access token. --- Tokens must be kept secure. Never expose them in public repositories or client-side code. openapi: 3.0.0 paths: /ape/v1/incidents: get: callbacks: {} operationId: Ape.Controllers.IncidentController.index parameters: - description: '' in: query name: type required: false schema: description: Incident type enum: - high_volume_alert - long_flow_alert - device_handle_moved - battery_too_low_to_move_handle - radio_disconnection - cloud_disconnection - pressure_test_failed - pressure_test_skipped - pressure_test_aborted - health_check_failed - low_battery_level - legionella_risk - legionella_high_risk - low_water_temperature - water_presence_detected - low_temperature - high_temperature - high_humidity - advanced_valve_misalignment - backup_battery_usage type: string - description: '' in: query name: open required: false schema: description: Indicates whether the incident is open or closed. type: boolean - description: Page number that is used for the pagination. in: query name: page required: false schema: type: integer responses: '200': content: application/json: schema: $ref: '#/components/schemas/IncidentPaginatedResponse' description: Incident response '400': description: Bad request '401': description: Unauthorized '403': description: Forbidden '422': content: application/json: schema: $ref: '#/components/schemas/JsonErrorResponse' description: Unprocessable Entity summary: Retrieve all accessible incidents tags: - Incidents /ape/v1/incidents/{id}: get: callbacks: {} operationId: Ape.Controllers.IncidentController.show parameters: - description: Incident UUID in: path name: id required: true schema: type: string responses: '200': content: application/json: schema: $ref: '#/components/schemas/Incident' description: Incident response '400': description: Bad request '401': description: Unauthorized '403': description: Forbidden '422': content: application/json: schema: $ref: '#/components/schemas/JsonErrorResponse' description: Unprocessable Entity summary: Get an incident tags: - Incidents /ape/v1/incidents/{incident_id}/action: put: callbacks: {} operationId: Ape.Controllers.IncidentController.trigger_action parameters: - description: Incident UUID in: path name: incident_id required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/IncidentAction' description: Body required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/Incident' description: Incident response '400': description: Bad request '401': description: Unauthorized '403': description: Forbidden '422': content: application/json: schema: $ref: '#/components/schemas/JsonErrorResponse' description: Unprocessable Entity summary: Transition an incident to a different state tags: - Incidents /ape/v1/properties: get: callbacks: {} operationId: Ape.Controllers.PropertyController.index parameters: - description: Property name in: query name: name required: false schema: type: string - description: 'Membership role of requesting user, one of: owner, user, guest.' in: query name: membership_role required: false schema: type: string - description: Search parameter to filter properties in: query name: search required: false schema: type: string - description: Page number that is used for the pagination. in: query name: page required: false schema: type: integer responses: '200': content: application/json: schema: $ref: '#/components/schemas/PropertiesPaginatedResponse' description: OK '400': description: Bad request '401': description: Unauthorized '403': description: Forbidden '422': content: application/json: schema: $ref: '#/components/schemas/JsonErrorResponse' description: Unprocessable Entity summary: Retrieve all accessible properties tags: - Properties /ape/v1/properties/{id}: get: callbacks: {} operationId: Ape.Controllers.PropertyController.show parameters: - description: Property UUID in: path name: id required: true schema: type: string responses: '200': content: application/json: schema: $ref: '#/components/schemas/Property' description: OK '400': description: Bad request '401': description: Unauthorized '403': description: Forbidden '422': content: application/json: schema: $ref: '#/components/schemas/JsonErrorResponse' description: Unprocessable Entity summary: Get property tags: - Properties patch: callbacks: {} operationId: Ape.Controllers.PropertyController.update parameters: - description: Property UUID in: path name: id required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/PropertyUpdate' description: Body required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/Property' description: OK '400': description: Bad request '401': description: Unauthorized '403': description: Forbidden '422': content: application/json: schema: $ref: '#/components/schemas/JsonErrorResponse' description: Unprocessable Entity summary: Modify property tags: - Properties put: callbacks: {} operationId: Ape.Controllers.PropertyController.update_2 parameters: - description: Property UUID in: path name: id required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/PropertyUpdate' description: Body required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/Property' description: OK '400': description: Bad request '401': description: Unauthorized '403': description: Forbidden '422': content: application/json: schema: $ref: '#/components/schemas/JsonErrorResponse' description: Unprocessable Entity summary: Modify property tags: - Properties /ape/v1/properties/{property_id}/incidents: get: callbacks: {} operationId: Ape.Controllers.IncidentController.index_property_incidents parameters: - description: '' in: query name: type required: false schema: description: Incident type enum: - high_volume_alert - long_flow_alert - device_handle_moved - battery_too_low_to_move_handle - radio_disconnection - cloud_disconnection - pressure_test_failed - pressure_test_skipped - pressure_test_aborted - health_check_failed - low_battery_level - legionella_risk - legionella_high_risk - low_water_temperature - water_presence_detected - low_temperature - high_temperature - high_humidity - advanced_valve_misalignment - backup_battery_usage type: string - description: '' in: query name: open required: false schema: description: Whether the incident is opened or closed type: boolean - description: Property UUID in: path name: property_id required: true schema: type: string - description: Page number that is used for the pagination. in: query name: page required: false schema: type: integer responses: '200': content: application/json: schema: $ref: '#/components/schemas/IncidentPaginatedResponse' description: Incident response '400': description: Bad request '401': description: Unauthorized '403': description: Forbidden '404': content: application/json: schema: $ref: '#/components/schemas/EmptyResponse' description: Not found '422': content: application/json: schema: $ref: '#/components/schemas/JsonErrorResponse' description: Unprocessable Entity summary: Retrieve all incidents for property tags: - Incidents - Properties /ape/v1/properties/{property_id}/notifications: get: callbacks: {} operationId: Ape.Controllers.NotificationController.get parameters: - description: Property UUID in: path name: property_id required: true schema: type: string responses: '200': content: application/json: schema: $ref: '#/components/schemas/NotificationSettings' description: OK '400': description: Bad request '401': description: Unauthorized '403': description: Forbidden '422': content: application/json: schema: $ref: '#/components/schemas/JsonErrorResponse' description: Unprocessable Entity summary: Get property notification settings tags: - Property settings - Properties put: callbacks: {} operationId: Ape.Controllers.NotificationController.put parameters: - description: Property UUID in: path name: property_id required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/NotificationSettings' description: Body required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/NotificationSettings' description: OK '400': description: Bad request '401': description: Unauthorized '403': description: Forbidden '422': content: application/json: schema: $ref: '#/components/schemas/JsonErrorResponse' description: Unprocessable Entity summary: Modify property notification settings tags: - Property settings - Properties /ape/v1/properties/{property_id}/settings: get: callbacks: {} operationId: Ape.Controllers.PropertySettingsController.get parameters: - description: Property UUID in: path name: property_id required: true schema: type: string responses: '200': content: application/json: schema: $ref: '#/components/schemas/PropertySettings' description: OK '400': description: Bad request '401': description: Unauthorized '403': description: Forbidden '422': content: application/json: schema: $ref: '#/components/schemas/JsonErrorResponse' description: Unprocessable Entity summary: Get property settings tags: - Property settings - Properties put: callbacks: {} operationId: Ape.Controllers.PropertySettingsController.put parameters: - description: Property UUID in: path name: property_id required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/PropertySettings' description: Body required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/PropertySettings' description: OK '400': description: Bad request '401': description: Unauthorized '403': description: Forbidden '422': content: application/json: schema: $ref: '#/components/schemas/JsonErrorResponse' description: Unprocessable Entity summary: Modify property settings tags: - Property settings - Properties /ape/v1/properties/{property_id}/signals: get: callbacks: {} operationId: Ape.Controllers.SignalController.index_property_signals parameters: - description: Property UUID in: path name: property_id required: true schema: type: string - description: Page number that is used for the pagination. in: query name: page required: false schema: type: integer responses: '200': content: application/json: schema: $ref: '#/components/schemas/SignalsPaginatedResponse' description: OK '400': description: Bad request '401': description: Unauthorized '403': description: Forbidden '404': content: application/json: schema: $ref: '#/components/schemas/EmptyResponse' description: Not found '422': content: application/json: schema: $ref: '#/components/schemas/JsonErrorResponse' description: Unprocessable Entity summary: Retrieve all Signals for property tags: - Signals - Properties /ape/v1/signals: get: callbacks: {} operationId: Ape.Controllers.SignalController.index parameters: - description: Signal name in: query name: name required: false schema: type: string - description: Page number that is used for the pagination. in: query name: page required: false schema: type: integer responses: '200': content: application/json: schema: $ref: '#/components/schemas/SignalsPaginatedResponse' description: OK '400': description: Bad request '401': description: Unauthorized '403': description: Forbidden '422': content: application/json: schema: $ref: '#/components/schemas/JsonErrorResponse' description: Unprocessable Entity summary: Retrieve all accessible Signals tags: - Signals /ape/v1/signals/{id}: get: callbacks: {} operationId: Ape.Controllers.SignalController.show parameters: - description: Signal UUID in: path name: id required: true schema: type: string responses: '200': content: application/json: schema: $ref: '#/components/schemas/Signal' description: OK '400': description: Bad request '401': description: Unauthorized '403': description: Forbidden '404': content: application/json: schema: $ref: '#/components/schemas/EmptyResponse' description: Not found '422': content: application/json: schema: $ref: '#/components/schemas/JsonErrorResponse' description: Unprocessable Entity summary: Get Signal tags: - Signals patch: callbacks: {} operationId: Ape.Controllers.SignalController.update parameters: - description: Signal UUID in: path name: id required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateRequest' description: Body required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/Signal' description: OK '400': description: Bad request '401': description: Unauthorized '403': description: Forbidden '422': content: application/json: schema: $ref: '#/components/schemas/JsonErrorResponse' description: Unprocessable Entity summary: Modify Signal tags: - Signals put: callbacks: {} operationId: Ape.Controllers.SignalController.update_2 parameters: - description: Signal UUID in: path name: id required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateRequest' description: Body required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/Signal' description: OK '400': description: Bad request '401': description: Unauthorized '403': description: Forbidden '422': content: application/json: schema: $ref: '#/components/schemas/JsonErrorResponse' description: Unprocessable Entity summary: Modify Signal tags: - Signals /ape/v1/signals/{signal_id}/sonics: get: callbacks: {} operationId: Ape.Controllers.SonicController.index_signal_sonics parameters: - description: Signal UUID in: path name: signal_id required: true schema: type: string - description: Page number that is used for the pagination. in: query name: page required: false schema: type: integer responses: '200': content: application/json: schema: $ref: '#/components/schemas/SonicPaginatedResponse' description: Incident response '400': description: Bad request '401': description: Unauthorized '403': description: Forbidden '404': content: application/json: schema: $ref: '#/components/schemas/EmptyResponse' description: Not found '422': content: application/json: schema: $ref: '#/components/schemas/JsonErrorResponse' description: Unprocessable Entity summary: Retrieve all Sonics for a Signal tags: - Sonics - Signals /ape/v1/sonics: get: callbacks: {} operationId: Ape.Controllers.SonicController.index parameters: - description: Sonic name in: query name: name required: false schema: type: string - description: Page number that is used for the pagination. in: query name: page required: false schema: type: integer responses: '200': content: application/json: schema: $ref: '#/components/schemas/SonicPaginatedResponse' description: OK '400': description: Bad request '401': description: Unauthorized '403': description: Forbidden '422': content: application/json: schema: $ref: '#/components/schemas/JsonErrorResponse' description: Unprocessable Entity summary: Retrieve all accessible Sonics tags: - Sonics /ape/v1/sonics/{id}: get: callbacks: {} operationId: Ape.Controllers.SonicController.show parameters: - description: Sonic UUID in: path name: id required: true schema: type: string responses: '200': content: application/json: schema: $ref: '#/components/schemas/Sonic' description: OK '400': description: Bad request '401': description: Unauthorized '403': description: Forbidden '404': content: application/json: schema: $ref: '#/components/schemas/EmptyResponse' description: Not found '422': content: application/json: schema: $ref: '#/components/schemas/JsonErrorResponse' description: Unprocessable Entity summary: Get Sonic tags: - Sonics patch: callbacks: {} operationId: Ape.Controllers.SonicController.update parameters: - description: Sonic UUID in: path name: id required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/SonicUpdateRequest' description: Body required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/Sonic' description: OK '400': description: Bad request '401': description: Unauthorized '403': description: Forbidden '404': content: application/json: schema: $ref: '#/components/schemas/EmptyResponse' description: Not found '422': content: application/json: schema: $ref: '#/components/schemas/JsonErrorResponse' description: Unprocessable Entity summary: Modify Sonic tags: - Sonics put: callbacks: {} operationId: Ape.Controllers.SonicController.update_2 parameters: - description: Sonic UUID in: path name: id required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/SonicUpdateRequest' description: Body required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/Sonic' description: OK '400': description: Bad request '401': description: Unauthorized '403': description: Forbidden '404': content: application/json: schema: $ref: '#/components/schemas/EmptyResponse' description: Not found '422': content: application/json: schema: $ref: '#/components/schemas/JsonErrorResponse' description: Unprocessable Entity summary: Modify Sonic tags: - Sonics /ape/v1/sonics/{sonic_id}/telemetry: get: callbacks: {} operationId: Ape.Controllers.TelemetryController.get parameters: - description: Sonic UUID in: path name: sonic_id required: true schema: type: string responses: '200': content: application/json: schema: $ref: '#/components/schemas/Telemetry' description: OK '400': description: Bad request '401': description: Unauthorized '403': description: Forbidden '404': content: application/json: schema: $ref: '#/components/schemas/EmptyResponse' description: Not found '422': content: application/json: schema: $ref: '#/components/schemas/JsonErrorResponse' description: Unprocessable Entity summary: Get the latest telemetry details tags: - Telemetry details /ape/v1/sonics/{sonic_id}/valve: put: callbacks: {} operationId: Ape.Controllers.ValveController.update parameters: - description: Sonic UUID in: path name: sonic_id required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/SonicUpdateValveRequest' description: Body required: false responses: '200': description: OK '400': description: Bad request '401': description: Unauthorized '403': description: Forbidden '422': description: Unable to change the valve state at this moment as the state might be already changing. summary: Control the Sonic valve (open or close) tags: - Valve control security: - BearerAuth: [] servers: - url: https://api.watergate.ai description: Production server