infra/roles/hass-nginx/files/valetudo-api.json

10142 lines
337 KiB
JSON

{
"swaggerDoc": {
"openapi": "3.0.0",
"info": {
"title": "Valetudo REST API",
"version": "2023.05.0"
},
"tags": [
{
"name": "Valetudo",
"description": "Valetudo management API"
},
{
"name": "ValetudoEvents",
"description": "Valetudo Events"
},
{
"name": "Robot",
"description": "Robot API"
},
{
"name": "System",
"description": "System API"
},
{
"name": "MQTT",
"description": "MQTT Controller API"
},
{
"name": "NetworkAdvertisement",
"description": "Network Advertisement Manager API"
},
{
"name": "NTP",
"description": "NTP Client API"
},
{
"name": "Timers",
"description": "Timers API"
},
{
"name": "Updater",
"description": "Update Valetudo using Valetudo"
},
{
"name": "BasicControlCapability",
"description": "Basic control capability"
},
{
"name": "FanSpeedControlCapability",
"description": "Fan speed control capability"
},
{
"name": "WaterUsageControlCapability",
"description": "Water usage control capability"
},
{
"name": "WifiConfigurationCapability",
"description": "Wi-Fi configuration capability"
},
{
"name": "WifiScanCapability",
"description": "Wi-Fi scan capability"
},
{
"name": "ZoneCleaningCapability",
"description": "Zone cleaning capability"
},
{
"name": "MapSegmentationCapability",
"description": "Map segment cleaning capability"
},
{
"name": "ManualControlCapability",
"description": "Manual control capability"
},
{
"name": "DoNotDisturbCapability",
"description": "Do-not-disturb configuration capability"
},
{
"name": "ConsumableMonitoringCapability",
"description": "Consumable monitoring capability"
},
{
"name": "LocateCapability",
"description": "Robot locate capability"
},
{
"name": "CarpetModeControlCapability",
"description": "Carpet mode settings capability"
},
{
"name": "MapResetCapability",
"description": "Map reset capability"
},
{
"name": "MapSegmentEditCapability",
"description": "Map segment edit capability"
},
{
"name": "MapSegmentRenameCapability",
"description": "Map segment rename capability"
},
{
"name": "SpeakerTestCapability",
"description": "Speaker test capability"
},
{
"name": "SpeakerVolumeControlCapability",
"description": "Speaker volume control capability"
},
{
"name": "VoicePackManagementCapability",
"description": "Voice pack management capability"
},
{
"name": "CombinedVirtualRestrictionsCapability",
"description": "Combined virtual restrictions capability"
},
{
"name": "PendingMapChangeHandlingCapability",
"description": "Pending map change handling capability"
},
{
"name": "MappingPassCapability",
"description": "Mapping pass capability"
},
{
"name": "KeyLockCapability",
"description": "Key lock capability"
}
],
"components": {
"responses": {
"200": {
"description": "Ok"
},
"201": {
"description": "Created"
},
"202": {
"description": "Accepted"
},
"400": {
"description": "Bad request"
},
"403": {
"description": "Forbidden"
},
"404": {
"description": "Not found"
},
"500": {
"description": "Internal server error"
}
},
"parameters": {},
"securitySchemes": {
"BasicAuth": {
"type": "http",
"scheme": "basic"
}
},
"schemas": {
"CoordinateDTO": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
},
"ScheduleTimeDTO": {
"type": "object",
"properties": {
"hour": {
"type": "integer"
},
"minute": {
"type": "integer"
}
}
},
"Configuration": {
"type": "object",
"additionalProperties": false,
"properties": {
"embedded": {
"type": "boolean",
"description": "Whether or not Valetudo is running on the robot itself.\nDetermines if we can do FS access and more."
},
"robot": {
"type": "object",
"additionalProperties": false,
"required": [
"implementation"
],
"properties": {
"implementation": {
"type": "string",
"description": "The name of the implementation that should be used.\nUse \"auto\" to autodetect when embedded."
},
"implementationSpecificConfig": {
"type": "object"
}
}
},
"webserver": {
"type": "object",
"additionalProperties": false,
"required": [
"port",
"basicAuth"
],
"properties": {
"port": {
"type": "number"
},
"basicAuth": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled",
"username",
"password"
],
"properties": {
"enabled": {
"type": "boolean"
},
"username": {
"type": "string"
},
"password": {
"type": "string"
}
}
},
"blockExternalAccess": {
"type": "boolean"
}
}
},
"mqtt": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled",
"connection",
"identity",
"customizations",
"interfaces"
],
"properties": {
"enabled": {
"type": "boolean"
},
"connection": {
"type": "object",
"additionalProperties": false,
"required": [
"host",
"port"
],
"properties": {
"host": {
"type": "string"
},
"port": {
"type": "integer",
"minimum": 1,
"maximum": 65535
},
"tls": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean"
},
"ca": {
"type": "string",
"description": "This may optionally contain a CA certificate as a multi-line string. Filesystem paths are not supported."
},
"ignoreCertificateErrors": {
"type": "boolean",
"description": "This option might be required when using a self-signed cert. Note that you will be exposing yourself to MITM attacks."
}
}
},
"authentication": {
"type": "object",
"additionalProperties": false,
"properties": {
"credentials": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean"
},
"username": {
"type": "string"
},
"password": {
"type": "string"
}
}
},
"clientCertificate": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean"
},
"certificate": {
"type": "string",
"description": "The full certificate as a multi-line string. Filesystem paths are not supported."
},
"key": {
"type": "string",
"description": "The full key as a multi-line string. Filesystem paths are not supported."
}
}
}
}
}
}
},
"identity": {
"type": "object",
"additionalProperties": false,
"properties": {
"identifier": {
"type": "string",
"description": "The desired machine-readable name of the robot. Used in MQTT topics. Defaults to the auto-generated machine ID"
}
}
},
"customizations": {
"type": "object",
"additionalProperties": false,
"properties": {
"topicPrefix": {
"type": "string",
"description": "You can override the default \"valetudo\" mqtt topic prefix if you e.g. prefer to group all your mqtt stuff by rooms/floors/protocols"
},
"provideMapData": {
"type": "boolean",
"description": "If for some reason you're not interested in receiving map data via MQTT, you can disable that here."
}
}
},
"interfaces": {
"type": "object",
"additionalProperties": false,
"required": [
"homie",
"homeassistant"
],
"properties": {
"homie": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled",
"addICBINVMapProperty",
"cleanAttributesOnShutdown"
],
"properties": {
"enabled": {
"type": "boolean"
},
"addICBINVMapProperty": {
"type": "boolean",
"description": "If true, adds Homie definitions for ICBINV's PNG map topic as that's not possible to add in ICBINV itself."
},
"cleanAttributesOnShutdown": {
"type": "boolean"
}
}
},
"homeassistant": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled",
"cleanAutoconfOnShutdown"
],
"properties": {
"enabled": {
"type": "boolean"
},
"cleanAutoconfOnShutdown": {
"type": "boolean"
}
}
}
}
},
"optionalExposedCapabilities": {
"type": "array",
"items": {
"type": "string",
"enum": [
"ConsumableMonitoringCapability",
"CurrentStatisticsCapability",
"TotalStatisticsCapability",
"SpeakerVolumeControlCapability"
]
}
}
}
},
"ntpClient": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled",
"server",
"port",
"interval",
"timeout"
],
"properties": {
"enabled": {
"type": "boolean"
},
"server": {
"type": "string",
"description": "Can be either an IP or a Domain Name"
},
"port": {
"type": "number"
},
"interval": {
"type": "number",
"description": "NTP Sync Interval in Milliseconds"
},
"timeout": {
"type": "number",
"description": "NTP Sync Timeout in Milliseconds"
}
}
},
"networkAdvertisement": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean"
}
}
},
"updater": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean"
},
"updateProvider": {
"type": "object",
"additionalProperties": false,
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"github",
"github_nightly"
]
},
"implementationSpecificConfig": {
"type": "object"
}
}
}
}
},
"timers": {
"type": "object"
},
"logLevel": {
"type": "string",
"enum": [
"trace",
"debug",
"info",
"warn",
"error"
]
},
"debug": {
"type": "object"
},
"oobe": {
"type": "object",
"description": "Everything related to the Out-of-box experience",
"additionalProperties": false,
"properties": {
"welcomeDialogDismissed": {
"type": "boolean"
}
}
},
"valetudo": {
"type": "object",
"additionalProperties": false,
"properties": {
"customizations": {
"type": "object",
"additionalProperties": false,
"properties": {
"friendlyName": {
"type": "string",
"pattern": "^[a-zA-Z0-9 -]{0,24}$",
"description": "An optional user-defined friendly name for the Valetudo instance"
}
}
}
}
},
"_version": {
"type": "string",
"description": "Used for migration purposes"
}
}
},
"ValetudoCustomizationsDTO": {
"type": "object",
"additionalProperties": false,
"properties": {
"friendlyName": {
"type": "string",
"pattern": "^[a-zA-Z0-9 -]{0,24}$",
"description": "An optional user-defined friendly name for the Valetudo instance"
}
}
},
"MqttConfigDTO": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled",
"connection",
"identity",
"customizations",
"interfaces"
],
"properties": {
"enabled": {
"type": "boolean"
},
"connection": {
"type": "object",
"additionalProperties": false,
"required": [
"host",
"port"
],
"properties": {
"host": {
"type": "string"
},
"port": {
"type": "integer",
"minimum": 1,
"maximum": 65535
},
"tls": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean"
},
"ca": {
"type": "string",
"description": "This may optionally contain a CA certificate as a multi-line string. Filesystem paths are not supported."
},
"ignoreCertificateErrors": {
"type": "boolean",
"description": "This option might be required when using a self-signed cert. Note that you will be exposing yourself to MITM attacks."
}
}
},
"authentication": {
"type": "object",
"additionalProperties": false,
"properties": {
"credentials": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean"
},
"username": {
"type": "string"
},
"password": {
"type": "string"
}
}
},
"clientCertificate": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean"
},
"certificate": {
"type": "string",
"description": "The full certificate as a multi-line string. Filesystem paths are not supported."
},
"key": {
"type": "string",
"description": "The full key as a multi-line string. Filesystem paths are not supported."
}
}
}
}
}
}
},
"identity": {
"type": "object",
"additionalProperties": false,
"properties": {
"identifier": {
"type": "string",
"description": "The desired machine-readable name of the robot. Used in MQTT topics. Defaults to the auto-generated machine ID"
}
}
},
"customizations": {
"type": "object",
"additionalProperties": false,
"properties": {
"topicPrefix": {
"type": "string",
"description": "You can override the default \"valetudo\" mqtt topic prefix if you e.g. prefer to group all your mqtt stuff by rooms/floors/protocols"
},
"provideMapData": {
"type": "boolean",
"description": "If for some reason you're not interested in receiving map data via MQTT, you can disable that here."
}
}
},
"interfaces": {
"type": "object",
"additionalProperties": false,
"required": [
"homie",
"homeassistant"
],
"properties": {
"homie": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled",
"addICBINVMapProperty",
"cleanAttributesOnShutdown"
],
"properties": {
"enabled": {
"type": "boolean"
},
"addICBINVMapProperty": {
"type": "boolean",
"description": "If true, adds Homie definitions for ICBINV's PNG map topic as that's not possible to add in ICBINV itself."
},
"cleanAttributesOnShutdown": {
"type": "boolean"
}
}
},
"homeassistant": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled",
"cleanAutoconfOnShutdown"
],
"properties": {
"enabled": {
"type": "boolean"
},
"cleanAutoconfOnShutdown": {
"type": "boolean"
}
}
}
}
},
"optionalExposedCapabilities": {
"type": "array",
"items": {
"type": "string",
"enum": [
"ConsumableMonitoringCapability",
"CurrentStatisticsCapability",
"TotalStatisticsCapability",
"SpeakerVolumeControlCapability"
]
}
}
}
},
"BasicAuthConfigDTO": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled",
"username",
"password"
],
"properties": {
"enabled": {
"type": "boolean"
},
"username": {
"type": "string"
},
"password": {
"type": "string"
}
}
},
"NTPClientConfigDTO": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled",
"server",
"port",
"interval",
"timeout"
],
"properties": {
"enabled": {
"type": "boolean"
},
"server": {
"type": "string",
"description": "Can be either an IP or a Domain Name"
},
"port": {
"type": "number"
},
"interval": {
"type": "number",
"description": "NTP Sync Interval in Milliseconds"
},
"timeout": {
"type": "number",
"description": "NTP Sync Timeout in Milliseconds"
}
}
},
"NetworkAdvertisementConfigDTO": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean"
}
}
},
"UpdaterConfigDTO": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean"
},
"updateProvider": {
"type": "object",
"additionalProperties": false,
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"github",
"github_nightly"
]
},
"implementationSpecificConfig": {
"type": "object"
}
}
}
}
},
"ValetudoTimer": {
"type": "object",
"description": "Everything time-related is in UTC",
"required": [
"enabled",
"dow",
"hour",
"minute",
"action"
],
"properties": {
"id": {
"type": "string"
},
"enabled": {
"type": "boolean"
},
"label": {
"type": "string",
"pattern": "^.{0,24}$",
"description": "An optional user-defined label for the timer"
},
"dow": {
"type": "array",
"description": "Day of Week\nSunday = 0, Monday = 1, ... Saturday = 6",
"items": {
"type": "number",
"minimum": 0,
"maximum": 6
}
},
"hour": {
"type": "number",
"minimum": 0,
"maximum": 23
},
"minute": {
"type": "number",
"minimum": 0,
"maximum": 59
},
"action": {
"type": "object",
"additionalProperties": false,
"properties": {
"type": {
"type": "string",
"enum": [
"full_cleanup",
"segment_cleanup"
]
},
"params": {
"type": "object",
"description": "These vary depending on the Timer Type.",
"additionalProperties": false,
"properties": {
"zone_id": {
"type": "string"
},
"segment_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"goto_id": {
"type": "string"
},
"iterations": {
"type": "integer",
"minimum": 1
},
"custom_order": {
"type": "boolean"
}
}
}
}
},
"pre_actions": {
"type": "array",
"description": "Actions to run before the main action (e.g. set fan speed to x)",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"type": {
"type": "string",
"enum": [
"fan_speed_control",
"water_usage_control",
"operation_mode_control"
]
},
"params": {
"type": "object",
"additionalProperties": false,
"properties": {
"value": {
"type": "string"
}
}
}
}
}
}
}
},
"Attribute": {
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"subType": {
"type": "string"
}
}
}
]
},
"SerializableEntity": {
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
"LineMapEntity": {
"allOf": [
{
"description": "Map Entities are everything that is expressed with coordinates",
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"points": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 2
}
}
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"virtual_wall"
]
}
}
}
]
},
"MapEntity": {
"description": "Map Entities are everything that is expressed with coordinates",
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"points": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 2
}
}
}
]
},
"MapLayer": {
"description": "A map layer is an array of pixels in a 2d space",
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"floor",
"wall",
"segment"
]
},
"pixels": {
"type": "array",
"items": {
"type": "number"
}
},
"dimensions": {
"type": "object",
"properties": {
"x": {
"type": "object",
"properties": {
"min": {
"type": "number"
},
"max": {
"type": "number"
},
"mid": {
"type": "number"
}
}
},
"y": {
"type": "object",
"properties": {
"min": {
"type": "number"
},
"max": {
"type": "number"
},
"mid": {
"type": "number"
}
}
}
}
}
}
}
]
},
"PathMapEntity": {
"allOf": [
{
"description": "Map Entities are everything that is expressed with coordinates",
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"points": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 2
}
}
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"path",
"predicted_path"
]
}
}
}
]
},
"PointMapEntity": {
"allOf": [
{
"description": "Map Entities are everything that is expressed with coordinates",
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"points": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 2
}
}
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"charger_location",
"robot_position",
"go_to_target"
]
}
}
}
]
},
"PolygonMapEntity": {
"allOf": [
{
"description": "Map Entities are everything that is expressed with coordinates",
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"points": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 2
}
}
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"active_zone",
"no_go_area",
"no_mop_area"
]
}
}
}
]
},
"ValetudoMap": {
"type": "object",
"properties": {
"size": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
},
"pixelSize": {
"type": "integer"
},
"layers": {
"type": "array",
"items": {
"anyOf": [
{
"description": "A map layer is an array of pixels in a 2d space",
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"floor",
"wall",
"segment"
]
},
"pixels": {
"type": "array",
"items": {
"type": "number"
}
},
"dimensions": {
"type": "object",
"properties": {
"x": {
"type": "object",
"properties": {
"min": {
"type": "number"
},
"max": {
"type": "number"
},
"mid": {
"type": "number"
}
}
},
"y": {
"type": "object",
"properties": {
"min": {
"type": "number"
},
"max": {
"type": "number"
},
"mid": {
"type": "number"
}
}
}
}
}
}
}
]
}
]
}
},
"entities": {
"type": "array",
"items": {
"anyOf": [
{
"allOf": [
{
"description": "Map Entities are everything that is expressed with coordinates",
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"points": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 2
}
}
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"charger_location",
"robot_position",
"go_to_target"
]
}
}
}
]
},
{
"allOf": [
{
"description": "Map Entities are everything that is expressed with coordinates",
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"points": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 2
}
}
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"virtual_wall"
]
}
}
}
]
},
{
"allOf": [
{
"description": "Map Entities are everything that is expressed with coordinates",
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"points": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 2
}
}
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"path",
"predicted_path"
]
}
}
}
]
},
{
"allOf": [
{
"description": "Map Entities are everything that is expressed with coordinates",
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"points": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 2
}
}
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"active_zone",
"no_go_area",
"no_mop_area"
]
}
}
}
]
}
]
}
},
"metaData": {
"type": "object",
"properties": {
"version": {
"type": "number"
}
}
}
}
},
"ValetudoDataPoint": {
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"description": "Datetime in ISO8601 format"
},
"type": {
"type": "string",
"enum": [
"time",
"area",
"count"
]
},
"value": {
"type": "number"
},
"metaData": {
"type": "object"
}
}
},
"ValetudoDNDConfiguration": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"start": {
"type": "object",
"properties": {
"hour": {
"type": "integer"
},
"minute": {
"type": "integer"
}
}
},
"end": {
"type": "object",
"properties": {
"hour": {
"type": "integer"
},
"minute": {
"type": "integer"
}
}
},
"metaData": {
"type": "object"
}
}
},
"ValetudoGoToLocation": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"coordinates": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
},
"id": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
"ValetudoMapSegment": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
"ValetudoMapSnapshot": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"timestamp": {
"type": "string",
"description": "Datetime in ISO8601 format"
},
"map": {
"type": "object",
"properties": {
"size": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
},
"pixelSize": {
"type": "integer"
},
"layers": {
"type": "array",
"items": {
"anyOf": [
{
"description": "A map layer is an array of pixels in a 2d space",
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"floor",
"wall",
"segment"
]
},
"pixels": {
"type": "array",
"items": {
"type": "number"
}
},
"dimensions": {
"type": "object",
"properties": {
"x": {
"type": "object",
"properties": {
"min": {
"type": "number"
},
"max": {
"type": "number"
},
"mid": {
"type": "number"
}
}
},
"y": {
"type": "object",
"properties": {
"min": {
"type": "number"
},
"max": {
"type": "number"
},
"mid": {
"type": "number"
}
}
}
}
}
}
}
]
}
]
}
},
"entities": {
"type": "array",
"items": {
"anyOf": [
{
"allOf": [
{
"description": "Map Entities are everything that is expressed with coordinates",
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"points": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 2
}
}
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"charger_location",
"robot_position",
"go_to_target"
]
}
}
}
]
},
{
"allOf": [
{
"description": "Map Entities are everything that is expressed with coordinates",
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"points": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 2
}
}
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"virtual_wall"
]
}
}
}
]
},
{
"allOf": [
{
"description": "Map Entities are everything that is expressed with coordinates",
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"points": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 2
}
}
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"path",
"predicted_path"
]
}
}
}
]
},
{
"allOf": [
{
"description": "Map Entities are everything that is expressed with coordinates",
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"points": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 2
}
}
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"active_zone",
"no_go_area",
"no_mop_area"
]
}
}
}
]
}
]
}
},
"metaData": {
"type": "object",
"properties": {
"version": {
"type": "number"
}
}
}
}
},
"metaData": {
"type": "object"
}
}
},
"ValetudoRestrictedZone": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"regular",
"mop"
]
},
"points": {
"type": "object",
"properties": {
"pA": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
},
"pB": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
},
"pC": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
},
"pD": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
}
}
}
}
},
"ValetudoVirtualRestrictions": {
"type": "object",
"properties": {
"virtualWalls": {
"type": "array",
"items": {
"type": "object",
"properties": {
"points": {
"type": "object",
"properties": {
"pA": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
},
"pB": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
}
}
}
}
}
},
"restrictedZones": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"regular",
"mop"
]
},
"points": {
"type": "object",
"properties": {
"pA": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
},
"pB": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
},
"pC": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
},
"pD": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
}
}
}
}
}
}
}
},
"ValetudoVirtualWall": {
"type": "object",
"properties": {
"points": {
"type": "object",
"properties": {
"pA": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
},
"pB": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
}
}
}
}
},
"ValetudoVoicePackOperationStatus": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"idle",
"downloading",
"installing",
"error"
]
},
"progress": {
"type": "number",
"description": "Percentage"
},
"metaData": {
"type": "object"
}
}
},
"ValetudoWifiConfiguration": {
"type": "object",
"properties": {
"ssid": {
"type": "string",
"description": "Wireless network name"
},
"credentials": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"typeSpecificSettings": {
"type": "object",
"description": "Settings depending on type, for example WPA preshared key"
}
}
},
"metaData": {
"type": "object"
}
}
},
"ValetudoWifiNetwork": {
"type": "object",
"properties": {
"bssid": {
"type": "string"
},
"details": {
"type": "object",
"properties": {
"ssid": {
"type": "string",
"description": "Wireless network name"
},
"signal": {
"type": "number"
}
}
},
"metaData": {
"type": "object"
}
}
},
"ValetudoWifiStatus": {
"type": "object",
"properties": {
"state": {
"type": "string",
"enum": [
"connected",
"not_connected",
"unknown"
]
},
"details": {
"type": "object",
"properties": {
"ssid": {
"type": "string",
"description": "Wireless network name"
},
"bssid": {
"type": "string"
},
"downspeed": {
"type": "number"
},
"upspeed": {
"type": "number"
},
"signal": {
"type": "number"
},
"ips": {
"type": "array",
"description": "IP addresses",
"items": {
"type": "string"
}
},
"frequency": {
"type": "string",
"enum": [
"2.4ghz",
"5ghz"
]
}
}
},
"metaData": {
"type": "object"
}
}
},
"ValetudoZone": {
"type": "object",
"properties": {
"points": {
"type": "object",
"properties": {
"pA": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
},
"pB": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
},
"pC": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
},
"pD": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
}
}
},
"metaData": {
"type": "object"
}
}
},
"ValetudoNTPClientDisabledState": {
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"format": "date-time",
"description": "The time this state was entered"
}
}
}
]
}
]
},
"ValetudoNTPClientEnabledState": {
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"format": "date-time",
"description": "The time this state was entered"
}
}
}
]
}
]
},
"ValetudoNTPClientErrorState": {
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"format": "date-time",
"description": "The time this state was entered"
}
}
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"unknown",
"transient",
"name_resolution",
"connection",
"persisting"
]
},
"message": {
"type": "string"
}
}
}
]
},
"ValetudoNTPClientState": {
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"format": "date-time",
"description": "The time this state was entered"
}
}
}
]
},
"ValetudoNTPClientSyncedState": {
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"format": "date-time",
"description": "The time this state was entered"
}
}
}
]
},
{
"type": "object",
"properties": {
"offset": {
"type": "number",
"description": "The offset of the previous time on sync"
}
}
}
]
},
"ValetudoUpdaterApplyPendingState": {
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"format": "date-time",
"description": "The time this state was entered"
}
}
}
]
},
{
"type": "object",
"properties": {
"version": {
"type": "string",
"description": "The valetudo version to be installed"
},
"releaseTimestamp": {
"type": "string",
"format": "date-time",
"description": "The release date as found in the manifest"
},
"downloadPath": {
"type": "string",
"description": "The path the new binary was downloaded to"
}
}
}
]
},
"ValetudoUpdaterApprovalPendingState": {
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"format": "date-time",
"description": "The time this state was entered"
}
}
}
]
},
{
"type": "object",
"properties": {
"version": {
"type": "string",
"description": "The valetudo version to be installed"
},
"releaseTimestamp": {
"type": "string",
"format": "date-time",
"description": "The release date as found in the manifest"
},
"changelog": {
"type": "string",
"description": "The changelog as provided by the github api. Github flavoured Markdown"
},
"downloadUrl": {
"type": "string",
"description": "The url from which the binary will be downloaded from"
},
"expectedHash": {
"type": "string",
"description": "The expected sha256sum of the downloaded binary"
},
"downloadPath": {
"type": "string",
"description": "The path the new binary is downloaded to"
}
}
}
]
},
"ValetudoUpdaterDisabledState": {
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"format": "date-time",
"description": "The time this state was entered"
}
}
}
]
},
{
"type": "object",
"properties": {}
}
]
},
"ValetudoUpdaterDownloadingState": {
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"format": "date-time",
"description": "The time this state was entered"
}
}
}
]
},
{
"type": "object",
"properties": {
"version": {
"type": "string",
"description": "The valetudo version to be installed"
},
"releaseTimestamp": {
"type": "string",
"format": "date-time",
"description": "The release date as found in the manifest"
},
"downloadUrl": {
"type": "string",
"description": "The url from which the binary will be downloaded from"
},
"expectedHash": {
"type": "string",
"description": "The expected sha256sum of the downloaded binary"
},
"downloadPath": {
"type": "string",
"description": "The path the new binary is downloaded to"
}
}
}
]
},
"ValetudoUpdaterErrorState": {
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"format": "date-time",
"description": "The time this state was entered"
}
}
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"unknown",
"not_embedded",
"not_docked",
"not_writable",
"not_enough_space",
"download_failed",
"no_matching_binary",
"missing_manifest",
"invalid_manifest",
"invalid_checksum"
]
},
"message": {
"type": "string"
}
}
}
]
},
"ValetudoUpdaterIdleState": {
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"format": "date-time",
"description": "The time this state was entered"
}
}
}
]
},
{
"type": "object",
"properties": {
"currentVersion": {
"type": "string",
"description": "The currently running valetudo version"
}
}
}
]
},
"ValetudoUpdaterNoUpdateRequiredState": {
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"format": "date-time",
"description": "The time this state was entered"
}
}
}
]
},
{
"type": "object",
"properties": {
"currentVersion": {
"type": "string",
"description": "The currently running valetudo version"
}
}
}
]
},
"ValetudoUpdaterState": {
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"format": "date-time",
"description": "The time this state was entered"
}
}
}
]
},
"AttachmentStateAttribute": {
"allOf": [
{
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"subType": {
"type": "string"
}
}
}
]
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"dustbin",
"watertank",
"mop"
]
},
"attached": {
"type": "boolean"
}
}
}
]
},
"AttachmentStateAttributeType": {
"type": "string",
"enum": [
"dustbin",
"watertank",
"mop"
]
},
"BatteryStateAttribute": {
"allOf": [
{
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"subType": {
"type": "string"
}
}
}
]
}
]
},
{
"type": "object",
"properties": {
"level": {
"type": "number"
},
"flag": {
"type": "string",
"enum": [
"none",
"charging",
"discharging",
"charged"
]
}
}
}
]
},
"ConsumableStateAttribute": {
"allOf": [
{
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"subType": {
"type": "string"
}
}
}
]
}
]
},
{
"type": "object",
"properties": {
"remaining": {
"type": "object",
"properties": {
"value": {
"type": "number"
},
"unit": {
"type": "string",
"enum": [
"percent",
"minutes"
]
}
}
}
}
}
]
},
"PresetSelectionStateAttribute": {
"allOf": [
{
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"subType": {
"type": "string"
}
}
}
]
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"fan_speed",
"water_grade",
"operation_mode"
]
},
"value": {
"type": "string",
"enum": [
"off",
"min",
"low",
"medium",
"high",
"max",
"turbo",
"custom",
"vacuum",
"mop",
"vacuum_and_mop"
]
},
"customValue": {
"type": "number"
}
}
}
]
},
"StateAttribute": {
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"subType": {
"type": "string"
}
}
}
]
}
]
},
"ValetudoManualControlMovementCommandType": {
"type": "string",
"enum": [
"forward",
"backward",
"rotate_clockwise",
"rotate_counterclockwise"
]
}
}
},
"security": [
{
"BasicAuth": []
}
],
"paths": {
"/api/v2/robot/capabilities": {
"get": {
"tags": [
"Robot"
],
"summary": "Get robot supported capabilities",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "string",
"description": "Capability class name"
}
}
}
}
}
}
}
},
"/api/v2/mqtt/status": {
"get": {
"tags": [
"MQTT"
],
"summary": "Get MQTTController status",
"responses": {
"200": {
"description": "The MQTTControllers current status.",
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": false,
"properties": {
"state": {
"type": "string",
"enum": [
"init",
"ready",
"disconnected",
"lost",
"alert"
]
},
"stats": {
"type": "object",
"additionalProperties": false,
"properties": {
"messages": {
"type": "object",
"additionalProperties": false,
"properties": {
"count": {
"type": "object",
"additionalProperties": false,
"properties": {
"received": {
"type": "number"
},
"sent": {
"type": "number"
}
}
},
"bytes": {
"type": "object",
"additionalProperties": false,
"properties": {
"received": {
"type": "number"
},
"sent": {
"type": "number"
}
}
}
}
},
"connection": {
"type": "object",
"additionalProperties": false,
"properties": {
"connects": {
"type": "number"
},
"disconnects": {
"type": "number"
},
"reconnects": {
"type": "number"
},
"errors": {
"type": "number"
}
}
}
}
}
}
}
}
}
}
}
}
},
"/api/v2/mqtt/properties": {
"get": {
"tags": [
"MQTT"
],
"summary": "Get MQTT properties such as the default config values",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": false,
"properties": {
"defaults": {
"type": "object",
"additionalProperties": false,
"properties": {
"identity": {
"type": "object",
"additionalProperties": false,
"properties": {
"identifier": {
"type": "string"
}
}
},
"customizations": {
"type": "object",
"additionalProperties": false,
"properties": {
"topicPrefix": {
"type": "string"
}
}
}
}
},
"optionalExposableCapabilities": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
}
}
}
}
}
},
"/api/v2/networkadvertisement/config": {
"get": {
"tags": [
"NetworkAdvertisement"
],
"summary": "Get NetworkAdvertisementManager configuration",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean"
}
}
}
}
}
}
}
},
"put": {
"tags": [
"NetworkAdvertisement"
],
"summary": "Update NetworkAdvertisementManager configuration",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean"
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
}
}
}
},
"/api/v2/networkadvertisement/properties": {
"get": {
"tags": [
"NetworkAdvertisement"
],
"summary": "Get NetworkAdvertisement properties",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": false,
"properties": {
"port": {
"type": "number"
},
"zeroconfHostname": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/api/v2/ntpclient/state": {
"get": {
"tags": [
"NTP"
],
"summary": "Get NTPClient state",
"responses": {
"200": {
"description": "The NTPClients current state.",
"content": {
"application/json": {
"schema": {
"oneOf": [
{
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"format": "date-time",
"description": "The time this state was entered"
}
}
}
]
}
]
},
{
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"format": "date-time",
"description": "The time this state was entered"
}
}
}
]
}
]
},
{
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"format": "date-time",
"description": "The time this state was entered"
}
}
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"unknown",
"transient",
"name_resolution",
"connection",
"persisting"
]
},
"message": {
"type": "string"
}
}
}
]
},
{
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"format": "date-time",
"description": "The time this state was entered"
}
}
}
]
},
{
"type": "object",
"properties": {
"offset": {
"type": "number",
"description": "The offset of the previous time on sync"
}
}
}
]
}
]
}
}
}
}
}
}
},
"/api/v2/ntpclient/config": {
"get": {
"tags": [
"NTP"
],
"summary": "Get NTPClient configuration",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled",
"server",
"port",
"interval",
"timeout"
],
"properties": {
"enabled": {
"type": "boolean"
},
"server": {
"type": "string",
"description": "Can be either an IP or a Domain Name"
},
"port": {
"type": "number"
},
"interval": {
"type": "number",
"description": "NTP Sync Interval in Milliseconds"
},
"timeout": {
"type": "number",
"description": "NTP Sync Timeout in Milliseconds"
}
}
}
}
}
}
}
},
"put": {
"tags": [
"NTP"
],
"summary": "Update NTPClient configuration",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled",
"server",
"port",
"interval",
"timeout"
],
"properties": {
"enabled": {
"type": "boolean"
},
"server": {
"type": "string",
"description": "Can be either an IP or a Domain Name"
},
"port": {
"type": "number"
},
"interval": {
"type": "number",
"description": "NTP Sync Interval in Milliseconds"
},
"timeout": {
"type": "number",
"description": "NTP Sync Timeout in Milliseconds"
}
}
},
"examples": {
"custom": {
"description": "Set custom NTP server",
"value": {
"enabled": true,
"server": "ntp_host_or_ip",
"port": 123,
"interval": 7200000,
"timeout": 10000
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
}
}
}
},
"/api/v2/robot": {
"get": {
"tags": [
"Robot"
],
"summary": "Get robot info",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"manufacturer": {
"type": "string"
},
"modelName": {
"type": "string"
},
"modelDetails": {
"type": "object",
"properties": {
"supportedAttachments": {
"type": "array",
"description": "Attachments that are detected and reported by the robot",
"items": {
"type": "string",
"enum": [
"dustbin",
"watertank",
"mop"
]
}
}
}
},
"implementation": {
"type": "string",
"description": "Valetudo robot implementation in use"
}
}
}
}
}
}
}
}
},
"/api/v2/robot/properties": {
"get": {
"tags": [
"Robot"
],
"summary": "Get robot-specific properties",
"responses": {
"200": {
"description": "A flat key/value object containing 0..* properties that are specific to this robot.\n\nThis can for example be the firmware version.",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
}
}
}
},
"/api/v2/robot/state": {
"get": {
"tags": [
"Robot"
],
"summary": "Get robot state",
"description": "Retrieve the robot state.\n\nNote! If the map is available, trying this out on Swagger will likely **use lots of RAM and hang your\nbrowser tab.**\n",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"attributes": {
"type": "array",
"items": {
"anyOf": [
{
"allOf": [
{
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"subType": {
"type": "string"
}
}
}
]
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"dustbin",
"watertank",
"mop"
]
},
"attached": {
"type": "boolean"
}
}
}
]
},
{
"allOf": [
{
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"subType": {
"type": "string"
}
}
}
]
}
]
},
{
"type": "object",
"properties": {
"level": {
"type": "number"
},
"flag": {
"type": "string",
"enum": [
"none",
"charging",
"discharging",
"charged"
]
}
}
}
]
},
{
"allOf": [
{
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"subType": {
"type": "string"
}
}
}
]
}
]
},
{
"type": "object",
"properties": {
"remaining": {
"type": "object",
"properties": {
"value": {
"type": "number"
},
"unit": {
"type": "string",
"enum": [
"percent",
"minutes"
]
}
}
}
}
}
]
},
{
"allOf": [
{
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"subType": {
"type": "string"
}
}
}
]
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"fan_speed",
"water_grade",
"operation_mode"
]
},
"value": {
"type": "string",
"enum": [
"off",
"min",
"low",
"medium",
"high",
"max",
"turbo",
"custom",
"vacuum",
"mop",
"vacuum_and_mop"
]
},
"customValue": {
"type": "number"
}
}
}
]
}
]
}
},
"map": {
"type": "object",
"properties": {
"size": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
},
"pixelSize": {
"type": "integer"
},
"layers": {
"type": "array",
"items": {
"anyOf": [
{
"description": "A map layer is an array of pixels in a 2d space",
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"floor",
"wall",
"segment"
]
},
"pixels": {
"type": "array",
"items": {
"type": "number"
}
},
"dimensions": {
"type": "object",
"properties": {
"x": {
"type": "object",
"properties": {
"min": {
"type": "number"
},
"max": {
"type": "number"
},
"mid": {
"type": "number"
}
}
},
"y": {
"type": "object",
"properties": {
"min": {
"type": "number"
},
"max": {
"type": "number"
},
"mid": {
"type": "number"
}
}
}
}
}
}
}
]
}
]
}
},
"entities": {
"type": "array",
"items": {
"anyOf": [
{
"allOf": [
{
"description": "Map Entities are everything that is expressed with coordinates",
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"points": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 2
}
}
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"charger_location",
"robot_position",
"go_to_target"
]
}
}
}
]
},
{
"allOf": [
{
"description": "Map Entities are everything that is expressed with coordinates",
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"points": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 2
}
}
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"virtual_wall"
]
}
}
}
]
},
{
"allOf": [
{
"description": "Map Entities are everything that is expressed with coordinates",
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"points": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 2
}
}
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"path",
"predicted_path"
]
}
}
}
]
},
{
"allOf": [
{
"description": "Map Entities are everything that is expressed with coordinates",
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"points": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 2
}
}
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"active_zone",
"no_go_area",
"no_mop_area"
]
}
}
}
]
}
]
}
},
"metaData": {
"type": "object",
"properties": {
"version": {
"type": "number"
}
}
}
}
}
}
}
}
}
}
}
}
},
"/api/v2/robot/state/attributes": {
"get": {
"tags": [
"Robot"
],
"summary": "Get robot state attributes",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"anyOf": [
{
"allOf": [
{
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"subType": {
"type": "string"
}
}
}
]
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"dustbin",
"watertank",
"mop"
]
},
"attached": {
"type": "boolean"
}
}
}
]
},
{
"allOf": [
{
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"subType": {
"type": "string"
}
}
}
]
}
]
},
{
"type": "object",
"properties": {
"level": {
"type": "number"
},
"flag": {
"type": "string",
"enum": [
"none",
"charging",
"discharging",
"charged"
]
}
}
}
]
},
{
"allOf": [
{
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"subType": {
"type": "string"
}
}
}
]
}
]
},
{
"type": "object",
"properties": {
"remaining": {
"type": "object",
"properties": {
"value": {
"type": "number"
},
"unit": {
"type": "string",
"enum": [
"percent",
"minutes"
]
}
}
}
}
}
]
},
{
"allOf": [
{
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"subType": {
"type": "string"
}
}
}
]
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"fan_speed",
"water_grade",
"operation_mode"
]
},
"value": {
"type": "string",
"enum": [
"off",
"min",
"low",
"medium",
"high",
"max",
"turbo",
"custom",
"vacuum",
"mop",
"vacuum_and_mop"
]
},
"customValue": {
"type": "number"
}
}
}
]
}
]
}
}
}
}
}
}
}
},
"/api/v2/robot/state/map": {
"get": {
"tags": [
"Robot"
],
"summary": "Get robot map",
"description": "Retrieve the robot map.\n\nNote! If the map is available, trying this out on Swagger will likely **use lots of RAM and hang your\nbrowser tab.**\n",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"size": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
},
"pixelSize": {
"type": "integer"
},
"layers": {
"type": "array",
"items": {
"anyOf": [
{
"description": "A map layer is an array of pixels in a 2d space",
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"floor",
"wall",
"segment"
]
},
"pixels": {
"type": "array",
"items": {
"type": "number"
}
},
"dimensions": {
"type": "object",
"properties": {
"x": {
"type": "object",
"properties": {
"min": {
"type": "number"
},
"max": {
"type": "number"
},
"mid": {
"type": "number"
}
}
},
"y": {
"type": "object",
"properties": {
"min": {
"type": "number"
},
"max": {
"type": "number"
},
"mid": {
"type": "number"
}
}
}
}
}
}
}
]
}
]
}
},
"entities": {
"type": "array",
"items": {
"anyOf": [
{
"allOf": [
{
"description": "Map Entities are everything that is expressed with coordinates",
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"points": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 2
}
}
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"charger_location",
"robot_position",
"go_to_target"
]
}
}
}
]
},
{
"allOf": [
{
"description": "Map Entities are everything that is expressed with coordinates",
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"points": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 2
}
}
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"virtual_wall"
]
}
}
}
]
},
{
"allOf": [
{
"description": "Map Entities are everything that is expressed with coordinates",
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"points": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 2
}
}
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"path",
"predicted_path"
]
}
}
}
]
},
{
"allOf": [
{
"description": "Map Entities are everything that is expressed with coordinates",
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"points": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 2
}
}
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"active_zone",
"no_go_area",
"no_mop_area"
]
}
}
}
]
}
]
}
},
"metaData": {
"type": "object",
"properties": {
"version": {
"type": "number"
}
}
}
}
}
}
}
}
}
}
},
"/api/v2/robot/state/sse": {
"get": {
"tags": [
"Robot"
],
"summary": "Get robot state (SSE events)",
"description": "Retrieve the robot state.\n\nNote! This endpoint provides SSE events. Swagger does not support it.\n",
"responses": {
"200": {
"description": "Ok",
"content": {
"text/event-stream": {
"schema": {
"type": "object"
}
}
}
}
}
}
},
"/api/v2/robot/state/attributes/sse": {
"get": {
"tags": [
"Robot"
],
"summary": "Get robot state attributes (SSE events)",
"description": "Retrieve the robot state attributes.\n\nNote! This endpoint provides SSE events. Swagger does not support it.\n",
"responses": {
"200": {
"description": "Ok",
"content": {
"text/event-stream": {
"schema": {
"type": "object"
}
}
}
}
}
}
},
"/api/v2/robot/state/map/sse": {
"get": {
"tags": [
"Robot"
],
"summary": "Get robot map (SSE events)",
"description": "Retrieve the robot map\n\nNote! This endpoint provides SSE events. Swagger does not support it.\n",
"responses": {
"200": {
"description": "Ok",
"content": {
"text/event-stream": {
"schema": {
"type": "object",
"properties": {
"size": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
},
"pixelSize": {
"type": "integer"
},
"layers": {
"type": "array",
"items": {
"anyOf": [
{
"description": "A map layer is an array of pixels in a 2d space",
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"floor",
"wall",
"segment"
]
},
"pixels": {
"type": "array",
"items": {
"type": "number"
}
},
"dimensions": {
"type": "object",
"properties": {
"x": {
"type": "object",
"properties": {
"min": {
"type": "number"
},
"max": {
"type": "number"
},
"mid": {
"type": "number"
}
}
},
"y": {
"type": "object",
"properties": {
"min": {
"type": "number"
},
"max": {
"type": "number"
},
"mid": {
"type": "number"
}
}
}
}
}
}
}
]
}
]
}
},
"entities": {
"type": "array",
"items": {
"anyOf": [
{
"allOf": [
{
"description": "Map Entities are everything that is expressed with coordinates",
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"points": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 2
}
}
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"charger_location",
"robot_position",
"go_to_target"
]
}
}
}
]
},
{
"allOf": [
{
"description": "Map Entities are everything that is expressed with coordinates",
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"points": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 2
}
}
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"virtual_wall"
]
}
}
}
]
},
{
"allOf": [
{
"description": "Map Entities are everything that is expressed with coordinates",
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"points": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 2
}
}
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"path",
"predicted_path"
]
}
}
}
]
},
{
"allOf": [
{
"description": "Map Entities are everything that is expressed with coordinates",
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"points": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 2
}
}
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"active_zone",
"no_go_area",
"no_mop_area"
]
}
}
}
]
}
]
}
},
"metaData": {
"type": "object",
"properties": {
"version": {
"type": "number"
}
}
}
}
}
}
}
}
}
}
},
"/api/v2/system/host/info": {
"get": {
"tags": [
"System"
],
"summary": "Information about the underlying host valetudo is running on",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"hostname": {
"type": "string"
},
"arch": {
"type": "string"
},
"mem": {
"type": "object",
"properties": {
"total": {
"type": "number",
"description": "The total amount of memory of the host in bytes"
},
"free": {
"type": "number",
"description": "The amount of free memory of the host (free + buffers + caches) in bytes"
},
"valetudo_current": {
"type": "number",
"description": "The current Valetudo RSS in bytes"
},
"valetudo_max": {
"type": "number",
"description": "The maximum observed RSS of the running Valetudo instances in bytes"
}
}
},
"uptime": {
"type": "number",
"description": "Host uptime in seconds"
},
"load": {
"type": "object",
"properties": {
"1": {
"type": "number",
"description": "Normalized system load in the last minute"
},
"5": {
"type": "number",
"description": "Normalized system load in the last 5 minutes"
},
"15": {
"type": "number",
"description": "Normalized system load in the last 15 minutes"
}
}
}
}
}
}
}
}
}
}
},
"/api/v2/system/runtime/info": {
"get": {
"tags": [
"System"
],
"summary": "Information about the underlying host valetudo is running on",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"uptime": {
"type": "number",
"description": "The uptime of the currently running Valetudo process in seconds"
},
"argv": {
"type": "array",
"items": {
"type": "string"
}
},
"execArgv": {
"type": "array",
"items": {
"type": "string"
}
},
"execPath": {
"type": "string"
},
"uid": {
"type": "number",
"description": "UID of the running Valetudo process"
},
"gid": {
"type": "number",
"description": "GID of the running Valetudo process"
},
"pid": {
"type": "number",
"description": "PID of the running Valetudo process"
},
"versions": {
"type": "object",
"additionalProperties": true
},
"env": {
"type": "object",
"additionalProperties": true
}
}
}
}
}
}
}
}
},
"/api/v2/timers": {
"get": {
"tags": [
"Timers"
],
"summary": "Get all timers",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"description": "Describing this structure requires OpenAPI 3.1 support in Swagger UI"
}
}
}
}
}
},
"post": {
"tags": [
"Timers"
],
"summary": "Add new Timer",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"description": "Everything time-related is in UTC",
"required": [
"enabled",
"dow",
"hour",
"minute",
"action"
],
"properties": {
"id": {
"type": "string"
},
"enabled": {
"type": "boolean"
},
"label": {
"type": "string",
"pattern": "^.{0,24}$",
"description": "An optional user-defined label for the timer"
},
"dow": {
"type": "array",
"description": "Day of Week\nSunday = 0, Monday = 1, ... Saturday = 6",
"items": {
"type": "number",
"minimum": 0,
"maximum": 6
}
},
"hour": {
"type": "number",
"minimum": 0,
"maximum": 23
},
"minute": {
"type": "number",
"minimum": 0,
"maximum": 59
},
"action": {
"type": "object",
"additionalProperties": false,
"properties": {
"type": {
"type": "string",
"enum": [
"full_cleanup",
"segment_cleanup"
]
},
"params": {
"type": "object",
"description": "These vary depending on the Timer Type.",
"additionalProperties": false,
"properties": {
"zone_id": {
"type": "string"
},
"segment_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"goto_id": {
"type": "string"
},
"iterations": {
"type": "integer",
"minimum": 1
},
"custom_order": {
"type": "boolean"
}
}
}
}
},
"pre_actions": {
"type": "array",
"description": "Actions to run before the main action (e.g. set fan speed to x)",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"type": {
"type": "string",
"enum": [
"fan_speed_control",
"water_usage_control",
"operation_mode_control"
]
},
"params": {
"type": "object",
"additionalProperties": false,
"properties": {
"value": {
"type": "string"
}
}
}
}
}
}
}
},
"examples": {
"full_cleanup": {
"description": "A timer scheduling a full cleanup every monday at 09:00 UTC",
"value": {
"enabled": true,
"dow": [
1
],
"hour": 9,
"minute": 0,
"action": {
"type": "full_cleanup",
"params": {}
}
}
},
"segment_cleanup": {
"description": "A timer scheduling a cleanup of first segment 7 and then 15 two times every weekday at 08:15 UTC",
"value": {
"enabled": true,
"dow": [
1,
2,
3,
4,
5
],
"hour": 8,
"minute": 15,
"action": {
"type": "segment_cleanup",
"params": {
"segment_ids": [
"7",
"15"
],
"custom_order": true,
"iterations": 2
}
}
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
},
"400": {
"description": "Bad request"
}
}
}
},
"/api/v2/timers/{id}": {
"get": {
"tags": [
"Timers"
],
"summary": "Get timer by ID",
"parameters": [
{
"in": "path",
"name": "id",
"required": true,
"description": "Timer UUID",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"description": "Everything time-related is in UTC",
"required": [
"enabled",
"dow",
"hour",
"minute",
"action"
],
"properties": {
"id": {
"type": "string"
},
"enabled": {
"type": "boolean"
},
"label": {
"type": "string",
"pattern": "^.{0,24}$",
"description": "An optional user-defined label for the timer"
},
"dow": {
"type": "array",
"description": "Day of Week\nSunday = 0, Monday = 1, ... Saturday = 6",
"items": {
"type": "number",
"minimum": 0,
"maximum": 6
}
},
"hour": {
"type": "number",
"minimum": 0,
"maximum": 23
},
"minute": {
"type": "number",
"minimum": 0,
"maximum": 59
},
"action": {
"type": "object",
"additionalProperties": false,
"properties": {
"type": {
"type": "string",
"enum": [
"full_cleanup",
"segment_cleanup"
]
},
"params": {
"type": "object",
"description": "These vary depending on the Timer Type.",
"additionalProperties": false,
"properties": {
"zone_id": {
"type": "string"
},
"segment_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"goto_id": {
"type": "string"
},
"iterations": {
"type": "integer",
"minimum": 1
},
"custom_order": {
"type": "boolean"
}
}
}
}
},
"pre_actions": {
"type": "array",
"description": "Actions to run before the main action (e.g. set fan speed to x)",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"type": {
"type": "string",
"enum": [
"fan_speed_control",
"water_usage_control",
"operation_mode_control"
]
},
"params": {
"type": "object",
"additionalProperties": false,
"properties": {
"value": {
"type": "string"
}
}
}
}
}
}
}
}
}
}
},
"404": {
"description": "Not found"
}
}
},
"delete": {
"tags": [
"Timers"
],
"summary": "Delete Timer by ID",
"parameters": [
{
"in": "path",
"name": "id",
"required": true,
"description": "Timer UUID",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Ok"
},
"404": {
"description": "Not found"
}
}
},
"put": {
"tags": [
"Timers"
],
"summary": "Edit existing Timer by ID",
"parameters": [
{
"in": "path",
"name": "id",
"required": true,
"description": "Timer UUID",
"schema": {
"type": "string"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"description": "Everything time-related is in UTC",
"required": [
"enabled",
"dow",
"hour",
"minute",
"action"
],
"properties": {
"id": {
"type": "string"
},
"enabled": {
"type": "boolean"
},
"label": {
"type": "string",
"pattern": "^.{0,24}$",
"description": "An optional user-defined label for the timer"
},
"dow": {
"type": "array",
"description": "Day of Week\nSunday = 0, Monday = 1, ... Saturday = 6",
"items": {
"type": "number",
"minimum": 0,
"maximum": 6
}
},
"hour": {
"type": "number",
"minimum": 0,
"maximum": 23
},
"minute": {
"type": "number",
"minimum": 0,
"maximum": 59
},
"action": {
"type": "object",
"additionalProperties": false,
"properties": {
"type": {
"type": "string",
"enum": [
"full_cleanup",
"segment_cleanup"
]
},
"params": {
"type": "object",
"description": "These vary depending on the Timer Type.",
"additionalProperties": false,
"properties": {
"zone_id": {
"type": "string"
},
"segment_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"goto_id": {
"type": "string"
},
"iterations": {
"type": "integer",
"minimum": 1
},
"custom_order": {
"type": "boolean"
}
}
}
}
},
"pre_actions": {
"type": "array",
"description": "Actions to run before the main action (e.g. set fan speed to x)",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"type": {
"type": "string",
"enum": [
"fan_speed_control",
"water_usage_control",
"operation_mode_control"
]
},
"params": {
"type": "object",
"additionalProperties": false,
"properties": {
"value": {
"type": "string"
}
}
}
}
}
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
},
"400": {
"description": "Bad request"
},
"404": {
"description": "Not found"
}
}
}
},
"/api/v2/timers/{id}/action": {
"put": {
"tags": [
"Timers"
],
"summary": "Execute an action on an existing timer",
"parameters": [
{
"in": "path",
"name": "id",
"required": true,
"description": "Timer UUID",
"schema": {
"type": "string"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"execute_now"
]
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
},
"400": {
"description": "Bad request"
},
"404": {
"description": "Not found"
}
}
}
},
"/api/v2/timers/properties": {
"get": {
"tags": [
"Timers"
],
"summary": "Get various timer-related properties",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": false,
"properties": {
"supportedActions": {
"type": "array",
"items": {
"type": "string",
"enum": [
"full_cleanup",
"segment_cleanup"
]
}
},
"supportedPreActions": {
"type": "array",
"items": {
"type": "string",
"enum": [
"fan_speed_control",
"water_usage_control",
"operation_mode_control"
]
}
}
}
}
}
}
}
}
}
},
"/api/v2/updater/state": {
"get": {
"tags": [
"Updater"
],
"summary": "Get Updater state",
"responses": {
"200": {
"description": "The Updaters current state.",
"content": {
"application/json": {
"schema": {
"oneOf": [
{
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"format": "date-time",
"description": "The time this state was entered"
}
}
}
]
},
{
"type": "object",
"properties": {
"currentVersion": {
"type": "string",
"description": "The currently running valetudo version"
}
}
}
]
},
{
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"format": "date-time",
"description": "The time this state was entered"
}
}
}
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"unknown",
"not_embedded",
"not_docked",
"not_writable",
"not_enough_space",
"download_failed",
"no_matching_binary",
"missing_manifest",
"invalid_manifest",
"invalid_checksum"
]
},
"message": {
"type": "string"
}
}
}
]
},
{
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"format": "date-time",
"description": "The time this state was entered"
}
}
}
]
},
{
"type": "object",
"properties": {
"version": {
"type": "string",
"description": "The valetudo version to be installed"
},
"releaseTimestamp": {
"type": "string",
"format": "date-time",
"description": "The release date as found in the manifest"
},
"changelog": {
"type": "string",
"description": "The changelog as provided by the github api. Github flavoured Markdown"
},
"downloadUrl": {
"type": "string",
"description": "The url from which the binary will be downloaded from"
},
"expectedHash": {
"type": "string",
"description": "The expected sha256sum of the downloaded binary"
},
"downloadPath": {
"type": "string",
"description": "The path the new binary is downloaded to"
}
}
}
]
},
{
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"format": "date-time",
"description": "The time this state was entered"
}
}
}
]
},
{
"type": "object",
"properties": {
"version": {
"type": "string",
"description": "The valetudo version to be installed"
},
"releaseTimestamp": {
"type": "string",
"format": "date-time",
"description": "The release date as found in the manifest"
},
"downloadUrl": {
"type": "string",
"description": "The url from which the binary will be downloaded from"
},
"expectedHash": {
"type": "string",
"description": "The expected sha256sum of the downloaded binary"
},
"downloadPath": {
"type": "string",
"description": "The path the new binary is downloaded to"
}
}
}
]
},
{
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"format": "date-time",
"description": "The time this state was entered"
}
}
}
]
},
{
"type": "object",
"properties": {
"version": {
"type": "string",
"description": "The valetudo version to be installed"
},
"releaseTimestamp": {
"type": "string",
"format": "date-time",
"description": "The release date as found in the manifest"
},
"downloadPath": {
"type": "string",
"description": "The path the new binary was downloaded to"
}
}
}
]
},
{
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"format": "date-time",
"description": "The time this state was entered"
}
}
}
]
},
{
"type": "object",
"properties": {}
}
]
},
{
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"format": "date-time",
"description": "The time this state was entered"
}
}
}
]
},
{
"type": "object",
"properties": {
"currentVersion": {
"type": "string",
"description": "The currently running valetudo version"
}
}
}
]
}
]
}
}
}
}
}
}
},
"/api/v2/updater": {
"put": {
"tags": [
"Updater"
],
"summary": "Request and execute an update of Valetudo",
"description": "Please do keep in mind that this is a potentially dangerous operation.",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"check",
"download",
"apply"
]
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
},
"400": {
"description": "Bad request"
}
}
}
},
"/api/v2/updater/config": {
"get": {
"tags": [
"Updater"
],
"summary": "Get Updater configuration",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"updateProvider": {
"type": "string",
"enum": [
"github",
"github_nightly"
]
}
}
}
}
}
}
}
},
"put": {
"tags": [
"Updater"
],
"summary": "Update Updater configuration",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"updateProvider": {
"type": "string",
"enum": [
"github",
"github_nightly"
]
}
}
},
"examples": {
"release": {
"description": "Use the Github Release update provider",
"value": {
"updateProvider": "github"
}
},
"nightly": {
"description": "Use the Github Nightly update provider",
"value": {
"updateProvider": "github_nightly"
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
}
}
}
},
"/api/v2/events": {
"get": {
"tags": [
"ValetudoEvents"
],
"summary": "Get all ValetudoEvents that are currently stored",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "object"
}
}
}
}
}
}
}
},
"/api/v2/events/{id}": {
"get": {
"tags": [
"ValetudoEvents"
],
"summary": "Get ValetudoEvent by ID",
"parameters": [
{
"in": "path",
"name": "id",
"required": true,
"description": "ValetudoEvent ID",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
},
"404": {
"description": "Bad request"
}
}
}
},
"/api/v2/events/{id}/interact": {
"put": {
"tags": [
"ValetudoEvents"
],
"summary": "Interact with a ValetudoEvent",
"parameters": [
{
"in": "path",
"name": "id",
"required": true,
"description": "ValetudoEvent ID",
"schema": {
"type": "string"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": false,
"properties": {
"interaction": {
"type": "string",
"enum": [
"ok",
"yes",
"no",
"reset"
]
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
},
"404": {
"description": "Not found"
},
"500": {
"description": "Internal server error"
}
}
}
},
"/api/v2/valetudo": {
"get": {
"tags": [
"Valetudo"
],
"summary": "Get basic Valetudo info",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"embedded": {
"type": "boolean"
},
"systemId": {
"type": "string"
},
"welcomeDialogDismissed": {
"type": "boolean"
}
}
}
}
}
}
}
}
},
"/api/v2/valetudo/action": {
"put": {
"tags": [
"Valetudo"
],
"summary": "Interact with Valetudo",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": false,
"properties": {
"action": {
"type": "string",
"enum": [
"dismissWelcomeDialog",
"restoreDefaultConfiguration"
]
}
}
},
"examples": {
"dismiss_welcome_dialog": {
"description": "Dismiss the OOBE welcome dialog",
"value": {
"action": "dismissWelcomeDialog"
}
},
"restore_default_configuration": {
"description": "Restore the default configuration",
"value": {
"action": "restoreDefaultConfiguration"
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
},
"404": {
"description": "Not found"
},
"500": {
"description": "Internal server error"
}
}
}
},
"/api/v2/valetudo/version": {
"get": {
"tags": [
"Valetudo"
],
"summary": "Get Valetudo version",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"release": {
"type": "string"
},
"commit": {
"type": "string"
}
}
}
}
}
}
}
}
},
"/api/v2/valetudo/log/content": {
"get": {
"tags": [
"Valetudo"
],
"summary": "Get full log",
"responses": {
"200": {
"description": "Ok",
"content": {
"text/plain": {
"schema": {
"type": "string"
}
}
}
}
}
}
},
"/api/v2/valetudo/log/content/sse": {
"get": {
"tags": [
"Valetudo"
],
"summary": "Get new log lines (SSE events)",
"description": "Retrieve new log lines.\n\nNote! This endpoint provides SSE events. Swagger does not support it.\nNote! This endpoint provides raw text, do not try to decode it as JSON.",
"responses": {
"200": {
"description": "Ok",
"content": {
"text/event-stream": {
"schema": {
"type": "object"
}
}
}
}
}
}
},
"/api/v2/valetudo/log/level": {
"get": {
"tags": [
"Valetudo"
],
"summary": "Get log level",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"current": {
"type": "string"
},
"presets": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
}
}
}
}
},
"put": {
"tags": [
"Valetudo"
],
"summary": "Set log level",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": false,
"properties": {
"level": {
"type": "string",
"enum": [
"trace",
"debug",
"info",
"warn",
"error"
]
}
}
}
}
}
},
"description": "Log level retrieved from GET presets",
"responses": {
"200": {
"description": "Ok"
}
}
}
},
"/api/v2/valetudo/config/interfaces/mqtt": {
"get": {
"tags": [
"Valetudo"
],
"summary": "Get MQTT configuration",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled",
"connection",
"identity",
"customizations",
"interfaces"
],
"properties": {
"enabled": {
"type": "boolean"
},
"connection": {
"type": "object",
"additionalProperties": false,
"required": [
"host",
"port"
],
"properties": {
"host": {
"type": "string"
},
"port": {
"type": "integer",
"minimum": 1,
"maximum": 65535
},
"tls": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean"
},
"ca": {
"type": "string",
"description": "This may optionally contain a CA certificate as a multi-line string. Filesystem paths are not supported."
},
"ignoreCertificateErrors": {
"type": "boolean",
"description": "This option might be required when using a self-signed cert. Note that you will be exposing yourself to MITM attacks."
}
}
},
"authentication": {
"type": "object",
"additionalProperties": false,
"properties": {
"credentials": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean"
},
"username": {
"type": "string"
},
"password": {
"type": "string"
}
}
},
"clientCertificate": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean"
},
"certificate": {
"type": "string",
"description": "The full certificate as a multi-line string. Filesystem paths are not supported."
},
"key": {
"type": "string",
"description": "The full key as a multi-line string. Filesystem paths are not supported."
}
}
}
}
}
}
},
"identity": {
"type": "object",
"additionalProperties": false,
"properties": {
"identifier": {
"type": "string",
"description": "The desired machine-readable name of the robot. Used in MQTT topics. Defaults to the auto-generated machine ID"
}
}
},
"customizations": {
"type": "object",
"additionalProperties": false,
"properties": {
"topicPrefix": {
"type": "string",
"description": "You can override the default \"valetudo\" mqtt topic prefix if you e.g. prefer to group all your mqtt stuff by rooms/floors/protocols"
},
"provideMapData": {
"type": "boolean",
"description": "If for some reason you're not interested in receiving map data via MQTT, you can disable that here."
}
}
},
"interfaces": {
"type": "object",
"additionalProperties": false,
"required": [
"homie",
"homeassistant"
],
"properties": {
"homie": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled",
"addICBINVMapProperty",
"cleanAttributesOnShutdown"
],
"properties": {
"enabled": {
"type": "boolean"
},
"addICBINVMapProperty": {
"type": "boolean",
"description": "If true, adds Homie definitions for ICBINV's PNG map topic as that's not possible to add in ICBINV itself."
},
"cleanAttributesOnShutdown": {
"type": "boolean"
}
}
},
"homeassistant": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled",
"cleanAutoconfOnShutdown"
],
"properties": {
"enabled": {
"type": "boolean"
},
"cleanAutoconfOnShutdown": {
"type": "boolean"
}
}
}
}
},
"optionalExposedCapabilities": {
"type": "array",
"items": {
"type": "string",
"enum": [
"ConsumableMonitoringCapability",
"CurrentStatisticsCapability",
"TotalStatisticsCapability",
"SpeakerVolumeControlCapability"
]
}
}
}
}
}
}
}
}
},
"put": {
"tags": [
"Valetudo"
],
"summary": "Update MQTT configuration",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled",
"connection",
"identity",
"customizations",
"interfaces"
],
"properties": {
"enabled": {
"type": "boolean"
},
"connection": {
"type": "object",
"additionalProperties": false,
"required": [
"host",
"port"
],
"properties": {
"host": {
"type": "string"
},
"port": {
"type": "integer",
"minimum": 1,
"maximum": 65535
},
"tls": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean"
},
"ca": {
"type": "string",
"description": "This may optionally contain a CA certificate as a multi-line string. Filesystem paths are not supported."
},
"ignoreCertificateErrors": {
"type": "boolean",
"description": "This option might be required when using a self-signed cert. Note that you will be exposing yourself to MITM attacks."
}
}
},
"authentication": {
"type": "object",
"additionalProperties": false,
"properties": {
"credentials": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean"
},
"username": {
"type": "string"
},
"password": {
"type": "string"
}
}
},
"clientCertificate": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean"
},
"certificate": {
"type": "string",
"description": "The full certificate as a multi-line string. Filesystem paths are not supported."
},
"key": {
"type": "string",
"description": "The full key as a multi-line string. Filesystem paths are not supported."
}
}
}
}
}
}
},
"identity": {
"type": "object",
"additionalProperties": false,
"properties": {
"identifier": {
"type": "string",
"description": "The desired machine-readable name of the robot. Used in MQTT topics. Defaults to the auto-generated machine ID"
}
}
},
"customizations": {
"type": "object",
"additionalProperties": false,
"properties": {
"topicPrefix": {
"type": "string",
"description": "You can override the default \"valetudo\" mqtt topic prefix if you e.g. prefer to group all your mqtt stuff by rooms/floors/protocols"
},
"provideMapData": {
"type": "boolean",
"description": "If for some reason you're not interested in receiving map data via MQTT, you can disable that here."
}
}
},
"interfaces": {
"type": "object",
"additionalProperties": false,
"required": [
"homie",
"homeassistant"
],
"properties": {
"homie": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled",
"addICBINVMapProperty",
"cleanAttributesOnShutdown"
],
"properties": {
"enabled": {
"type": "boolean"
},
"addICBINVMapProperty": {
"type": "boolean",
"description": "If true, adds Homie definitions for ICBINV's PNG map topic as that's not possible to add in ICBINV itself."
},
"cleanAttributesOnShutdown": {
"type": "boolean"
}
}
},
"homeassistant": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled",
"cleanAutoconfOnShutdown"
],
"properties": {
"enabled": {
"type": "boolean"
},
"cleanAutoconfOnShutdown": {
"type": "boolean"
}
}
}
}
},
"optionalExposedCapabilities": {
"type": "array",
"items": {
"type": "string",
"enum": [
"ConsumableMonitoringCapability",
"CurrentStatisticsCapability",
"TotalStatisticsCapability",
"SpeakerVolumeControlCapability"
]
}
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
}
}
}
},
"/api/v2/valetudo/config/interfaces/http/auth/basic": {
"get": {
"tags": [
"Valetudo"
],
"summary": "Get HTTP basic auth configuration",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled",
"username",
"password"
],
"properties": {
"enabled": {
"type": "boolean"
},
"username": {
"type": "string"
},
"password": {
"type": "string"
}
}
}
}
}
}
}
},
"put": {
"tags": [
"Valetudo"
],
"summary": "Update HTTP basic auth configuration",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": false,
"required": [
"enabled",
"username",
"password"
],
"properties": {
"enabled": {
"type": "boolean"
},
"username": {
"type": "string"
},
"password": {
"type": "string"
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
},
"400": {
"description": "Bad request"
}
}
}
},
"/api/v2/valetudo/config/customizations": {
"get": {
"tags": [
"Valetudo"
],
"summary": "Get Valetudo customizations",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": false,
"properties": {
"friendlyName": {
"type": "string",
"pattern": "^[a-zA-Z0-9 -]{0,24}$",
"description": "An optional user-defined friendly name for the Valetudo instance"
}
}
}
}
}
}
}
},
"put": {
"tags": [
"Valetudo"
],
"summary": "Update Valetudo customizations",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": false,
"properties": {
"friendlyName": {
"type": "string",
"pattern": "^[a-zA-Z0-9 -]{0,24}$",
"description": "An optional user-defined friendly name for the Valetudo instance"
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
},
"400": {
"description": "Bad request"
}
}
}
},
"/api/v2": {
"get": {
"tags": [
"Valetudo"
],
"summary": "List available API endpoints",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/BasicControlCapability": {
"put": {
"tags": [
"BasicControlCapability"
],
"summary": "Basic robot control",
"description": "Allowed actions:\n\n- `start`\n- `stop`\n- `pause`\n- `home`\n",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"action": {
"type": "string",
"description": "Robot action to perform",
"enum": [
"start",
"stop",
"pause",
"home"
]
}
}
},
"examples": {
"start": {
"description": "Start",
"value": {
"action": "start"
}
},
"stop": {
"description": "Stop",
"value": {
"action": "stop"
}
},
"pause": {
"description": "Pause",
"value": {
"action": "pause"
}
},
"home": {
"description": "Home",
"value": {
"action": "home"
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
},
"400": {
"description": "Bad request"
}
}
}
},
"/api/v2/robot/capabilities/BasicControlCapability/properties": {
"get": {
"tags": [
"BasicControlCapability"
],
"summary": "Get various capability-related properties",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/CombinedVirtualRestrictionsCapability": {
"get": {
"tags": [
"CombinedVirtualRestrictionsCapability"
],
"summary": "Get virtual restrictions",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"virtualWalls": {
"type": "array",
"items": {
"type": "object",
"properties": {
"points": {
"type": "object",
"properties": {
"pA": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
},
"pB": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
}
}
}
}
}
},
"restrictedZones": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"regular",
"mop"
]
},
"points": {
"type": "object",
"properties": {
"pA": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
},
"pB": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
},
"pC": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
},
"pD": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
}
}
}
}
}
}
}
}
}
}
}
}
},
"put": {
"tags": [
"CombinedVirtualRestrictionsCapability"
],
"summary": "Set virtual restrictions",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"virtualWalls": {
"type": "array",
"items": {
"type": "object",
"properties": {
"points": {
"type": "object",
"properties": {
"pA": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
},
"pB": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
}
}
}
}
}
},
"restrictedZones": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"regular",
"mop"
]
},
"points": {
"type": "object",
"properties": {
"pA": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
},
"pB": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
},
"pC": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
},
"pD": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
}
}
}
}
}
}
}
},
"examples": {
"wall_regular_mop": {
"description": "Set virtual restrictions",
"value": {
"virtualWalls": [
{
"points": {
"pA": {
"x": 3390,
"y": 3330
},
"pB": {
"x": 3538,
"y": 3478
}
}
}
],
"restrictedZones": [
{
"type": "regular",
"points": {
"pA": {
"x": 3175,
"y": 2670
},
"pB": {
"x": 3350,
"y": 2670
},
"pC": {
"x": 3350,
"y": 2925
},
"pD": {
"x": 3175,
"y": 2925
}
}
},
{
"type": "mop",
"points": {
"pA": {
"x": 3140,
"y": 3415
},
"pB": {
"x": 3290,
"y": 3415
},
"pC": {
"x": 3290,
"y": 3565
},
"pD": {
"x": 3140,
"y": 3565
}
}
}
]
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
},
"400": {
"description": "Bad request"
}
}
}
},
"/api/v2/robot/capabilities/CombinedVirtualRestrictionsCapability/properties": {
"get": {
"tags": [
"CombinedVirtualRestrictionsCapability"
],
"summary": "Get various capability-related properties",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/ConsumableMonitoringCapability": {
"get": {
"tags": [
"ConsumableMonitoringCapability"
],
"summary": "Get consumables status",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"allOf": [
{
"allOf": [
{
"allOf": [
{
"type": "object",
"properties": {
"__class": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
},
{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"subType": {
"type": "string"
}
}
}
]
}
]
},
{
"type": "object",
"properties": {
"remaining": {
"type": "object",
"properties": {
"value": {
"type": "number"
},
"unit": {
"type": "string",
"enum": [
"percent",
"minutes"
]
}
}
}
}
}
]
}
},
"examples": {
"getConsumablesStatus": {
"description": "Get the status of the consumables.",
"value": [
{
"__class": "ConsumableStateAttribute",
"metaData": {},
"type": "brush",
"subType": "main",
"remaining": {
"value": 123456,
"unit": "minutes"
}
},
{
"__class": "ConsumableStateAttribute",
"metaData": {},
"type": "brush",
"subType": "side_right",
"remaining": {
"value": 1234,
"unit": "minutes"
}
},
{
"__class": "ConsumableStateAttribute",
"metaData": {},
"type": "filter",
"subType": "main",
"remaining": {
"value": 5432,
"unit": "minutes"
}
},
{
"__class": "ConsumableStateAttribute",
"metaData": {},
"type": "sensor",
"subType": "all",
"remaining": {
"value": 123,
"unit": "minutes"
}
}
]
}
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/ConsumableMonitoringCapability/{type}": {
"put": {
"tags": [
"ConsumableMonitoringCapability"
],
"summary": "Reset consumable",
"parameters": [
{
"in": "path",
"name": "type",
"description": "Consumable type",
"required": true,
"schema": {
"type": "string"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"reset"
]
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
},
"400": {
"description": "Bad request"
}
}
}
},
"/api/v2/robot/capabilities/ConsumableMonitoringCapability/{type}/{sub_type}": {
"put": {
"tags": [
"ConsumableMonitoringCapability"
],
"summary": "Reset consumable",
"parameters": [
{
"in": "path",
"name": "type",
"description": "Consumable type",
"required": true,
"schema": {
"type": "string"
}
},
{
"in": "path",
"name": "sub_type",
"description": "Consumable sub-type",
"required": true,
"schema": {
"type": "string"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"reset"
]
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
},
"400": {
"description": "Bad request"
}
}
}
},
"/api/v2/robot/capabilities/ConsumableMonitoringCapability/properties": {
"get": {
"tags": [
"ConsumableMonitoringCapability"
],
"summary": "Get various capability-related properties",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"availableConsumables": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"subType": {
"type": "string"
},
"unit": {
"type": "string"
},
"maxValue": {
"type": "number"
}
}
}
}
}
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/DoNotDisturbCapability": {
"get": {
"tags": [
"DoNotDisturbCapability"
],
"summary": "Get do-not-disturb configuration",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"start": {
"type": "object",
"properties": {
"hour": {
"type": "integer"
},
"minute": {
"type": "integer"
}
}
},
"end": {
"type": "object",
"properties": {
"hour": {
"type": "integer"
},
"minute": {
"type": "integer"
}
}
},
"metaData": {
"type": "object"
}
}
},
"examples": {
"getTimer": {
"description": "Get the do not disturb timer configuration",
"value": {
"enabled": true,
"start": {
"hour": 22,
"minute": 0
},
"end": {
"hour": 8,
"minute": 0
},
"metaData": {}
}
}
}
}
}
}
}
},
"put": {
"tags": [
"DoNotDisturbCapability"
],
"summary": "Set do-not-disturb configuration",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"start": {
"type": "object",
"properties": {
"hour": {
"type": "integer"
},
"minute": {
"type": "integer"
}
}
},
"end": {
"type": "object",
"properties": {
"hour": {
"type": "integer"
},
"minute": {
"type": "integer"
}
}
},
"metaData": {
"type": "object"
}
}
},
"examples": {
"setTimer": {
"description": "Set a do not disturb timer from 22:00 to 06:00",
"value": {
"enabled": true,
"start": {
"hour": 22,
"minute": 0
},
"end": {
"hour": 8,
"minute": 0
},
"metaData": {}
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
},
"400": {
"description": "Bad request"
}
}
}
},
"/api/v2/robot/capabilities/DoNotDisturbCapability/properties": {
"get": {
"tags": [
"DoNotDisturbCapability"
],
"summary": "Get various capability-related properties",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/LocateCapability": {
"put": {
"tags": [
"LocateCapability"
],
"summary": "Locate robot",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"locate"
]
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
},
"400": {
"description": "Bad request"
}
}
}
},
"/api/v2/robot/capabilities/LocateCapability/properties": {
"get": {
"tags": [
"LocateCapability"
],
"summary": "Get various capability-related properties",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/ManualControlCapability": {
"get": {
"tags": [
"ManualControlCapability"
],
"summary": "Get manual control status",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
}
}
}
}
}
}
}
},
"put": {
"tags": [
"ManualControlCapability"
],
"summary": "Control robot",
"description": "To perform manual control you must enable manual control mode by sending `action: \"enable\"` (and then\n`disable` when you're done).\n\nOnce in manual control mode you can send movement commands.\n\nThe amount of time taken to perform each movement and the exact movement types depend on the robot\nimplementation.\n",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"enable",
"disable",
"move"
]
},
"movementCommand": {
"type": "string",
"enum": [
"forward",
"backward",
"rotate_clockwise",
"rotate_counterclockwise"
]
}
}
},
"examples": {
"enable manual control": {
"description": "Enabling manual control",
"value": {
"action": "enable"
}
},
"move forwards": {
"description": "Moving the robot forwards",
"value": {
"action": "move",
"movementCommand": "forward"
}
},
"move backwards": {
"description": "Moving the robot backwards",
"value": {
"action": "move",
"movementCommand": "backward"
}
},
"rotate clockwise": {
"description": "Rotating the robot clockwise",
"value": {
"action": "move",
"movementCommand": "rotate_clockwise"
}
},
"rotate counterclockwise": {
"description": "Rotating the robot counterclockwise",
"value": {
"action": "move",
"movementCommand": "rotate_counterclockwise"
}
},
"disable manual control": {
"description": "Disabling manual control",
"value": {
"action": "disable"
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
},
"400": {
"description": "Bad request"
}
}
}
},
"/api/v2/robot/capabilities/ManualControlCapability/properties": {
"get": {
"tags": [
"ManualControlCapability"
],
"summary": "Get various capability-related properties",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"supportedMovementCommands": {
"type": "array",
"description": "Supported movement commands",
"items": {
"type": "string",
"enum": [
"forward",
"backward",
"rotate_clockwise",
"rotate_counterclockwise"
]
}
}
}
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/MappingPassCapability": {
"put": {
"tags": [
"MappingPassCapability"
],
"summary": "Start mapping",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"start_mapping"
]
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
},
"400": {
"description": "Bad request"
}
}
}
},
"/api/v2/robot/capabilities/MappingPassCapability/properties": {
"get": {
"tags": [
"MappingPassCapability"
],
"summary": "Get various capability-related properties",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/MapResetCapability": {
"put": {
"tags": [
"MapResetCapability"
],
"summary": "Reset map",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"reset"
]
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
},
"400": {
"description": "Bad request"
}
}
}
},
"/api/v2/robot/capabilities/MapResetCapability/properties": {
"get": {
"tags": [
"MapResetCapability"
],
"summary": "Get various capability-related properties",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/MapSegmentationCapability": {
"get": {
"tags": [
"MapSegmentationCapability"
],
"summary": "Get available map segments",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"metaData": {
"type": "object"
}
}
}
}
}
}
}
}
},
"put": {
"tags": [
"MapSegmentationCapability"
],
"summary": "Clean map segments",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"segment_ids"
],
"properties": {
"action": {
"type": "string",
"enum": [
"start_segment_action"
]
},
"segment_ids": {
"type": "array",
"items": {
"type": "string",
"description": "Segment IDs to clean",
"minimum": 1
}
},
"iterations": {
"type": "number",
"minimum": 1,
"description": "The iteration value applies to all specified Segment IDs. Defaults to 1."
},
"customOrder": {
"type": "boolean",
"description": "Whether or not Segments should be cleaned in order of ID appearance in the Array. Defaults to false. (Needs firmware support)"
}
}
},
"examples": {
"Clean segments in default order": {
"description": "Clean selected segments in a order determined by the robot",
"value": {
"action": "start_segment_action",
"segment_ids": [
"3",
"2",
"1"
],
"iterations": 1
}
},
"Clean segments in custom order": {
"description": "Clean selected segments in order of appearance of the IDs provided in the segment_ids array. Check custom order support for your robot with the MapSegmentationCapability/properties endpoint",
"value": {
"action": "start_segment_action",
"segment_ids": [
"3",
"2",
"1"
],
"iterations": 1,
"customOrder": true
}
},
"Clean segments with multiple iterations": {
"description": "Clean selected segments in custom order with multiple iterations. Check custom order support and maximum iterations for your robot with the MapSegmentationCapability/properties endpoint",
"value": {
"action": "start_segment_action",
"segment_ids": [
"3",
"2",
"1"
],
"iterations": 3,
"customOrder": true
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
},
"400": {
"description": "Bad request"
}
}
}
},
"/api/v2/robot/capabilities/MapSegmentationCapability/properties": {
"get": {
"tags": [
"MapSegmentationCapability"
],
"summary": "Get various capability-related properties",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": false,
"required": [
"iterationCount",
"customOrderSupported"
],
"properties": {
"iterationCount": {
"type": "object",
"additionalProperties": false,
"properties": {
"min": {
"minimum": 1,
"type": "number"
},
"max": {
"minimum": 1,
"type": "number"
}
}
},
"customOrderSupported": {
"type": "boolean"
}
}
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/MapSegmentEditCapability": {
"put": {
"tags": [
"MapSegmentEditCapability"
],
"summary": "Edit map segments",
"requestBody": {
"content": {
"application/json": {
"schema": {
"oneOf": [
{
"type": "object",
"description": "join_segments action",
"properties": {
"action": {
"type": "string",
"enum": [
"join_segments"
]
},
"segment_a_id": {
"type": "string"
},
"segment_b_id": {
"type": "string"
}
}
},
{
"type": "object",
"description": "split_segment action",
"properties": {
"action": {
"type": "string",
"enum": [
"split_segment"
]
},
"segment_id": {
"type": "string"
},
"pA": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
},
"pB": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
}
}
}
]
},
"examples": {
"split_segment": {
"description": "Split a segment along a line",
"value": {
"action": "split_segment",
"segment_id": "1",
"pA": {
"x": 3305,
"y": 2905
},
"pB": {
"x": 3305,
"y": 3050
}
}
},
"join_segments": {
"description": "Join two segments",
"value": {
"action": "join_segments",
"segment_a_id": "4",
"segment_b_id": "5"
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
},
"400": {
"description": "Bad request"
}
}
}
},
"/api/v2/robot/capabilities/MapSegmentEditCapability/properties": {
"get": {
"tags": [
"MapSegmentEditCapability"
],
"summary": "Get various capability-related properties",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/MapSegmentRenameCapability": {
"put": {
"tags": [
"MapSegmentRenameCapability"
],
"summary": "Rename map segment",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"rename_segment"
]
},
"segment_id": {
"type": "string"
},
"name": {
"type": "string"
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
},
"400": {
"description": "Bad request"
}
}
}
},
"/api/v2/robot/capabilities/MapSegmentRenameCapability/properties": {
"get": {
"tags": [
"MapSegmentRenameCapability"
],
"summary": "Get various capability-related properties",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/PendingMapChangeHandlingCapability": {
"get": {
"tags": [
"PendingMapChangeHandlingCapability"
],
"summary": "Check if there is a pending map change",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
}
}
}
}
}
}
}
},
"put": {
"tags": [
"PendingMapChangeHandlingCapability"
],
"summary": "Accept or reject a pending map change",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"accept",
"reject"
]
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
},
"400": {
"description": "Bad request"
}
}
}
},
"/api/v2/robot/capabilities/PendingMapChangeHandlingCapability/properties": {
"get": {
"tags": [
"PendingMapChangeHandlingCapability"
],
"summary": "Get various capability-related properties",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/FanSpeedControlCapability/presets": {
"get": {
"tags": [
"FanSpeedControlCapability"
],
"summary": "Get available presets",
"parameters": [],
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/FanSpeedControlCapability/preset": {
"put": {
"tags": [
"FanSpeedControlCapability"
],
"summary": "Set preset value",
"parameters": [],
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Preset name retrieved from the same capability"
}
}
},
"examples": {
"medium": {
"description": "Set fan speed to medium",
"value": {
"name": "medium"
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
},
"400": {
"description": "Bad request"
}
}
}
},
"/api/v2/robot/capabilities/FanSpeedControlCapability/properties": {
"get": {
"tags": [
"FanSpeedControlCapability"
],
"summary": "Get various capability-related properties",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/WaterUsageControlCapability/presets": {
"get": {
"tags": [
"WaterUsageControlCapability"
],
"summary": "Get available presets",
"parameters": [],
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/WaterUsageControlCapability/preset": {
"put": {
"tags": [
"WaterUsageControlCapability"
],
"summary": "Set preset value",
"parameters": [],
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Preset name retrieved from the same capability"
}
}
},
"examples": {
"medium": {
"description": "Set water usage to medium",
"value": {
"name": "medium"
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
},
"400": {
"description": "Bad request"
}
}
}
},
"/api/v2/robot/capabilities/WaterUsageControlCapability/properties": {
"get": {
"tags": [
"WaterUsageControlCapability"
],
"summary": "Get various capability-related properties",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/OperationModeControlCapability/presets": {
"get": {
"tags": [
"OperationModeControlCapability"
],
"summary": "Get available presets",
"parameters": [],
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/OperationModeControlCapability/preset": {
"put": {
"tags": [
"OperationModeControlCapability"
],
"summary": "Set preset value",
"parameters": [],
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Preset name retrieved from the same capability"
}
}
},
"examples": {
"mop": {
"description": "Set operation mode to mop only",
"value": {
"name": "mop"
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
},
"400": {
"description": "Bad request"
}
}
}
},
"/api/v2/robot/capabilities/OperationModeControlCapability/properties": {
"get": {
"tags": [
"OperationModeControlCapability"
],
"summary": "Get various capability-related properties",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/QuirksCapability": {
"get": {
"tags": [
"QuirksCapability"
],
"summary": "Get quirks",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"options": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"value": {
"type": "string"
}
}
}
}
}
}
}
},
"put": {
"tags": [
"QuirksCapability"
],
"summary": "Set quirk values",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"id",
"value"
],
"properties": {
"id": {
"type": "string"
},
"value": {
"type": "string"
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
},
"400": {
"description": "Bad request"
}
}
}
},
"/api/v2/robot/capabilities/QuirksCapability/properties": {
"get": {
"tags": [
"QuirksCapability"
],
"summary": "Get various capability-related properties",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/CarpetModeControlCapability": {
"get": {
"tags": [
"CarpetModeControlCapability"
],
"summary": "Get carpet mode settings",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
}
}
}
}
}
}
}
},
"put": {
"tags": [
"CarpetModeControlCapability"
],
"summary": "Set carpet mode settings",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"enable",
"disable"
]
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
},
"400": {
"description": "Bad request"
}
}
}
},
"/api/v2/robot/capabilities/CarpetModeControlCapability/properties": {
"get": {
"tags": [
"CarpetModeControlCapability"
],
"summary": "Get various capability-related properties",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/KeyLockCapability": {
"get": {
"tags": [
"KeyLockCapability"
],
"summary": "Get key lock setting",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
}
}
}
}
}
}
}
},
"put": {
"tags": [
"KeyLockCapability"
],
"summary": "Set key lock setting",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"enable",
"disable"
]
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
},
"400": {
"description": "Bad request"
}
}
}
},
"/api/v2/robot/capabilities/KeyLockCapability/properties": {
"get": {
"tags": [
"KeyLockCapability"
],
"summary": "Get various capability-related properties",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/SpeakerTestCapability": {
"put": {
"tags": [
"SpeakerTestCapability"
],
"summary": "Test speaker",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"play_test_sound"
]
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
},
"400": {
"description": "Bad request"
}
}
}
},
"/api/v2/robot/capabilities/SpeakerTestCapability/properties": {
"get": {
"tags": [
"SpeakerTestCapability"
],
"summary": "Get various capability-related properties",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/SpeakerVolumeControlCapability": {
"get": {
"tags": [
"SpeakerVolumeControlCapability"
],
"summary": "Get speaker volume",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"volume": {
"type": "number",
"description": "Percentage"
}
}
}
}
}
}
}
},
"put": {
"tags": [
"SpeakerVolumeControlCapability"
],
"summary": "Set speaker volume",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"set_volume"
]
},
"value": {
"type": "number",
"description": "Percentage"
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
},
"400": {
"description": "Bad request"
}
}
}
},
"/api/v2/robot/capabilities/SpeakerVolumeControlCapability/properties": {
"get": {
"tags": [
"SpeakerVolumeControlCapability"
],
"summary": "Get various capability-related properties",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/TotalStatisticsCapability": {
"get": {
"tags": [
"TotalStatisticsCapability"
],
"summary": "Get total statistics",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"description": "Datetime in ISO8601 format"
},
"type": {
"type": "string",
"enum": [
"time",
"area",
"count"
]
},
"value": {
"type": "number"
},
"metaData": {
"type": "object"
}
}
}
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/TotalStatisticsCapability/properties": {
"get": {
"tags": [
"TotalStatisticsCapability"
],
"summary": "Get various capability-related properties",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"availableStatistics": {
"type": "array",
"items": {
"type": "string",
"enum": [
"count",
"time",
"area"
]
}
}
}
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/CurrentStatisticsCapability": {
"get": {
"tags": [
"CurrentStatisticsCapability"
],
"summary": "Get statistics about the current (or last) task",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"description": "Datetime in ISO8601 format"
},
"type": {
"type": "string",
"enum": [
"time",
"area",
"count"
]
},
"value": {
"type": "number"
},
"metaData": {
"type": "object"
}
}
}
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/CurrentStatisticsCapability/properties": {
"get": {
"tags": [
"CurrentStatisticsCapability"
],
"summary": "Get various capability-related properties",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"availableStatistics": {
"type": "array",
"items": {
"type": "string",
"enum": [
"count",
"time",
"area"
]
}
}
}
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/VoicePackManagementCapability": {
"get": {
"tags": [
"VoicePackManagementCapability"
],
"summary": "Get current voice pack and operation status, if any",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"currentLanguage": {
"type": "string"
},
"operationStatus": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"idle",
"downloading",
"installing",
"error"
]
},
"progress": {
"type": "number",
"description": "Percentage"
},
"metaData": {
"type": "object"
}
}
}
}
}
}
}
}
}
},
"put": {
"tags": [
"VoicePackManagementCapability"
],
"summary": "Set voice pack",
"description": "**Note:** the actual parameters and the voice pack format are highly dependent on the specific robot model.",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"download"
]
},
"url": {
"type": "string"
},
"language": {
"type": "string"
},
"hash": {
"type": "string"
}
}
},
"examples": {
"custom": {
"description": "Install a custom voice pack",
"value": {
"action": "download",
"url": "http://host_or_ip/custom.tar.gz",
"language": "cu",
"hash": "md5md5md5md5md5md5md5md5md5md5md"
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
},
"400": {
"description": "Bad request"
}
}
}
},
"/api/v2/robot/capabilities/VoicePackManagementCapability/properties": {
"get": {
"tags": [
"VoicePackManagementCapability"
],
"summary": "Get various capability-related properties",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/WifiConfigurationCapability": {
"get": {
"tags": [
"WifiConfigurationCapability"
],
"summary": "Get current wireless radio status",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"state": {
"type": "string",
"enum": [
"connected",
"not_connected",
"unknown"
]
},
"details": {
"type": "object",
"properties": {
"ssid": {
"type": "string",
"description": "Wireless network name"
},
"bssid": {
"type": "string"
},
"downspeed": {
"type": "number"
},
"upspeed": {
"type": "number"
},
"signal": {
"type": "number"
},
"ips": {
"type": "array",
"description": "IP addresses",
"items": {
"type": "string"
}
},
"frequency": {
"type": "string",
"enum": [
"2.4ghz",
"5ghz"
]
}
}
},
"metaData": {
"type": "object"
}
}
}
}
}
}
}
},
"put": {
"tags": [
"WifiConfigurationCapability"
],
"summary": "Set new wireless radio configuration",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"ssid": {
"type": "string",
"description": "Wireless network name"
},
"credentials": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"typeSpecificSettings": {
"type": "object",
"description": "Settings depending on type, for example WPA preshared key"
}
}
},
"metaData": {
"type": "object"
}
}
},
"examples": {
"configure wifi": {
"description": "Configure Wifi",
"value": {
"ssid": "MySSID",
"credentials": {
"type": "wpa2_psk",
"typeSpecificSettings": {
"password": "MyPassword"
}
}
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
},
"400": {
"description": "Bad request"
},
"500": {
"description": "Internal server error"
}
}
}
},
"/api/v2/robot/capabilities/WifiConfigurationCapability/properties": {
"get": {
"tags": [
"WifiConfigurationCapability"
],
"summary": "Get various capability-related properties",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"provisionedReconfigurationSupported": {
"type": "boolean"
}
}
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/WifiScanCapability": {
"get": {
"tags": [
"WifiScanCapability"
],
"summary": "Scan for Wi-Fi networks. May return cached data",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "object",
"properties": {
"bssid": {
"type": "string"
},
"details": {
"type": "object",
"properties": {
"ssid": {
"type": "string",
"description": "Wireless network name"
},
"signal": {
"type": "number"
}
}
},
"metaData": {
"type": "object"
}
}
}
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/WifiScanCapability/properties": {
"get": {
"tags": [
"WifiScanCapability"
],
"summary": "Get various capability-related properties",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
}
}
}
},
"/api/v2/robot/capabilities/ZoneCleaningCapability": {
"put": {
"tags": [
"ZoneCleaningCapability"
],
"summary": "Clean one or more zones",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"clean"
]
},
"zones": {
"type": "array",
"description": "Zones clean",
"items": {
"type": "object",
"properties": {
"points": {
"type": "object",
"properties": {
"pA": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
},
"pB": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
},
"pC": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
},
"pD": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
}
}
},
"metaData": {
"type": "object"
}
}
}
},
"iterations": {
"type": "number"
}
}
},
"examples": {
"spot": {
"description": "Clean a small spot",
"value": {
"action": "clean",
"zones": [
{
"points": {
"pA": {
"x": 2720,
"y": 3655
},
"pB": {
"x": 2850,
"y": 3655
},
"pC": {
"x": 2850,
"y": 3705
},
"pD": {
"x": 2720,
"y": 3705
}
}
}
],
"iterations": 1
}
}
}
}
}
},
"responses": {
"200": {
"description": "Ok"
},
"400": {
"description": "Bad request"
}
}
}
},
"/api/v2/robot/capabilities/ZoneCleaningCapability/properties": {
"get": {
"tags": [
"ZoneCleaningCapability"
],
"summary": "Get various capability-related properties",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": false,
"required": [
"zoneCount",
"iterationCount"
],
"properties": {
"zoneCount": {
"type": "object",
"additionalProperties": false,
"properties": {
"min": {
"minimum": 1,
"type": "number"
},
"max": {
"minimum": 1,
"type": "number"
}
}
},
"iterationCount": {
"type": "object",
"additionalProperties": false,
"properties": {
"min": {
"minimum": 1,
"type": "number"
},
"max": {
"minimum": 1,
"type": "number"
}
}
}
}
}
}
}
}
}
}
}
}
},
"customOptions": {}
}