{
    "openapi": "3.0.1",
    "info": {
      "title": "Standard Agent Emulator Service",
      "description": "",
      "contact": {
        "name": "Bastian Solutions - Software",
        "email": ""
      },
      "version": "v4.0.1"
    },
    "paths": {
      "/get/agents": {
        "post": {
          "tags": [
            "Agent"
          ],
          "operationId": "GetAgents",
          "requestBody": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Bastian.Maestro.StandardAgent.Api.Abstractions.Requests.GetAgentsQuery"
                }
              }
            }
          },
          "responses": {
            "200": {
              "description": "Success",
              "content": {
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/Bastian.Maestro.StandardAgent.Api.Abstractions.Requests.GetAgentsResponse"
                  }
                }
              }
            }
          }
        }
      },
      "/get/agentTypes": {
        "post": {
          "tags": [
            "Agent"
          ],
          "operationId": "GetAgentTypes",
          "requestBody": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Bastian.Maestro.StandardAgent.Api.Abstractions.Requests.GetAgentTypesQuery"
                }
              }
            }
          },
          "responses": {
            "200": {
              "description": "Success",
              "content": {
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/Bastian.Maestro.StandardAgent.Api.Abstractions.Requests.GetAgentTypesResponse"
                  }
                }
              }
            }
          }
        }
      },
      "/get/mapVersions": {
        "post": {
          "tags": [
            "Agent"
          ],
          "operationId": "GetMapVersions",
          "responses": {
            "200": {
              "description": "Success",
              "content": {
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/Bastian.Maestro.StandardAgent.Api.Abstractions.Requests.GetMapVersionsResponse"
                  }
                }
              }
            }
          }
        }
      },
      "/get/tasks": {
        "post": {
          "tags": [
            "Agent"
          ],
          "operationId": "GetTasks",
          "requestBody": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Bastian.Maestro.StandardAgent.Api.Abstractions.Requests.GetTasksQuery"
                }
              }
            }
          },
          "responses": {
            "200": {
              "description": "Success",
              "content": {
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/Bastian.Maestro.StandardAgent.Api.Abstractions.Requests.GetTasksResponse"
                  }
                }
              }
            }
          }
        }
      },
      "/new/map": {
        "post": {
          "tags": [
            "Agent"
          ],
          "operationId": "NewMap",
          "requestBody": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Bastian.Maestro.StandardAgent.Api.Abstractions.Requests.NewMapCommand"
                }
              }
            }
          },
          "responses": {
            "201": {
              "description": "Created"
            },
            "400": {
              "description": "Bad Request",
              "content": {
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/Bastian.Maestro.StandardAgent.Api.Abstractions.Models.Error"
                  }
                }
              }
            }
          }
        }
      },
      "/new/task": {
        "post": {
          "tags": [
            "Agent"
          ],
          "operationId": "NewTask",
          "requestBody": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Bastian.Maestro.StandardAgent.Api.Abstractions.Requests.NewTaskCommand"
                }
              }
            }
          },
          "responses": {
            "201": {
              "description": "Created"
            },
            "400": {
              "description": "Bad Request",
              "content": {
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/Bastian.Maestro.StandardAgent.Api.Abstractions.Models.Error"
                  }
                }
              }
            }
          }
        }
      },
      "/set/mapVersion": {
        "post": {
          "tags": [
            "Agent"
          ],
          "operationId": "SetMapVersion",
          "requestBody": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Bastian.Maestro.StandardAgent.Api.Abstractions.Requests.SetMapVersionCommand"
                }
              }
            }
          },
          "responses": {
            "202": {
              "description": "Accepted"
            },
            "400": {
              "description": "Bad Request",
              "content": {
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/Bastian.Maestro.StandardAgent.Api.Abstractions.Models.Error"
                  }
                }
              }
            }
          }
        }
      },
      "/start/taskAction": {
        "post": {
          "tags": [
            "Agent"
          ],
          "operationId": "StartTaskAction",
          "requestBody": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Bastian.Maestro.StandardAgent.Api.Abstractions.Requests.StartTaskActionCommand"
                }
              }
            }
          },
          "responses": {
            "202": {
              "description": "Accepted"
            },
            "400": {
              "description": "Bad Request",
              "content": {
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/Bastian.Maestro.StandardAgent.Api.Abstractions.Models.Error"
                  }
                }
              }
            }
          }
        }
      },
      "/stop/task": {
        "post": {
          "tags": [
            "Agent"
          ],
          "operationId": "StopTask",
          "requestBody": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Bastian.Maestro.StandardAgent.Api.Abstractions.Requests.StopTaskCommand"
                }
              }
            }
          },
          "responses": {
            "202": {
              "description": "Accepted"
            },
            "400": {
              "description": "Bad Request",
              "content": {
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/Bastian.Maestro.StandardAgent.Api.Abstractions.Models.Error"
                  }
                }
              }
            }
          }
        }
      }
    },
    "components": {
      "schemas": {
        "Bastian.Maestro.StandardAgent.Api.Abstractions.Models.Agent": {
          "type": "object",
          "properties": {
            "activeTaskId": {
              "type": "string",
              "nullable": true
            },
            "batteryChargePercent": {
              "type": "number",
              "format": "float"
            },
            "eStopped": {
              "type": "boolean"
            },
            "id": {
              "type": "string",
              "nullable": true
            },
            "inventory": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/Bastian.Maestro.StandardAgent.Api.Abstractions.Models.InventoryPosition"
              },
              "nullable": true
            },
            "lastMessageTime": {
              "type": "string",
              "format": "date-time",
              "nullable": true
            },
            "locationId": {
              "type": "string",
              "nullable": true
            },
            "position": {
              "$ref": "#/components/schemas/Bastian.Maestro.StandardAgent.Api.Abstractions.Models.Position"
            },
            "rotation": {
              "$ref": "#/components/schemas/Bastian.Maestro.StandardAgent.Api.Abstractions.Models.Rotation"
            },
            "status": {
              "type": "integer",
              "format": "int32"
            },
            "type": {
              "type": "string",
              "nullable": true
            },
            "customDetails": {
              "type": "object",
              "additionalProperties": { },
              "nullable": true
            }
          },
          "additionalProperties": false
        },
        "Bastian.Maestro.StandardAgent.Api.Abstractions.Models.AgentMapData": {
          "type": "object",
          "properties": {
            "activeVersion": {
              "type": "string",
              "nullable": true
            },
            "agentId": {
              "type": "string",
              "nullable": true
            },
            "agentType": {
              "type": "string",
              "nullable": true
            },
            "versions": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "nullable": true
            }
          },
          "additionalProperties": false
        },
        "Bastian.Maestro.StandardAgent.Api.Abstractions.Models.AgentTask": {
          "type": "object",
          "properties": {
            "actionIndex": {
              "type": "integer",
              "format": "int32"
            },
            "agentId": {
              "type": "string",
              "nullable": true
            },
            "createdDate": {
              "type": "string",
              "format": "date-time"
            },
            "endDate": {
              "type": "string",
              "format": "date-time",
              "nullable": true
            },
            "startDate": {
              "type": "string",
              "format": "date-time",
              "nullable": true
            },
            "taskId": {
              "type": "string",
              "nullable": true
            },
            "taskStatus": {
              "type": "integer",
              "format": "int32"
            }
          },
          "additionalProperties": false
        },
        "Bastian.Maestro.StandardAgent.Api.Abstractions.Models.AgentType": {
          "type": "object",
          "properties": {
            "actionTypes": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "nullable": true
            },
            "id": {
              "type": "string",
              "nullable": true
            }
          },
          "additionalProperties": false
        },
        "Bastian.Maestro.StandardAgent.Api.Abstractions.Models.Error": {
          "type": "object",
          "properties": {
            "code": {
              "type": "integer",
              "format": "int32"
            },
            "message": {
              "type": "string",
              "nullable": true
            }
          },
          "additionalProperties": false
        },
        "Bastian.Maestro.StandardAgent.Api.Abstractions.Models.InventoryPosition": {
          "type": "object",
          "properties": {
            "inventoryId": {
              "type": "string",
              "nullable": true
            },
            "positionId": {
              "type": "string",
              "nullable": true
            }
          },
          "additionalProperties": false
        },
        "Bastian.Maestro.StandardAgent.Api.Abstractions.Models.Position": {
          "type": "object",
          "properties": {
            "x": {
              "type": "number",
              "format": "double"
            },
            "y": {
              "type": "number",
              "format": "double"
            },
            "z": {
              "type": "number",
              "format": "double"
            }
          },
          "additionalProperties": false
        },
        "Bastian.Maestro.StandardAgent.Api.Abstractions.Models.Rotation": {
          "type": "object",
          "properties": {
            "w": {
              "type": "number",
              "format": "double"
            },
            "x": {
              "type": "number",
              "format": "double"
            },
            "y": {
              "type": "number",
              "format": "double"
            },
            "z": {
              "type": "number",
              "format": "double"
            }
          },
          "additionalProperties": false
        },
        "Bastian.Maestro.StandardAgent.Api.Abstractions.Models.TaskAction": {
          "type": "object",
          "properties": {
            "arguments": {
              "type": "object",
              "additionalProperties": {
                "type": "string"
              },
              "nullable": true
            },
            "name": {
              "type": "string",
              "nullable": true
            }
          },
          "additionalProperties": false
        },
        "Bastian.Maestro.StandardAgent.Api.Abstractions.Models.TaskHint": {
          "type": "object",
          "properties": {
            "arguments": {
              "type": "object",
              "additionalProperties": {
                "type": "string"
              },
              "nullable": true
            },
            "name": {
              "type": "string",
              "nullable": true
            }
          },
          "additionalProperties": false
        },
        "Bastian.Maestro.StandardAgent.Api.Abstractions.Requests.GetAgentTypesQuery": {
          "type": "object",
          "properties": {
            "agentTypeIds": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "nullable": true
            }
          },
          "additionalProperties": false
        },
        "Bastian.Maestro.StandardAgent.Api.Abstractions.Requests.GetAgentTypesResponse": {
          "type": "object",
          "properties": {
            "agentTypes": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/Bastian.Maestro.StandardAgent.Api.Abstractions.Models.AgentType"
              },
              "nullable": true
            }
          },
          "additionalProperties": false
        },
        "Bastian.Maestro.StandardAgent.Api.Abstractions.Requests.GetAgentsQuery": {
          "type": "object",
          "properties": {
            "agentIds": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "nullable": true
            }
          },
          "additionalProperties": false
        },
        "Bastian.Maestro.StandardAgent.Api.Abstractions.Requests.GetAgentsResponse": {
          "type": "object",
          "properties": {
            "agents": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/Bastian.Maestro.StandardAgent.Api.Abstractions.Models.Agent"
              },
              "nullable": true
            }
          },
          "additionalProperties": false
        },
        "Bastian.Maestro.StandardAgent.Api.Abstractions.Requests.GetMapVersionsResponse": {
          "type": "object",
          "properties": {
            "maps": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/Bastian.Maestro.StandardAgent.Api.Abstractions.Models.AgentMapData"
              },
              "nullable": true
            }
          },
          "additionalProperties": false
        },
        "Bastian.Maestro.StandardAgent.Api.Abstractions.Requests.GetTasksQuery": {
          "type": "object",
          "properties": {
            "agentIds": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "nullable": true
            },
            "createdAfter": {
              "type": "string",
              "format": "date-time",
              "nullable": true
            },
            "endedAfter": {
              "type": "string",
              "format": "date-time",
              "nullable": true
            },
            "taskIds": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "nullable": true
            },
            "taskStatuses": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              },
              "nullable": true
            }
          },
          "additionalProperties": false
        },
        "Bastian.Maestro.StandardAgent.Api.Abstractions.Requests.GetTasksResponse": {
          "type": "object",
          "properties": {
            "tasks": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/Bastian.Maestro.StandardAgent.Api.Abstractions.Models.AgentTask"
              },
              "nullable": true
            }
          },
          "additionalProperties": false
        },
        "Bastian.Maestro.StandardAgent.Api.Abstractions.Requests.NewMapCommand": {
          "type": "object",
          "properties": {
            "fileHash": {
              "type": "string",
              "nullable": true
            },
            "hashType": {
              "type": "string",
              "nullable": true
            },
            "map": {
              "type": "string",
              "nullable": true
            }
          },
          "additionalProperties": false
        },
        "Bastian.Maestro.StandardAgent.Api.Abstractions.Requests.NewTaskCommand": {
          "type": "object",
          "properties": {
            "actionPlan": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/Bastian.Maestro.StandardAgent.Api.Abstractions.Models.TaskAction"
              },
              "nullable": true
            },
            "agentId": {
              "type": "string",
              "nullable": true
            },
            "priority": {
              "type": "integer",
              "format": "int32"
            },
            "start": {
              "type": "boolean"
            },
            "taskHints": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/Bastian.Maestro.StandardAgent.Api.Abstractions.Models.TaskHint"
              },
              "nullable": true
            },
            "taskId": {
              "type": "string",
              "nullable": true
            }
          },
          "additionalProperties": false
        },
        "Bastian.Maestro.StandardAgent.Api.Abstractions.Requests.SetMapVersionCommand": {
          "type": "object",
          "properties": {
            "version": {
              "type": "string",
              "nullable": true
            }
          },
          "additionalProperties": false
        },
        "Bastian.Maestro.StandardAgent.Api.Abstractions.Requests.StartTaskActionCommand": {
          "type": "object",
          "properties": {
            "actionIndex": {
              "type": "integer",
              "format": "int32"
            },
            "actions": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/Bastian.Maestro.StandardAgent.Api.Abstractions.Models.TaskAction"
              },
              "nullable": true
            },
            "agentId": {
              "type": "string",
              "nullable": true
            },
            "taskId": {
              "type": "string",
              "nullable": true
            }
          },
          "additionalProperties": false
        },
        "Bastian.Maestro.StandardAgent.Api.Abstractions.Requests.StopTaskCommand": {
          "type": "object",
          "properties": {
            "agentId": {
              "type": "string",
              "nullable": true
            },
            "finalStatus": {
              "type": "integer",
              "format": "int32"
            },
            "taskId": {
              "type": "string",
              "nullable": true
            }
          },
          "additionalProperties": false
        }
      }
    }
  }